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()
Data()関数は、バッファの最初のバイトのポインタか、あるいはもしバッファがなぜか適切に初期化されていなかった場合(この場合にはバッファは使用できません)はNULLを返します。
Flags()
バッファのフラグを返します。このフラグによって、バッファのオプションを指定できます。例えば、あるバッファは奇数のビデオフィールド(B_F1_BUFFER)を扱うよう意図され、他のバッファは偶数のビデオフィールド(B_F2_BUFFER)を扱うように意図されるBBufferGroupを作成することによって、あなたはビデオが描画される場所をそれぞれのバッファに知らせることで、簡単にインターレースのビデオを扱うことができます。
Header()
|
|
|
media_header *Header(void)
| |
バッファのヘッダへのポインタを返します。このヘッダは、そこに収められているメディアデータを記述します。結果は、BBufferGroup::RequestBuffer()またはBBufferConsumer::BufferReceived()から受け取ったバッファに対してのみ適正です。
もしデータをバッファに放り込んだら、バッファのヘッダへのポインタを得るためにHeader()を呼び出し、バッファの中身を記述する情報でmedia_header構造体を埋めて下さい。
ID()
もしバッファがMedia Serverによって問題なく登録され、他のクライアントから使用可能となったら、ID()は正の値のバッファIDを返します。そうでなければ、負の値が返されます。
Recycle()
バッファが再利用できるように、それを所有している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()
バッファに格納されているデータのメディアタイプを返します。それはバッファが作りだされた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が(バッファが置かれたメモリ領域及び領域のオフセット、バッファのサイズの観点から)メモリのどこに存在するかを記述します。