The Media Kit Table of Contents     The Media Kit Index

BBuffer

Derived from: none

Declared in: be/media/Buffer.h

Library: libmedia.so

Allocation: Constructor only

Summary

 BBufferは、アプリケーション及びnodeの間で受け渡されることのできる共有メモリのチャンク(塊)を参照します。これらのバッファの制御ヘッダは、より安全なIPC機構の使用を通じて渡されます。しかしこれらのヘッダが表す実際のデータは、典型的には高いデータレートを要求すし、また最大限の動作効率を得る必要性から、共有メモリはバッファが管理される手法によって管理されます。

 BBufferは、BBufferのsourceとして振る舞うBBufferGroupを持つBBufferProducerから生じます(BBufferConsumer::SetOutputBuffersFor()をご覧下さい)。BBufferは、参加している全てのnodeを通して送られます。それは、おそらく長い連鎖—バケツリレーのように—を通して、最後にBBufferをそれ以上先に渡すことを選ばないnode(バッファのRecycle()関数がBBufferGroupの保存庫に返すために呼び出され、他のデータのバッチに再利用される場所)に到達するまで、下流に送られるでしょう。

 アプリケーションもしくはカスタムのnodeは、低レベルのドライババッファや、BBitmap、またはBDirectWindowのフレームバッファ領域のように、メモリの特定の領域を参照するBBufferをセットアップすることができます。この能力によって不要な複製処理を回避でき、処理が大きく最適化されます。

 BBufferから派生するBSmallBufferクラスは、非常に小さなバッファに使用されます。これはBBufferGroupに加わらず、特に動作効率を最適化するために扱われます。

 
BBufferは、主にMedia Serverによって所有され管理されるため、決してサブクラスになることはありません。もしあなたが自分自身のBBufferを作成し、一旦BBufferConsumer::SetOutputBuffersFor()すると、あなたのBBufferConsumerによって返されるのと「同じ」バッファが、実際にはもう一つのBBufferクラスのインスタンスになるでしょう。


Constructor and Destructor

 BBufferのコンストラクタ及びですトラクタはprivateです。BBufferの生成及び破棄には、BBufferGroupクラスの適切な関数を使用して下さい。


Member Functions


AudioHeader()

                                                         
  

media_audio_header *AudioHeader(void)

 オーディオバッファのヘッダのポインタを返します。これは、下記の別名(alias)となります。

   &BBuffer::Header()->u.raw_audio;


CloneInfo()

                                                         
  

buffer_clone_info CloneInfo(void) const

 バッファを記述するbuffer_clone_info構造体を返します。この情報は、主にデバッグ目的のものです。このbuffer_clone_info構造体は、バッファグループにバッファを追加するために使用してはいけません。なぜなら、それは存在しているバッファのエリアスそのものだからです。


Data()

                                                         
  

void *Data(void)

 Data()関数は、バッファの最初のバイトのポインタか、あるいはもしバッファがなぜか適切に初期化されていなかった場合(この場合にはバッファは使用できません)はNULLを返します。


Flags()

                                                         
  

int32 Flags(void)

 バッファのフラグを返します。このフラグによって、バッファのオプションを指定できます。例えば、あるバッファは奇数のビデオフィールド(B_F1_BUFFER)を扱うよう意図され、他のバッファは偶数のビデオフィールド(B_F2_BUFFER)を扱うように意図されるBBufferGroupを作成することによって、あなたはビデオが描画される場所をそれぞれのバッファに知らせることで、簡単にインターレースのビデオを扱うことができます。


Header()

                                                         
  

media_header *Header(void)

 バッファのヘッダへのポインタを返します。このヘッダは、そこに収められているメディアデータを記述します。結果は、BBufferGroup::RequestBuffer()またはBBufferConsumer::BufferReceived()から受け取ったバッファに対してのみ適正です。

 もしデータをバッファに放り込んだら、バッファのヘッダへのポインタを得るためにHeader()を呼び出し、バッファの中身を記述する情報でmedia_header構造体を埋めて下さい。


ID()

                                                         
  

media_buffer_id ID(void)

 もしバッファがMedia Serverによって問題なく登録され、他のクライアントから使用可能となったら、ID()は正の値のバッファIDを返します。そうでなければ、負の値が返されます。


Recycle()

                                                         
  

void Recycle(void)

 バッファが再利用できるように、それを所有しているBBufferGroupにバッファを送り返します。BBufferGroup::RequestBuffer()呼び出しまたはBBufferConsumer::BufferReceived()呼び出しのいずれかから受け取ったバッファのRecycle()のみ呼び出すことができます。

 
同じバッファのBroadcastBuffer()Recycle()の両方を呼び出してはいけません。



SizeAvailable()

                                                         
  

size_t SizeAvailable(void)

 バッファの大きさを、バイト単位で返します。実際に使用されているバイト数はこの値より小さく、その値はHeader()関数を呼び出すことで得られるバッファのヘッダに保存されています。


SizeUsed() , SetSizeUsed()

                                                         
  

size_t SizeUsed(void)

void SetSizeUsed(ssize_t sizeUsed)

 SizeUsed()は、現在使用されているバッファのバイト数を返します。

 SetSizeUsed()は、この値を設定します。この関数は、書込んだデータのサイズを示すために、バッファにデータを書込んだ後に呼び出して下さい。


Type()

                                                         
  

media_type Type(void)

 バッファに格納されているデータのメディアタイプを返します。それはバッファが作りだされたBBufferProducerによって指定されたものです。この値は、BBufferGroup::RequestBuffer()呼び出しまたはBBufferConsumer::BufferReceived()呼び出しのいずれかからバッファを受け取ったときのみ適正です。


VideoHeader()

                                                         
  

media_video_header *VideoHeader(void)

 ビデオバッファのヘッダへのポインタを返します。これは、下記へのエリアスです。

   &BBuffer::Header()->u.raw_video;


Constants


Flags

Declared in: be/media/Buffer.h

Constant Description
B_F1_BUFFER このバッファは奇数のフィールドに対応します。
B_F2_BUFFER このバッファは偶数のフィールドに対応します。
B_SMALL_BUFFER このバッファは小さなバッファです。

 これらのフラグはバッファに対して割り当てられます。現在使用できる値によって、バッファが偶数のビデオフィールドに対して使用されるかどうか指定できます。もしB_SMALL_BUFFERが設定されていれば、そのバッファはBSmallBufferです。


Structures


buffer_clone_info

Declared in: <be/media/Buffer.h>

   
   struct buffer_clone_info {
      buffer_clone_info();
      ~buffer_clone_info();
      media_buffer_id buffer;
      area_id area;
      size_t offset;
      size_t size;
      int32 flags;
   private:
      _reserved_[4];
   };

 バッファのフラグと同様に、BBufferが(バッファが置かれたメモリ領域及び領域のオフセット、バッファのサイズの観点から)メモリのどこに存在するかを記述します。


The Media Kit Table of Contents     The Media Kit Index


The Be Book,
...in lovely HTML...
for BeOS Release 5.

Copyright © 2000 Be, Inc. All rights reserved..