Win32 API 日本語リファレンス
ホームMedia.MediaFoundation › IMFSample

IMFSample

COM
IIDc40a00f2-b93a-4d80-ae8c-5a1c634f58e4継承元IMFAttributes自前メソッド開始 vtbl33

公式ドキュメント

メディアサンプルを表します。これはメディアデータを格納するためのコンテナオブジェクトです。

解説(Remarks)

新しいメディアサンプルを作成するには、MFCreateSample を呼び出します。

注意

IMFSample に対して、IMFAttributes インターフェイスから継承した CopyAllItems を呼び出した場合、サンプル時刻、継続時間、およびフラグはコピー先のサンプルにコピーされません。これらの値は手動で新しいサンプルにコピーする必要があります。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。

メソッド 14

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 33 HRESULT GetSampleFlags(DWORD* pdwSampleFlags)

サンプルに関連付けられたフラグを取得します。現在、定義されているフラグはありません。

pdwSampleFlagsDWORD*out値ゼロを受け取ります。

戻り値

このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。

vtbl 34 HRESULT SetSampleFlags(DWORD dwSampleFlags)

サンプルに関連付けられたフラグを設定します。現在、定義されているフラグはありません。

dwSampleFlagsDWORDin予約済み。ゼロにする必要があります。

戻り値

このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。

vtbl 35 HRESULT GetSampleTime(LONGLONG* phnsSampleTime)

サンプルのプレゼンテーション時刻を取得します。

phnsSampleTimeLONGLONG*outプレゼンテーション時刻を 100 ナノ秒単位で受け取ります。

戻り値

このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_NO_SAMPLE_TIMESTAMP
サンプルにはプレゼンテーション時刻がありません。

解説(Remarks)

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。

vtbl 36 HRESULT SetSampleTime(LONGLONG hnsSampleTime)

サンプルのプレゼンテーション時刻を設定します。

hnsSampleTimeLONGLONGinプレゼンテーション時刻。100 ナノ秒単位です。

戻り値

このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

一部のパイプラインコンポーネントは、タイムスタンプを持つサンプルを必要とします。一般に、サンプルのデータを生成するコンポーネントがタイムスタンプも設定します。Media Session がタイムスタンプを変更する場合があります。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。

vtbl 37 HRESULT GetSampleDuration(LONGLONG* phnsSampleDuration)

サンプルの継続時間を取得します。

phnsSampleDurationLONGLONG*out継続時間を 100 ナノ秒単位で受け取ります。

戻り値

このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_NO_SAMPLE_DURATION
サンプルには継続時間が指定されていません。

解説(Remarks)

サンプルに複数のバッファーが含まれている場合、継続時間にはすべてのバッファーのデータが含まれます。

取得した継続時間がゼロの場合、またはこのメソッドが MF_E_NO_SAMPLE_DURATION を返す場合、継続時間は不明です。その場合、メディアタイプから継続時間を計算できることがあります。たとえば、ビデオのフレームレートやオーディオのサンプリングレートを使用します。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。

vtbl 38 HRESULT SetSampleDuration(LONGLONG hnsSampleDuration)

サンプルの継続時間を設定します。

hnsSampleDurationLONGLONGinサンプルの継続時間。100 ナノ秒単位です。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

継続時間が負の値であってもこのメソッドは成功しますが、負の継続時間はほとんどの種類のデータにとって有効ではないと考えられます。継続時間を検証するのは、サンプルを消費するオブジェクトの責任です。

継続時間はゼロにすることもできます。これは一部の種類のデータにとって有効な場合があります。たとえば、サンプルにバッファーを含まないストリームメタデータが含まれている場合などです。

このメソッドが呼び出されるまで、IMFSample::GetSampleDuration メソッドは MF_E_NO_SAMPLE_DURATION を返します。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。

vtbl 39 HRESULT GetBufferCount(DWORD* pdwBufferCount)

サンプル内のバッファーの数を取得します。

pdwBufferCountDWORD*outサンプル内のバッファーの数を受け取ります。サンプルにはバッファーが 1 つも含まれていない場合があります。

戻り値

このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。

vtbl 40 HRESULT GetBufferByIndex(DWORD dwIndex, IMFMediaBuffer** ppBuffer)

インデックスを指定して、サンプルからバッファーを取得します。

dwIndexDWORDinバッファーのインデックス。サンプル内のバッファーの数を調べるには、IMFSample::GetBufferCount を呼び出します。バッファーのインデックスはゼロから始まります。
ppBufferIMFMediaBuffer**outIMFMediaBuffer インターフェイスへのポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
NULL ポインター引数、またはインデックスが範囲外です。

解説(Remarks)

サンプルには複数のバッファーが含まれる場合があります。GetBufferByIndex メソッドを使用して、個々のバッファーを列挙します。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。

vtbl 41 HRESULT ConvertToContiguousBuffer(IMFMediaBuffer** ppBuffer)

複数のバッファーを持つサンプルを、単一のバッファーを持つサンプルに変換します。

ppBufferIMFMediaBuffer**outIMFMediaBuffer インターフェイスへのポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_UNEXPECTED
サンプルにはバッファーが含まれていません。

解説(Remarks)

サンプルに複数のバッファーが含まれている場合、このメソッドは元のバッファーのデータを新しいバッファーにコピーし、元のバッファーリストを新しいバッファーで置き換えます。新しいバッファーは ppBuffer パラメーターで返されます。

サンプルに単一のバッファーが含まれている場合、このメソッドは元のバッファーへのポインターを返します。一般的な使用では、ほとんどのサンプルは複数のバッファーを含みません。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。

vtbl 42 HRESULT AddBuffer(IMFMediaBuffer* pBuffer)

サンプル内のバッファーリストの末尾にバッファーを追加します。

pBufferIMFMediaBuffer*inバッファーの IMFMediaBuffer インターフェイスへのポインター。

戻り値

このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
NULL ポインター引数です。

解説(Remarks)

非圧縮のビデオデータの場合、各バッファーには 1 つのビデオフレームを格納し、サンプルには複数のフレームを含めないようにする必要があります。一般に、1 つのサンプルに複数のバッファーを格納することは推奨されません。

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。

vtbl 43 HRESULT RemoveBufferByIndex(DWORD dwIndex)

指定したインデックスのバッファーをサンプルから削除します。

dwIndexDWORDinバッファーのインデックス。サンプル内のバッファーの数を調べるには、IMFSample::GetBufferCount を呼び出します。バッファーのインデックスはゼロから始まります。

戻り値

このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。

vtbl 44 HRESULT RemoveAllBuffers()

サンプルからすべてのバッファーを削除します。

戻り値

このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。

vtbl 45 HRESULT GetTotalLength(DWORD* pcbTotalLength)

サンプル内のすべてのバッファーの有効なデータの合計長を取得します。長さは、IMFMediaBuffer::GetCurrentLength メソッドで取得される値の合計として計算されます。

pcbTotalLengthDWORD*out有効なデータの合計長をバイト単位で受け取ります。

戻り値

このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。

vtbl 46 HRESULT CopyToBuffer(IMFMediaBuffer* pBuffer)

サンプルデータをバッファーにコピーします。このメソッドは、サンプルのすべてのバッファーの有効なデータを順番に連結します。

pBufferIMFMediaBuffer*inコピー先バッファーの IMFMediaBuffer インターフェイスへのポインター。バッファーは、サンプル内の有効なデータを格納できる十分な大きさである必要があります。サンプル内のデータのサイズを取得するには、IMFSample::GetTotalLength を呼び出します。

戻り値

このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
NULL ポインター引数です。
MF_E_BUFFERTOOSMALL
バッファーがデータを格納するのに十分な大きさではありません。

解説(Remarks)

このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IMFSample "{C40A00F2-B93A-4D80-AE8C-5A1C634F58E4}"
#usecom global IMFSample IID_IMFSample "{}"
#comfunc global IMFSample_GetSampleFlags             33 var
#comfunc global IMFSample_SetSampleFlags             34 int
#comfunc global IMFSample_GetSampleTime              35 var
#comfunc global IMFSample_SetSampleTime              36 int64
#comfunc global IMFSample_GetSampleDuration          37 var
#comfunc global IMFSample_SetSampleDuration          38 int64
#comfunc global IMFSample_GetBufferCount             39 var
#comfunc global IMFSample_GetBufferByIndex           40 int,sptr
#comfunc global IMFSample_ConvertToContiguousBuffer  41 sptr
#comfunc global IMFSample_AddBuffer                  42 sptr
#comfunc global IMFSample_RemoveBufferByIndex        43 int
#comfunc global IMFSample_RemoveAllBuffers           44
#comfunc global IMFSample_GetTotalLength             45 var
#comfunc global IMFSample_CopyToBuffer               46 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。