2

こんにちは皆さん、Grafika ライブラリから連続キャプチャ機能を実装しようとしています ( https://github.com/google/grafika) カスタム アプリ アプリケーションでは、camera2 API を使用する必要があります。私が学んだことから、古いカメラ API は非推奨になっているためです。私は多くの問題を抱えており、私のコードは少し厄介です。なぜなら、カメラ 2 API と循環バッファーのグラフィカ実装をまだ完全に理解していないためです。機能させることができたら、すべてをリファクタリングします。私の問題が与えられた混乱のどこにあるのかを理解していただければ幸いです。アプリで連続キャプチャ機能を使用するために行った考えは、CameraCaptureActivity が依存する「Grafika」の「gles」ディレクトリにすべてのクラスをコピーすることです。アクティビティも依存しているため、CircularEncoder クラスと CircularEncoderBuffer クラスもコピーしました。次に、ContinuousCaptureActivity が FragmentPhoneCameraNew で行うことを再現しようとしました。「Grafika」ライブラリからコピーした他のクラスは何も変更していません。私がテストしているデバイスは、android 7.0 を搭載した samsung galaxy S6 です。

  1. 私の最初の問題は、try/catch ブロック ( mCircEncoder = CircularEncoder(VIDEO_WIDTH, VIDEO_HEIGHT, 6000000, mCameraPreviewThousandFps / 1000, 7, mHandler) ) で mCircEncoder を初期化しようとしているときの startPreview 関数にあります。次のエラーが表示されます。 :

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. 2 番目の問題は、実行が 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: Android でエラー 0x80001001 .media.MediaCodec.native_configure(Native Method) at android.media.MediaCodec.configure(MediaCodec.java:1882) at com.name.socourt.services.CameraRelated.CircularEncoder.(CircularEncoder.java:123) at 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) で

これは、メインスレッドにあるはずのバックグラウンドスレッドで何かを行っているためだと思いますが、スレッドハンドラーは2つのスレッドを通信させてそのような問題を防ぐはずではありませんか?

私はすでに2週間これを行っていますが、常にこのような問題に遭遇しているため、頭の中が完全に混乱しています. なんとか1つずつ解いていくのですが、かなり時間がかかりますが、今回は行き詰まってしまったようです。

問題が単純だったりコードが雑すぎたりして申し訳ありませんが、私は Android 開発に不慣れで、特に連続キャプチャ機能を実装する必要がある場合、カメラ 2 API は複雑すぎます。

トピックの本文に質問として投稿するには大きすぎるため、ファイル内のコードと logcat を googleDrive にアップロードする必要がありましたが、問題ではないことを願っています。ここにリンクがあります https://drive.google.com/file/d/1c_soL_S37ALxSoazNfEJTx9gcDs82ePG/view?usp=sharing

4

0 に答える 0