Microsoft DirectX 8.0

IMediaObjectImpl クラス テンプレート

IMediaObject インターフェイスの基本的な実装を提供する。

このテンプレート使用の詳細については、「DMO 基底クラスの使い方」を参照すること。

ヘルパー クラス
LockItロックとその解除を処理する内部ヘルパー クラス。
IMediaObjectImpl メソッド
CheckTypesSetすべての必須ストリームにメディア タイプが設定されているかどうかを判断する。
InputType入力ストリームのメディア タイプを取得する。
InputTypeSet入力ストリームにメディア タイプが設定されているかどうかを照会する。
OutputType出力ストリームのメディア タイプを取得する。
OutputTypeSet出力ストリームにメディア タイプが設定されているかどうかを照会する。
IMediaObject メソッドIMediaObject インターフェイスを実装するメソッド。
派生クラスのメソッド
InternalAcceptingInput入力ストリームがさらに入力を受け付けるかどうかを照会する。
InternalCheckInputType入力ストリームが所定のメディア タイプを受け付けるかどうかを照会する。
InternalCheckOutputType出力ストリームが所定のメディア タイプを受け付けるかどうかを照会する。
Lockオブジェクトをロックする。
Unlockオブジェクトのロックを解除する。

LockIt 内部クラス

ロックとその解除を処理する内部ヘルパー クラス。

構文

LockIt(
    _DERIVED_ *p
);

パラメータ

p
派生オブジェクトへのポインタ。

注意

コンストラクタ メソッドがオブジェクトをロックし、デストラクタ メソッドがオブジェクトのロックを解除する。派生クラスの内部からオブジェクトをロックするには、次のように LockIt 型のローカル変数を宣言する。

{
    LockIt lck(static_cast<_DERIVED_ *>(this)); // オブジェクトをロックする。

} // lck がスコープ外に出て、オブジェクトのロックが解除される。

IMediaObjectImpl のメソッドではロックが処理されるため、多くの場合、派生クラスでオブジェクトをロックする必要はない。

IMediaObjectImpl::CheckTypesSet

すべての必須ストリームにメディア タイプが設定されているかどうかを判断する。

構文

bool CheckTypesSet(void);

戻り値

オブジェクトの必須ストリームすべてにメディア タイプが設定されている場合は、TRUE を返す。それ以外の場合は、FALSE を返す。

注意

ストリームのメディア タイプを変更する操作をした場合には、その後にこのメソッドを呼び出す。このメソッドは、クラス内部のプライベートなフラグを設定する。IMediaObjectImpl の一部メソッドでは、一定の処理を実行してよいかどうかを判断するために、このフラグをテストする。フラグが FALSE の場合は、通常、DMO_E_TYPE_NOT_SET が返される。

ストリームのメディア タイプを変更する IMediaObject メソッドは、SetInputTypeSetOutputType の 2 つのみである。クラス テンプレートは、これらのメソッドの両方を実装する。

IMediaObjectImpl::InputType

入力ストリームのメディア タイプを取得する。

構文

const DMO_MEDIA_TYPE *InputType(
DWORD ulInputStreamIndex
);

パラメータ

ulInputStreamIndex
入力ストリームのインデックス。

戻り値

メディア タイプを記述する DMO_MEDIA_TYPE 構造体へのポインタを返す。タイプが設定されていない場合には、NULL を返す。

IMediaObjectImpl::InputTypeSet

入力ストリームにメディア タイプが設定されているかどうかを照会する。

構文

bool InputTypeSet(
DWORD ulInputStreamIndex
);

パラメータ

ulInputStreamIndex
入力ストリームのインデックス。

戻り値

このストリームにメディア タイプが設定されている場合は、TRUE を返す。それ以外の場合は、FALSE を返す。

IMediaObjectImpl::OutputType

出力ストリームのメディア タイプを取得する。

構文

const DMO_MEDIA_TYPE *OutputType(
DWORD ulOutputStreamIndex
);

パラメータ

ulOutputStreamIndex
出力ストリームのインデックス。

戻り値

メディア タイプを記述する DMO_MEDIA_TYPE 構造体へのポインタを返す。タイプが設定されていない場合には、NULL を返す。

IMediaObjectImpl::OutputTypeSet

出力ストリームにメディア タイプが設定されているかどうかを照会する。

構文

bool OutputTypeSet(
DWORD ulOutputStreamIndex
);

パラメータ

ulOutputStreamIndex
出力ストリームのインデックス。

戻り値

このストリームにメディア タイプが設定されている場合は、TRUE を返す。それ以外の場合は、FALSE を返す。

_DERIVED_::InternalAcceptingInput

入力ストリームがさらに入力を受け付けるかどうかを照会する。派生クラスは、このメソッドを宣言および実装する必要がある。

構文

HRESULT InternalAcceptingInput(
    DWORD dwInputStreamIndex
);

パラメータ

dwInputStreamIndex
入力ストリームのインデックス。

戻り値

入力ストリームが入力を受け付ける場合は、S_OK を返す。それ以外の場合は、S_FALSE を返す。

_DERIVED_::InternalCheckInputType

入力ストリームが所定のメディア タイプを受け付けるかどうかを照会する。派生クラスは、このメソッドを宣言および実装する必要がある。

構文

HRESULT InternalCheckInputType(
    DWORD dwInputStreamIndex,
    const DMO_MEDIA_TYPE *pmt
);

パラメータ

dwInputStreamIndex
入力ストリームのインデックス。
pmt
メディア タイプを記述する DMO_MEDIA_TYPE 構造体へのポインタ。

戻り値

メディア タイプが有効な場合は、S_OK を返す。それ以外の場合は、DMO_E_INVALIDTYPE を返す。

_DERIVED_::InternalCheckOutputType

出力ストリームが所定のメディア タイプを受け付けるかどうかを照会する。派生クラスは、このメソッドを宣言および実装する必要がある。

構文

HRESULT InternalCheckOutputType(
    DWORD dwOutputStreamIndex,
    const DMO_MEDIA_TYPE *pmt
);

パラメータ

dwOutputStreamIndex
出力ストリームのインデックス。
pmt
メディア タイプを記述する DMO_MEDIA_TYPE 構造体へのポインタ。

戻り値

メディア タイプが有効な場合は、S_OK を返す。それ以外の場合は、DMO_E_INVALIDTYPE を返す。

_DERIVED_::Lock

オブジェクトをロックする。派生クラスは、このメソッドを宣言および実装する必要がある。

構文

void Lock(void);

注意

ATL (Active Template Library) を使って派生クラスを実装すると、ATL によるこのメソッドのデフォルト実装を使用できる。

_DERIVED_::Unlock

オブジェクトのロックを解除する。派生クラスは、このメソッドを宣言および実装する必要がある。

構文

void Unlock(void);

注意

ATL (Active Template Library) を使って派生クラスを実装すると、ATL によるこのメソッドのデフォルト実装を使用できる。

IMediaObject メソッド

IMediaObject のメソッドの大半は、同じメソッドの内部バージョンを呼び出すラッパーである。派生クラスは、Internal- というプレフィックスを持つ内部バージョンを実装する必要がある。

派生クラスで実装すべきメソッドの一覧については、「DMO 基底クラスの使い方」を参照すること。ここでは、いくつかの実装の詳細について説明する。

AllocateStreamingResources

テンプレートは、このメソッドが呼び出されたかどうかを示すプライベートなフラグを保持する。このフラグが既に TRUE になっているときにメソッドが呼び出されると、InternalAllocateStreamingResources メソッドを呼び出さずに S_OK を返す。FreeStreamingResources メソッドはこのフラグを FALSE にリセットする。

DMOLock

このメソッドは IMediaObject::Lock メソッドを実装する。ATL との名前の競合を避けるため、IMediaObjectImpl ではメソッド名が DMOLock に変更されている。

注 :  派生クラスを構築するときには、DMO ヘッダー ファイルをインクルードする前に FIX_LOCK_NAME を定義する。FIX_LOCK_NAME 疑似命令があると、プリプロセッサは、IMediaObject インターフェイスの宣言にある LockDMOLock に置きかえる。ただし、vtable 順は変わらないため、アプリケーションでは Lock という名前を使ってメソッドを起動できる。

#define FIX_LOCK_NAME
#include <dmo.h>

このメソッドは、パラメータが TRUE なら Lock を呼び出し、パラメータが FALSE なら Unlock を呼び出す。派生クラスは、Lock メソッドと Unlock メソッドを実装する必要がある。

Flush

テンプレートは、オブジェクトがフラッシュされたかどうかを示すプライベートなフラグを保持する。Flush メソッドはこのフラグを TRUE にセットし、ProcessInput メソッドは FALSE にリセットする。フラグが既に TRUE になっているときに Flush が呼び出されると、InternalFlush メソッドを呼び出さずに S_OK を返す。

GetInputSizeInfo、GetOutputSizeInfo

メディア タイプが設定されていない必須ストリームがある場合、この 2 つのメソッドは DMO_E_TYPE_NOT_SET を返す。したがって、派生クラスの内部メソッドでは、すべての必須ストリームにメディア タイプが設定されていることを前提に処理できる。

GetInputStatus

このメソッドは、派生クラスが実装する InternalAcceptingInput メソッドを呼び出す。InternalAcceptingInput メソッドは、指定された入力ストリームが入力を受け付ける場合には S_OK を返す。それ以外の場合には、S_FALSE を返す。

メディア タイプが設定されていない必須ストリームがある場合、GetInputStatus メソッドは DMO_E_TYPE_NOT_SET を返す。したがって、InternalAcceptingInput の実装でこの条件を確認する必要はない。

ProcessInput

このメソッドは、InternalProcessInput を呼び出す前に AllocateStreamingResourcesInternalAcceptingInput を呼び出す。したがって、InternalProcessInput の実装では、以下の条件を前提に処理ができる。

ProcessOutput

このメソッドは、InternalProcessOutput を呼び出す前に AllocateStreamingResources を呼び出す。したがって、InternalProcessOutput の実装では、リソースがすべて割り当てられていることを前提に処理できる。

SetInputType

このメソッドは、入力ストリームのメディア タイプをテスト、設定、または消去する。このメソッドは、派生クラスが実装する InternalCheckInputType メソッドを呼び出す。InternalCheckInputType メソッドは、メディア タイプが受け付け可能な場合には S_OK を返し、それ以外の場合にはエラー コードを返す。残りの機能は SetInputType メソッドが実現する。

このメソッドはリソースの割り当てを行わない。DMO がストリーム状態に切り替わると、AllocateStreamingResources メソッドが呼び出される。派生クラスでは、InternalAllocateStreamingResources メソッドを使って、メモリ バッファなどの必要なリソースを割り当てなければならない。

SetOutputType

このメソッドは、出力ストリームのメディア タイプをテスト、設定、または消去する。このメソッドは、派生クラスが実装する InternalCheckOutputType メソッドを呼び出す。InternalCheckOutputType メソッドは、メディア タイプが受け付け可能な場合には S_OK を返し、それ以外の場合にはエラー コードを返す。残りの機能は SetOutputType メソッドが実装する。

このメソッドはリソースの割り当てを行わない。DMO がストリーム状態に切り替わると、AllocateStreamingResources メソッドが呼び出される。派生クラスでは、InternalAllocateStreamingResources メソッドを使ってメモリ バッファなどの必要なリソースを割り当てなければならない。