Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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
Android 从照相机获取帧';安卓手机_Android_Camera - Fatal编程技术网

Android 从照相机获取帧';安卓手机

Android 从照相机获取帧';安卓手机,android,camera,Android,Camera,我想从照相机的手机上取相框。所以,我试着捕捉视频,用matlab计算视频的每秒帧数,我得到了每10秒250帧。但是当我使用 public void onPreviewFrame(byte[] data, Camera camera) {} 在安卓系统上,我每10秒只能得到70帧。 你知道为什么吗?我把代码放在下面: private Camera.PreviewCallback previewCallBack = new Camera.PreviewCallback() { @Overr

我想从照相机的手机上取相框。所以,我试着捕捉视频,用matlab计算视频的每秒帧数,我得到了每10秒250帧。但是当我使用

public void onPreviewFrame(byte[] data, Camera camera) {}
在安卓系统上,我每10秒只能得到70帧。 你知道为什么吗?我把代码放在下面:

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

        System.out.println("Get frame " + frameNumber);
        if (data == null)
            throw new NullPointerException();
        Camera.Parameters p = camera.getParameters();
        Camera.Size size = p.getPreviewSize();
        if (frameNumber == 0) {
            startTime = System.currentTimeMillis();
        }
        // Log.e("GetData", "Get frame " + frameNumber);
        frameNumber++;

        camera.addCallbackBuffer(data);

            }
      }

这是真的;Android录像机不使用,而且它可能比Java回调要快得多。原因是它可以将视频帧从摄像头发送到内核内部的硬件编码器,而无需将像素放入用户空间

然而,我已经在高级设备(如Nexus4或GalaxyS3)上用Java可靠地实现了30 FPS。秘诀是:使用避免垃圾收集,并使用

当然,预览回调本身应该尽可能彻底地优化。在您的示例中,对
camera.getParameters()
的调用很慢,可以避免。不应进行任何分配(
新建