Export to GitHub

javacv - issue #500

how to rotate video with javacv on android


Posted on Mar 2, 2015 by Happy Bird

I write small program on android for play video, use surface.

preview layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >


    <Button
        android:id="@+id/playvideoplayer"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="- PLAY Video -"/>
    <Button
        android:id="@+id/pausevideoplayer"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="- PAUSE Video -"/>

    <SurfaceView
        android:id="@+id/surfaceview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
       />
</LinearLayout>

preview activity code

package preview_pack;

import java.io.IOException;
import android.app.Activity;
import android.graphics.PixelFormat;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.media.AudioManager;

public class PlayerActivity extends Activity 
    implements SurfaceHolder.Callback {

    Uri targetUri;

    MediaPlayer mediaPlayer;
    SurfaceView surfaceView;
    SurfaceHolder surfaceHolder;
    boolean pausing = false;;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.video_preview);

        targetUri = this.getIntent().getData();

        Button buttonPlayVideo = (Button)findViewById(R.id.playvideoplayer);
        Button buttonPauseVideo = (Button)findViewById(R.id.pausevideoplayer);

        getWindow().setFormat(PixelFormat.UNKNOWN);
        surfaceView = (SurfaceView)findViewById(R.id.surfaceview);
        surfaceHolder = surfaceView.getHolder();


        surfaceHolder.addCallback(this);
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        mediaPlayer = new MediaPlayer();

        buttonPlayVideo.setOnClickListener(new Button.OnClickListener(){

            @Override
            public void onClick(View arg0) {
                pausing = false;

                 if(mediaPlayer.isPlaying()){
                     mediaPlayer.reset();    
                 }

                 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                 mediaPlayer.setDisplay(surfaceHolder);

                 try {
                     mediaPlayer.setDataSource(getApplicationContext(), targetUri);

                     mediaPlayer.prepare();  
                 } catch (IllegalArgumentException e) {
                     e.printStackTrace();
                 } catch (IllegalStateException e) {
                     e.printStackTrace();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }

                 mediaPlayer.start();

            }});

        buttonPauseVideo.setOnClickListener(new Button.OnClickListener(){

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                if(pausing){
                    pausing = false;
                    mediaPlayer.start();    
                }
                else{
                    pausing = true;
                    mediaPlayer.pause();    
                }
            }});
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        mediaPlayer.release();
    }

    @Override
    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
        // TODO Auto-generated method stub

    }

    @Override
    public void surfaceCreated(SurfaceHolder arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder arg0) {
        // TODO Auto-generated method stub

    }

}

and where I try to play video with 90 degrees on the screen I see http://i.stack.imgur.com/hxHKP.png

When I use surfaceView.setRotation(90); my surface rotates but on the screen only black surface and end.

Comment #1

Posted on Mar 3, 2015 by Happy Kangaroo

I'm guessing this is a duplicate of this one: https://github.com/bytedeco/javacv/issues/98#issuecomment-76715277

Next time, please ask your questions on GitHub or the mailing list. This site is no longer maintained, so nobody comes and check these pages.

Status: Done

Labels:
Type-Other Priority-Medium