Microsoft DirectX 8.0

CMediaSample クラス

CMediaSample クラスの階層

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サンプルのプロパティを設定する。

CMediaSample.m_dwFlags

CMediaSample クラス

サンプル プロパティ フラグ。 AM_SAMPLE_PROPERTY_FLAGS 列挙型フラグのビットの組み合わせ。

構文

DWORD m_dwFlags;

CMediaSample.m_dwTypeSpecificFlags

CMediaSample クラス

タイプ固有のフラグ。このメンバ変数の意味はサンプルのメディア タイプに依存する。

構文

DWORD m_dwTypeSpecificFlags;

CMediaSample.m_pBuffer

CMediaSample クラス

メディア データが入るメモリ バッファへのポインタ。

構文

LPBYTE m_pBuffer;

CMediaSample.m_lActual

CMediaSample クラス

バッファ内の有効なデータの長さ、バイト単位。この値は (m_cbBuffer) バッファのサイズ以下でなければならない。

構文

LONG m_lActual;

CMediaSample.m_cbBuffer

CMediaSample クラス

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

構文

LONG m_cbBuffer;

CMediaSample.m_pAllocator

CMediaSample クラス

サンプルを作成したアロケータへのポインタ。

構文

CBaseAllocator *m_pAllocator;

注意

サンプルはアロケータへのポインタを保持するが、参照カウントは保持しない。そのかわり、アロケータはそれ自身の参照カウントを IMemAllocator::GetBuffer メソッドでインクリメントし、それ自身を IMemAllocator::ReleaseBuffer メソッドで解放する。これはアロケータは他のオブジェクトがそのサンプルを使っている限りは有効であることを保証している。

CMediaSample.m_pNext

CMediaSample クラス

アロケータのサンプル リストにある次のサンプルへのポインタ。

構文

CMediaSample *m_pNext;

CMediaSample.m_Start

CMediaSample クラス

サンプル開始タイム。この値は m_dwFlags メンバ変数が AM_SAMPLE_TIMEVALID フラグを含むときのみ有効。

構文

REFERENCE_TIME m_Start;

CMediaSample.m_End

CMediaSample クラス

サンプル終了タイム。 この値は m_dwFlags メンバ変数が AM_SAMPLE_STOPVALID フラグを含むときのみ有効。

構文

REFERENCE_TIME m_End;

CMediaSample.m_MediaStart

CMediaSample クラス

メディア開始タイム。

構文

LONGLONG m_MediaStart;

CMediaSample.m_MediaEnd

CMediaSample クラス

メディア終了タイム。この値はメディア開始タイム (m_MediaStart) からのオフセットとして計算される。

構文

LONG m_MediaEnd;

CMediaSample.m_pMediaType

CMediaSample クラス

メディア タイプがそのデータ ストリームの前のサンプルから変更されているなら、メディア タイプへのポインタ。 そうでなければ NULL。

構文

AM_MEDIA_TYPE *m_pMediaType;

CMediaSample.m_dwStreamId

CMediaSample クラス

ストリーム識別子。詳細については、「AM_SAMPLE2_PROPERTIES」を参照すること。

構文

DWORD m_dwStreamId;

CMediaSample.m_cRef

CMediaSample クラス

参照カウント。

構文

LONG m_cRef;

CMediaSample::CMediaSample

CMediaSample クラス

コンストラクタ メソッド。

構文

CMediaSample(
    TCHAR *pName,
    CBaseAllocator *pAllocator,
    HRESULT *phr,
    LPBYTE pBuffer = NULL,
    LONG length = 0
); 

パラメータ

pName
メディアサンプルの名前を入れる文字列へのポインタ。
pAllocator
このサンプルを作成した CBaseAllocator オブジェクトへのポインタ。
phr
メソッドの成功・失敗を示す HRESULT 値を受け取る変数へのポインタ。
pBuffer
呼び出し元によって割り当てられた length サイズのメモリ バッファへのポインタ。
length
メモリ バッファの長さ。

注意

基底クラスは phr パラメータに渡された HRESULT 値を修正しない。

CMediaSample::~CMediaSample

CMediaSample クラス

デストラクタ メソッド。

構文

~CMediaSample(void);

CMediaSample::GetActualDataLength

CMediaSample クラス

バッファ内の有効なデータの長さを取得する。IMediaSample::GetActualDataLength メソッドの実装。

構文

LONG GetActualDataLength(void);

戻り値

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

注意

このプロパティを指定する m_lActual メンバ変数。

CMediaSample::GetMediaTime

CMediaSample クラス

サンプルのメディア タイムを取得する。 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 のタイムとクロック」を参照すること。

CMediaSample::GetMediaType

CMediaSample クラス

メディア タイプが前のサンプルと異なるなら、メディア タイプを取得する。 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 メンバ変数はメディア タイプが変更されたかどうかを示す。

CMediaSample::GetPointer

CMediaSample クラス

バッファの読み込み/書き込みポインタを取得する。 IMediaSample::GetPointer メソッドの実装。

構文

HRESULT GetPointer(
    BYTE **ppBuffer
);

パラメータ

ppBuffer
バッファへのポインタを受け取る変数へのポインタ。

戻り値

S_OK を返す。

CMediaSample::GetProperties

CMediaSample クラス

サンプルのプロパティを取得する。IMediaSample2::GetProperties メソッドの実装。

構文

HRESULT GetProperties(
    DWORD cbProperties,
    BYTE *pbProperties
);

パラメータ

cbProperties
受け取るプロパティ データの長さ、バイト単位。
pbProperties
cbProperties サイズのバッファへのポインタ。

戻り値

以下の表に示される HRESULT 値の 1 つを返す。

S_OK成功。
E_POINTERNULL ポインタ引数。

CMediaSample::GetSize

CMediaSample クラス

バッファのサイズを取得する。IMediaSample::GetSize メソッドの実装。

構文

LONG GetSize(void);

戻り値

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

CMediaSample::GetTime

CMediaSample クラス

サンプルが開始・終了するストリーム タイムを取得する。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_Startm_End メンバ変数はタイム スタンプを示す。m_dwFlags メンバ変数はタイム スタンプが有効かどうかを示す。

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

CMediaSample::IsDiscontinuity

CMediaSample クラス

サンプルがデータ ストリーム内にブレークを表示するどうかを確認する。IMediaSample::IsDiscontinuity の実装。

構文

HRESULT IsDiscontinuity(void);

戻り値

サンプルのデータ ストリーム内にブレークがあれば S_OK を返す、そうでなければ S_FALSE を返す。

注意

m_dwFlags メンバ変数はこのプロパティを示す。

CMediaSample::IsPreroll

CMediaSample クラス

サンプルがプリロール サンプルかどうかを確認する。IMediaSample::IsPreroll メソッドの実装。

構文

HRESULT IsPreroll(void);

戻り値

サンプルがプリロール サンプルなら S_OK を返し、それ以外なら S_FALSE を返す。

注意

m_dwFlags メンバ変数はこのプロパティを示す。

CMediaSample::IsSyncPoint

CMediaSample クラス

サンプルの開始が同期ポイントかどうか確認する。IMediaSample::IsSyncPoint メソッドの実装。

構文

HRESULT IsSyncPoint(void);

戻り値

サンプルが同期ポイントなら S_OK を返す、それ以外なら S_FALSE を返す。

注意

m_dwFlags メンバ変数はこのプロパティを示す。

CMediaSample::SetActualDataLength

CMediaSample クラス

バッファ内の有効なデータの長さを設定する。IMediaSample::SetActualDataLength メソッドの実装。

構文

HRESULT SetActualDataLength(
    long lLen
);

パラメータ

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

戻り値

以下の表に示される HRESULT 値の 1 つを返す。

S_OK成功。
VFW_E_BUFFER_OVERFLOWlLen は割り当てられたバッファサイズより大きい。

注意

このメソッドは m_lActual メンバ変数を設定する。

CMediaSample::SetDiscontinuity

CMediaSample クラス

サンプルがデータ ストリーム内でブレークを表示するかどうかを設定する。IMediaSample::SetDiscontinuity メソッドの実装。

構文

HRESULT SetDiscontinuity(
    BOOL bDiscont
);

パラメータ

bDiscont
このサンプルが不連続かどうかを示すブール値。TURE ならメディア サンプルは前のサンプルと不連続。

戻り値

S_OK を返す。

注意

このメソッドは不連続プロパティを示す m_dwFlags メンバ変数をアップデートする。

CMediaSample::SetMediaTime

CMediaSample クラス

サンプルのメディア タイムを設定する。IMediaSample::SetMediaTime メソッドの実装。

構文

HRESULT SetMediaTime(
    LONGLONG *pStart,
    LONGLONG *pEnd
);

パラメータ

pStart
メディア開始タイムへのポインタ、あるいは NULL 。
pEnd
メディア終了タイムへのポインタ、あるいは NULL 。

戻り値

S_OK を返す。

注意

メディア終了タイムはメディア開始タイムより大きくなければならない。不適切なメディアタイムには NULL を使うこと。

pEnd パラメータは絶対メディア タイムを示すが、m_MediaEnd メンバ変数は pStart からのオフセットとして計算される。すなわち、m_MediaEnd = *pTimeEnd*pTimeStart

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

CMediaSample::SetMediaType

CMediaSample クラス

サンプルのメディア タイプを設定する。 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 構造体のコピーを作る。

CMediaSample::SetPointer

CMediaSample クラス

メモリ バッファへのポインタを設定する。

構文

HRESULT SetPointer(
    BYTE *ptr,
    LONG cBytes
); 

パラメータ

ptr
呼び出し元が割り当てた サイズ cBytes のメモリ バッファへのポインタ。
cBytes
バッファのサイズ、バイト単位。

戻り値

S_OK を返す。

注意

このメソッドによってアロケータはサンプルに新しいポインタをセットできる。

このメソッドは IMediaSample インターフェイスを通しては使えない。サンプルを作成したオブジェクトは (CMediaSample を通して) このメソッドにアクセスできるが、他のオブジェクトはアクセスできない。

CMediaSample::SetPreroll

CMediaSample クラス

サンプルがプリロール サンプルかどうかを設定する。プリロール サンプルは表示されるべきではない。IMediaSample::SetPreroll メソッドの実装。

構文

HRESULT SetPreroll(
    BOOL bIsPreroll
);

パラメータ

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

戻り値

S_OK を返す。

注意

このメソッドはプリロール プロパティを示す m_dwFlags メンバ変数をアップデートする。

CMediaSample::SetProperties

CMediaSample クラス

サンプルのプロパティを設定する。このメソッドは IMediaSample2::SetProperties を実装する。

構文

HRESULT SetProperties(
    DWORD cbProperties,
    const BYTE *pbProperties
);

パラメータ

cbProperties
セットすべきプロパティ データの長さ、バイト単位。
pbProperties
サイズ cbProperties のバッファへのポインタ。

戻り値

以下の表に示される HRESULT 値の 1 つを返す。

S_OK成功
E_INVALIDARG不適切な引数
E_OUTOFMEMORYメモリ不足
E_POINTERNULL ポインタ引数

CMediaSample::SetSyncPoint

CMediaSample クラス

サンプルの開始が同期ポイントかどうかを設定する。このメソッドは IMediaSample::SetSyncPoint メソッドを実装する。

構文

HRESULT SetSyncPoint(
    BOOL bIsSyncPoint
);

パラメータ

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

戻り値

S_OK を返す。

注意

このメソッドは同期ポイント プロパティを示す m_dwFlags メンバ変数をアップデートする。

CMediaSample::SetTime

CMediaSample クラス

サンプルが開始・終了するストリームタイムを設定する。 IMediaSample::SetTime メソッドの実装。

構文

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

パラメータ

pTimeStart
サンプルが開始するストリーム タイムへのポインタ、100 ナノ秒単位。
pTimeEnd
サンプルが開始するストリーム タイムへのポインタ、100 ナノ秒単位、あるいは NULL 。

戻り値

S_OK を返す。

注意

このメソッドはタイム スタンプを示す m_Startm_End メンバ変数を設定する。それはまたタイム スタンプが有効かどうかを示す m_dwFlags メンバ変数をもアップデートする。

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