首页 > 解决方案 > 使用 Grafika 的 camera2 API 连续捕获

问题描述

大家好,我正在尝试从 Grafika 库(https://github.com/google/grafika )实现连续捕获功能) 在自定义应用程序中,但我需要使用 camera2 API,因为我从我了解到的旧相机 API 已被弃用。我遇到了很多问题,而且我的代码有点混乱,因为我仍然不完全理解 camera2 api 和循环缓冲区的 grafika 实现,一旦我设法使其工作,我将重构所有内容。我希望你能理解我的问题在于给定的混乱。我在我的应用程序中使用连续捕获功能的想法是复制 CameraCaptureActivity 所依赖的“Grafika”中“gles”目录中的所有类,并且我还复制了 CircularEncoder 和 CircularEncoderBuffer 类,因为活动也依赖于它们然后我尝试重新创建 ContinuousCaptureActivity 在我的 FragmentPhoneCameraNew 中所做的事情。我没有更改从“Grafika”库复制的任何其他类的任何内容。我正在测试的设备是带有 android 7.0 的三星 Galaxy S6。

  1. 我的第一个问题是在 startPreview 函数中,当我尝试在 try / catch 块( mCircEncoder = CircularEncoder(VIDEO_WIDTH, VIDEO_HEIGHT, 6000000, mCameraPreviewThousandFps / 1000, 7, mHandler) )中初始化 mCircEncoder 时,它给了我以下错误:

07-31 11:25:40.301 25399-25533/com.name.socourt E/BufferQueueProducer: [SurfaceTexture-0-25399-0] 连接: 已连接 (cur=1 req=4) 07-31 11:25:40.307 25399-25533/com.name.socourt W/CameraDevice-JV-0:流配置失败,原因是:endConfigure:365:摄像机 0:提供的输入/输出集不受支持 07-31 11:25:40.377 25399-25533/com .name.socourt E/CameraCaptureSession:会话0:创建捕获会话失败;配置失败

  1. 第二个问题是,在执行通过 CircularEncoder 类中的 mEncoder.configure 方法后,它给了我:

07-31 12:11:34.866 1130-1224/com.name.socourt E/AndroidRuntime: 致命异常: 相机后台线程进程: com.name.socourt, PID: 1130 android.media.MediaCodec$CodecException: 错误 0x80001001 在 android .media.MediaCodec.native_configure(Native Method) 在 com.name.socourt.services.CameraRelated.CircularEncoder.(CircularEncoder.java:123) 在 android.media.MediaCodec.configure(MediaCodec.java:1882) 在 com.name。 socourt.controller.FragmentPhoneCameraNew.startPreview(FragmentPhoneCameraNew.kt:661) at com.name.socourt.controller.FragmentPhoneCameraNew.access$startPreview(FragmentPhoneCameraNew.kt:47) at com.name.socourt.controller.FragmentPhoneCameraNew$mCameraDeviceStateCallback$1.onOpened (FragmentPhoneCameraNew.kt:266) 在 android.hardware.camera2.impl.CameraDeviceImpl$1.run(CameraDeviceImpl.java:134) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java: 95) 在 android.os.Looper.loop(Looper.java:154) 在 android.os.HandlerThread.run(HandlerThread.java:61)

我认为这是因为我在后台线程中做一些应该在主线程中的事情,反之亦然,但线程处理程序不应该让两个线程通信并防止此类问题吗?

我已经这样做了 2 周了,因为我一直遇到这样的问题,所以我脑子里一片混乱。我设法一个一个地解决它们,但这需要很多时间,但这一次似乎我只是卡住了。

如果问题很简单或者我的代码太乱,我很抱歉,但我是 android 开发新手,camera 2 api 太复杂了,尤其是当我必须实现连续捕获功能时。

我不得不将文件中的代码和 logcat 上传到我的 googleDrive,因为它太大而无法在主题正文中作为问题发布,我希望这不是问题。所以这里是链接https://drive.google.com/file/d/1c_soL_S37ALxSoazNfEJTx9gcDs82ePG/view?usp=sharing

标签: androidkotlinandroid-camera2grafika

解决方案


推荐阅读