IMFSample
COM公式ドキュメント
メディアサンプルを表します。これはメディアデータを格納するためのコンテナオブジェクトです。
解説(Remarks)
新しいメディアサンプルを作成するには、MFCreateSample を呼び出します。
IMFSample に対して、IMFAttributes インターフェイスから継承した CopyAllItems を呼び出した場合、サンプル時刻、継続時間、およびフラグはコピー先のサンプルにコピーされません。これらの値は手動で新しいサンプルにコピーする必要があります。
- Windows XP Service Pack 2 (SP2) 以降。
- KB900325 (Windows XP Media Center Edition 2005) および KB925766 (October 2006 Update Rollup for Windows XP Media Center Edition) がインストールされた Windows XP Media Center Edition 2005。
メソッド 14
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
サンプルに関連付けられたフラグを取得します。現在、定義されているフラグはありません。
| pdwSampleFlags | DWORD* | out | 値ゼロを受け取ります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。
- Windows XP Service Pack 2 (SP2) 以降。
- KB900325 (Windows XP Media Center Edition 2005) および KB925766 (October 2006 Update Rollup for Windows XP Media Center Edition) がインストールされた Windows XP Media Center Edition 2005。
サンプルに関連付けられたフラグを設定します。現在、定義されているフラグはありません。
| dwSampleFlags | DWORD | in | 予約済み。ゼロにする必要があります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。
- Windows XP Service Pack 2 (SP2) 以降。
- KB900325 (Windows XP Media Center Edition 2005) および KB925766 (October 2006 Update Rollup for Windows XP Media Center Edition) がインストールされた Windows XP Media Center Edition 2005。
サンプルのプレゼンテーション時刻を取得します。
| phnsSampleTime | LONGLONG* | out | プレゼンテーション時刻を 100 ナノ秒単位で受け取ります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| サンプルにはプレゼンテーション時刻がありません。 |
解説(Remarks)
このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。
- Windows XP Service Pack 2 (SP2) 以降。
- KB900325 (Windows XP Media Center Edition 2005) および KB925766 (October 2006 Update Rollup for Windows XP Media Center Edition) がインストールされた Windows XP Media Center Edition 2005。
サンプルのプレゼンテーション時刻を設定します。
| hnsSampleTime | LONGLONG | in | プレゼンテーション時刻。100 ナノ秒単位です。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
一部のパイプラインコンポーネントは、タイムスタンプを持つサンプルを必要とします。一般に、サンプルのデータを生成するコンポーネントがタイムスタンプも設定します。Media Session がタイムスタンプを変更する場合があります。
このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。
- Windows XP Service Pack 2 (SP2) 以降。
- KB900325 (Windows XP Media Center Edition 2005) および KB925766 (October 2006 Update Rollup for Windows XP Media Center Edition) がインストールされた Windows XP Media Center Edition 2005。
サンプルの継続時間を取得します。
| phnsSampleDuration | LONGLONG* | out | 継続時間を 100 ナノ秒単位で受け取ります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| サンプルには継続時間が指定されていません。 |
解説(Remarks)
サンプルに複数のバッファーが含まれている場合、継続時間にはすべてのバッファーのデータが含まれます。
取得した継続時間がゼロの場合、またはこのメソッドが MF_E_NO_SAMPLE_DURATION を返す場合、継続時間は不明です。その場合、メディアタイプから継続時間を計算できることがあります。たとえば、ビデオのフレームレートやオーディオのサンプリングレートを使用します。
このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。
- Windows XP Service Pack 2 (SP2) 以降。
- KB900325 (Windows XP Media Center Edition 2005) および KB925766 (October 2006 Update Rollup for Windows XP Media Center Edition) がインストールされた Windows XP Media Center Edition 2005。
サンプルの継続時間を設定します。
| hnsSampleDuration | LONGLONG | in | サンプルの継続時間。100 ナノ秒単位です。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
継続時間が負の値であってもこのメソッドは成功しますが、負の継続時間はほとんどの種類のデータにとって有効ではないと考えられます。継続時間を検証するのは、サンプルを消費するオブジェクトの責任です。
継続時間はゼロにすることもできます。これは一部の種類のデータにとって有効な場合があります。たとえば、サンプルにバッファーを含まないストリームメタデータが含まれている場合などです。
このメソッドが呼び出されるまで、IMFSample::GetSampleDuration メソッドは MF_E_NO_SAMPLE_DURATION を返します。
このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。
- Windows XP Service Pack 2 (SP2) 以降。
- KB900325 (Windows XP Media Center Edition 2005) および KB925766 (October 2006 Update Rollup for Windows XP Media Center Edition) がインストールされた Windows XP Media Center Edition 2005。
サンプル内のバッファーの数を取得します。
| pdwBufferCount | DWORD* | out | サンプル内のバッファーの数を受け取ります。サンプルにはバッファーが 1 つも含まれていない場合があります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。
- Windows XP Service Pack 2 (SP2) 以降。
- KB900325 (Windows XP Media Center Edition 2005) および KB925766 (October 2006 Update Rollup for Windows XP Media Center Edition) がインストールされた Windows XP Media Center Edition 2005。
インデックスを指定して、サンプルからバッファーを取得します。
| dwIndex | DWORD | in | バッファーのインデックス。サンプル内のバッファーの数を調べるには、IMFSample::GetBufferCount を呼び出します。バッファーのインデックスはゼロから始まります。 |
| ppBuffer | IMFMediaBuffer** | out | IMFMediaBuffer インターフェイスへのポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| NULL ポインター引数、またはインデックスが範囲外です。 |
解説(Remarks)
サンプルには複数のバッファーが含まれる場合があります。GetBufferByIndex メソッドを使用して、個々のバッファーを列挙します。
このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。
- Windows XP Service Pack 2 (SP2) 以降。
- KB900325 (Windows XP Media Center Edition 2005) および KB925766 (October 2006 Update Rollup for Windows XP Media Center Edition) がインストールされた Windows XP Media Center Edition 2005。
複数のバッファーを持つサンプルを、単一のバッファーを持つサンプルに変換します。
| ppBuffer | IMFMediaBuffer** | out | IMFMediaBuffer インターフェイスへのポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| サンプルにはバッファーが含まれていません。 |
解説(Remarks)
サンプルに複数のバッファーが含まれている場合、このメソッドは元のバッファーのデータを新しいバッファーにコピーし、元のバッファーリストを新しいバッファーで置き換えます。新しいバッファーは ppBuffer パラメーターで返されます。
サンプルに単一のバッファーが含まれている場合、このメソッドは元のバッファーへのポインターを返します。一般的な使用では、ほとんどのサンプルは複数のバッファーを含みません。
このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。
- Windows XP Service Pack 2 (SP2) 以降。
- KB900325 (Windows XP Media Center Edition 2005) および KB925766 (October 2006 Update Rollup for Windows XP Media Center Edition) がインストールされた Windows XP Media Center Edition 2005。
サンプル内のバッファーリストの末尾にバッファーを追加します。
| pBuffer | IMFMediaBuffer* | in | バッファーの IMFMediaBuffer インターフェイスへのポインター。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| NULL ポインター引数です。 |
解説(Remarks)
非圧縮のビデオデータの場合、各バッファーには 1 つのビデオフレームを格納し、サンプルには複数のフレームを含めないようにする必要があります。一般に、1 つのサンプルに複数のバッファーを格納することは推奨されません。
このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。
- Windows XP Service Pack 2 (SP2) 以降。
- KB900325 (Windows XP Media Center Edition 2005) および KB925766 (October 2006 Update Rollup for Windows XP Media Center Edition) がインストールされた Windows XP Media Center Edition 2005。
指定したインデックスのバッファーをサンプルから削除します。
| dwIndex | DWORD | in | バッファーのインデックス。サンプル内のバッファーの数を調べるには、IMFSample::GetBufferCount を呼び出します。バッファーのインデックスはゼロから始まります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。
- Windows XP Service Pack 2 (SP2) 以降。
- KB900325 (Windows XP Media Center Edition 2005) および KB925766 (October 2006 Update Rollup for Windows XP Media Center Edition) がインストールされた Windows XP Media Center Edition 2005。
サンプルからすべてのバッファーを削除します。
戻り値
このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。
- Windows XP Service Pack 2 (SP2) 以降。
- KB900325 (Windows XP Media Center Edition 2005) および KB925766 (October 2006 Update Rollup for Windows XP Media Center Edition) がインストールされた Windows XP Media Center Edition 2005。
サンプル内のすべてのバッファーの有効なデータの合計長を取得します。長さは、IMFMediaBuffer::GetCurrentLength メソッドで取得される値の合計として計算されます。
| pcbTotalLength | DWORD* | out | 有効なデータの合計長をバイト単位で受け取ります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。
- Windows XP Service Pack 2 (SP2) 以降。
- KB900325 (Windows XP Media Center Edition 2005) および KB925766 (October 2006 Update Rollup for Windows XP Media Center Edition) がインストールされた Windows XP Media Center Edition 2005。
サンプルデータをバッファーにコピーします。このメソッドは、サンプルのすべてのバッファーの有効なデータを順番に連結します。
| pBuffer | IMFMediaBuffer* | in | コピー先バッファーの IMFMediaBuffer インターフェイスへのポインター。バッファーは、サンプル内の有効なデータを格納できる十分な大きさである必要があります。サンプル内のデータのサイズを取得するには、IMFSample::GetTotalLength を呼び出します。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| NULL ポインター引数です。 | |
| バッファーがデータを格納するのに十分な大きさではありません。 |
解説(Remarks)
このインターフェイスは、Windows Media Format 11 SDK の再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで利用できます。
- Windows XP Service Pack 2 (SP2) 以降。
- KB900325 (Windows XP Media Center Edition 2005) および KB925766 (October 2006 Update Rollup for Windows XP Media Center Edition) がインストールされた Windows XP Media Center Edition 2005。
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 指定が可能。#define global IID_IMFSample "{C40A00F2-B93A-4D80-AE8C-5A1C634F58E4}" #usecom global IMFSample IID_IMFSample "{}" #comfunc global IMFSample_GetSampleFlags 33 sptr #comfunc global IMFSample_SetSampleFlags 34 int #comfunc global IMFSample_GetSampleTime 35 sptr #comfunc global IMFSample_SetSampleTime 36 int64 #comfunc global IMFSample_GetSampleDuration 37 sptr #comfunc global IMFSample_SetSampleDuration 38 int64 #comfunc global IMFSample_GetBufferCount 39 sptr #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 sptr #comfunc global IMFSample_CopyToBuffer 46 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。