我正在开发一个android应用程序,它使用opencv库提供的类org.opencv.android.JavaCameraView打开一个视频流,并从中捕获帧,以便在屏幕上显示它们之前对它们进行处理。
应用程序的组织方式如下:
所以问题是:我如何阻止OnCameraFrame方法,直到它从最后一个线程(C)返回之前,它才能在屏幕上显示任何帧?如果我没有实现任何这种类型的东西,因为处理需要一点时间,我不能在屏幕上正确地看到最后的帧。
我希望我已经清楚地解释了我的问题。
发布于 2013-06-22 07:19:56
方法是Thread.join()
,但是通常不应该在主线程中调用它。相反,您不应该在onCameraFrame()
中显示任何内容,但是在计算结束时,线程C可以使用代码调用Activity.runOnUiThread()
来显示框架。
发布于 2013-06-22 07:34:17
最好避免阻塞回调--取决于调用线程可能会导致ANR。在回调和处理线程之间添加一个队列。
我不知道为什么需要这么多线程和阻塞队列--创建一个线程,在这个线程上创建一个Handler,在主线程上创建一个Handler。当您在回调中接收到一个框架时,将它发送到处理线程处理程序,当它完成后,将结果处理到主线程处理程序。
https://stackoverflow.com/questions/17252160
复制