MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODES 屬性
設定由IMFMEdiaSource實例所代表的相機裝置來源 , 處於控制模式或共用模式。
數據類型
UINT32
取得/設定
若要取得此屬性,請呼叫 IMFAttributes::GetUINT32。
若要設定此屬性,請呼叫 IMFAttributes::SetUINT32。
言論
當此屬性未設定或設定為 0 值時,相機裝置來源會設定為控制模式。 這是相機來源的預設模式。 當處於控制模式時,所有相機作業都可以使用,而且應用程式可能會變更媒體類型和/或擴充相機控制元件。
IMFMediaSource 只有一個控制模式實例隨時處於作用中狀態。 IMFMediaSource 在建立初始化之後不會被視為作用中。 媒體來源只有在串流啟動之後才會變成作用中,呼叫 imfMediaSource::Start,或是在相機控件值發出之後,藉由呼叫 IKsControl::KsProperty 設定屬性集 KSPROPERTYSETID_ExtendedCameraControl,或使用 IMFExtendedCameraControl 介面來設定相機控件。 如需取得 IMFExtendedCameraControl實例的詳細資訊,請參閱 IMFExtendedCameraController
當另一個控制模式實例已在使用中時,嘗試轉譯作用中的 IMFMediaSource 實例會導致共用違規。
您可以隨時有任意數目的作用中共用模式實例 IMFMediaSource,而且在控制模式實例為作用中時,可以啟動新建立的共用模式實例。 共用模式實例無法變更媒體類型,而且必須使用目前的媒體類型。 共用模式實例無法變更 KSPROPERTYSETID_ExtendedCameraControl 控件。 共用模式實例可以變更舊版相機控件,例如 PROPSETID_VIDCAP_CAMERACONTROL 和 PROPSETID_VIDCAP_VIDEOPROCAMP 和 OEM/IHV 特定控件。
若要將相機來源設定為處於共用模式,必須在建立IMFMediaSource 時設定屬性。
使用 MFCreateDeviceSource 設定共用模式
下列程式代碼範例說明如何使用 MFCreateDeviceSource在共用模式中建立實例。
HRESULT
SampleCreateSharedModeCamera(
_In_z_ LPCWSTR cameraSymbolicName,
_COM_Outptr_ IMFMediaSource** cameraSource
)
{
wil::com_ptr_nothrow<IMFAttributes> initAttributes;
RETURN_HR_IF_NULL (E_INVALIDARG, cameraSymbolicName);
RETURN_HR_IF_NULL (E_POINTER, cameraSource);
*cameraSource = nullptr;
RETURN_IF_FAILED (MFCreateAttributes(&initAttributes, 3));
RETURN_IF_FAILED (initAttributes->SetGUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE, MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID));
RETURN_IF_FAILED (initAttributes->SetString(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK, cameraSymbolicName));
RETURN_IF_FAILED (initAttributes->SetUINT32(MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODE, 1));
RETURN_IF_FAILED (MFCreateDeviceSource(initAttributes.get(), cameraSource));
return S_OK;
}
使用IMFActivate設定共用模式
下列範例說明如何使用 IMFActivate建立 IMFMediaSource 實例。 請注意,IMFActivate 物件會在內部快取從呼叫 ActivateObject的新建立 IMFMediaSource。 因此 ,如果在呼叫 DetachObject 之前再次呼叫 activateObject,則會傳回快取的實例,並忽略屬性的任何變更。
HRESULT
SampleCreateSharedModeCameraFromActivate(
_In_ IMFActivate* activate,
_COM_Outptr_ IMFMediaSource** cameraSource
)
{
RETURN_HR_IF_NULL (E_INVALIDARG, activate);
RETURN_HR_IF_NULL (E_POINTER, cameraSource);
*cameraSource = nullptr;
RETURN_IF_FAILED (activate->SetUINT32(MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODE, 1));
RETURN_IF_FAILED (activate->ActivateObject(IID_PPV_ARGS(cameraSource)));
return S_OK;
}
使用IMFCaptureEngine設定共用模式
若要使用 IMFCaptureEngine在共用模式中啟動 IMFMediaSource,IMFActivate 傳入相機來源必須具有 MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODE 屬性。 如上所述,在呼叫 IMFActivate::ActivateObject 之後,必須呼叫 DetachObject,才能在啟動的物件中反映任何屬性變更。
使用 MediaCapture 設定共用模式
使用 MediaCapture 類別存取相機時,請使用 MediaCaptureInitializationSettings.SharingMode 屬性來設定共用模式。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 |
Windows 11 組建 26100 |
最低支援的伺服器 |
Windows Server |
頁眉 |
|
另請參閱