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

IMFCaptureSource

COM
IID439a42a8-0d2c-4505-be83-f79b2a05d5c4継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

キャプチャソースオブジェクトを制御します。キャプチャソースは、オーディオおよびビデオのキャプチャデバイスを管理します。

解説(Remarks)

キャプチャソースへのポインターを取得するには、IMFCaptureEngine::GetSource を呼び出します。

メソッド 14

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

vtbl 3 HRESULT GetCaptureDeviceSource(MF_CAPTURE_ENGINE_DEVICE_TYPE mfCaptureEngineDeviceType, IMFMediaSource** ppMediaSource)

現在のキャプチャデバイスの IMFMediaSource オブジェクトポインターを取得します。

mfCaptureEngineDeviceTypeMF_CAPTURE_ENGINE_DEVICE_TYPEinキャプチャエンジンのデバイスの種類。
ppMediaSourceIMFMediaSource**outoptionalデバイスを表す IMFMediaSource へのポインターを受け取ります。

戻り値

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

vtbl 4 HRESULT GetCaptureDeviceActivate(MF_CAPTURE_ENGINE_DEVICE_TYPE mfCaptureEngineDeviceType, IMFActivate** ppActivate)

現在のキャプチャデバイスの IMFActivate オブジェクトポインターを取得します。

mfCaptureEngineDeviceTypeMF_CAPTURE_ENGINE_DEVICE_TYPEinキャプチャエンジンのデバイスの種類。
ppActivateIMFActivate**outoptionalデバイスを表す IMFActivate へのポインターを受け取ります。

戻り値

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

vtbl 5 HRESULT GetService(GUID* rguidService, GUID* riid, IUnknown** ppUnknown)

基盤となる Source Reader オブジェクトへのポインターを取得します。

rguidServiceGUID*inサービス識別子 GUID。現在、値は IID_IMFSourceReader または GUID_NULL でなければなりません。
riidGUID*in要求するインターフェイスのインターフェイス識別子 (IID)。値は IID_IMFSourceReader でなければなりません。値が IID_IMFSourceReader に設定されていない場合、呼び出しは失敗し、E_INVALIDARG を返します。
ppUnknownIUnknown**outoptionalIUnknown インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。

戻り値

このメソッドは、次のいずれかの値を返すことができます。

戻り値 説明
S_OK
成功しました。
E_INVALIDARG
引数が無効です。
MF_E_INVALIDREQUEST
キャプチャソースが初期化されていません。システムにキャプチャデバイスが存在しない可能性があります。
vtbl 6 HRESULT AddEffect(DWORD dwSourceStreamIndex, IUnknown* pUnknown)

キャプチャストリームにエフェクトを追加します。

dwSourceStreamIndexDWORDin

キャプチャストリーム。値には次のいずれかを指定できます。

意味
0–0xFFFFFFFB
ストリームの 0 から始まるインデックス。ストリーム数を取得するには、IMFCaptureSource::GetDeviceStreamCount を呼び出します。
MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM
0xFFFFFFFB
最初の画像ストリーム。
MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM
0xFFFFFFFC
最初のビデオストリーム。
MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM
0xFFFFFFFD
最初のオーディオストリーム。
pUnknownIUnknown*in

次のいずれかへのポインター。

  • IMFTransform インターフェイスを公開する Media Foundation Transform (MFT)。
  • IMFActivate インターフェイスを公開する MFT アクティベーションオブジェクト。

戻り値

このメソッドは、次のいずれかの値を返すことができます。

戻り値 説明
S_OK
成功しました。
MF_E_INVALIDMEDIATYPE
互換性のあるメディアタイプが見つかりませんでした。
MF_E_INVALIDSTREAMNUMBER
dwSourceStreamIndex パラメーターが無効です。

解説(Remarks)

エフェクトは Media Foundation Transform (MFT) として実装する必要があります。pUnknown パラメーターは、MFT のインスタンス、または MFT のアクティベーションオブジェクトを指すことができます。詳細については、Activation Objects を参照してください。

エフェクトは、データがキャプチャシンクに到達する前にストリームへ適用されます。

vtbl 7 HRESULT RemoveEffect(DWORD dwSourceStreamIndex, IUnknown* pUnknown)

キャプチャストリームからエフェクトを削除します。

dwSourceStreamIndexDWORDin

キャプチャストリーム。値には次のいずれかを指定できます。

意味
0–0xFFFFFFFB
ストリームの 0 から始まるインデックス。ストリーム数を取得するには、IMFCaptureSource::GetDeviceStreamCount を呼び出します。
MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM
0xFFFFFFFB
最初の画像ストリーム。
MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM
0xFFFFFFFC
最初のビデオストリーム。
MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM
0xFFFFFFFD
最初のオーディオストリーム。
pUnknownIUnknown*inエフェクトオブジェクトの IUnknown インターフェイスへのポインター。

戻り値

このメソッドは、次のいずれかの値を返すことができます。

戻り値 説明
S_OK
成功しました。
MF_E_INVALIDREQUEST
要求が無効です。指定されたエフェクトが見つからなかった可能性があります。
MF_E_INVALIDSTREAMNUMBER
dwSourceStreamIndex パラメーターが無効です。

解説(Remarks)

このメソッドは、IMFCaptureSource::AddEffect メソッドを使用して以前に追加されたエフェクトを削除します。

vtbl 8 HRESULT RemoveAllEffects(DWORD dwSourceStreamIndex)

キャプチャストリームからすべてのエフェクトを削除します。

dwSourceStreamIndexDWORDin

キャプチャストリーム。値には次のいずれかを指定できます。

意味
0–0xFFFFFFFB
ストリームの 0 から始まるインデックス。ストリーム数を取得するには、IMFCaptureSource::GetDeviceStreamCount を呼び出します。
MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM
0xFFFFFFFB
最初の画像ストリーム。
MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM
0xFFFFFFFC
最初のビデオストリーム。
MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM
0xFFFFFFFD
最初のオーディオストリーム。

戻り値

このメソッドは、次のいずれかの値を返すことができます。

戻り値 説明
S_OK
成功しました。
MF_E_INVALIDSTREAMNUMBER
dwSourceStreamIndex パラメーターが無効です。
vtbl 9 HRESULT GetAvailableDeviceMediaType(DWORD dwSourceStreamIndex, DWORD dwMediaTypeIndex, IMFMediaType** ppMediaType)

いずれかのキャプチャストリームでサポートされている形式を取得します。

dwSourceStreamIndexDWORDin

クエリするストリーム。値には次のいずれかを指定できます。

意味
0–0xFFFFFFFB
ストリームの 0 から始まるインデックス。ストリーム数を取得するには、IMFCaptureSource::GetDeviceStreamCount を呼び出します。
MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM
0xFFFFFFFB
最初の画像ストリーム。
MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM
0xFFFFFFFC
最初のビデオストリーム。
MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM
0xFFFFFFFD
最初のオーディオストリーム。
dwMediaTypeIndexDWORDin取得するメディアタイプの 0 から始まるインデックス。
ppMediaTypeIMFMediaType**outoptionalIMFMediaType インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。

戻り値

このメソッドは、次のいずれかの値を返すことができます。

戻り値 説明
S_OK
成功しました。
MF_E_INVALIDSTREAMNUMBER
dwSourceStreamIndex パラメーターが無効です。
MF_E_NO_MORE_TYPES
dwMediaTypeIndex パラメーターが範囲外です。

解説(Remarks)

ストリーム上で利用可能なすべての形式を列挙するには、メソッドが MF_E_NO_MORE_TYPES を返すまで、dwMediaTypeIndex をインクリメントしながらループ内でこのメソッドを呼び出します。

一部のカメラは、フレームレートの範囲をサポートしている場合があります。最小および最大のフレームレートは、メディアタイプの MF_MT_FRAME_RATE_RANGE_MIN および MF_MT_FRAME_RATE_RANGE_MAX 属性に格納されます。

vtbl 10 HRESULT SetCurrentDeviceMediaType(DWORD dwSourceStreamIndex, IMFMediaType* pMediaType)

キャプチャストリームの出力形式を設定します。

dwSourceStreamIndexDWORDin

設定するキャプチャストリーム。値には次のいずれかを指定できます。

意味
0–0xFFFFFFFB
ストリームの 0 から始まるインデックス。ストリーム数を取得するには、IMFCaptureSource::GetDeviceStreamCount を呼び出します。
MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM
0xFFFFFFFB
最初の画像ストリーム。
MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM
0xFFFFFFFC
最初のビデオストリーム。
MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM
0xFFFFFFFD
最初のオーディオストリーム。
pMediaTypeIMFMediaType*inIMFMediaType インターフェイスへのポインター。

戻り値

このメソッドは、次のいずれかの値を返すことができます。

戻り値 説明
S_OK
成功しました。
MF_E_INVALIDSTREAMNUMBER
dwSourceStreamIndex パラメーターが無効です。

解説(Remarks)

このメソッドは、キャプチャデバイスにネイティブ出力タイプを設定します。デバイスは指定された形式をサポートしている必要があります。利用可能な形式の一覧を取得するには、IMFCaptureSource::GetAvailableDeviceMediaType を呼び出します。

vtbl 11 HRESULT GetCurrentDeviceMediaType(DWORD dwSourceStreamIndex, IMFMediaType** ppMediaType)

キャプチャストリームの現在のメディアタイプを取得します。

dwSourceStreamIndexDWORDin

クエリするストリームを指定します。値には次のいずれかを指定できます。

意味
0–0xFFFFFFFB
ストリームの 0 から始まるインデックス。ストリーム数を取得するには、IMFCaptureSource::GetDeviceStreamCount を呼び出します。
MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM
0xFFFFFFFB
最初の画像ストリーム。
MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM
0xFFFFFFFC
最初のビデオストリーム。
MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM
0xFFFFFFFD
最初のオーディオストリーム。
ppMediaTypeIMFMediaType**outIMFMediaType インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。

戻り値

このメソッドは、次のいずれかの値を返すことができます。

戻り値 説明
S_OK
成功しました。
MF_E_INVALIDSTREAMNUMBER
dwSourceStreamIndex パラメーターが無効です。
vtbl 12 HRESULT GetDeviceStreamCount(DWORD* pdwStreamCount)

デバイスストリームの数を取得します。

pdwStreamCountDWORD*outデバイスストリームの数を受け取ります。

戻り値

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

vtbl 13 HRESULT GetDeviceStreamCategory(DWORD dwSourceStreamIndex, MF_CAPTURE_ENGINE_STREAM_CATEGORY* pStreamCategory)

指定されたソースストリームインデックスのストリームカテゴリを取得します。

dwSourceStreamIndexDWORDinソースストリームのインデックス。
pStreamCategoryMF_CAPTURE_ENGINE_STREAM_CATEGORY*out指定されたソースストリームの MF_CAPTURE_ENGINE_STREAM_CATEGORY を受け取ります。

戻り値

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

vtbl 14 HRESULT GetMirrorState(DWORD dwStreamIndex, BOOL* pfMirrorState)

ビデオプレビューストリームの現在のミラーリング状態を取得します。(IMFCaptureSource.GetMirrorState)

dwStreamIndexDWORDinストリームの 0 から始まるインデックス。
pfMirrorStateBOOL*outミラーリングが有効な場合は TRUE、無効な場合は FALSE の値を受け取ります。

戻り値

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

vtbl 15 HRESULT SetMirrorState(DWORD dwStreamIndex, BOOL fMirrorState)

ビデオプレビューストリームのミラーリングを有効または無効にします。(IMFCaptureSource.SetMirrorState)

dwStreamIndexDWORDinストリームの 0 から始まるインデックス。
fMirrorStateBOOLinTRUE の場合、ミラーリングが有効になります。FALSE の場合、ミラーリングが無効になります。

戻り値

このメソッドは、次のいずれかの値を返すことができます。

戻り値 説明
S_OK
成功しました。
E_NOTIMPL
デバイスストリームにミラーリング機能がありません。
MF_E_INVALIDREQUEST
ソースが初期化されていません。
vtbl 16 HRESULT GetStreamIndexFromFriendlyName(DWORD uifriendlyName, DWORD* pdwActualStreamIndex)

わかりやすいストリーム名から変換された実際のデバイスストリームインデックスを取得します。

uifriendlyNameDWORDin

わかりやすい名前。次のいずれかを指定できます。

  • MF_CAPTURE_ENGINE_FIRST_SOURCE_AUDIO_STREAM
  • MF_CAPTURE_ENGINE_FIRST_SOURCE_VIDEO_STREAM
  • MF_CAPTURE_ENGINE_FIRST_SOURCE_PHOTO_STREAM
  • MF_CAPTURE_ENGINE_PREFERRED_SOURCE_VIDEO_STREAM_FOR_RECORD
  • MF_CAPTURE_ENGINE_PREFERRED_SOURCE_VIDEO_STREAM_FOR_PREVIEW
  • MF_CAPTURE_ENGINE_FIRST_SOURCE_INDEPENDENT_PHOTO_STREAM
pdwActualStreamIndexDWORD*outわかりやすい名前に対応するストリームインデックスの値を受け取ります。

戻り値

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

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IMFCaptureSource "{439A42A8-0D2C-4505-BE83-F79B2A05D5C4}"
#usecom global IMFCaptureSource IID_IMFCaptureSource "{}"
#comfunc global IMFCaptureSource_GetCaptureDeviceSource          3 int,sptr
#comfunc global IMFCaptureSource_GetCaptureDeviceActivate        4 int,sptr
#comfunc global IMFCaptureSource_GetService                      5 var,var,sptr
#comfunc global IMFCaptureSource_AddEffect                       6 int,sptr
#comfunc global IMFCaptureSource_RemoveEffect                    7 int,sptr
#comfunc global IMFCaptureSource_RemoveAllEffects                8 int
#comfunc global IMFCaptureSource_GetAvailableDeviceMediaType     9 int,int,sptr
#comfunc global IMFCaptureSource_SetCurrentDeviceMediaType       10 int,sptr
#comfunc global IMFCaptureSource_GetCurrentDeviceMediaType       11 int,sptr
#comfunc global IMFCaptureSource_GetDeviceStreamCount            12 var
#comfunc global IMFCaptureSource_GetDeviceStreamCategory         13 int,var
#comfunc global IMFCaptureSource_GetMirrorState                  14 int,var
#comfunc global IMFCaptureSource_SetMirrorState                  15 int,int
#comfunc global IMFCaptureSource_GetStreamIndexFromFriendlyName  16 int,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。