Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android中渲染YV12视频帧_Java_Android - Fatal编程技术网

Java 如何在Android中渲染YV12视频帧

Java 如何在Android中渲染YV12视频帧,java,android,Java,Android,我从MC67移动设备成像仪获得了YV12视频帧。我想在android surface上显示它。到目前为止我还无法做到 我正在使用以下代码 MainTestActivity.java public class MainTestActivity extends Activity { protected static final String TAG = "CameraTestApp"; private Camera mCamera; private Preview mPreview; FrameLa

我从MC67移动设备成像仪获得了YV12视频帧。我想在android surface上显示它。到目前为止我还无法做到

我正在使用以下代码

MainTestActivity.java

public class MainTestActivity extends Activity {
protected static final String TAG = "CameraTestApp";
private Camera mCamera;
private Preview mPreview;
FrameLayout frmLayoutPreview;
Button btnStart;// Test Start button
Button btnRefreshReport ;//Refresh button   
ByteArrayOutputStream out;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   getWindow().setFormat(ImageFormat.YV12);      
    setContentView(R.layout.main);
    mCamera= Camera.open(42);

     //parameters.setPictureFormat(ImageFormat.YV12); 
    mPreview = new Preview(this,mCamera);   
    frmLayoutPreview = (FrameLayout) findViewById(R.id.frmLayoutCameraPreview);
    frmLayoutPreview.addView(mPreview);     

    btnStart = (Button) findViewById(R.id.btnStartTest);        

    btnStart.setOnClickListener(new OnClickListener () {
        public void onClick(View v){
            btnStart.setEnabled(false);
            mCamera.setPreviewCallback(mPreviewCallback);
            mCamera.startPreview();             
            btnRefreshReport.setEnabled(true);
        }
    });   

    btnRefreshReport= (Button) findViewById(R.id.btnRefreshReport);        
    btnRefreshReport.setOnClickListener(new OnClickListener () {
        public void onClick(View v){
            mCamera.stopPreview();
            btnRefreshReport.setEnabled(false);             
            btnStart.setEnabled(true);          
        }
    });        
    btnRefreshReport.setEnabled(false);
    btnStart.setEnabled(true);
}

PreviewCallback mPreviewCallback = new PreviewCallback() {      
    @Override
    public void onPreviewFrame(byte[] data, Camera camera) {

    }
};


@Override
public void onDestroy()
{
    super.onDestroy();
    this.mCamera.release();
}
}

Preview.java

class Preview extends SurfaceView implements SurfaceHolder.Callback {
public SurfaceHolder mHolder;
private Camera mCamera ;
private String TAG="CAMERA_TEST";
List<Integer> supportformats;//new code
String filename= "/sdcard/BB_FPS.txt";

Preview(Context context,Camera objCamera) {
    super(context);
    this.mCamera=objCamera;
    mHolder = getHolder();
    mHolder.addCallback(this);
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);


}

public void surfaceCreated(SurfaceHolder holder) {
    try 
    {   

        mCamera.setPreviewDisplay(holder);

    } 
    catch (Exception e) { 
        Log.i(TAG, "SurfaceCreated error\t"+e.toString());
    }
}

public void surfaceDestroyed(SurfaceHolder holder) 
{
}

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) 
{
    Log.i(TAG, "SurfaceChanged invoked");       
    if (mHolder.getSurface() == null)
    {            
        return;
    }

    try
    {
        mCamera.stopPreview();

    } 
    catch (Exception e){}

    try 
    {    mCamera.setPreviewDisplay(holder); 

        mCamera.startPreview();

    }
    catch (Exception e)
    {
            Log.d(TAG, "Error starting camera preview: " + e.getMessage());
    }
}   
类预览扩展了SurfaceView实现了SurfaceHolder.Callback{
公开露面律师;
私人摄像机麦卡梅拉;
私有字符串标记=“摄像机测试”;
列出supportformats;//新代码
字符串filename=“/sdcard/BB_FPS.txt”;
预览(上下文,摄影机对象){
超级(上下文);
this.mCamera=objCamera;
mHolder=getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE\u TYPE\u PUSH\u缓冲区);
}
已创建的公共空白表面(表面持有人){
尝试
{   
mCamera.setPreviewDisplay(支架);
} 
捕获(例外e){
Log.i(标记“SurfaceCreated error\t”+e.toString());
}
}
公共空间表面覆盖(表面覆盖物持有人)
{
}
公共无效表面更改(表面持有人,整数格式,整数w,整数h)
{
Log.i(标记“SurfaceChanged”);
if(mHolder.getSurface()==null)
{            
返回;
}
尝试
{
mCamera.stopPreview();
} 
捕获(例外e){}
尝试
{mCamera.setPreviewDisplay(持有者);
mCamera.startPreview();
}
捕获(例外e)
{
Log.d(标记“启动相机预览时出错:”+e.getMessage());
}
}   
}


我尝试使用setPictureFormat(ImageFormat.YV12)方法设置图片格式。但它也不起作用。这里有人能帮我一下吗。

我也使用库转换为RGB。但我必须一帧一帧地做

谢谢你的回答,我试试看。