2013-04-21 6 views

答えて

11

あなたの目的は、基本H.264ストリームを復号する場合は、コードストリームは、codec-specific-dataは主SPSPPSデータとフレームデータのタイムスタンプと一緒にされたコーデックに提供される抽出されることを保証する必要がありますコーデックに提供されます。すべてのAndroidバージョンでは、最も一般的なインターフェイスはOMXCodecであり、これは基礎となるOMXコンポーネントを抽象化したものです。

ジンジャーブレッド(Android 2.3)とICS(Android 4.0.0)では、デコーダを作成する場合は、OMXCodecコンポーネントを作成し、MediaSourceインターフェイス、つまりラッパーコードこのソースからMediaSourceおよびOMXCodecと表示され、と読み出され、復号化が実行されます。アンドロイド2.3ビデオデコーダの作成に

リンク:http://androidxref.com/2.3.6/xref/frameworks/base/media/libstagefright/AwesomePlayer.cpp#1094

のAndroidへのリンク4.0.0ビデオデコーダの作成は:

  1. モデル入力:http://androidxref.com/4.0.4/xref/frameworks/base/media/libstagefright/AwesomePlayer.cpp#1474

    主な課題は次のようになりますMediaSourceとなります。

  2. コーデックからバッファを読み取り、同じコードを処理してコーデックに戻すためのラッパーコードを読み取ります。簡略化のため

あなたのプログラムは、以降JellyBean(アンドロイド4.1.xの、4.2.xでは)に基づいている場合、あなたはhttp://androidxref.com/4.0.4/xref/frameworks/base/cmds/stagefright/stagefright.cpp#233

のようにstagefrightコマンドライン実行可能コードを見ることができるが、これらはわずかですより単純化される。あなたのJNIコードから、MediaCodecコンポーネントを作成し、それをデコードに使用することができます。あなたのプログラムに同じを統合するには、私はAndroid上libstagefrightハードウェアデコードビデオを使用http://androidxref.com/4.2.2_r1/xref/frameworks/av/cmds/stagefright/SimplePlayer.cpp#316

+0

のようにあなたがSimplePlayer実装を参照してください可能性があり、メインはAwesomePlayer.cppを模倣、OMXCodecを呼び出し、それは、Androidの4.0に大丈夫ですが、Androidの4.1にそれは黒い画面です、あなたはいくつかのsuguestを持っていますか? – crossle

+0

@CrossleSong 'Android 4.1'すなわち' JellyBean'では、表示パイプラインがいくつかの重要な改善を受けました。さらなる分析のためにいくつかのログを共有していただけますか?私は 'SurfaceTexture'、' HwComposer'と 'Layer'モジュールからのロギングをお勧めします。片側の注意:あなたの '層 'は何らかの理由で安全とマークされていますか? – Ganesh

+0

あなたの答えをありがとう。私はこの問題を解決しました。なぜなら、ANativeWindowの問題です。不足しているnative_window_set_scaling_mode(mNativeWindow.get()、mVideoScalingMode); – crossle

関連する問題