尽管我使用相同的代码,但在我的两台设备之一上onPreviewFrame没有调用。
我正在尝试获取、处理(使用 OpenCV),然后使用已弃用的相机 API 显示相机帧。(因为我使用的是LEGACY设备,而弃用的 API 为它提供了更好的性能。)
这意味着我不想直接显示预览帧,但我能够确定在此设备上,设置显示对于进行预览是必要的。这意味着我必须设置某种高性能虚拟显示器。我的选择是:setPreviewDisplay->SurfaceHolder和setPreviewTexture-> SurfaceTexture。
我学到的另一件事是,setPreviewCallbackWithBuffer这在这个设备上也不起作用:我必须使用setPreviewCallback.
理想情况下,我想检测是否需要这些额外的步骤才能进行预览:如果没有必要,我不想在不需要它们的设备上执行这些操作。
我无法找到SurfaceHolder该setPreviewDisplay方法的虚拟对象,因此无法使用该方法调用预览回调。另一方面,setPreviewTexture使用 newSurfaceTexture确实onPreviewFrame会调用 get,但我不断收到“BufferQueue has been mapped”错误,并且预览数据似乎也不正确:当我设置图像格式时,从所述数据创建的图像不正确. 查看不同的颜色会导致图像显示不同的颜色。同样,相同的代码在另一台设备上工作,我设置了图像格式,因此输出应该是有效的。
我当前的代码在哪里onPreviewFrame被调用,但数据无效:
camera = Camera.open();
camera.setPreviewTexture(new SurfaceTexture(1));
camera.setPreviewCallback(this);
camera.setParameters(configurator.getParameters()); //sets the resolution (same on both devices), the fps range and the format to ImageFormat.YV12 (or NV21, makes no difference)
camera.startPreview();
不需要预览显示的手机:Doogee X5 MAX
有问题的手机:三星 Galaxy J3 (2016)
哆啦的时光机
慕标琳琳
相关分类