0

HW with Stagefright ライブラリを使用して h264 ビデオをデコードしようとしています。

ここで例を使用しました。でデコードされたデータを取得していMedaBufferます。レンダリングのために、AwesomePlayer.cppで試しましたMediaBuffer->data()AwesomeLocalRenderer

しかし、画面の画像が歪んでいます

元の画像とクラッシュした画像のリンクは 次のとおりです。

また、例でこれを試しました`

sp<MetaData> metaData = mVideoBuffer->meta_data();
int64_t timeUs = 0;
metaData->findInt64(kKeyTime, &timeUs);
native_window_set_buffers_timestamp(mNativeWindow.get(), timeUs * 1000);
err = mNativeWindow->queueBuffer(mNativeWindow.get(), 
mVideoBuffer->graphicBuffer().get(), -1);`

しかし、ネイティブ コードがクラッシュします。実際の画像を取得できないか、破損しているか、黒い画面です。

前もって感謝します。

4

1 に答える 1

0

高速化されたデコーダーを使用している場合HW、コンポーネントの出力ポートの割り当てはNative Window. つまり、出力バッファは基本的にフレームワークgrallocによって渡されたハンドルStagefrightです。(参照: OMXCodec::allocateOutputBuffersFromNativeWindow)。したがって、返されるものはプレーンバッファMediaBufferとして解釈されるべきではありません。YUV

の場合、ここに示すように が呼び出されるとAwesomeLocalRenderer、フレームワークはソフトウェア カラー変換を実行します。コード フローをトレースすると、コンテンツが直接バッファーとして解釈されるmTarget->renderことがわかります。MediaBufferYUV

HWアクセラレートされたコーデックの場合は、AwesomeNativeWindowRenderer. を雇用するための特別な条件がある場合はAwesomeLocalRenderer、それをハイライトしてください。この回答を適切に絞り込むことができます。

PS:デバッグ目的で、YUV データをダンプして同じものを分析する方法をキャプチャしたこの質問を参照することもできます。

于 2014-02-21T00:34:02.073 に答える