The Media Kit Table of Contents | The Media Kit Index |
Derived from: virtual BMediaNode
Declared in: be/media/Controllable.h
Library: libmedia.so
Allocation: Constructor only
ユーザがその振る舞いを制御することのできるnodeは、他のインターフェイスクラスから派生するのと同様に、BControllableから派生しなければなりません。BControllableから派生することにより、nodeは、調整のできるparameterに関する情報と、それらがお互いにどう関連するかを公表することができます。
クライアントアプリケーションは、nodeのユーザインターフェイスを構築するか、或いはインターフェイスを構築するシステムルーチンに情報を渡すために、公表された情報を使用することができます。
nodeは、外部のcontrolの元にある自分自身のcontrol panelを開始する能力も持つことができます。これによって、nodeの特別な知識を利用することができます。
protected:
|
BControllableのコンストラクタです。あなたの派生クラスがBParameterWebオブジェクトを生成し、利用可能なparameterをそのオブジェクトが記述するように設定し、そして返る前にそのオブジェクトをもってBControllable::SetParameterWeb()を呼び出すように、これをオーバーライドして下さい。
protected:
|
特定のparameterの設定が変更される際に、変更されたparameterのIDでこの関数を呼び出して下さい。そうすることでクライアントは、parameterの新しい設定を認識するnodeをチェックする必要があると知ることになります。
|
RETURN CODES
B_OK. エラーなし。
protected:
|
parameterの値の変更が有効になり、変更について知ることに興味のある人々を同期させたままにしたい時は、この関数を呼び出して下さい。BroadcastChangedParameter()と異なり、この関数は実際にparameterの新しい値を伝えます。
引数whenは、変更が有効になったperformance timeを示します。idは、値が変更になったparameterのparameter IDを示します。newValueは、parameterのデータへのポインタであり、valueSizeはデータの大きさを定義します。
RETURN CODES
B_OK. エラーなし。
protected:
|
あなたは、valueポインタによって示されるメモリの中で、指定されたparameterIDのparameterの値を保存するようにGetParameterValue()を実装しなければなりません。ioSizeポインタによって示されるsize_tの値は、値のバッファの大きさを指定します。関数が返るより前に、返されるデータの実際の大きさにioSizeを変更するようGetParameterValue()が実装されます。
同様に、lastChangeTimeをcontrolの値が変更された最も最近の時間に設定して下さい。
GetParameterValue()は、処理が終了したらB_OKを返します。或いは、もし何か問題が生じれば、適切なエラーコードを返します。
同様に、parameterの値を変更するためにSetParameterValue()を実装して下さい。引数changeTimeは、その変更が生じたperformance timeです。言い換えれば、要求された時間に要求が扱われるように、それをキューに入れる必要があります。valueはparameterにセットされる値のポインタを示し、sizeはvalueのデータのバイト数となります。
|
|
nodeのサービスループがmessageを受け取る際、BMediaNodeや他のあなたのnodeのスーパークラスに渡すのに加えて、それをBControllable::HandleMessage()にも渡して下さい。派生クラスの最外殻(下流)のHandleMessage()の実装から開始し、B_OKが返されるまで基底クラス(上流)の方向に任意の処理を行って下さい。
もしメッセージがBControllableのインターフェイスに対して企図されたものであれば、それはディスパッチされ、B_OKが返されます。そうでなければ、HandleMessage()はエラーを返します。これによって、あなたは他に何か試す必要があるということを知ります。
/* Message received */ if ((BControllable::HandleMessage(message, data, size) != B_OK) && (BMediaNode::HandleMessage(message, data, size) != B_OK)) { BMediaNode::HandleBadMessage(message, data, size); }
この例では、BControllableのHandleMessage()実装がそのメッセージを扱う最初の機会を得ます。もしその実装がメッセージの扱い方を知らなければ、そのメッセージはBMediaNodeの実装に転送されます。もしメッセージがまだ扱われていなければ、その後にデフォルトのBMediaNode::HandleBadMessage()に送られます。
RETURN CODES
B_OK. メッセージはディスパッチされた。
こちらもご覧下さい: BMediaNode::HandleMessage(), "About Multiple Virtual Inheritance" 21ページ目
|
LockParameterWeb()は、あなたがweb上で作業している間、webへのアクセスを妨げるためにそれをロックします。またUnlockParameterWeb()は、作業が終了する際にそれを解放します。あなたは、webへのアクセスをこれらの呼び出しで囲まなければなりません。
LockParameterWeb(); Web()->MakeGroup("EqualizerControls"); ... UnlockParameterWeb();
protected:
|
MakeParameterData()ユーティリティ関数は、parameterListにparameter IDのリストを取り、ioSizeで指定されたサイズが満たされるまで指定されたbufferに値を保存するように、それぞれのparameterに対してGetParameterValue()を呼び出します。使用されたバッファのバイト数は、ioSizeに返されます。
もしあなたのBControllableが、入力からB_MEDIA_PARAMETERSタイプのデータを受け入れるBBufferConsumerでもあれば、valueにBBuffer::Data()の結果を、sizeにBBuffer::Size()の結果をセットしてApplyParameterData()を呼び出して下さい。この関数は、バッファのparameter変更要求を解析し、要求を実行する目的でSetParameterValue()関数を呼び出すために、それらをディスパッチします。
これによって、あなたのnodeはparameter情報の自動化を簡単にサポートできます。しかしそれ以上に、BBufferProducerから派生することによっても、またB_MEDIA_PARAMETERSデータフォーマットの出力を供給することでも利益が得られ、それ故に、変更はそれが生じた様に記録されうるのです。これは、それらへのユーザの変更を記録し、その後その変更を再現することによって、parameterの自動化機構を供給します。
RETURN CODES
B_OK. エラーなし。
protected:
|
コンストラクタはBParameterWebオブジェクトを生成し、それを引数としてSetParameterWeb()を呼び出します。これは、どのparameterが使用でき、それらがお互いにどう関連しているのかという外部の世界を記述します。言葉を換えれば、これは内部のシグナル経路と、それがどうやって操作されるかを記述します。
もし引数のwebがNULLでなく、以前にBControllableのnodeに対して確立されたwebとは異っていた場合、B_MEDIA_WEB_CHANGEDメッセージがメディア通知を監視している全てのものに送られます。詳細は、StartWatching()をご覧下さい。
SetParameterWeb()は、もしwebがエラーなしに設定されればB_OKを返すでしょう。そうでなければ、エラーコードが返されるでしょう。
Web()関数は、BControllableに割り当てられたBParameterWebを返します。
protected:
|
このフック関数は、クライアントアプリケーションがnodeに対して(ユーザがnodeを設定できるように)nodeの制御パネルのユーザインターフェイスを公開させたい場合に呼び出されます。
この関数が返る際には、outMessengerが制御パネルと対話するために使用できるBMessengerとなります。
add-onがMedia Serverの内部で動作し、ユーザインターフェイスの問題がシステム全体に及ぶ可能性があるため、制御パネルは自分自身のteamとして動作することが推奨されます。これは、nodeを(make_media_addon()をexportすることによって)Media Server add-onと(main()を実装し、リンクライブラリにstart_dyn.oを含むことによって)アプリケーションの両方で書くことにより、簡単に実現できます。必ずmulti-launch applicationフラグをあなたのadd-onにセットして下さい。さもないと、これは正しく動作しないでしょう。
その後、StartControlPanel()の実装は、単純にadd-onをアプリケーションとして起動できます。そしてもしユーザがadd-onをダブルクリックすれば、add-onは制御パネルを公開するでしょう。加えて、ユーザはadd-onを適切に動作させるために、ひとつのファイルをインストールするだけですむという利益を得ます。
main()関数への最初のargv引数は、node IDが"%d"に該当する"node=%d"のフォーマットの文字列です。
|
RETURN CODES
B_OK. エラーは生じなかった。
The Media Kit Table of Contents | The Media Kit Index |
Copyright © 2000 Be, Inc. All rights reserved..