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

IMFMediaEngineExtension

COM
IID2f69d622-20b5-41e9-afdf-89ced1dda04e継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

アプリケーションが Media Engine でメディアリソースを読み込めるようにします。

解説(Remarks)

このインターフェイスを使用するには、IMFMediaEngineClassFactory::CreateInstance メソッドを呼び出す際に MF_MEDIA_ENGINE_EXTENSION 属性を設定します。

メソッド 4

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

vtbl 3 HRESULT CanPlayType(BOOL AudioOnly, LPWSTR MimeType, MF_MEDIA_ENGINE_CANPLAY* pAnswer)

指定した種類のメディアリソースをこのオブジェクトが読み込めるかどうかを照会します。

AudioOnlyBOOLinTRUE の場合、Media Engine はオーディオのみのモードに設定されます。それ以外の場合、Media Engine はオーディオ/ビデオモードに設定されます。
MimeTypeLPWSTRinRFC 4281 で定義されている、オプションの codecs パラメーターを含む MIME タイプを表す文字列。
pAnswerMF_MEDIA_ENGINE_CANPLAY*outMF_MEDIA_ENGINE_CANPLAY 列挙型のメンバーを受け取ります。

戻り値

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

解説(Remarks)

Media Engine 拡張機能が 1 つ以上の MIME タイプをサポートする場合は、このメソッドを実装してください。

vtbl 4 HRESULT BeginCreateObject(LPWSTR bstrURL, IMFByteStream* pByteStream, MF_OBJECT_TYPE type, IUnknown** ppIUnknownCancelCookie, IMFAsyncCallback* pCallback, IUnknown* punkState)

バイトストリームまたはメディアソースを作成する非同期要求を開始します。

bstrURLLPWSTRinメディアリソースの URL。
pByteStreamIMFByteStream*inoptional

IMFByteStream インターフェイスへのポインター。

type パラメーターが MF_OBJECT_BYTESTREAM の場合、このパラメーターは NULL です。

typeMF_OBJECT_MEDIASOURCE の場合、このパラメーターはバイトストリームへのポインターを含むか、NULL のいずれかです。詳細については「解説」を参照してください。

typeMF_OBJECT_TYPEin

作成するオブジェクトの種類を指定する MF_OBJECT_TYPE 列挙型のメンバー。

意味
MF_OBJECT_BYTESTREAM
バイトストリームを作成します。バイトストリームは IMFByteStream インターフェイスをサポートする必要があります。
MF_OBJECT_MEDIASOURCE
メディアソースを作成します。メディアソースは IMFMediaSource インターフェイスをサポートする必要があります。
ppIUnknownCancelCookieIUnknown**out

IUnknown インターフェイスへのポインターを受け取ります。このポインターを IMFMediaEngineExtension::CancelObjectCreation メソッドに渡すことで、非同期操作をキャンセルできます。

呼び出し元はこのインターフェイスを解放する必要があります。このパラメーターは NULL にできます。

pCallbackIMFAsyncCallback*inIMFAsyncCallback インターフェイスへのポインター。このインターフェイスは非同期操作の完了を通知するために使用されます。
punkStateIUnknown*inoptional呼び出し元が実装したオブジェクトの IUnknown インターフェイスへのポインター。このオブジェクトを使用して、コールバック用の状態情報を保持できます。オブジェクトはコールバックが呼び出される際に呼び出し元へ返されます。このパラメーターは NULL にできます。

戻り値

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

解説(Remarks)

このメソッドは、type パラメーターの値に応じて、バイトストリームまたはメディアソースの作成をオブジェクトに要求します。

このメソッドは非同期に実行されます。Media Engine は IMFMediaEngineExtension::EndCreateObject メソッドを呼び出して操作を完了します。

実装に関する注意

Media Engine 拡張機能は、カスタムのバイトストリームオブジェクト、カスタムのメディアソース、またはその両方をサポートするために使用できます。バイトストリームの場合は、typeMF_OBJECT_BYTESTREAM のときにバイトストリームオブジェクトを作成します。メディアソースの場合は、type が MF_OBJECT_MEDIASOURCE のときにソースを作成します。

URL を読み込むために、Media Engine は次の手順を実行します。

  1. URL からバイトストリームの作成を試みます。
  2. バイトストリームが正常に作成された場合、そのバイトストリームからメディアソースの作成を試みます。
  3. バイトストリームを作成できない場合、URL から直接メディアソースの作成を試みます。

各手順で、Media Engine は拡張オブジェクトに対して IMFMediaEngineExtension::BeginCreateObject を呼び出します。BeginCreateObject メソッドが失敗すると、Media Engine は Source Resolver を試します。

BeginCreateObject メソッドでは、次のいずれのケースを処理するかを選択できます。

処理しないケースについては失敗コードを返してください。

例:

BeginCreateObject メソッドが成功した場合、操作は非同期に実行される必要があります。操作が完了したら、pCallback で指定されたコールバックインターフェイスの IMFAsyncCallback::Invoke メソッドを呼び出します。Media Engine は IMFMediaEngineExtension::EndCreateObject を呼び出して操作を完了します。

vtbl 5 HRESULT CancelObjectCreation(IUnknown* pIUnknownCancelCookie)

現在のオブジェクト作成要求をキャンセルします。

pIUnknownCancelCookieIUnknown*inIMFMediaEngineExtension::BeginCreateObject メソッドの ppIUnknownCancelCookie パラメーターで返されたポインター。

戻り値

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

解説(Remarks)

このメソッドは、以前の BeginCreateObject の呼び出しをキャンセルしようとします。ただし、このメソッドは非同期であるため、操作をキャンセルする前に完了してしまう場合があります。

vtbl 6 HRESULT EndCreateObject(IMFAsyncResult* pResult, IUnknown** ppObject)

バイトストリームまたはメディアソースを作成する非同期要求を完了します。

pResultIMFAsyncResult*inIMFAsyncResult インターフェイスへのポインター。
ppObjectIUnknown**outバイトストリームまたはメディアソースの IUnknown インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。

戻り値

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

解説(Remarks)

Media Engine は、IMFMediaEngineExtension::BeginCreateObject メソッドを完了するためにこのメソッドを呼び出します。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IMFMediaEngineExtension "{2F69D622-20B5-41E9-AFDF-89CED1DDA04E}"
#usecom global IMFMediaEngineExtension IID_IMFMediaEngineExtension "{}"
#comfunc global IMFMediaEngineExtension_CanPlayType           3 int,wstr,var
#comfunc global IMFMediaEngineExtension_BeginCreateObject     4 wstr,sptr,int,sptr,sptr,sptr
#comfunc global IMFMediaEngineExtension_CancelObjectCreation  5 sptr
#comfunc global IMFMediaEngineExtension_EndCreateObject       6 sptr,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。