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

IMFSchemeHandler

COM
IID6d4c7b74-52a0-4bb7-b0db-55f29f47a668継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

URL からメディアソースまたはバイトストリームを作成します。

解説(Remarks)

アプリケーションがこのインターフェイスを使用することはありません。このインターフェイスは、ソースリゾルバーが使用するスキームハンドラーによって公開されます。スキームハンドラーは、1 種類の URL スキームを解析するように設計されています。スキームハンドラーに URL が渡されると、その URL にあるリソースを解析し、メディアソースまたはバイトストリームのいずれかを作成します。

メソッド 3

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

vtbl 3 HRESULT BeginCreateObject(LPWSTR pwszURL, DWORD dwFlags, IPropertyStore* pProps, IUnknown** ppIUnknownCancelCookie, IMFAsyncCallback* pCallback, IUnknown* punkState)

URL からオブジェクトを作成する非同期要求を開始します。ソースリゾルバーが URL からメディアソースを作成するとき、その要求をスキームハンドラーに渡します。

pwszURLLPWSTRin解決する URL を含む null 終端文字列。
dwFlagsDWORDin1 つ以上のフラグのビットごとの ORSource Resolver Flags を参照してください。
pPropsIPropertyStore*inプロパティストアの IPropertyStore インターフェイスへのポインター。スキームハンドラーは、このプロパティストアを使用してオブジェクトを構成できます。このパラメーターは NULL にできます。詳細については、Configuring a Media Source を参照してください。
ppIUnknownCancelCookieIUnknown**outoptionalIUnknown ポインターまたは値 NULL を受け取ります。値が NULL でない場合は、このポインターを IMFSchemeHandler::CancelObjectCreation メソッドに渡すことで、非同期操作を取り消すことができます。呼び出し元はこのインターフェイスを解放する必要があります。このパラメーターは NULL にでき、その場合、IUnknown ポインターは呼び出し元に返されません。
pCallbackIMFAsyncCallback*inコールバックオブジェクトの IMFAsyncCallback インターフェイスへのポインター。呼び出し元はこのインターフェイスを実装する必要があります。
punkStateIUnknown*in呼び出し元が定義する状態オブジェクトの IUnknown インターフェイスへのポインター。このパラメーターは NULL にできます。このオブジェクトを使用して状態情報を保持できます。オブジェクトは、コールバックが呼び出されるときに呼び出し元に返されます。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
E_ACCESSDENIED
要求されたアクセス (読み取りまたは書き込み) で URL を開けません。
MF_E_UNSUPPORTED_BYTESTREAM_TYPE
サポートされていないバイトストリームの種類です。

解説(Remarks)

dwFlags パラメーターには、MF_RESOLUTION_MEDIASOURCE フラグまたは MF_RESOLUTION_BYTESTREAM フラグを含める必要があります。MF_RESOLUTION_MEDIASOURCE フラグが設定されている場合、スキームハンドラーは URL から直接メディアソースを作成することも、バイトストリームを作成することもあります。オブジェクトの種類は、IMFSchemeHandler::EndCreateObject メソッドの pObjectType パラメーターで返されます。スキームハンドラーがバイトストリームを返した場合、ソースリゾルバーはそのバイトストリームをバイトストリームハンドラーに渡し、バイトストリームハンドラーがそのバイトストリームからメディアソースを作成します。

MF_RESOLUTION_BYTESTREAM フラグが設定されている場合、スキームハンドラーは URL からバイトストリームの作成を試みます。ただし、スキームハンドラーがバイトストリームではなくメディアソースを直接作成するように設計されている場合、このメソッドは失敗します。

次の表は、これら 2 つのフラグをこのメソッドに渡したときの動作をまとめたものです。

フラグ 作成されるオブジェクト
MF_RESOLUTION_MEDIASOURCE メディアソースまたはバイトストリーム
MF_RESOLUTION_BYTESTREAM バイトストリーム

MF_RESOLUTION_MEDIASOURCE フラグと MF_RESOLUTION_BYTESTREAM フラグは組み合わせることができますが、この場合は冗長です。

操作が完了すると、スキームハンドラーは IMFAsyncCallback::Invoke メソッドを呼び出します。Invoke メソッドは IMFSchemeHandler::EndCreateObject を呼び出して、作成されたオブジェクトへのポインターを取得する必要があります。

vtbl 4 HRESULT EndCreateObject(IMFAsyncResult* pResult, MF_OBJECT_TYPE* pObjectType, IUnknown** ppObject)

URL からオブジェクトを作成する非同期要求を完了します。(IMFSchemeHandler.EndCreateObject)

pResultIMFAsyncResult*inIMFAsyncResult インターフェイスへのポインター。コールバックオブジェクトが Invoke メソッドで受け取ったのと同じポインターを渡します。
pObjectTypeMF_OBJECT_TYPE*out作成されたオブジェクトの種類を指定する MF_OBJECT_TYPE 列挙体のメンバーを受け取ります。
ppObjectIUnknown**outオブジェクトの IUnknown インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
E_ABORT
操作は取り消されました。

解説(Remarks)

このメソッドは IMFAsyncCallback::Invoke メソッドの内部から呼び出してください。

vtbl 5 HRESULT CancelObjectCreation(IUnknown* pIUnknownCancelCookie)

URL からオブジェクトを作成する現在の要求を取り消します。

pIUnknownCancelCookieIUnknown*inIMFSchemeHandler::BeginCreateObject メソッドの ppIUnknownCancelCookie パラメーターで返された IUnknown インターフェイスへのポインター。

戻り値

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

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

解説(Remarks)

このメソッドを使用して、BeginCreateObject への以前の呼び出しを取り消すことができます。ただし、このメソッドは非同期であるため、操作を取り消す前に完了してしまう場合があります。したがって、このメソッドを呼び出した後でもコールバックが呼び出されることがあります。

BeginCreateObjectppIUnknownCancelCookie パラメーターで NULL を返した場合、操作は取り消せません。

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