2017-08-01 23 views
0

「面入力」モードで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ドキュメントから

答えて

0

// * NO_INIT - the buffer queue has been abandoned or the producer is not 
//    connected. 

私はあなたのコードに欠けている部分は、これが「接続」であることを推測します。

IGraphiBufferProducerのような方法がありますか?

関連する問題