「面入力」モードでAndroidプラットフォームのMediaCodec
クラスを使用する単純なビデオエンコーダを作成しようとしています。ある「面入力」モードでAndroidプラットフォームのMediaCodecクラスを使用できません
mediaCodec = MediaCodec::CreateByType(looper, "video/avc", true);
mediaCodec->configure(config, NULL, NULL, CONFIGURE_FLAG_ENCODE);
mediaCodec->createInputSurface(&inputSurface);
mediaCodec->start();
これに続いて、私が作成した入力面からバッファをデキューしようとしている(:
これらは私が(簡潔にするために取り残さコードをサポートしている)、次のステップでありますよIGraphiBufferProducer
インタフェースオブジェクト)が、それはNO_INIT
エラーで失敗:
inputSurface->dequeueBuffer(&slot, &fence, w, h, format, 0);
ADBログにエラーメッセージがある:
BufferQueueProducer: [GraphicBufferSource] dequeueBuffer: BufferQueue has no connected producer
なぜバッファキューに接続されたプロデューサがないのですか? MediaCodec
クラスはバッファキューの作成と、プロデューサとコンシューマのキューへの接続を処理すると仮定します。
私はAndroid APIレベル26(7.1.2)を使用しています。使用例ではGraphicBuffer
オブジェクトにアクセスする必要があるため、プラットフォームレベルのライブラリを使用しています。
ありがとうございます!
EDITは:入力面&から
- デキュー・バッファ、それらを埋める:一般的な考え方は、にあります。
- 埋め込みバッファを入力サーフェスにキューイングします(サーフェスが属しているメディアコーデック(ビデオエンコーダ)インスタンスをおそらくトリガーする)。 )。
- メディアコーデックインスタンスからの出力バッファ(raw H.264ビットストリームデータを含む)をデキューし、ファイルに書き込みます。
- 出力バッファをメディアコーデックインスタンスに戻します。
IGraphiBufferProducer
ドキュメントから