0

OMXCodecを通じて使用しようとしていますStagefrightICSAndroid のバージョンのコードを実装しましCustomDataSourceた。派生する 2 つのクラスと、メソッドを呼び出して読み取り操作を実行して h264 フレームをデコードするクラスMediaSourceがあります。ソフトウェア デコーダーを搭載したデバイスでこの実装をテストしたところ、正常に動作しました。ここで、ハードウェア h264 デコードを使用して Android フォンで同じ実装を実行しようとすると、読み取り呼び出しでエラーが返されます。エラーは次のとおりです。CustomOmxCodecOMXCodec::Createomx.google.video.avc

[OMX.MTK.VIDEO.DECODER.AVC] ERROR (0x80001005, 0)

0x80001005ですOMX_ErrorBadParameter-1103読み取り操作でエラーコードを取得します。さまざまなパラメーターを試しましたが、成功しませんでした。

完全なログは次のとおりです。

[OMX.MTK.VIDEO.DECODER.AVC] mVideoInputErrorRate (0.000000)

!@@!>>create tid (21087) O<XCodec mOMXLivesLocally=0, mIsVideoDecoder (1), mIsVideoEncoder (0), mime(video/avc)

[OMX.MTK.VIDEO.DECODER.AVC] video dimensions are 640X480

mSupportesPartialFrames 1 err 0

[OMX.MTK.VIDEO.DECODER.AVC] allocating 10 buffers of size 65536 on input port.

[OMX.MTK.VIDEO.DECODER.AVC] mMemHeapBase = 0x00E8C288,  mOutputBufferPoolMemBase=0x51F8E000, size  = 9578848

[OMX.MTK.VIDEO.DECODER.AVC] ERROR (0x80001005, 0)

OMXCodec::onEvent--OMX Bad Parameter!!

Read Error : -1103

これに関する方向性に感謝します。

4

3 に答える 3

2

質問から、ハードウェア コーデック ieOMX.MTK.VIDEO.DECODER.AVCは、構成手順の一部として渡されるパラメーターの 1 つをサポートしていません。

Fromが呼び出され、他の多くの関数が内部的に呼び出されますOMXCodec::createconfigureCodecエラーは の一部として発生しているためOMXCodec::onEvent、考えられるシナリオの 1 つは、コンポーネントが最初のフレームの最初の数バイトをデコードしているときにエラーが発生した可能性があります。

SPS具体的には、コンポーネントがand (コーデック固有のデータの一部) に遭遇するとPPS、コンポーネントは通常、portSettingsChanged. onEventあなたの回答から、このプロセス中に何らかのエラーが発生したため、トリガーされたように感じます。

さらに分析するために、さらにログを共有してください。

于 2013-03-19T09:44:07.833 に答える
1

MTK H264 デコーダーには、デコーダーを初期化するためのパラメーター csd-0 および csd-1 が必要です ( http://developer.android.com/reference/android/media/MediaCodec.htmlでいくつかの情報を取得できます)。csd-0 と csd-1 は H264 の SPS と PPS を表します。MTK エンジニアに尋ねたところ、以下のコードを使用してこれら 2 つのパラメーターを設定できるとのことでした。

byte[] sps = {0,0,0,1,103,100,0,40,-84,52,-59,1,-32,17,31,120,11,80,16,16,31
              ,0,0,3,3,-23,0,0,-22,96,-108};
byte[] pps = {0,0,0,1,104,-18,60,-128};
MediaFormat mFormat = MediaFormat.createVideoFormat("video/avc", width, height);
mFormat.setByteBuffer("csd-0", ByteBuffer.wrap(sps));
mFormat.setByteBuffer("csd-1", ByteBuffer.wrap(pps));

おそらくそれが、OMX Bad Parameter エラー メッセージを受け取った理由です。

于 2014-07-18T06:27:16.570 に答える
0

ログと同じものを実装されたコードにマッピングすることから、私は次のことが起こっていると感じています

[OMX.MTK.VIDEO.DECODER.AVC] allocating 10 buffers of size 65536 on input port.

このステップでは、デコーダーの入力ポートにバッファーを割り当てます

コードのフローから、入力ポートバッファが割り当てられた後、出力ポートのバッファはからから割り当てられnativeWindowますallocateOutputBuffersFromNativeWindow

このメソッド実装の一部としてのステップの1つは、出力ポートのバッファーの数を2増やし、ここOMXに示すようにコンポーネントに同じものを設定することです。

インデックスnBufferSize読み取り専用パラメータと同様に、この特定のポイントが原因でエラーが発生している可能性があります。これが読み取り専用パラメータであることを明確に示しているOMX標準のセクション3.1.3.12.1、83ページをOMX_IndexParamPortDefinition参照してください。nBufferSize

お使いのOMXコンポーネントは厳密にOMX準拠している可能性がありますが、AndroidICS以降では、特定の逸脱が予想されます。これは、エラーの潜在的な原因の1つである可能性があります。

PS:より多くの情報を共有できれば、私たちはさらに支援することができます。

于 2013-03-19T14:34:41.183 に答える