Microsoft DirectX 8.0 |
IMediaObject インターフェイスの基本的な実装を提供する。
このテンプレート使用の詳細については、「DMO 基底クラスの使い方」を参照すること。
ヘルパー クラス | |
---|---|
LockIt | ロックとその解除を処理する内部ヘルパー クラス。 |
IMediaObjectImpl メソッド | |
CheckTypesSet | すべての必須ストリームにメディア タイプが設定されているかどうかを判断する。 |
InputType | 入力ストリームのメディア タイプを取得する。 |
InputTypeSet | 入力ストリームにメディア タイプが設定されているかどうかを照会する。 |
OutputType | 出力ストリームのメディア タイプを取得する。 |
OutputTypeSet | 出力ストリームにメディア タイプが設定されているかどうかを照会する。 |
IMediaObject メソッド | IMediaObject インターフェイスを実装するメソッド。 |
派生クラスのメソッド | |
InternalAcceptingInput | 入力ストリームがさらに入力を受け付けるかどうかを照会する。 |
InternalCheckInputType | 入力ストリームが所定のメディア タイプを受け付けるかどうかを照会する。 |
InternalCheckOutputType | 出力ストリームが所定のメディア タイプを受け付けるかどうかを照会する。 |
Lock | オブジェクトをロックする。 |
Unlock | オブジェクトのロックを解除する。 |
ロックとその解除を処理する内部ヘルパー クラス。
構文
LockIt( _DERIVED_ *p );
パラメータ
- p
- 派生オブジェクトへのポインタ。
注意
コンストラクタ メソッドがオブジェクトをロックし、デストラクタ メソッドがオブジェクトのロックを解除する。派生クラスの内部からオブジェクトをロックするには、次のように LockIt 型のローカル変数を宣言する。
{ LockIt lck(static_cast<_DERIVED_ *>(this)); // オブジェクトをロックする。 } // lck がスコープ外に出て、オブジェクトのロックが解除される。IMediaObjectImpl のメソッドではロックが処理されるため、多くの場合、派生クラスでオブジェクトをロックする必要はない。
すべての必須ストリームにメディア タイプが設定されているかどうかを判断する。
構文
bool CheckTypesSet(void);
戻り値
オブジェクトの必須ストリームすべてにメディア タイプが設定されている場合は、TRUE を返す。それ以外の場合は、FALSE を返す。
注意
ストリームのメディア タイプを変更する操作をした場合には、その後にこのメソッドを呼び出す。このメソッドは、クラス内部のプライベートなフラグを設定する。IMediaObjectImpl の一部メソッドでは、一定の処理を実行してよいかどうかを判断するために、このフラグをテストする。フラグが FALSE の場合は、通常、DMO_E_TYPE_NOT_SET が返される。
ストリームのメディア タイプを変更する IMediaObject メソッドは、SetInputType と SetOutputType の 2 つのみである。クラス テンプレートは、これらのメソッドの両方を実装する。
入力ストリームのメディア タイプを取得する。
構文
const DMO_MEDIA_TYPE *InputType( DWORD ulInputStreamIndex );
パラメータ
- ulInputStreamIndex
- 入力ストリームのインデックス。
戻り値
メディア タイプを記述する DMO_MEDIA_TYPE 構造体へのポインタを返す。タイプが設定されていない場合には、NULL を返す。
入力ストリームにメディア タイプが設定されているかどうかを照会する。
構文
bool InputTypeSet( DWORD ulInputStreamIndex );
パラメータ
- ulInputStreamIndex
- 入力ストリームのインデックス。
戻り値
このストリームにメディア タイプが設定されている場合は、TRUE を返す。それ以外の場合は、FALSE を返す。
出力ストリームのメディア タイプを取得する。
構文
const DMO_MEDIA_TYPE *OutputType( DWORD ulOutputStreamIndex );
パラメータ
- ulOutputStreamIndex
- 出力ストリームのインデックス。
戻り値
メディア タイプを記述する DMO_MEDIA_TYPE 構造体へのポインタを返す。タイプが設定されていない場合には、NULL を返す。
出力ストリームにメディア タイプが設定されているかどうかを照会する。
構文
bool OutputTypeSet( DWORD ulOutputStreamIndex );
パラメータ
- ulOutputStreamIndex
- 出力ストリームのインデックス。
戻り値
このストリームにメディア タイプが設定されている場合は、TRUE を返す。それ以外の場合は、FALSE を返す。
入力ストリームがさらに入力を受け付けるかどうかを照会する。派生クラスは、このメソッドを宣言および実装する必要がある。
構文
HRESULT InternalAcceptingInput( DWORD dwInputStreamIndex );
パラメータ
- dwInputStreamIndex
- 入力ストリームのインデックス。
戻り値
入力ストリームが入力を受け付ける場合は、S_OK を返す。それ以外の場合は、S_FALSE を返す。
入力ストリームが所定のメディア タイプを受け付けるかどうかを照会する。派生クラスは、このメソッドを宣言および実装する必要がある。
構文
HRESULT InternalCheckInputType( DWORD dwInputStreamIndex, const DMO_MEDIA_TYPE *pmt );
パラメータ
- dwInputStreamIndex
- 入力ストリームのインデックス。
- pmt
- メディア タイプを記述する DMO_MEDIA_TYPE 構造体へのポインタ。
戻り値
メディア タイプが有効な場合は、S_OK を返す。それ以外の場合は、DMO_E_INVALIDTYPE を返す。
出力ストリームが所定のメディア タイプを受け付けるかどうかを照会する。派生クラスは、このメソッドを宣言および実装する必要がある。
構文
HRESULT InternalCheckOutputType( DWORD dwOutputStreamIndex, const DMO_MEDIA_TYPE *pmt );
パラメータ
- dwOutputStreamIndex
- 出力ストリームのインデックス。
- pmt
- メディア タイプを記述する DMO_MEDIA_TYPE 構造体へのポインタ。
戻り値
メディア タイプが有効な場合は、S_OK を返す。それ以外の場合は、DMO_E_INVALIDTYPE を返す。
オブジェクトをロックする。派生クラスは、このメソッドを宣言および実装する必要がある。
構文
void Lock(void);
注意
ATL (Active Template Library) を使って派生クラスを実装すると、ATL によるこのメソッドのデフォルト実装を使用できる。
オブジェクトのロックを解除する。派生クラスは、このメソッドを宣言および実装する必要がある。
構文
void Unlock(void);
注意
ATL (Active Template Library) を使って派生クラスを実装すると、ATL によるこのメソッドのデフォルト実装を使用できる。
IMediaObject のメソッドの大半は、同じメソッドの内部バージョンを呼び出すラッパーである。派生クラスは、Internal- というプレフィックスを持つ内部バージョンを実装する必要がある。
派生クラスで実装すべきメソッドの一覧については、「DMO 基底クラスの使い方」を参照すること。ここでは、いくつかの実装の詳細について説明する。
テンプレートは、このメソッドが呼び出されたかどうかを示すプライベートなフラグを保持する。このフラグが既に TRUE になっているときにメソッドが呼び出されると、InternalAllocateStreamingResources メソッドを呼び出さずに S_OK を返す。FreeStreamingResources メソッドはこのフラグを FALSE にリセットする。
このメソッドは IMediaObject::Lock メソッドを実装する。ATL との名前の競合を避けるため、IMediaObjectImpl ではメソッド名が DMOLock に変更されている。
注 : 派生クラスを構築するときには、DMO ヘッダー ファイルをインクルードする前に FIX_LOCK_NAME を定義する。FIX_LOCK_NAME 疑似命令があると、プリプロセッサは、IMediaObject インターフェイスの宣言にある Lock を DMOLock に置きかえる。ただし、vtable 順は変わらないため、アプリケーションでは Lock という名前を使ってメソッドを起動できる。
#define FIX_LOCK_NAME #include <dmo.h>このメソッドは、パラメータが TRUE なら Lock を呼び出し、パラメータが FALSE なら Unlock を呼び出す。派生クラスは、Lock メソッドと Unlock メソッドを実装する必要がある。
テンプレートは、オブジェクトがフラッシュされたかどうかを示すプライベートなフラグを保持する。Flush メソッドはこのフラグを TRUE にセットし、ProcessInput メソッドは FALSE にリセットする。フラグが既に TRUE になっているときに Flush が呼び出されると、InternalFlush メソッドを呼び出さずに S_OK を返す。
メディア タイプが設定されていない必須ストリームがある場合、この 2 つのメソッドは DMO_E_TYPE_NOT_SET を返す。したがって、派生クラスの内部メソッドでは、すべての必須ストリームにメディア タイプが設定されていることを前提に処理できる。
このメソッドは、派生クラスが実装する InternalAcceptingInput メソッドを呼び出す。InternalAcceptingInput メソッドは、指定された入力ストリームが入力を受け付ける場合には S_OK を返す。それ以外の場合には、S_FALSE を返す。
メディア タイプが設定されていない必須ストリームがある場合、GetInputStatus メソッドは DMO_E_TYPE_NOT_SET を返す。したがって、InternalAcceptingInput の実装でこの条件を確認する必要はない。
このメソッドは、InternalProcessInput を呼び出す前に AllocateStreamingResources と InternalAcceptingInput を呼び出す。したがって、InternalProcessInput の実装では、以下の条件を前提に処理ができる。
- リソースはすべて割り当てられている。
- 入力ストリームはデータを受け付ける。
このメソッドは、InternalProcessOutput を呼び出す前に AllocateStreamingResources を呼び出す。したがって、InternalProcessOutput の実装では、リソースがすべて割り当てられていることを前提に処理できる。
このメソッドは、入力ストリームのメディア タイプをテスト、設定、または消去する。このメソッドは、派生クラスが実装する InternalCheckInputType メソッドを呼び出す。InternalCheckInputType メソッドは、メディア タイプが受け付け可能な場合には S_OK を返し、それ以外の場合にはエラー コードを返す。残りの機能は SetInputType メソッドが実現する。
このメソッドはリソースの割り当てを行わない。DMO がストリーム状態に切り替わると、AllocateStreamingResources メソッドが呼び出される。派生クラスでは、InternalAllocateStreamingResources メソッドを使って、メモリ バッファなどの必要なリソースを割り当てなければならない。
このメソッドは、出力ストリームのメディア タイプをテスト、設定、または消去する。このメソッドは、派生クラスが実装する InternalCheckOutputType メソッドを呼び出す。InternalCheckOutputType メソッドは、メディア タイプが受け付け可能な場合には S_OK を返し、それ以外の場合にはエラー コードを返す。残りの機能は SetOutputType メソッドが実装する。
このメソッドはリソースの割り当てを行わない。DMO がストリーム状態に切り替わると、AllocateStreamingResources メソッドが呼び出される。派生クラスでは、InternalAllocateStreamingResources メソッドを使ってメモリ バッファなどの必要なリソースを割り当てなければならない。