IMFCaptureRecordSink
COM公式ドキュメント
録画シンクを制御します。
解説(Remarks)
録画シンクは、次のいずれかの宛先にサンプルを配信できます。
- バイトストリーム。
- 出力ファイル。
- アプリケーションが提供するコールバックインターフェイス。
宛先がバイトストリームまたは出力ファイルの場合、アプリケーションは MP4 や ASF などのコンテナー型を指定します。キャプチャエンジンは、オーディオとビデオを多重化して、コンテナー型で定義された形式を生成します。ただし、宛先がコールバックインターフェイスの場合、キャプチャエンジンはサンプルを多重化したり、その他の方法でインターリーブしたりしません。コールバックオプションを使用すると、録画出力を最大限に制御できますが、アプリケーション側でより多くの作業が必要になります。
録画を開始するには、IMFCaptureEngine::StartRecord を呼び出します。
メソッド 6
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
録画データを受け取るバイトストリームを指定します。
| pByteStream | IMFByteStream* | in | バイトストリームの IMFByteStream インターフェイスへのポインター。バイトストリームは書き込み可能である必要があります。 |
| guidContainerType | GUID* | in | ファイルコンテナー型を指定する GUID。指定可能な値は MF_TRANSCODE_CONTAINERTYPE 属性に記載されています。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドを呼び出すと、以前の IMFCaptureRecordSink::SetOutputFileName または IMFCaptureRecordSink::SetSampleCallback の呼び出しが上書きされます。
録画用の出力ファイルの名前を指定します。
| fileName | LPWSTR | in | 出力ファイルの URL を含む null 終端文字列。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
キャプチャエンジンは、ファイル名の拡張子を使用して出力ファイルのコンテナー型を選択します。たとえば、ファイル名の拡張子が ".mp4" の場合、キャプチャエンジンは MP4 ファイルを作成します。
このメソッドを呼び出すと、以前の IMFCaptureRecordSink::SetOutputByteStream または IMFCaptureRecordSink::SetSampleCallback の呼び出しが上書きされます。
1 つのストリームの録画データを受け取るコールバックを設定します。
| dwStreamSinkIndex | DWORD | in | ストリームの 0 から始まるインデックス。このインデックスは、IMFCaptureSink::AddStream メソッドの pdwSinkStreamIndex パラメーターで返されます。 |
| pCallback | IMFCaptureEngineOnSampleCallback* | in | IMFCaptureEngineOnSampleCallback インターフェイスへのポインター。呼び出し元はこのインターフェイスを実装する必要があります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドを呼び出すと、以前の IMFCaptureRecordSink::SetOutputByteStream または IMFCaptureRecordSink::SetOutputFileName の呼び出しが上書きされます。
録画用のカスタムメディアシンクを設定します。
| pMediaSink | IMFMediaSink* | in | メディアシンクの IMFMediaSink インターフェイスへのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、録画用のメディアシンクの既定の選択を上書きします。
録画されるビデオストリームに現在適用されている回転を取得します。
| dwStreamIndex | DWORD | in | ストリームの 0 から始まるインデックス。ビデオストリームを指定する必要があります。 |
| pdwRotationValue | DWORD* | out | 画像の回転量を度単位で受け取ります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
録画されるビデオストリームを回転させます。
| dwStreamIndex | DWORD | in | 回転させるストリームの 0 から始まるインデックス。ビデオストリームを指定する必要があります。 |
| dwRotationValue | DWORD | in | ビデオを回転させる量(度単位)。有効な値は 0、90、180、270 です。値 0 はビデオを元の向きに戻します。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFCaptureRecordSink "{3323B55A-F92A-4FE2-8EDC-E9BFC0634D77}" #usecom global IMFCaptureRecordSink IID_IMFCaptureRecordSink "{}" #comfunc global IMFCaptureRecordSink_SetOutputByteStream 8 sptr,var #comfunc global IMFCaptureRecordSink_SetOutputFileName 9 wstr #comfunc global IMFCaptureRecordSink_SetSampleCallback 10 int,sptr #comfunc global IMFCaptureRecordSink_SetCustomSink 11 sptr #comfunc global IMFCaptureRecordSink_GetRotation 12 int,var #comfunc global IMFCaptureRecordSink_SetRotation 13 int,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMFCaptureRecordSink "{3323B55A-F92A-4FE2-8EDC-E9BFC0634D77}" #usecom global IMFCaptureRecordSink IID_IMFCaptureRecordSink "{}" #comfunc global IMFCaptureRecordSink_SetOutputByteStream 8 sptr,sptr #comfunc global IMFCaptureRecordSink_SetOutputFileName 9 wstr #comfunc global IMFCaptureRecordSink_SetSampleCallback 10 int,sptr #comfunc global IMFCaptureRecordSink_SetCustomSink 11 sptr #comfunc global IMFCaptureRecordSink_GetRotation 12 int,sptr #comfunc global IMFCaptureRecordSink_SetRotation 13 int,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。