Microsoft DirectX 8.0 |
メディア サンプルのプロパティをセットあるいは取得する。メディア サンプルは COM オブジェクトでありメディアデータのブロックが格納される。メディア サンプルはフィルタ間の共有メモリ バッファの使用をサポートする。
このインターフェイスは、メディア サンプルのプロパティを設定および取得するメソッドを提供する。メディア サンプルとは、メディア データのブロックが格納された COM オブジェクトである。メディア サンプルは、フィルタ間での共有メモリ バッファの使用をサポートする。
IMediaSample2 インターフェイスは、このインターフェイスを継承する。
通常、このインターフェイスのメソッドを、アプリケーションから呼び出すことはない。フィルタでは、このインターフェイスを使用して、サンプルのプロパティを設定し、ダウンストリーム フィルタにデータを渡す。そのダウンストリーム フィルタでは、このインターフェイスを使用して、プロパティを取得し、データを読み取る。フィルタは、データを直接修正するか、またはサンプルをコピーしてから変更し、ダウンストリームへ渡す。
vtable 順のメソッド
IUnknown メソッド 説明 QueryInterface サポートされているインターフェイスへのポインタを取得する。 AddRef 参照カウントをインクリメントする。 Release 参照カウントをデクリメントする。 IMediaSample メソッド 説明 GetPointer このバッファのメモリへの読み取り/書き込みポインタを取得する。 GetSize バッファのサイズを取得する。 GetTime このサンプルが開始および終了すべきストリーム タイムを取得する。 SetTime このサンプルが開始および終了すべきストリーム タイムを設定する。 IsSyncPoint このサンプルの始まりが同期ポイントかどうかを判断する。 SetSyncPoint このサンプルの始まりが同期ポイントかどうかを設定する。 IsPreroll このサンプルがプリロール サンプルかどうかを確認する。 SetPreroll このサンプルがプリロール サンプルかどうかを指定する。 GetActualDataLength バッファ内の有効なデータの長さを取得する。 SetActualDataLength バッファ内の有効なデータの長さを設定する。 GetMediaType メディア タイプが以前のサンプルと異なるなら、メディア タイプを取得する。 SetMediaType サンプルのメディア タイプを設定する。 IsDiscontinuity このサンプルがデータ ストリーム内でブレークを表示するかどうかを確認する。 SetDiscontinuity このサンプルがデータ ストリーム内でブレークを表示するかどうかを指定する。 GetMediaTime このサンプルのメディア タイムを取得する。 SetMediaTime このサンプルのメディア タイムを設定する。
バッファ内の有効なデータの長さを取得する。
構文
LONG GetActualDataLength(void);
戻り値
有効なデータの長さを返す、バイト単位。
このサンプルのメディア タイムを取得する。
構文
HRESULT GetMediaTime( LONGLONG *pTimeStart, LONGLONG *pTimeEnd );
パラメータ
- pTimeStart
- [out] メディア開始タイムを受け取る変数へのポインタ。
- pTimeEnd
- [out] メディア終了タイムを受け取る変数へのポインタ。
戻り値
HRESULT 値を返す。 以下の表に示されるいずれかの値。
S_OK 成功。 VFW_E_MEDIA_TIME_NOT_SET このサンプルにはメディア タイムがセットされていない。
注意
メディア タイムの詳細については、「DirectShow のタイムとクロック」を参照すること。
メディア タイプが以前のサンプルと異なるなら、メディア タイプを取得する。
構文
HRESULT GetMediaType( AM_MEDIA_TYPE **ppMediaType );
パラメータ
- ppMediaType
- AM_MEDIA_TYPE 構造体へのポインタを受け取る変数のアドレス。メディア タイプが以前のサンプルと異ならないなら、*ppMediaType には NULL がセットされる。
戻り値
HRESULT 値を返す。以下の表に示されるいずれかの値。
S_FALSE メディア タイプは以前のサンプルから変更されていない。 S_OK 成功。 E_OUTOFMEMORY メモリ不足。
注意
このメソッドによってフィルタはパレット変更のような限定したメディア タイプの変更を行うことができる。メディア タイプの大きな変更をするなら、ピンは再接続して、メディア タイプを再ネゴシエーションする必要がある。
メディア タイプの扱いが終了したら、DeleteMediaType ユーティリティ関数を呼び出してメモリ ブロックを解放すること。
このバッファのメモリへの読み取り/書き込みポインタを取得する。
構文
HRESULT GetPointer( BYTE **ppBuffer );
パラメータ
- ppBuffer
- [out] バッファへのポインタのアドレス。
戻り値
成功なら S_OK を返す、あるいはエラーの原因を示す HRESULT 値を返す。
バッファのサイズを取得する。
構文
ling GetSize(void);
戻り値
バッファのサイズを返す、バイト単位。
このサンプルが開始および終了すべきストリーム タイムを取得する。
構文
HRESULT GetTime( REFERENCE_TIME *pTimeStart, REFERENCE_TIME *pTimeEnd );
パラメータ
- pTimeStart
- [out] 開始ストリーム タイムを受け取る変数へのポインタ。
- pTimeEnd
- [out] 終了ストリーム タイムを受け取る変数へのポインタ。サンプルに終了タイムがない場合、この値には開始タイムに 1 を加えた値が設定される。
戻り値
HRESULT 値を返す。以下の表に示されるいずれかの値。
S_OK 成功。サンプルは有効な開始タイムと終了タイムを持つ。 VFW_S_NO_STOP_TIME サンプルは有効な開始タイムを持つが、終了タイムを持たない。 VFW_E_SAMPLE_TIME_NOT_SET サンプルはタイム スタンプを持たない。
注意
ストリーム タイムの詳細については、「DirectShow のタイムとクロック」を参照すること。
このサンプルがデータ ストリーム内でブレークを表示するかどうかを確認する。
構文
HRESULT IsDiscontinuity(void);
戻り値
サンプルがデータストリーム内にブレークを持っているなら S_OK を返す。そうでなければ S_FALSE を返す。
注意
フィルタがストリーム内の違った場所をシークするとき、あるいはフィルタが品質コントロールのためにサンプルをドロップするとき、不連続が起きる。
このサンプルがプリロール サンプルかどうかを確認する。
構文
HRESULT IsPreroll(void);
戻り値
サンプルがプリロール サンプルの場合は S_OK を返し、そうでなければ S_FALSE を返す。
注意
プリロール サンプルは処理されるが表示はされない。それはメディア ストリーム内で表示するサンプルの前にある。
このサンプルの始まりが同期ポイントかどうかを判断する。
構文
HRESULT IsSyncPoint(void);
戻り値
サンプルが同期ポイントの場合は S_OK を返す。そうでなければ S_FALSE を返す。
注意
フィルタは同期ポイントでストリームを開始できる。いくつかの圧縮タイプではストリーミングはストリーム内のあるポインタからしか開始できない、たとえばキー フレームから。AM_MEDIA_TYPE 構造体の bTemporalCompression メンバが FALSE なら、すべてのサンプルが同期ポイントである。
バッファ内の有効なデータの長さを設定する。
構文
HRESULT SetActualDataLength( long lLen );
パラメータ
- lLen
- メディア サンプルのデータの長さ (バイト単位)。
戻り値
HRESULT 値を返す。以下の表に示されるいずれかの値。
S_OK 成功。 VFW_E_BUFFER_OVERFLOW. lLen で指定された長さがバッファサイズより長い。
このサンプルがデータ ストリーム内でブレークを表示するかどうかを指定する。
構文
HRESULT SetDiscontinuity( BOOL bIsDiscontinuity );
パラメータ
- bIsDiscontinuity
- [in] このサンプルが不連続かどうかを示すブール値。TRUE なら、メディア サンプルは以前のサンプルと不連続である。
戻り値
S_OK を返す、あるいはエラーの原因を示す HRESULT を返す。
参照
このサンプルのメディア タイムを設定する。
構文
HRESULT SetMediaTime( LONGLONG *pTimeStart, LONGLONG *pTimeEnd );
パラメータ
- pTimeStart
- [in] 開始メディア タイムへのポインタ。
- pTimeEnd
- [in] 終了メディア タイムへのポインタ。
戻り値
S_OK を返す、あるいはエラーの原因を示す HRESULT を返す。
注意
メディア タイムを無効にするには、pTimeStart と pTimeEnd を NULL に設定する。これによって IMediaSample::GetMediaTime メソッドは VFW_E_MEDIA_TIME_NOT_SET を返す。
メディア タイムの詳細については、「DirectShow のタイムとクロック」を参照すること。
サンプルのメディア タイプを設定する
構文
HRESULT SetMediaType( AM_MEDIA_TYPE *pMediaType );
パラメータ
- pMediaType
- メディア タイプを指定する AM_MEDIA_TYPE 構造体へのポインタ。
戻り値
HRESULT 値を返す。 以下の表に示されるいずれかの値。
S_OK 成功。 E_OUTOFMEMORY メモリ不足。
注意
デフォルトでは、すべてのサンプルは前のサンプルと同じメディア タイプを持つ (ピン接続がオリジナルのメディア タイプを決定する)。このメソッドを呼び出すことによってフィルタはパレット変更のような限定したメディア タイプの変更を行うことができる。メディア タイプの大きな変更をするなら、ピンは再接続して、メディア タイプを再ネゴシエーションする必要がある。
このサンプルがプリロール サンプルかどうかを指定する。
構文
HRESULT SetPreroll( BOOL bIsPreroll );
パラメータ
- bIsPreroll
- これがプリロール サンプルかどうかを示すブール値。TRUE ならこれはプリロール サンプル。
戻り値
S_OK を返す、あるいはエラーの原因を示す HRESULT 値を返す。
参照
このサンプルの始まりが同期ポイントかどうかを設定する。
構文
HRESULT SetSyncPoint( BOOL bIsSyncPoint );
パラメータ
- bIsSyncPoint
- [in] これが同期ポイントかどうかを示すブール値。TRUE ならこれは同期ポイント。
戻り値
S_OK を返す、あるいはエラーの原因を示す HRESULT 値を返す。
参照
このサンプルが開始および終了すべきストリーム タイムを設定する。
構文
HRESULT SetTime( REFERENCE_TIME *pTimeStart, REFERENCE_TIME *pTimeEnd );
パラメータ
- pTimeStart
- [in] サンプルの開始ストリーム タイムへのポインタ、100 ナノ秒単位。
- pTimeEnd
- [in] サンプルの終了ストリーム タイムへのポインタ、100 ナノ秒単位。
戻り値
S_OK を返す、あるいはエラーの原因を示す HRESULT 値を返す。
注意
メディア タイムを無効にするには、pTimeStart と pTimeEnd を NULL に設定する。これによって IMediaSample::GetTime メソッドは VFW_E_SAMPLE_TIME_NOT_SET を返す。
ストリーム タイムの詳細については、「DirectShow のタイムとクロック」を参照すること。