我有以下代码:
for (int ii = 0; ii < nOfPictures; ii++){
mCamera.startPreview();
mCamera.setOneShotPreviewCallback(this);
}
但是,setOneShotPreviewCallback()只被调用一次。我在调试模式下运行它并在每次迭代期间在方法调用的断点处停止,但在OnPreviewFrame()中的断点处仅停止一次。
如果有帮助的话,setOneShotPreviewCallback()与循环在同一个线程上也会出现。
答案 0 :(得分:0)
是。根据{{3}},
除了在屏幕上显示之外,还安装要为下一个预览帧调用的回调。一次调用后,将清除回调。即使预览是实时的,也可以随时调用此方法。任何其他预览回调都会被覆盖。
答案 1 :(得分:0)
我试图在另一个线程中运行startPreview(),但我相信帧的预览必须在UI线程中完成。也许整个相机都必须在不同的线程上运行。但是由于工作的简单,我将循环放在一个新的线程中并调用setOneShotPreviewCallback(),因为预览帧在循环运行时同时被送到onPreviewFrame()。
我使用的代码:
Thread preview_thread = new Thread(new Runnable() {
@Override
public void run() {
for (int ii = 0; ii < numOfPictures; ii++){
executeOneShotPreviewCallback();
}
}
}, "one_shot_prev_callback_thread");
preview_thread.start();
我不得不使用辅助函数(executeOneShotPreviewCallback())来执行实际的回调,因为回调对于线程是不可见的。