Microsoft DirectX 8.0 |
IMediaSample2 インターフェイスをサポートするメディア サンプルを定義する。メディア サンプルはメモリ バッファへのポインタと、プロテクト メンバ変数にストアされているいくつかのプロパティを持つ。
宣言 : Amfilter.h
メディア サンプルは CBaseAllocator クラスから派生されるアロケータによって作成される。CMediaSample コンストラクタはバッファ サイズと共にアロケータ バッファへのポインタを受け取る。他のプロパティは通常 IMediaSample インターフェイス メソッドを通してセットされるあるいは受け取られる。
メディア サンプルのライフ サイクルはほとんどの COM オブジェクトのそれとは異なる :
Protected メンバ変数 | |
---|---|
m_dwFlags | サンプル プロパティ フラグ。 |
m_dwTypeSpecificFlags | タイプ固有のフラグ。 |
m_pBuffer | メディア データが入るメモリ バッファへのポインタ。 |
m_lActual | バッファ内の有効なデータの長さ、バイト単位。 |
m_cbBuffer | バッファのサイズ、バイト単位。 |
m_pAllocator | サンプルを作成したアロケータへのポインタ。 |
m_pNext | アロケータのサンプル リストにある次のサンプルへのポインタ。 |
m_Start | サンプル開始タイム。 |
m_End | サンプル終了タイム。 |
m_MediaStart | メディア開始タイム。 |
m_MediaEnd | メディア終了タイム。 |
m_pMediaType | メディア タイプがそのデータ ストリームの前のサンプルから変更されているなら、メディア タイプへのポインタ。 |
m_dwStreamId | ストリーム識別子。 |
Public メンバ変数 | |
m_cRef | 参照カウント。 |
Public メソッド | |
CMediaSample | コンストラクタ メソッド。 |
~CMediaSample | デストラクタ メソッド。 仮想。 |
SetPointer | メモリ バッファへのポインタを設定する。 |
IMediaSample メソッド | |
GetPointer | バッファの読み込み/書き込みポインタを取得する。 |
GetSize | バッファのサイズを取得する。 |
GetTime | サンプルが開始・終了するストリーム タイムを取得する。 |
SetTime | サンプルが開始・終了するストリーム タイムを設定する。 |
IsSyncPoint | サンプルの開始が同期ポイントかどうかを確認する。 |
SetSyncPoint | サンプルの開始が同期ポイントかどうかを設定する。 |
IsPreroll | サンプルがプリロール サンプルかどうかを確認する。 |
SetPreroll | サンプルがプリロール サンプルかどうかを設定する。 |
GetActualDataLength | バッファ内の有効なデータの長さを取得する。 |
SetActualDataLength | バッファ内の有効なデータの長さを設定する。 |
GetMediaType | メディア タイプが前のサンプルと異なるなら、メディア タイプを取得する。 |
SetMediaType | サンプルのメディア タイプを設定する。 |
IsDiscontinuity | サンプルがデータ ストリーム内にブレークを表示する(不連続)かどうかを確認する。 |
SetDiscontinuity | サンプルがデータ ストリーム内でブレークを表示する(不連続)かどうかを設定する。 |
GetMediaTime | サンプルのメディア タイムを取得する。 |
SetMediaTime | サンプルのメディア タイムを設定する。 |
IMediaSample2 メソッド | |
GetProperties | サンプルのプロパティを取得する。 |
SetProperties | サンプルのプロパティを設定する。 |
サンプル プロパティ フラグ。 AM_SAMPLE_PROPERTY_FLAGS 列挙型フラグのビットの組み合わせ。
構文
DWORD m_dwFlags;
タイプ固有のフラグ。このメンバ変数の意味はサンプルのメディア タイプに依存する。
構文
DWORD m_dwTypeSpecificFlags;
メディア データが入るメモリ バッファへのポインタ。
構文
LPBYTE m_pBuffer;
バッファ内の有効なデータの長さ、バイト単位。この値は (m_cbBuffer) バッファのサイズ以下でなければならない。
構文
LONG m_lActual;
バッファのサイズ、バイト単位。
構文
LONG m_cbBuffer;
サンプルを作成したアロケータへのポインタ。
構文
CBaseAllocator *m_pAllocator;
注意
サンプルはアロケータへのポインタを保持するが、参照カウントは保持しない。そのかわり、アロケータはそれ自身の参照カウントを IMemAllocator::GetBuffer メソッドでインクリメントし、それ自身を IMemAllocator::ReleaseBuffer メソッドで解放する。これはアロケータは他のオブジェクトがそのサンプルを使っている限りは有効であることを保証している。
アロケータのサンプル リストにある次のサンプルへのポインタ。
構文
CMediaSample *m_pNext;
サンプル開始タイム。この値は m_dwFlags メンバ変数が AM_SAMPLE_TIMEVALID フラグを含むときのみ有効。
構文
REFERENCE_TIME m_Start;
サンプル終了タイム。 この値は m_dwFlags メンバ変数が AM_SAMPLE_STOPVALID フラグを含むときのみ有効。
構文
REFERENCE_TIME m_End;
メディア開始タイム。
構文
LONGLONG m_MediaStart;
メディア終了タイム。この値はメディア開始タイム (m_MediaStart) からのオフセットとして計算される。
構文
LONG m_MediaEnd;
メディア タイプがそのデータ ストリームの前のサンプルから変更されているなら、メディア タイプへのポインタ。 そうでなければ NULL。
構文
AM_MEDIA_TYPE *m_pMediaType;
ストリーム識別子。詳細については、「AM_SAMPLE2_PROPERTIES」を参照すること。
構文
DWORD m_dwStreamId;
参照カウント。
構文
LONG m_cRef;
コンストラクタ メソッド。
構文
CMediaSample( TCHAR *pName, CBaseAllocator *pAllocator, HRESULT *phr, LPBYTE pBuffer = NULL, LONG length = 0 );
パラメータ
- pName
- メディアサンプルの名前を入れる文字列へのポインタ。
- pAllocator
- このサンプルを作成した CBaseAllocator オブジェクトへのポインタ。
- phr
- メソッドの成功・失敗を示す HRESULT 値を受け取る変数へのポインタ。
- pBuffer
- 呼び出し元によって割り当てられた length サイズのメモリ バッファへのポインタ。
- length
- メモリ バッファの長さ。
注意
基底クラスは phr パラメータに渡された HRESULT 値を修正しない。
デストラクタ メソッド。
構文
~CMediaSample(void);
バッファ内の有効なデータの長さを取得する。IMediaSample::GetActualDataLength メソッドの実装。
構文
LONG GetActualDataLength(void);
戻り値
有効なデータの長さ、バイト単位。
注意
このプロパティを指定する m_lActual メンバ変数。
サンプルのメディア タイムを取得する。 IMediaSample::GetMediaTime メソッドの実装。
構文
HRESULT GetMediaTime( LONGLONG *pStart, LONGLONG *pEnd );
パラメータ
- pStart
- メディア開始タイムを受け取る変数へのポインタ。
- pEnd
- メディア終了タイムを受け取る変数へのポインタ。
戻り値
以下の表に示される HRESULT 値の 1 つを返す。
S_OK 成功。 VFW_E_MEDIA_TIME_NOT_SET このサンプルにはメディア タイムがセットされていない。
注意
m_MediaEnd メンバ変数は m_MediaStart からのオフセットを示すが、pEnd パラメータが受け取る値は m_MediaStart + m_MediaEnd で計算される絶対メディア タイムである。
メディア タイムの詳細については、「DirectShow のタイムとクロック」を参照すること。
メディア タイプが前のサンプルと異なるなら、メディア タイプを取得する。 IMediaSample::GetMediaType メソッドの実装。
構文
HRESULT GetMediaType( AM_MEDIA_TYPE **ppMediaType );
パラメータ
- ppMediaType
- AM_MEDIA_TYPE 構造体へのポインタを受け取る変数のアドレス。メディア タイプが前のサンプルから変更になっていないなら、*ppMediaType には NULL がセットされる。
戻り値
以下の表に示される HRESULT 値の 1 つを返す。
S_FALSE 前のサンプルからメディア タイプは変更されていない。 S_OK 成功。 E_OUTOFMEMORY メモリ不足。
注意
メディア タイプの作業が終了したら、DeleteMediaType ユーティリティ関数を呼び出してメモリ ブロックをフリーにすること。
m_pMediaType メンバ変数はメディア タイプを示す。m_dwFlags メンバ変数はメディア タイプが変更されたかどうかを示す。
バッファの読み込み/書き込みポインタを取得する。 IMediaSample::GetPointer メソッドの実装。
構文
HRESULT GetPointer( BYTE **ppBuffer );
パラメータ
- ppBuffer
- バッファへのポインタを受け取る変数へのポインタ。
戻り値
S_OK を返す。
サンプルのプロパティを取得する。IMediaSample2::GetProperties メソッドの実装。
構文
HRESULT GetProperties( DWORD cbProperties, BYTE *pbProperties );
パラメータ
- cbProperties
- 受け取るプロパティ データの長さ、バイト単位。
- pbProperties
- cbProperties サイズのバッファへのポインタ。
戻り値
以下の表に示される HRESULT 値の 1 つを返す。
S_OK 成功。 E_POINTER NULL ポインタ引数。
バッファのサイズを取得する。IMediaSample::GetSize メソッドの実装。
構文
LONG GetSize(void);
戻り値
バッファのサイズを返す、バイト単位。
サンプルが開始・終了するストリーム タイムを取得する。IMediaSample::GetTime メソッドの実装。
構文
HRESULT GetTime( REFERENCE_TIME *pTimeStart, REFERENCE_TIME *pTimeEnd );
パラメータ
- pTimeStart
- 開始ストリームタイムを受け取る変数へのポインタ、100 ナノ秒単位。
- pTimeEnd
- 終了ストリームタイムを受け取る変数へのポインタ、100 ナノ秒単位。サンプルが終了タイムを持っていないなら、この値には開始タイム プラス 1 がセットされる。
戻り値
以下の表に示される HRESULT 値の 1 つを返す。
S_OK 成功。 VFW_S_NO_STOP_TIME サンプルは有効な開始タイムを持っているが、終了タイムを持っていない。 VFW_E_SAMPLE_TIME_NOT_SET サンプルは有効なタイム スタンプを持っていない。
注意
m_Start と m_End メンバ変数はタイム スタンプを示す。m_dwFlags メンバ変数はタイム スタンプが有効かどうかを示す。
タイム スタンプの詳細については、「DirectShow のタイムとクロック」を参照すること。
サンプルがデータ ストリーム内にブレークを表示するどうかを確認する。IMediaSample::IsDiscontinuity の実装。
構文
HRESULT IsDiscontinuity(void);
戻り値
サンプルのデータ ストリーム内にブレークがあれば S_OK を返す、そうでなければ S_FALSE を返す。
注意
m_dwFlags メンバ変数はこのプロパティを示す。
サンプルがプリロール サンプルかどうかを確認する。IMediaSample::IsPreroll メソッドの実装。
構文
HRESULT IsPreroll(void);
戻り値
サンプルがプリロール サンプルなら S_OK を返し、それ以外なら S_FALSE を返す。
注意
m_dwFlags メンバ変数はこのプロパティを示す。
サンプルの開始が同期ポイントかどうか確認する。IMediaSample::IsSyncPoint メソッドの実装。
構文
HRESULT IsSyncPoint(void);
戻り値
サンプルが同期ポイントなら S_OK を返す、それ以外なら S_FALSE を返す。
注意
m_dwFlags メンバ変数はこのプロパティを示す。
バッファ内の有効なデータの長さを設定する。IMediaSample::SetActualDataLength メソッドの実装。
構文
HRESULT SetActualDataLength( long lLen );
パラメータ
- lLen
- 有効なデータの長さ、バイト単位。
戻り値
以下の表に示される HRESULT 値の 1 つを返す。
S_OK 成功。 VFW_E_BUFFER_OVERFLOW lLen は割り当てられたバッファサイズより大きい。
注意
このメソッドは m_lActual メンバ変数を設定する。
サンプルがデータ ストリーム内でブレークを表示するかどうかを設定する。IMediaSample::SetDiscontinuity メソッドの実装。
構文
HRESULT SetDiscontinuity( BOOL bDiscont );
パラメータ
- bDiscont
- このサンプルが不連続かどうかを示すブール値。TURE ならメディア サンプルは前のサンプルと不連続。
戻り値
S_OK を返す。
注意
このメソッドは不連続プロパティを示す m_dwFlags メンバ変数をアップデートする。
サンプルのメディア タイムを設定する。IMediaSample::SetMediaTime メソッドの実装。
構文
HRESULT SetMediaTime( LONGLONG *pStart, LONGLONG *pEnd );
パラメータ
- pStart
- メディア開始タイムへのポインタ、あるいは NULL 。
- pEnd
- メディア終了タイムへのポインタ、あるいは NULL 。
戻り値
S_OK を返す。
注意
メディア終了タイムはメディア開始タイムより大きくなければならない。不適切なメディアタイムには NULL を使うこと。
pEnd パラメータは絶対メディア タイムを示すが、m_MediaEnd メンバ変数は pStart からのオフセットとして計算される。すなわち、m_MediaEnd = *pTimeEnd *pTimeStart 。
メディア タイムの詳細については、「DirectShow のタイムとクロック」を参照すること。
サンプルのメディア タイプを設定する。 IMediaSample::SetMediaType メソッドの実装。
構文
HRESULT SetMediaType( AM_MEDIA_TYPE *pMediaType );
パラメータ
- pMediaType
- AM_MEDIA_TYPE 構造体へのポインタ。
戻り値
以下の表に示される HRESULT 値の 1 つを返す。
S_OK 成功 E_OUTOFMEMORY メモリ不足
注意
このメソッドはメディア タイプを示す m_pMediaType メディア変数と、メディア タイプが変更されたかどうかを示す m_dwFlags メンバ変数設定する。
このメソッドは AM_MEDIA_TYPE 構造体のコピーを作る。
メモリ バッファへのポインタを設定する。
構文
HRESULT SetPointer( BYTE *ptr, LONG cBytes );
パラメータ
- ptr
- 呼び出し元が割り当てた サイズ cBytes のメモリ バッファへのポインタ。
- cBytes
- バッファのサイズ、バイト単位。
戻り値
S_OK を返す。
注意
このメソッドによってアロケータはサンプルに新しいポインタをセットできる。
このメソッドは IMediaSample インターフェイスを通しては使えない。サンプルを作成したオブジェクトは (CMediaSample を通して) このメソッドにアクセスできるが、他のオブジェクトはアクセスできない。
サンプルがプリロール サンプルかどうかを設定する。プリロール サンプルは表示されるべきではない。IMediaSample::SetPreroll メソッドの実装。
構文
HRESULT SetPreroll( BOOL bIsPreroll );
パラメータ
- bIsPreroll
- これがプリロール サンプルかどうかを示すブール値。TRUE ならこれはプリロール サンプル。
戻り値
S_OK を返す。
注意
このメソッドはプリロール プロパティを示す m_dwFlags メンバ変数をアップデートする。
サンプルのプロパティを設定する。このメソッドは IMediaSample2::SetProperties を実装する。
構文
HRESULT SetProperties( DWORD cbProperties, const BYTE *pbProperties );
パラメータ
- cbProperties
- セットすべきプロパティ データの長さ、バイト単位。
- pbProperties
- サイズ cbProperties のバッファへのポインタ。
戻り値
以下の表に示される HRESULT 値の 1 つを返す。
S_OK 成功 E_INVALIDARG 不適切な引数 E_OUTOFMEMORY メモリ不足 E_POINTER NULL ポインタ引数
サンプルの開始が同期ポイントかどうかを設定する。このメソッドは IMediaSample::SetSyncPoint メソッドを実装する。
構文
HRESULT SetSyncPoint( BOOL bIsSyncPoint );
パラメータ
- bIsSyncPoint
- これが同期ポイントかどうかを示すブール値。TRUE ならこれは同期ポイント。
戻り値
S_OK を返す。
注意
このメソッドは同期ポイント プロパティを示す m_dwFlags メンバ変数をアップデートする。
サンプルが開始・終了するストリームタイムを設定する。 IMediaSample::SetTime メソッドの実装。
構文
HRESULT SetTime( REFERENCE_TIME *pTimeStart, REFERENCE_TIME *pTimeEnd );
パラメータ
- pTimeStart
- サンプルが開始するストリーム タイムへのポインタ、100 ナノ秒単位。
- pTimeEnd
- サンプルが開始するストリーム タイムへのポインタ、100 ナノ秒単位、あるいは NULL 。
戻り値
S_OK を返す。
注意
このメソッドはタイム スタンプを示す m_Start と m_End メンバ変数を設定する。それはまたタイム スタンプが有効かどうかを示す m_dwFlags メンバ変数をもアップデートする。
タイム スタンプの詳細については、「DirectShow のタイムとクロック」を参照すること。