使用Grafika

时间:2018-07-31 10:03:43

标签: android kotlin android-camera2 grafika

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

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

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:FATAL   例外:相机背景线程           流程:com.name.socourt,PID:1130           android.media.MediaCodec $ CodecException:错误0x80001001               在android.media.MediaCodec.native_configure(本机方法)               在android.media.MediaCodec.configure(MediaCodec.java:1882)               在com.name.socourt.services.CameraRelated.CircularEncoder。(CircularEncoder.java:123)               在com.name.socourt.controller.FragmentPhoneCameraNew.startPreview(FragmentPhoneCameraNew.kt:661)               在com.name.socourt.controller.FragmentPhoneCameraNew.access $ startPreview(FragmentPhoneCameraNew.kt:47)               在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)

我假设的

是因为我正在后台线程中执行某些操作,而该操作应该在主线程中进行,反之亦然,但是不是应该让线程处理程序使两个线程进行通信并防止此类问题发生吗?

我已经这样做了两个星期,因为我一直都遇到这样的问题,这完全是一团糟。我设法一对一地解决它们,但是这花费了很多时间,但是这次看来我只是被卡住了。

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

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

0 个答案:

没有答案