私はAndroidのMediaCodec APIを使用して、生と生のH.264ビデオストリームをデコードして再生しています。ターゲットデバイスはAndroid-x86 6.0で動作するPCです。 PCはインテル®Celeron®プロセッサーN2930 CPUで動作しています。Android MediaCodec h.264デコードサーフェスモードカラーバンディング
デコーダをサーフェスモードに設定してビデオをTextureViewにレンダリングすると、色のバンディングの問題が発生しています。
ByteBufferモードを使用するようにデコーダを設定し、デコードされたビデオフレームをファイルに保存してから別のコンピュータでファイルを開くと、ビデオフレームにカラーバンディングの問題が見つかりませんでした。
アイデアがなくなり、私自身のOpenGL ESビューを実装してビデオをレンダリングしようとしました。うまくいきましたが、色のバンディングはまだあります。次に、GLES20.glReadPixels()を使用してOpenGL ESビューレンダラーからデコードされたフレームを保存し、別のコンピューターでそれらのフレームを開くと、フレームに色のバンディングが表示されます。
その他の観測: 1)バンドルされたビデオプレーヤー(ビデオプレーヤー)とMXプレーヤーを使用してビデオファイルを再生しました。バンドルされたビデオプレーヤーとMX Player(HWデコードモード)は、同じ色のバンディング問題を経験しました。
2)MXプレーヤーのSWデコードモードでの再生では、色のバンディングがないことが示されます。
ウェブ上で利用可能なほとんどすべての提案を無駄に試してみました。助けてください。
ありがとうございます。
サーフェスビューでは、どのフレームバッファ形式をレンダリングしていますか?バンディングは通常、通常の32ビットターゲット(RBGA8)ではなく、16ビットのレンダリングターゲット(たとえばRGB 565)にレンダリングしていることを示します。 – solidpixel
@solidpixel ... OpenGLレンダリングビューでは、基本的にhttp://code.metager.de/source/xref/android/4.0.3/cts/tests/src/android/media/cts/でコードを使用しました。 VideoSurfaceView.javaを少し変更して、残りのアプリケーションに接続します。面白いことに、私はフレームバッファフォーマットをどこに設定するか分かりません。正しい方向に私を指差してください。 – mishow
@solidpixel ...ところで、TextureViewやSurfaceViewを使ってビデオをレンダリングすると、同じ色のバンディング問題が発生します。私がSurfaceモードでデコーダを使用している限り、私はこの問題を抱えているようです。 ByteBufferモードでデコーダを使用すると、画像を保存して表示するのがうまく感じられます。 – mishow