The Media Kit Table of Contents     The Media Kit Index

BMediaTrack

Derived from: none

Declared in: be/media/MediaTrack.h

Library: libmedia.so

Allocation: BMediaFile::TrackAt()

Summary

 BMediaTrackクラスは、メディアファイル内の特定のトラックにアクセスする手段を提供します。このクラスのインスタンスは、は常にBMediaFile::TrackAt()またはBMediaFile::CreateTrack()関数を使用して生成されます。

 BMediaTrackのコンストラクタは、トラック内のエンコードされたデータを扱うことのできるcodecを探します。一旦それが終わったら、トラックが使用される準備はできています。

 もし書き込みのためにファイルを開けば、データをトラックに書込むことができます。BMediaFileをコンストラクトする際にB_MEDIA_FILE_REPLACE_MODEフラグが指定されていれば、ファイルの読み込みと書き込みの両方が可能になります。もしそのトラックに対して使用できるデコーダがなくても、エンコードされたデータに直接アクセスするためにReadChunk()を使用することができます。

 BMediaFile関数を用いてBMediaTrackのインスタンスを生成した後、トラックが有効であることを確かめるためにInitCheck()を呼び出して下さい。その後、ファイルのデータを読み書きするためにReadFrames()及びWriteFrames()を適切に呼び出します。ビデオデータに関しては、一時に一つのフレームを処理して下さい。

 SeekToTime()またはSeekToFrame()を使用して、特定の時間やフレームをseekすることもできます。

 メディアファイルのトラックをBMediaTrackを使用して読み書きする方法の例としては、"Reading and Writing Media Files"をご覧下さい。

 
一般的な規則として、BMediaTrack関数で使用される構造物にはワイルドカードを使用できません。BMediaTrackに対してあなたが持つフォーマットを伝えると、BMediaTrackはそのフォーマットをサポートしているかどうかを単純に返答します。



Destructor


~BMediaTrack()

                                                         
  

virtual ~BMediaTrack(void)

 デストラクタです。BMediaTrackを直接削除してはいけません。その代わりに、BMediaFile::ReleaseTrack()またはBMediaFile::ReleaseAllTracks()を使用するか、あるいはBMediaFileが削除された時にトラックを破棄させるかして下さい。


Member Functions


AddCopyright()

                                                         
  

status_t AddCopyright(const char *data) const

 トラックの著作権情報(copyright notice)をdataによって指定される文字列を設定します。既存の著作権情報があれば置き換えられます。

 
MediaTrackクラスは、トラックに対して同時に複数の書き込みを生じさせないよう自動的にロックすることはありません。もし同じBMediaTrackに書き込みを行う複数のスレッドがあるなら、書き込みが重複しないように(セマフォなどの)ロック機構を使用しなければなりません。


RETURN CODES

B_OK. 著作権が設定された。


AddTrackInfo()

                                                         
  

status_t AddTrackInfo(uint32 code, const void *data, size_t size,
      uint32 flags = 0) const

 トラックに、指定されたtypeの内部的なレコードを追加します。レコードはdataポインタによって指定され、sizeバイトの長さです。flagsは、処理を変更するフラグを示します(現在はなにも定義されていません)。

 
MediaTrackクラスは、トラックに対して同時に複数の書き込みを生じさせないよう自動的にロックすることはありません。もし同じBMediaTrackに書き込みを行う複数のスレッドがあるなら、書き込みが重複しないように(セマフォなどの)ロック機構を使用しなければなりません。


RETURN CODES

B_OK. フォーマットが問題なく返された。


CountFrames()

                                                         
  

int64 CountFrames(void) const

 トラック中のフレーム総数を返します。


CurrentFrame() , const

                                                         
  

int64 CurrentFrame(void)

 トラック中にある現在の(GetNextFrames()によって次回読み込まれる)フレームを返します。


CurrentTime()

                                                         
  

bigtime_t CurrentTime(void) const

 トラック中の現在の位置を返します。位置は、トラックの先頭からのマイクロ秒で表現されます。


DecodedFormat()

                                                         
  

status_t DecodedFormat(media_format *ioFormat) const

 トラックのデータをデコードする時にcodecが出力するフォーマットを取り決めます。ioFormatに、あなたの望むフォーマットを(適切なワイルドカードで)渡して下さい。codecは、もっとも適合するフォーマットを探し、ioFormatに返します。このフォーマットは、その後ReadFrames()経由で、デコードされたデータを出力する際に使用されます。

 フォーマットは、典型的にはB_MEDIA_RAW_AUDIOまたはB_MEDIA_RAW_VIDEOのフレーバーとなります。

RETURN CODES

B_OK. フォーマットは問題なく取り決められ、返された。


Duration()

                                                         
  

bigtime_t Duration(void) const

 トラック全体の長さを、マイクロ秒単位で返します。


EncodedFormat()

                                                         
  

status_t EncodedFormat(media_format *outFormat) const

 トラックのデータの「ネイティブな」エンコードされたフォーマットを返します。これは、ReadChunk()によって返されたデータのフォーマットです。

RETURN CODES

B_OK. フォーマットは問題なく返された。


FindKeyFrameForTime() , FindKeyFrameForFrame()

                                                         
  

status_t FindKeyFrameForTime(bigtime_t *inOutTime, int32 flags = 0)

status_t FindKeyFrameForFrame(int64 *inOutFrame, int32 flags = 0)

 FindKeyFrameForTime()は、inOutTimeで時間を受け取り、最もその時間に近いキーフレームの開始される時間をinOutTimeに返します。同様に、FindKeyFrameForFrame()は、指定されたフレームに最も近いキーフレームの番号を返します。

 引数flagsは、キーフレームを前方に探すか、それとも後方に探すかを示します。

 もし示されたフレームまたは時間より以前の最も近いキーフレームを探したいなら、flagsB_MEDIA_SEEK_CLOSEST_BACKWARDを指定して下さい。もし示されたフレームまたは時間より後の最も近いキーフレームを探したいなら、B_MEDIA_SEEK_CLOSEST_FORWARDを指定して下さい。


Flush()

                                                         
  

status_t Flush(void)

 バッファにある全てのエンコードされたデータをディスクに流し込みます。トラックの最後のフレームを書き込み終わった後、この関数を呼び出して下さい。これは、全てがファイルの適切なオフセットに書込まれることを保証します。

RETURN CODES

B_OK. バッファは書込まれた。


GetCodecInfo()

                                                         
  

status_t GetCodecInfo(media_codec_info *codecInfo) const

 トラックのデータを読み書きするのに使用されているcodecについての情報を返します。

RETURN CODES

B_OK. codecの情報が返された。


GetEncodeParameters() , SetEncodeParameters()

                                                         
  

status_t GetEncodeParameters(encode_parameters *parameters) const

status_t SetEncodeParameters(encode_parameters *parameters)

 GetEncodeParameters()は、トラックのデータをエンコードする際に使用されるencode_parametersを返します。

 SetEncodeParameters()は、データをエンコードする際に使用されるencode_parametersを変更します。


GetParameterValue() see SetParameterValue()


GetParameterView()

                                                         
  

BView *GetParameterView(void)

 codecとトラックのparameterを合わせるためのcontrolを内包するBViewを返します。もし使用できるviewがなければ、NULLが返されます。


GetQuality() see SetQuality()


InitCheck()

                                                         
  

status_t InitCheck(void) const

 トラックが問題なく完全にインスタンスを生成されたか否かを示す状態(status)コードを返します。

RETURN CODES

B_OK. トラックは適切にコンストラクトされた。


ReadChunk()

                                                         
  

status_t ReadChunk(char **outBuffer, int32 *ioSize,
      media_header *header = NULL)

 メディアトラックの次のioSizeバイトへのポインタを、outBufferに返します。返される実際のバイト数は、ioSizeに渡されます。もしトラックの終端に到達していれば、そうはならないでしょう。返されたバッファを記述するために、headerが設定されます。

 この関数によって返されたデータは、デコードされていません。典型的には、メディアデータのデコードに使用できるcodecがない場合のみ、この関数を使用して下さい。

RETURN CODES

B_OK. フォーマットは問題なく取り決められ、返された。


ReadFrames()

                                                         
  

status_t ReadFrames(void *outBuffer, int64 *outFrameCount,
      media_header *outHeader = NULL)

status_t ReadFrames(void *outBuffer, int64 *outFrameCount,
      media_header *outHeader = NULL,
      media_decode_info *info)

 outBufferのポインタによって示されるバッファに、トラックの現在の位置から開始される次のフレームまたはサンプルで満たされます。ビデオトラックの場合、ビデオの次のフレームは、デコードされて出力バッファに保存されます。オーディオトラックの場合、バッファはDecodedFormat()を使用して取り決められたフレームの数(値)で満たされます。もしバッファが満たされる前にトラックの終端に到達したら、部分的なバッファが返されます。

 関数が返る際には、outFrameCountは返されたフレームの数を示し、もしNULLでない値が指定されれば、outHeaderは単独または複数のフレームを含むバッファのヘッダを内包します。このヘッダからは、(バッファに対するメディアの開始時間などの)便利な情報を得ることができます。

 この関数の2つ目の形式では、デコーダに付加的な情報を提供するためにmedia_decode_info構造体を提供することができます。付加的な情報とは、データをデコードするのにかかる時間や、フォーマットとcodecに特異的な情報などです。

RETURN CODES

B_OK. フレームは返された。


ReplaceFrames()

                                                         
  

status_t ReplaceFrames(void *inBuffer, int64 *ioFrameCount,
      media_header *header)

 トラックのioFrameCountによって指定されるフレームの番号を入れ替えます。inBufferは、新しいフレームのためのソースバッファへのポインタを示します。


SeekToFrame() , SeekToTime()

                                                         
  

status_t SeekToFrame(int64 *ioFrame, int32 flags = 0)

status_t SeekToTime(bigtime_t *ioTime, int32 flags = 0)

 トラック中の特定の位置をseekします。SeekToFrame()は、フレームの番号で目的地の位置を解釈し、SeekToTime()はマイクロ秒単位の時間で目的地の位置を解釈します。これらの関数はそれぞれ(ioFrameまたはioTimeに)それらが実際に動かされた位置を返します。

 例えば、もしビデオのcodecがキーフレームによるseekしか受け付けない場合、返されるioFrameは入力時に指定されたものとは異っているでしょう。

 もし現在のフレームより前の最も近いキーフレームを明示的にseekしたいなら、flagsB_MEDIA_SEEK_CLOSEST_BACKWARDを指定して下さい。もし現在の時間より後の最も近いキーフレームを探したいなら、B_MEDIA_SEEK_CLOSEST_FORWARDを指定して下さい。

RETURN CODES

B_OK. フォーマットは問題なく返された。


SetEncodeParameters() see GetEncodeParameters()


SetParameterValue() , GetParameterValue()

                                                         
  

status_t SetParameterValue(int32 id, const void *value, size_t size)

status_t GetParameterValue(int32 id, const void *value, size_t *size)

 SetParameterValue()は、idで指定されるparameterの値を、valueポインタによって示されるデータに設定します。このデータは、sizeバイトの長さです。

 GetParameterValue()

RETURN CODES

B_OK. エラーなし。


SetQuality() , GetQuality()

                                                         
  

status_t SetQuality(float quality)

status_t GetQuality(float *quality)

 これらの関数は、(1.0は最高の品質を意味する)codecの品質設定をセットしたり、返したりします。

RETURN CODES

B_OK. エラーなし。


Web()

                                                         
  

BParameterWeb *Web(void)

 トラックとcodecを設定するために使用できるBParameterWebを返します。もしcodecがユーザの設定をサポートしていなければ、NULLが返されます。


WriteChunk()

                                                         
  

status_t WriteChunk(void *data, size_t size, int32 flags = 0)

 sizeバイトのデータを含み、dataポインタによって指定されるデータを、トラックに書込みます。もしフレームがキーフレームであれば、flagsB_MEDIA_KEY_FRAMEを指定して下さい。この関数は、データがすでにエンコードされていると見なしています。

 
MediaTrackクラスは、トラックに対して同時に複数の書き込みを生じさせないよう自動的にロックすることはありません。もし同じBMediaTrackに書き込みを行う複数のスレッドがあるなら、書き込みが重複しないように(セマフォなどの)ロック機構を使用しなければなりません。


 一般的に、ファイルからの圧縮されたデータを読み込み、データを処理しようと試みることなくそれを他のトラックにコピーする場合のみ、WriteChunk()を使用して下さい。

RETURN CODES

B_OK. フレームが書込まれた。


WriteFrames()

                                                         
  

status_t WriteFrames(void *data, int32 numFrames,
      int32 flags = 0)

 numFrame個のフレームを含み、dataポインタによって示されるデータをトラックに書込みます。もしフレームがキーフレームであれば、flagsB_MEDIA_KEY_FRAMEを指定して下さい。

 
MediaTrackクラスは、トラックに対して同時に複数の書き込みを生じさせないよう自動的にロックすることはありません。もし同じBMediaTrackに書き込みを行う複数のスレッドがあるなら、書き込みが重複しないように(セマフォなどの)ロック機構を使用しなければなりません。


 データが生の(raw)音声またはビデオであっても、メディアトラックにフレームを書込む前に、必ずエンコーダを選択しなければなりません。BMediaTrackに生の(raw)音声またはビデオを書込む時は、raw encoderを使用する必要があります。これはデータを変換しませんが、それを生成した後に適切に再生するために、ファイルに対して内部データをセットアップします。

RETURN CODES

B_OK. フレームは書込まれた。


Constants


media_seek_type

Declared in: be/media/MediaTrack.h

Constant Description
B_MEDIA_SEEK_CLOSEST_FORWARD トラックの現在の位置より後で、最も近いキーフレームをseekする。
B_MEDIA_SEEK_CLOSEST_BACKWARD トラックの現在の位置より前で、最も近いキーフレームをseekする。
B_MEDIA_SEEK_DIRECTION_MASK seekの方向を得るためには、この値でseekフラグをマスクする。

 SeekToTime()及びSeekToFrame()を呼び出す際に使用されるこれらのフラグによって、それが置かれている時間やフレーム番号を推測する必要なしに、ファイル中の現在の位置より前または後ろの最も近くにあるキーフレームを探すことができます。


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..