onlySummaryBBufferGroupは、複数のBBufferの貯蔵庫として働き、データを送信する際にはそれらのバッファを他のnodeに渡すために使用することができます。BBufferGroupはまた、バッファがそのdestination(目的地)に送られる前に産生したデータを入れておくBBufferを取得するために、BBufferProducerが使用します。BBufferGroup;もし必要なバッファがどういうもので、その数がいくつであるかを記述するいくつかの引数を与えたら、そのグループはまさしくBBufferを生成してくれます。これは、BBufferProducerサブクラスのコンストラクタ中でBBufferGroupを使用する一般的な方法です。あなたは、準備が完了し、データの送信を開始する時を待つばかりのバッファがそこにあることを知るでしょう。例外は、もしnodeが、単に受け取ったバッファを処理して次に渡すだけのフィルタである場合です。BBufferGroupのインスタンスは、Recycle()関数が呼び出されたBBufferを再請求するスレッドを動作させます。グループが一時的にフリーなバッファを失った場合、バッファへの要求は、バッファが一つ使用できるようになるまで、あるいは要求が生成された際に制限時間が指定されていれば、要求が時間切れになるまでブロックされるでしょう。Buffersもしビデオの処理を行っているなら、バッファをBBitmapにしたいでしょう。*/このコードは、ビットマップを生成するときに、B_BITMAP_IS_AREAフラグを設定できる利点があります。これはビットマップに対して、まさにそれ自身のメモリ領域に置かれるように強制します。これ以後、BBufferを作成する際にこれを使用することができます。BBufferにリアルタイムなアクセスを行う必要があれば、それをロックして下さい。加えて、もしDMAを使用するのであれば、バッファに対して近接(contiguous)するように指定する必要があります(これは、BBitmapコンストラクタのcontiguousフラグで指定できます)。BBitmapをこの方法で削除する前に、必ずバッファグループがまず削除されており、(もしSetOutputBuffersFor()が使用されていれば)全てのバッファが返還要求されていることを確認して下さい。*bufferList)コンストラクタの最初の形式では、すでにグループによって領域確保されたBBufferの数を用いてBBufferGroupを生成します。Kit領域に生息しています。placement及びlockによって指定される属性によって、指定されたsizeのnumBuffers個のバッファを内包するのに十分な領域を確保しようと試みます(領域には詰め物が追加されるでしょう)。コンストラクタの2番目の形式では、BBufferGroupは生成されますが、そのためのバッファは全く生成されません。使用する前に、BBufferをそのグループに追加して下さい。コンストラクタの3番目の形式では、指定されたバッファのリストを内包するBBufferGroupが生成されます。bufferListにはグループによって制御されるバッファのバッファIDの配列のポインタが指定され、numBuffersにはリスト中のバッファの数が指定されます。この種類のコンストラクタは、それほど頻繁に使用されるものではありません。新しいBBufferGroupからのバッファを使用する前に、グループを作成する際になんらかのエラーが生じていないか確認するためにInitCheck()を呼び出して下さい。~BBufferGroup~BBufferGroup()それが制御するBBufferも含め、BBufferGroupによって使用される全てのメモリを解放します。AddBuffer()がバッファ領域を複製するということを覚えておいて下さい。このデストラクタは複製を解放しますが、あなたが追加したオリジナルの領域を解放するのはあなたのアプリケーションの仕事です。nodeは、接続が切断されるかそのnodeが削除される時には必ず、それに対応するバッファグループを削除する必要があります。nodeがそれを行うまで、他の接続の終端はバッファグループが削除されるのを待つためにブロックされるでしょう。&info)buffer_clone_infoを与えることで、この関数はバッファを複製し、その複製をBBufferGroupに追加します。普段は、あなた自身がbuffer_clone_info構造体を構築して下さい。このバッファは複製であることから、それを使用しなくなった時、buffer_clone_info構造体で指定されるメモリ領域をあなたの手で削除する必要があります。BBufferGroupは、それを行ってはくれません。この関数に、BBuffer::CloneInfo()呼び出しの結果を渡さないで下さい。それをすると、同じメモリ領域に対して「エリアス」が作成されます。これはおそらく、あなたの望まない結果になります。バッファをグループに追加する際にエラーが生じなかった。BBufferGroupのアドレス空間にバッファを複製できなかった。true)グループのバッファを指定されたmessageに追加し、指定されたnameの配列にそれらを保存します。needLockがtrueなら、BBufferGroupは処理を行う前にロックされ、それが完了したらロックを解除されます。なければ、AddBuffersTo()が呼び出されている間にバッファがどこかに行ってしまわないように保証する必要があります。バッファはID番号によって追加されます。番号はint32のフォーマットです。メッセージにバッファを追加する際にエラーは生じなかった。*outBufferCount)outBufferCountに、グループのバッファの数を返します。バッファ数は問題なく返された。不正なoutBufferCountのポインタ。**outBuffers)グループ内の全てのバッファのリストを返します。GetBufferList()を呼び出す時、outBuffersにグループのバッファへのポインタを収めたいBBufferポインタの配列へのポインタを渡して下さい。listCountに配列の要素の数を指定して下さい。listCountが1より小さいか、outBuffersがNULLである。InitCheck(void)BBufferGroupのコンストラクトの結果のエラーコードを返します。新しいグループが問題なく作成された。グループのためにバッファを領域確保できなかった。ReclaimAllBuffers(void)もし他のBBufferProducerにバッファグループを渡しても、BMediaRoster::SetOutputBuffers()呼び出しでwillReclaimにtrueを渡したら、後でReclaim()を呼び出せばBBufferGroupにバッファを再請求できます。ReclaimAllBuffers()は、全てのバッファを補足できた時はB_OKを返しますが、バッファが再請求できなければエラーを返します。(BBitmapの様に)消え去ってしまうオブジェクトを参照するバッファがあれば、オブジェクトが消えてしまう前に、グループのReclaimAllBuffers()を呼び出してBBufferGroupを削除して下さい。NULL)を呼び出して下さい。このステップを忘れると、producerはバッファが削除されるまでその上で(もしかしたら永遠に)彷徨うことになります。全てのバッファは問題なく再請求された。いくつかのバッファは再請求できなかった。B_INFINITE_TIMEOUT)最低でもBBufferProducerサブクラスがデータを入れることのできる指定されたsizeのBBufferへのポインタを返し、その後media_destinationに渡します。適切なバッファが使用可能でなければ、この呼び出しはバッファが使用可能になるか(この場合はバッファが返されることによって)、あるいは指定されたtimeoutに到達するまでブロックされるでしょう。0より小さいtimeout値を渡したら、使用できるバッファがない場合、RequestBuffer()は直ちにNULLを返します。なければ、使用できるバッファへのポインタを返します。4.5では、(負の値を指定しなければ)timeoutは無視されます。B_INFINITE_TIMEOUTが常に使用され、指定された値には頓着されません。RequestBuffer()は、バッファフラグを使用しません。その代わりに、例えばBBuffer::Flags()またはBBuffer::Size()によって返された値を元にして、あなたの要求した特定のバッファを探すために、BBufferGroupの中のバッファを見ることができます。特定のバッファを得るためには、RequestBuffer()の2番目の形式を使用して下さい。最初の形式のRequestBuffer()は、もしバッファが得られなければNULLを返し、errno(訳不能)に適切なエラーコードを返します。2番目の形式では、適切なエラーコードが返されます。未解決のReclaimAllBuffers()要求が処理待ちの間は、RequestBuffer()を呼び出さないで下さい。groupが変更になったら、古いグループに関しては二度と目を向けないように設計されています。バッファは再請求の処理中である。その他のエラーが生じた。RequestError(void)最後に起こったRequestBuffer()エラーを返します。これはRequestBuffer()がNULLを返したときに便利です。WaitForBuffers(void)現在処理中のバッファ再請求が終了するまで待ち、その後返ります。バッファの再請求が処理中でなければ、直ちに返ります。バッファの再請求がなされたかどうかを検出するのに使用するセマフォが得られなかった。reserved..。