【问题标题】:onPreviewFrame not being called on Nexus 4 phone ... but is on EmulatoronPreviewFrame 没有在 Nexus 4 手机上被调用......但在模拟器上
【发布时间】:2013-11-09 03:23:45
【问题描述】:
 public boolean openCamera() {
    Log.i(TAG, "openCamera");
    releaseCamera();
    mCamera = Camera.open();
    if (mCamera == null) {
        Log.e(TAG, "Can't open camera!");
        return false;
    }

    mCamera.setPreviewCallbackWithBuffer(new PreviewCallback() {

        public void onPreviewFrame(byte[] data, Camera camera) {
            synchronized (View.this) {
                System.arraycopy(data, 0, mFrame[frameIndex], 0,
                        data.length);
                View.this.notify();
            }
            camera.addCallbackBuffer(mBuffer);
            if (frameIndex == 1) {
                bufferIsSet = true;
            }
            frameIndex ^= 1;

        }
    });
    return true;
}

以上是打开相机的方法。 (更多代码见:https://github.com/sungjkang/OpticalFlow/blob/master/src/com/wais/opticalflow/View.java

使用模拟器在我的笔记本电脑上运行正常,但在我的 Nexus 4 上根本无法运行。 经过一番挖掘,我注意到我在使用手机时从未进入 onPreviewFrame,但我的模拟器正在调用该方法。

有人知道这里发生了什么吗?

【问题讨论】:

    标签: android opencv android-camera opticalflow nexus-4


    【解决方案1】:

    我有同样的问题。主要是尺寸问题,添加下面的代码它对我有用。

    Camera.Parameters parameters = camera.getParameters();
        List<Camera.Size> sizes = parameters.getSupportedPreviewSizes();
        Camera.Size cs = sizes.get(0);
        parameters.setPreviewSize(cs.width, cs.height);
        // parameters.setPreviewSize(w, h);
        camera.setParameters(parameters);
        camera.startPreview();
    

    【讨论】:

      【解决方案2】:

      Important:将完全初始化的 SurfaceHolder 传递给 setPreviewDisplay(SurfaceHolder)。没有表面,相机将无法开始预览。

      【讨论】:

        猜你喜欢
        • 2011-03-29
        • 2013-02-21
        • 1970-01-01
        • 2013-06-07
        • 1970-01-01
        • 1970-01-01
        • 2012-07-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多