IMFMediaTypeHandler
COM公式ドキュメント
メディアソースやメディアシンクなどのオブジェクトに対して、メディアタイプの取得と設定を行います。
解説(Remarks)
このインターフェイスは、メディアタイプハンドラーによって公開されます。
- メディアソースの場合は、IMFStreamDescriptor::GetMediaTypeHandler を呼び出して、ストリーム記述子からメディアタイプハンドラーを取得します。
- メディアシンクの場合は、IMFStreamSink::GetMediaTypeHandler を呼び出して、メディアタイプハンドラーを取得します。
このインターフェイスは、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。
メソッド 6
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
指定したメディアタイプをオブジェクトがサポートしているかどうかを照会します。
| pMediaType | IMFMediaType* | in | 確認するメディアタイプの IMFMediaType インターフェイスへのポインター。 |
| ppMediaType | IMFMediaType** | outoptional | 最も近い一致するメディアタイプの IMFMediaType インターフェイスへのポインターを受け取るか、値 NULL を受け取ります。NULL 以外の場合、呼び出し元はインターフェイスを解放する必要があります。このパラメーターは NULL を指定できます。「解説」を参照してください。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 | |
| オブジェクトはこのメディアタイプをサポートしていません。 |
解説(Remarks)
pMediaType で指定されたメディアタイプをオブジェクトがサポートしている場合、このメソッドは S_OK を返します。メディアソースの場合、これはそのメディアタイプに準拠したデータをソースが生成できることを意味します。メディアシンクの場合、これはそのメディアタイプに準拠したデータをシンクが受け取れることを意味します。オブジェクトがそのメディアタイプをサポートしていない場合、このメソッドは失敗します。
ppMediaType パラメーターは省略可能です。メソッドが失敗した場合、オブジェクトは ppMediaType を使用して、そのオブジェクトがサポートし、かつ pMediaType で指定されたものに近いメディアタイプを返すことがあります。ppMediaType にメディアタイプが返される保証はありません。タイプが返されない場合、このパラメーターは NULL ポインターを受け取ります。メソッドが成功した場合、このパラメーターは NULL ポインターを受け取ります。呼び出し元が ppMediaType を NULL に設定した場合、このパラメーターは無視されます。
このインターフェイスは、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。
- Windows XP 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。
オブジェクトがサポートするメディアタイプのリストに含まれるメディアタイプの数を取得します。
| pdwTypeCount | DWORD* | out | リスト内のメディアタイプの数を受け取ります。 |
戻り値
このメソッドが成功した場合、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
サポートされるメディアタイプを取得するには、IMFMediaTypeHandler::GetMediaTypeByIndex を呼び出します。
メディアソースの場合、各ストリームのメディアタイプハンドラーには、少なくとも 1 つのサポートされるメディアタイプが含まれている必要があります。メディアシンクの場合、各ストリームのメディアタイプハンドラーに含まれるメディアタイプが 0 個のこともあります。その場合、アプリケーションがメディアタイプを提供する必要があります。特定のメディアタイプがサポートされているかどうかをテストするには、IMFMediaTypeHandler::IsMediaTypeSupported を呼び出します。
このインターフェイスは、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 | 取得するメディアタイプの 0 から始まるインデックス。リスト内のメディアタイプの数を取得するには、IMFMediaTypeHandler::GetMediaTypeCount を呼び出します。 |
| ppType | IMFMediaType** | out | IMFMediaType インターフェイスへのポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 | |
| dwIndex パラメーターが範囲外です。 |
解説(Remarks)
メディアタイプは、おおよその優先順位順に返されます。サポートされるタイプのリストが完全である保証はありません。特定のメディアタイプがサポートされているかどうかをテストするには、IMFMediaTypeHandler::IsMediaTypeSupported を呼び出します。
このインターフェイスは、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。
オブジェクトのメディアタイプを設定します。
| pMediaType | IMFMediaType* | in | 新しいメディアタイプの IMFMediaType インターフェイスへのポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 | |
| 無効な要求です。 |
解説(Remarks)
メディアソースの場合、メディアタイプを設定するとは、そのメディアタイプに準拠したデータをソースが生成することを意味します。メディアシンクの場合、メディアタイプを設定するとは、そのメディアタイプに準拠したデータをシンクが受け取れることを意味します。
このメソッドを実装する際は、pMediaType がオブジェクトの現在のメディアタイプと異なるかどうかを確認する必要があります。タイプが同一の場合、メソッドは S_OK を返しつつ、不必要にリソースを解放および再作成しないようにすべきです。タイプが同一でない場合、メソッドは新しいタイプを検証する必要があります。
このインターフェイスは、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。
オブジェクトの現在のメディアタイプを取得します。
| ppMediaType | IMFMediaType** | out | IMFMediaType インターフェイスへのポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。 |
戻り値
このメソッドは 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。
オブジェクトのメジャーメディアタイプを取得します。
| pguidMajorType | GUID* | out | メジャータイプを識別する GUID を受け取ります。取り得る値の一覧については、Major Media Types を参照してください。 |
戻り値
このメソッドが成功した場合、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
メジャータイプは、オーディオやビデオなど、ストリームに含まれるデータの種類を識別します。フォーマットの詳細を取得するには、IMFMediaTypeHandler::GetCurrentMediaType を呼び出します。
このインターフェイスは、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_IMFMediaTypeHandler "{E93DCF6C-4B07-4E1E-8123-AA16ED6EADF5}" #usecom global IMFMediaTypeHandler IID_IMFMediaTypeHandler "{}" #comfunc global IMFMediaTypeHandler_IsMediaTypeSupported 3 sptr,sptr #comfunc global IMFMediaTypeHandler_GetMediaTypeCount 4 var #comfunc global IMFMediaTypeHandler_GetMediaTypeByIndex 5 int,sptr #comfunc global IMFMediaTypeHandler_SetCurrentMediaType 6 sptr #comfunc global IMFMediaTypeHandler_GetCurrentMediaType 7 sptr #comfunc global IMFMediaTypeHandler_GetMajorType 8 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMFMediaTypeHandler "{E93DCF6C-4B07-4E1E-8123-AA16ED6EADF5}" #usecom global IMFMediaTypeHandler IID_IMFMediaTypeHandler "{}" #comfunc global IMFMediaTypeHandler_IsMediaTypeSupported 3 sptr,sptr #comfunc global IMFMediaTypeHandler_GetMediaTypeCount 4 sptr #comfunc global IMFMediaTypeHandler_GetMediaTypeByIndex 5 int,sptr #comfunc global IMFMediaTypeHandler_SetCurrentMediaType 6 sptr #comfunc global IMFMediaTypeHandler_GetCurrentMediaType 7 sptr #comfunc global IMFMediaTypeHandler_GetMajorType 8 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。