2017-02-10 11 views
0

前回の記事で説明したように、私は無人機のモバイルアプリを使ってリアルタイムで無人機のカメラビューを視覚化しています相対的なSDKを備えたDJI Phantom 3 Professionalで)、ARパートのWikitudeフレームワークを使用しています。 Alex's responseのおかげで、Wikitude Input Plugindji's Video Stream Decodingと組み合わせて実装しました。DJIカメラからNV21データを取得する方法Phantom 3プロフェッショナル無人機

私は今いくつか問題があります。まず、「DJIのビデオストリームデコード」デモでは、ビデオフレームの解析にFFmpegを、ハードウェアデコードにMediaCodecを使用しています。したがって、ビデオフレームを解析し、DJIカメラからの生のビデオストリームデータをデコードし、YUVデータを出力するのに役立ちます。 Wikitude Input Pluginにはカスタムカメラを提供するためにNV21規格に準拠するように設定されたYUV 420フォーマットが必要なので、私は「dji sdkから生のビデオデータを取得してWikitude SDKに渡す」ことをお勧めしました。それにMediaCodecのYUVデータ出力を渡します。

この点について、私はMediaCodecの出力からバイトバッファを取得しようとしました(これはコールバックを呼び出して外部リスナーに渡す効果を持つconfigure()メソッドにSurfaceパラメータをnullに設定することで可能です)、私は可視化の色についていくつかの問題があります。エンコードされたビデオの色が正しくないため(青と赤が反転しているように見えますが、カメラが動くとノイズが多くなります) codec.releaseOutputBuffer(outIndex、true)命令の後にMediaCodecがフレームをレンダリングしてビデオストリームを正しく表示しますが、ビデオストリームをWikitude Pluginに渡す必要がありますので、サーフェスをnullに設定する必要があります)。

私は別のMediaFormat.KEY_COLOR_FORMATを設定しようとしましたが、どれも正しく動作しませんでした。この点をどうすれば解決できますか?

答えて

0

MediaCodecでバイトバッファにデコードする場合、バッファで使用するカラーフォーマットを決めることはできません。デコーダが決定し、それに対処する必要があります。各デコーダは異なるフォーマットを使用できます。その中にはCOLOR_FormatYUV420Planar(I420に対応)やCOLOR_FormatYUV420SemiPlanar(NV12ではなくNV21に対応)などの標準フォーマットがありますが、他のフォーマットは完全に独自のフォーマットを使用できます。

デコーダが返すことができる形式の例についてはhttps://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/EncodeDecodeTest.java#401を、サポートされている形式についてはhttps://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/EncodeDecodeTest.java#963を参照して、デコーダがプライベート形式を返すことができることを示します。

1つの一般的な独自のカラーフォーマットを解釈する方法の例については、http://git.videolan.org/?p=vlc.git;a=blob;f=modules/codec/omxil/qcom.c;h=301e9150ae66075ca264e83566504802ed57578c;hb=bdc690e9c0e2516c00a6d3733a77a87a25d9b6e3を参照してください。

関連する問題