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

IMFSampleGrabberSinkCallback

COM
IID8c7b80bf-ee42-4b59-b1df-55668e1bdca8継承元IMFClockStateSink自前メソッド開始 vtbl8

公式ドキュメント

サンプルグラバーシンクからメディアデータを取得するためのコールバックインターフェイスです。

解説(Remarks)

サンプルグラバーシンクを使用すると、アプリケーションはカスタムのメディアシンクを実装することなく、Media Foundation パイプラインからデータを取得できます。サンプルグラバーシンクを使用するには、アプリケーションは次の手順を実行する必要があります。

  1. IMFSampleGrabberSinkCallback インターフェイスを実装します。
  2. IMFSampleGrabberSinkCallback インターフェイスへのポインターを渡して MFCreateSampleGrabberSinkActivate を呼び出します。この関数は IMFActivate オブジェクトを返します。
  3. シンクの IMFActivate オブジェクトを持つ出力ノードを含むトポロジを作成します。
  4. このトポロジをメディアセッションに渡します。
再生中、サンプルグラバーシンクはアプリケーションのコールバックのメソッドを呼び出します。

サンプルグラバーシンクを使用して保護されたコンテンツを取得することはできません。

メソッド 3

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

vtbl 8 HRESULT OnSetPresentationClock(IMFPresentationClock* pPresentationClock)

サンプルグラバーシンクにプレゼンテーションクロックが設定されたときに呼び出されます。

pPresentationClockIMFPresentationClock*inプレゼンテーションクロックの IMFPresentationClock インターフェイスへのポインターです。

戻り値

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

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

解説(Remarks)

このメソッドは速やかに戻る必要があります。そうしないと再生に支障をきたす可能性があります。このメソッド内でスレッドをブロックしたり、イベントを待機したり、その他の時間のかかる処理を実行したりしないでください。

vtbl 9 HRESULT OnProcessSample(GUID* guidMajorMediaType, DWORD dwSampleFlags, LONGLONG llSampleTime, LONGLONG llSampleDuration, BYTE* pSampleBuffer, DWORD dwSampleSize)

サンプルグラバーシンクが新しいメディアサンプルを受信したときに呼び出されます。(IMFSampleGrabberSinkCallback.OnProcessSample)

guidMajorMediaTypeGUID*inデータの形式を指定するメジャータイプです。取り得る値の一覧については、Major Media Types を参照してください。
dwSampleFlagsDWORDin予約済みです。
llSampleTimeLONGLONGinこのサンプルのプレゼンテーション時刻(100 ナノ秒単位)です。 サンプルにプレゼンテーション時刻がない場合、このパラメーターの値は _I64_MAX になります。
llSampleDurationLONGLONGinサンプルの継続時間(100 ナノ秒単位)です。 サンプルに継続時間がない場合、このパラメーターの値は _I64_MAX になります。
pSampleBufferBYTE*inサンプルデータを含むバッファーへのポインターです。
dwSampleSizeDWORDinpSampleBuffer バッファーのサイズ(バイト単位)です。

戻り値

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

解説(Remarks)

再生トポロジでサンプルグラバーシンクを使用する場合、このメソッドは速やかに戻る必要があります。そうしないと再生に支障をきたす可能性があります。このメソッド内でスレッドをブロックしたり、イベントを待機したり、その他の時間のかかる処理を実行したりしないでください。

vtbl 10 HRESULT OnShutdown()

サンプルグラバーシンクがシャットダウンされたときに呼び出されます。

戻り値

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

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

解説(Remarks)

このメソッドは、シンクの IMFMediaSink::Shutdown メソッドが呼び出されたときに呼び出されます。

OnShutdown メソッドは速やかに戻る必要があります。そうしないと再生に支障をきたす可能性があります。このメソッド内でスレッドをブロックしたり、イベントを待機したり、その他の時間のかかる処理を実行したりしないでください。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IMFSampleGrabberSinkCallback "{8C7B80BF-EE42-4B59-B1DF-55668E1BDCA8}"
#usecom global IMFSampleGrabberSinkCallback IID_IMFSampleGrabberSinkCallback "{}"
#comfunc global IMFSampleGrabberSinkCallback_OnSetPresentationClock  8 sptr
#comfunc global IMFSampleGrabberSinkCallback_OnProcessSample         9 var,int,int64,int64,var,int
#comfunc global IMFSampleGrabberSinkCallback_OnShutdown              10
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。