The Media Kit Table of Contents     The Media Kit Index

BFileInterface

Derived from: BMediaNode

Declared in: be/media/FileInterface.h

Library: libmedia.so

Allocation: Constructor only

Summary

 ディスク上にあるファイルを読み書きすることのできるnodeは、nodeがどんなファイルを扱えるかアプリケーションが容易に同定できるよう、BFileInterfaceから派生させて下さい。Media Serverは、未知のファイルを同定するよう試みるために、そして可能であればそれを扱うためにそのnodeを呼び出します。

 あなたのnodeを、BFileInterfaceだけから派生させることはできません。用途に応じて、必ずBBufferConsumer及びBBufferProducerのうち少なくとも一つから派生させなければなりません。


Hook Functions

  • DisposeFileFormatCookie()

  • GetDuration()

  • GetNextFileFormat()

  • GetRef()

  • HandleMessage()

  • SetRef()

  • SniffRef()


    Constructor


    BFileInterface()

    protected:

                                                             
      

    BFileInterface(void)

     コンストラクタ。


    Member Functions


    DisposeFileFormatCookie()

    protected:

                                                             
      

    virtual void DisposeFileFormatCookie(int32 cookie) = 0

     この関数は、あなたのnodeがサポートするファイルフォーマットを繰り返し処理するために使用されるcookieを破棄するために実装されなければなりません。もしcookieがデータブロックを参照しているなら、それを解放して下さい。そうでなければ、何もせずに関数を返しても構いません。


    HandleMessage()

    protected:

                                                             
      

    virtual status_t HandleMessage(int32 message, const void *data, size_t size)

     この関数は、制御ポートに到着するメッセージを扱うために実装されます。詳細については、BMediaNode::HandleMessage()をご覧下さい。


    GetDuration()

    protected:

                                                             
      

    virtual status_t GetDuration(bigtime_t *outDuration) = 0

     この関数は、現在使用されているファイル中のメディアデータの長さを、マイクロ秒単位でoutDurationに返すために実装して下さい。

     もし使用中のファイルがないか、あるいはファイルが不正であれば、負のエラーコードが返されます。そうでなければ、B_OKが返されます。


    GetNextFileFormat()

    protected:

                                                             
      

    virtual status_t GetNextFileFormat(int32 *cookie,
          media_file_format *outFormat) = 0

     この関数が最初に呼ばれた時、cookieは0となります。このnodeがサポートする一つ目のファイルフォーマットに関する情報を、outFormatに返して下さい。またcookieには、サポートするフォーマットのリスト中のどこなのか追跡するために使用できる、なにか意味のある(0ではない)値を設定し、B_OKを返して下さい。

     連続してGetNextFileFormat()が呼び出されたら、次のファイルフォーマットの情報を返し、リスト中のどこかを記憶するために必要なものにcookieを変更して下さい。問題なくファイルフォーマットに関する情報が返せるときは毎回、B_OKを返して下さい。

     フォーマットのある範囲を越えてしまったら、B_ERRORを返して下さい。


    GetRef() , SetRef()

    protected:

                                                             
      

    virtual status_t GetRef(const entry_ref *outRef, BMimeType *outMimeType) = 0

    virtual status_t SetRef(const entry_ref &file, bool create,
          bigtime_t *outDuration) = 0

     GetRef()関数は、outRefに、nodeが現在処理しているファイルのentry_refを返すよう実装して下さい。同様に、outMimeTypeにはファイルのMIMEタイプを返して下さい。

     アプリケーションまたは他のクライアントがnodeに特定のファイルを使用させたい場合は、SetRef()関数が呼び出されます。使用されるファイルは、fileで指定されます。ファイルは、存在してもしなくても構いません。もしcreatetrueであれば、(もしすでにファイルが存在するなら、そのファイルを削除して)新しいファイルを生成して下さい。また、書込むためにそのファイルを初期化し、その後に0をoutDurationに保存して下さい。

     もしcreateがfalseなら、既存のファイルを開いて、outDurationにファイルの実際の動作時間を入れて下さい。

     もし問題なければ、B_OKを返して下さい。そうでなければ、適切な負のエラーコードを返して下さい。もしこれらの関数を実装し忘れたら、それらは常にB_ERRORを返します。


    SetRef() see GetRef()


    SniffRef()

    protected:

                                                             
      

    virtual status_t SniffRef(const entry_ref &file, char *outMimeType,
          float *outQuality) = 0

     システム(またはアプリケーションプログラム)が未知のファイルを見つけた時は、そのファイルを同定するためにBMediaRosterを呼び出します。あなたのnodeのSniffRef()関数が呼び出されるため、nodeはそのファイルを見ることができます。

     fileによって参照されるファイルを調査して下さい。もしあなたのnodeがそのフォーマットを扱えるなら、outMimeTypeにファイルフォーマットのMIMEタイプ(バッファは256バイト長)を設定し、outQualityにはあなたがそのファイルをどの程度処理できるか示す値(0.0なら全く扱えないフォーマットであり、1.0ならアプリケーションが完璧に扱える私的に所有するフォーマットであることを示す)を設定して下さい。

     もしそのファイルを同定する方法を知っているが、演奏及び記録する方法は知らない場合、outQualityに0.0を返して下さい。

     もしファイルのいくつかの部分のみデコードする方法を知っていが、全ての部分については知らない場合に、もしファイルに含まれる音声及びビデオの両方を扱えるが、存在するその他のメディアデータの形式については扱えないなら、outQualityに0.4または0.6を設定して下さい。

     もしそのフォーマットを非常にうまく扱えるが、そのフォーマットが公式に定義されており、あなたがそれを制御できないなら、outQualityに0.9を設定して下さい。outQualityに1.0を返すのは、あなたがファイルフォーマットの仕様を制御でき、それを完璧に実装している場合だけにすべきです。

     これらの値の間に、ファイルを扱う能力について成しうる最も妥当な評価を与えることで、最も適切なnodeの選択が可能になります。例えば、もしあなたのnodeが低品質だが高速な音声フォーマットの処理を行うなら、他の点で返そうとするoutQualityの値から若干の値を引くでしょう。

     もしファイルを探索し、その内容についてなにか言えるなら、B_OKを返して下さい。そうでなければ、適切なエラーコードを返して下さい。もしそのファイルフォーマットについてなにも知らなければ、B_MEDIA_NO_HANDLERを返して下さい。


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