0

私:

  1. 作成しますandroid::MediaBufferGroup
  2. buf_group.add_buffer(new android::MediaBuffer(bufsize));初期化時に複数で埋めます。
  3. buf_group->acquire_buffer(&buffer)どこかに送信するためのバッファーが必要な場合に実行します。
  4. buffer->data()データを格納する実際のメモリ位置を取得し、メタデータを使用およびset_range設定してから、バッファを他のコンポーネントにフィードするために使用します。
  5. その他のコンポーネントreleaseはバッファであり、それらを MediaBufferGroup に戻します。

動作しますが、確実ではありません。取得したバッファdata()が NULL を返すこともあれば、プログラムがクラッシュすることもありますrelease()...

MediaBufferGroup を適切に使用するには? 同期を使用する必要がありますか?

4

2 に答える 2

0

ほとんどすべての手順が正しいです。明確ではない 1 つのポイントは、ステップ 4 にあります。通常、呼び出しMediaBufferを通じてプロデューサからコンシューマによってプルされます。readだから、私はあなたのセットアップで、

  1. 上記のすべてのステップはプロデューサーによって実行されます

  2. 消費者は、として定義されているmSource->read(&newBuffer);場所を呼び出します。newBufferMediaBuffer *newBuffer

  3. プロデューサー側では、MediaBuffer *mBuffer;. 読み取り呼び出しが処理され、出力が として取り込まれ*out = mBuffer;ます。

  4. 安全のため、この手順の後に初期化mBufferしてください。NULL

  5. バッファを消費した後、消費者はバッファを解放する必要がありますnewBuffer->release;

  6. 繰り返しますが、安全のために、この手順の後に初期化newBufferしてください。NULL

これらの変更により、説明に基づいてコードが正常に機能するはずです。

于 2014-02-02T23:52:38.483 に答える