Microsoft DirectX 8.0

IMediaSample インターフェイス

メディア サンプルのプロパティをセットあるいは取得する。メディア サンプルは 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 このサンプルのメディア タイムを設定する。

IMediaSample::GetActualDataLength

IMediaSample インターフェイス

バッファ内の有効なデータの長さを取得する。

構文

LONG GetActualDataLength(void);

戻り値

有効なデータの長さを返す、バイト単位。

IMediaSample::GetMediaTime

IMediaSample インターフェイス

このサンプルのメディア タイムを取得する。

構文

HRESULT GetMediaTime( LONGLONG *pTimeStart, LONGLONG *pTimeEnd );

パラメータ

pTimeStart
[out] メディア開始タイムを受け取る変数へのポインタ。
pTimeEnd
[out] メディア終了タイムを受け取る変数へのポインタ。

戻り値

HRESULT 値を返す。 以下の表に示されるいずれかの値。

S_OK成功。
VFW_E_MEDIA_TIME_NOT_SETこのサンプルにはメディア タイムがセットされていない。

注意

メディア タイムの詳細については、「DirectShow のタイムとクロック」を参照すること。

IMediaSample::GetMediaType

IMediaSample インターフェイス

メディア タイプが以前のサンプルと異なるなら、メディア タイプを取得する。

構文

HRESULT GetMediaType(
    AM_MEDIA_TYPE **ppMediaType
);

パラメータ

ppMediaType
AM_MEDIA_TYPE 構造体へのポインタを受け取る変数のアドレス。メディア タイプが以前のサンプルと異ならないなら、*ppMediaType には NULL がセットされる。

戻り値

HRESULT 値を返す。以下の表に示されるいずれかの値。

S_FALSEメディア タイプは以前のサンプルから変更されていない。
S_OK成功。
E_OUTOFMEMORYメモリ不足。

注意

このメソッドによってフィルタはパレット変更のような限定したメディア タイプの変更を行うことができる。メディア タイプの大きな変更をするなら、ピンは再接続して、メディア タイプを再ネゴシエーションする必要がある。

メディア タイプの扱いが終了したら、DeleteMediaType ユーティリティ関数を呼び出してメモリ ブロックを解放すること。

IMediaSample::GetPointer

IMediaSample インターフェイス

このバッファのメモリへの読み取り/書き込みポインタを取得する。

構文

HRESULT GetPointer(
    BYTE **ppBuffer
);

パラメータ

ppBuffer
[out] バッファへのポインタのアドレス。

戻り値

成功なら S_OK を返す、あるいはエラーの原因を示す HRESULT 値を返す。

IMediaSample::GetSize

IMediaSample インターフェイス

バッファのサイズを取得する。

構文

ling GetSize(void);

戻り値

バッファのサイズを返す、バイト単位。

IMediaSample::GetTime

IMediaSample インターフェイス

このサンプルが開始および終了すべきストリーム タイムを取得する。

構文

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 のタイムとクロック」を参照すること。

IMediaSample::IsDiscontinuity

IMediaSample インターフェイス

このサンプルがデータ ストリーム内でブレークを表示するかどうかを確認する。

構文

HRESULT IsDiscontinuity(void);

戻り値

サンプルがデータストリーム内にブレークを持っているなら S_OK を返す。そうでなければ S_FALSE を返す。

注意

フィルタがストリーム内の違った場所をシークするとき、あるいはフィルタが品質コントロールのためにサンプルをドロップするとき、不連続が起きる。

IMediaSample::IsPreroll

IMediaSample インターフェイス

このサンプルがプリロール サンプルかどうかを確認する。

構文

HRESULT IsPreroll(void);

戻り値

サンプルがプリロール サンプルの場合は S_OK を返し、そうでなければ S_FALSE を返す。

注意

プリロール サンプルは処理されるが表示はされない。それはメディア ストリーム内で表示するサンプルの前にある。

IMediaSample::IsSyncPoint

IMediaSample インターフェイス

このサンプルの始まりが同期ポイントかどうかを判断する。

構文

HRESULT IsSyncPoint(void);

戻り値

サンプルが同期ポイントの場合は S_OK を返す。そうでなければ S_FALSE を返す。

注意

フィルタは同期ポイントでストリームを開始できる。いくつかの圧縮タイプではストリーミングはストリーム内のあるポインタからしか開始できない、たとえばキー フレームから。AM_MEDIA_TYPE 構造体の bTemporalCompression メンバが FALSE なら、すべてのサンプルが同期ポイントである。

IMediaSample::SetActualDataLength

IMediaSample インターフェイス

バッファ内の有効なデータの長さを設定する。

構文

HRESULT SetActualDataLength(
    long lLen
);

パラメータ

lLen
メディア サンプルのデータの長さ (バイト単位)。

戻り値

HRESULT 値を返す。以下の表に示されるいずれかの値。

S_OK成功。
VFW_E_BUFFER_OVERFLOW.lLen で指定された長さがバッファサイズより長い。

IMediaSample::SetDiscontinuity

IMediaSample インターフェイス

このサンプルがデータ ストリーム内でブレークを表示するかどうかを指定する。

構文

HRESULT SetDiscontinuity(
    BOOL bIsDiscontinuity
);

パラメータ

bIsDiscontinuity
[in] このサンプルが不連続かどうかを示すブール値。TRUE なら、メディア サンプルは以前のサンプルと不連続である。

戻り値

S_OK を返す、あるいはエラーの原因を示す HRESULT を返す。

参照

IMediaSample::IsDiscontinuity

IMediaSample::SetMediaTime

IMediaSample インターフェイス

このサンプルのメディア タイムを設定する。

構文

HRESULT SetMediaTime( LONGLONG *pTimeStart, LONGLONG *pTimeEnd );

パラメータ

pTimeStart
[in] 開始メディア タイムへのポインタ。
pTimeEnd
[in] 終了メディア タイムへのポインタ。

戻り値

S_OK を返す、あるいはエラーの原因を示す HRESULT を返す。

注意

メディア タイムを無効にするには、pTimeStartpTimeEnd を NULL に設定する。これによって IMediaSample::GetMediaTime メソッドは VFW_E_MEDIA_TIME_NOT_SET を返す。

メディア タイムの詳細については、「DirectShow のタイムとクロック」を参照すること。

IMediaSample::SetMediaType

IMediaSample インターフェイス

サンプルのメディア タイプを設定する

構文

HRESULT SetMediaType(
    AM_MEDIA_TYPE *pMediaType
);

パラメータ

pMediaType
メディア タイプを指定する AM_MEDIA_TYPE 構造体へのポインタ。

戻り値

HRESULT 値を返す。 以下の表に示されるいずれかの値。

S_OK成功。
E_OUTOFMEMORYメモリ不足。

注意

デフォルトでは、すべてのサンプルは前のサンプルと同じメディア タイプを持つ (ピン接続がオリジナルのメディア タイプを決定する)。このメソッドを呼び出すことによってフィルタはパレット変更のような限定したメディア タイプの変更を行うことができる。メディア タイプの大きな変更をするなら、ピンは再接続して、メディア タイプを再ネゴシエーションする必要がある。

IMediaSample::SetPreroll

IMediaSample インターフェイス

このサンプルがプリロール サンプルかどうかを指定する。

構文

HRESULT SetPreroll(
    BOOL bIsPreroll
);

パラメータ

bIsPreroll
これがプリロール サンプルかどうかを示すブール値。TRUE ならこれはプリロール サンプル。

戻り値

S_OK を返す、あるいはエラーの原因を示す HRESULT 値を返す。

参照

IMediaSample::IsPreroll

IMediaSample::SetSyncPoint

IMediaSample インターフェイス

このサンプルの始まりが同期ポイントかどうかを設定する。

構文

HRESULT SetSyncPoint(
    BOOL bIsSyncPoint
);

パラメータ

bIsSyncPoint
[in] これが同期ポイントかどうかを示すブール値。TRUE ならこれは同期ポイント。

戻り値

S_OK を返す、あるいはエラーの原因を示す HRESULT 値を返す。

参照

IMediaSample::IsSyncPoint

IMediaSample::SetTime

IMediaSample インターフェイス

このサンプルが開始および終了すべきストリーム タイムを設定する。

構文

HRESULT SetTime(
    REFERENCE_TIME *pTimeStart,
    REFERENCE_TIME *pTimeEnd
);

パラメータ

pTimeStart
[in] サンプルの開始ストリーム タイムへのポインタ、100 ナノ秒単位。
pTimeEnd
[in] サンプルの終了ストリーム タイムへのポインタ、100 ナノ秒単位。

戻り値

S_OK を返す、あるいはエラーの原因を示す HRESULT 値を返す。

注意

メディア タイムを無効にするには、pTimeStartpTimeEnd を NULL に設定する。これによって IMediaSample::GetTime メソッドは VFW_E_SAMPLE_TIME_NOT_SET を返す。

ストリーム タイムの詳細については、「DirectShow のタイムとクロック」を参照すること。