IMFByteStreamHandler
COM公式ドキュメント
バイトストリームからメディアソースを作成します。
解説(Remarks)
アプリケーションがこのインターフェイスを直接使用することはありません。このインターフェイスは、ソースリゾルバーによって使用されるバイトストリームハンドラーによって公開されます。バイトストリームハンドラーは、バイトストリームを渡されると、そのストリームを解析してメディアソースを作成します。バイトストリームハンドラーは、ファイル名拡張子または MIME タイプによって登録されます。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
バイトストリームからメディアソースを作成する非同期要求を開始します。(IMFByteStreamHandler.BeginCreateObject)
| pByteStream | IMFByteStream* | in | バイトストリームの IMFByteStream インターフェイスへのポインター。 |
| pwszURL | LPWSTR | in | バイトストリームの元の URL を格納する文字列。このパラメーターは NULL にできます。 |
| dwFlags | DWORD | in | 0 個以上のフラグのビットごとの OR。Source Resolver Flags を参照してください。 |
| pProps | IPropertyStore* | in | プロパティストアの IPropertyStore インターフェイスへのポインター。バイトストリームハンドラーは、このプロパティストアを使用してオブジェクトを構成できます。このパラメーターは NULL にできます。詳細については、Configuring a Media Source を参照してください。 |
| ppIUnknownCancelCookie | IUnknown** | outoptional | IUnknown ポインターまたは値 NULL を受け取ります。値が NULL でない場合は、このポインターを IMFByteStreamHandler::CancelObjectCreation メソッドに渡すことで、非同期操作をキャンセルできます。呼び出し元はこのインターフェイスを解放する必要があります。このパラメーターは NULL にできます。 |
| pCallback | IMFAsyncCallback* | in | コールバックオブジェクトの IMFAsyncCallback インターフェイスへのポインター。呼び出し元がこのインターフェイスを実装する必要があります。 |
| punkState | IUnknown* | in | 呼び出し元が定義する状態オブジェクトの IUnknown インターフェイスへのポインター。このパラメーターは NULL にできます。このオブジェクトを使用して状態情報を保持できます。オブジェクトは、コールバックが呼び出されるときに呼び出し元に返されます。 |
戻り値
このメソッドは HRESULT を返します。指定可能な値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| バイトストリームを解析できません。 |
解説(Remarks)
dwFlags パラメーターには MF_RESOLUTION_MEDIASOURCE フラグを含める必要があり、MF_RESOLUTION_BYTESTREAM フラグを含めるべきではありません。
バイトストリームハンドラーは、ストリームの解析と内容の検証を担当します。ストリームが有効でない場合、またはバイトストリームハンドラーがストリームを解析できない場合、ハンドラーは失敗コードを返す必要があります。バイトストリームが、バイトハンドラーが解析するように設計されているストリームの種類と一致する保証はありません。
pwszURL パラメーターが NULL でない場合、バイトストリームハンドラーは解決処理の間にその URL を使用することがあります。(たとえば、ファイル名拡張子が存在する場合はそれを使用することがあります。)また、バイトストリームには MIME タイプを指定する MF_BYTESTREAM_CONTENT_TYPE 属性が含まれている場合があります。
操作が完了すると、バイトストリームハンドラーは IMFAsyncCallback::Invoke メソッドを呼び出します。Invoke メソッドは、メディアソースへのポインターを取得するために IMFByteStreamHandler::EndCreateObject を呼び出す必要があります。
メディアソースを作成する非同期要求を完了します。
| pResult | IMFAsyncResult* | in | IMFAsyncResult インターフェイスへのポインター。コールバックオブジェクトが Invoke メソッドで受け取ったものと同じポインターを渡します。 |
| pObjectType | MF_OBJECT_TYPE* | out | 作成されたオブジェクトの種類を指定する MF_OBJECT_TYPE 列挙体のメンバーを受け取ります。 |
| ppObject | IUnknown** | out | メディアソースの IUnknown インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。指定可能な値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 操作がキャンセルされました。IMFByteStreamHandler::CancelObjectCreation を参照してください。 | |
| バイトストリームを解析できません。 |
解説(Remarks)
このメソッドは、IMFAsyncCallback::Invoke メソッドの内部から呼び出します。
メディアソースを作成する現在の要求をキャンセルします。
| pIUnknownCancelCookie | IUnknown* | in | IMFByteStreamHandler::BeginCreateObject メソッドの ppIUnknownCancelCookie パラメーターで返された IUnknown インターフェイスへのポインター。 |
戻り値
このメソッドは HRESULT を返します。指定可能な値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このメソッドを使用して、BeginCreateObject への以前の呼び出しをキャンセルできます。ただし、このメソッドは非同期であるため、操作をキャンセルできる前に完了してしまう場合があります。したがって、このメソッドを呼び出した後でも、コールバックが呼び出される可能性があります。
メディアソースの作成に必要な、またはバイトストリームハンドラーがこのストリームを解析できないと判断するために必要な最大バイト数を取得します。
| pqwBytes | ULONGLONG* | out | 必要な最大バイト数を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。指定可能な値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFByteStreamHandler "{BB420AA4-765B-4A1F-91FE-D6A8A143924C}" #usecom global IMFByteStreamHandler IID_IMFByteStreamHandler "{}" #comfunc global IMFByteStreamHandler_BeginCreateObject 3 sptr,wstr,int,sptr,sptr,sptr,sptr #comfunc global IMFByteStreamHandler_EndCreateObject 4 sptr,var,sptr #comfunc global IMFByteStreamHandler_CancelObjectCreation 5 sptr #comfunc global IMFByteStreamHandler_GetMaxNumberOfBytesRequiredForResolution 6 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMFByteStreamHandler "{BB420AA4-765B-4A1F-91FE-D6A8A143924C}" #usecom global IMFByteStreamHandler IID_IMFByteStreamHandler "{}" #comfunc global IMFByteStreamHandler_BeginCreateObject 3 sptr,wstr,int,sptr,sptr,sptr,sptr #comfunc global IMFByteStreamHandler_EndCreateObject 4 sptr,sptr,sptr #comfunc global IMFByteStreamHandler_CancelObjectCreation 5 sptr #comfunc global IMFByteStreamHandler_GetMaxNumberOfBytesRequiredForResolution 6 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。