問題タブ [grafika]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - ExtractMpegFramesTest の例を変更して、デコードされた出力を画面に表示する
ExtractMpegFramesTestを変更して、画面上でレンダリングを行いglReadPixels
、フレームの抽出に使用しようとしています。
ExtractMpegFramesTest (CodecOutputSurface クラスと STextureRender クラス) からフレームを抽出するための関連コードをコピーしたところ、画面外でレンダリングされたときにフレーム抽出が期待どおりに機能しました。
私は と を持っておりTextureView
、SurfaceTextureListener
受信するonSurfaceTextureAvailable
と を取得しSurfaceTexture
、デコード プロセスを開始します。SurfaceTexture
これをに渡しますCodecOutputSurface
が、機能しません。
これが関連しているかどうかはonSurfaceTextureAvailable
わかりませんSurfaceTexture
が、メインスレッドで受信され、すべてのデコード (CodecOutputSurface コンストラクター呼び出しを含む) は別のスレッドで行われます。
hereおよびhereからの提案を使用しようとしましたが、機能しません。
ログにこれが表示されます:
ExtractMpegFramesTest eglSetup メソッドに次の変更を加えました。
ExtractMpegFramesTest セットアップ メソッドへ:
ありがとう
android - Grafika を使用した camera2 API 連続キャプチャ
こんにちは皆さん、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 です。
- 私の最初の問題は、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: キャプチャ セッションの作成に失敗しました。構成に失敗しました
- 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
java - テクスチャ変換マトリックスのスケーリングと回転を同時に行う
グラフィカの例から始めて、カメラストリームをファイルにキャプチャしようとしています。エンコードする前に、いくつかの変換を適用する必要があります。
- 画像を回転する
私がすることができます:
- スケールと平行移動を適用する
画像は 1 つの軸に沿って圧縮されます。そのため、中央部分が見えるように少し移動するよりも、その軸に沿ってスケーリングする必要があります。繰り返しますが、次のようにこれを行うことができます。
変換は、エンコーダーが指定されたビューポートに描画されたもののみをキャプチャするため、最終結果で「中央のトリミング」を取得することです。
しかし、私は 2 つの操作を組み合わせることに迷っています。私はこれに数時間を費やしましたが、調査したことは役に立ちませんでした. 誰でもこれを理解できますか?