atrybut MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODES
Konfiguruje źródło urządzenia aparatu reprezentowane przez wystąpienie IMFMEdiaSource być w trybie sterowania lub trybie udostępniania.
Typ danych
UINT32
Pobieranie/ustawianie
Aby uzyskać ten atrybut, wywołaj metodę IMFAttributes::GetUINT32.
Aby ustawić ten atrybut, wywołaj metodę IMFAttributes::SetUINT32.
Uwagi
Jeśli ten atrybut nie jest ustawiony lub ustawiony na wartość 0, źródło urządzenia aparatu jest skonfigurowane w trybie sterowania. Jest to tryb domyślny dla źródeł aparatów. W trybie sterowania wszystkie operacje aparatu są dostępne, a aplikacja może zmieniać typy multimediów i/lub rozszerzone kontrolki aparatu.
Tylko jedno wystąpienie trybu sterowania IMFMediaSource może być w stanie aktywnym w dowolnym momencie. IMFMediaSource nie jest uznawany za aktywny po jego utworzeniu. Źródło multimediów staje się aktywne tylko po uruchomieniu strumienia z wywołaniem IMFMediaSource::Startlub po ustawieniu wartości kontrolki aparatu jest ustawiana przez wystawienie kontrolki aparatu przez wywołanie IKsControl::KsProperty z zestawem właściwości KSPROPERTYSETID_ExtendedCameraControl lub przy użyciu interfejsu IMFExtendedCameraControl. Aby uzyskać informacje na temat uzyskiwania wystąpienia IMFExtendedCameraControl, zobacz IMFExtendedCameraController
Próba renderowania aktywnego wystąpienia IMFMediaSource, gdy inne wystąpienie trybu sterowania jest już aktywne, spowoduje naruszenie udostępniania.
W dowolnym momencie może istnieć dowolna liczba wystąpień trybu aktywnego udostępniania IMFMediaSource, a nowo utworzone wystąpienia trybu udostępniania można aktywować, gdy wystąpienie trybu sterowania jest aktywne. Wystąpienia trybu udostępniania nie mogą zmieniać typów multimediów i muszą używać bieżącego typu nośnika. Wystąpienia trybu udostępniania nie mogą zmieniać kontrolek KSPROPERTYSETID_ExtendedCameraControl. Starsze kontrolki aparatu, takie jak PROPSETID_VIDCAP_CAMERACONTROL i PROPSETID_VIDCAP_VIDEOPROCAMP oraz kontrolki specyficzne dla producenta OEM/IHV, mogą zostać zmienione przez wystąpienia trybu udostępniania.
Aby skonfigurować źródło aparatu w trybie udostępniania, atrybut musi być ustawiony w momencie utworzenia IMFMediaSource.
Konfigurowanie trybu udostępniania przy użyciu funkcji MFCreateDeviceSource
Poniższy przykład kodu ilustruje tworzenie wystąpienia w trybie udostępniania przy użyciu 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;
}
Konfigurowanie trybu udostępniania przy użyciu funkcji IMFActivate
Poniższy przykład ilustruje tworzenie wystąpienia IMFMediaSource przy użyciu IMFActivate. Należy pamiętać, że obiekt IMFActivate będzie wewnętrznie buforować nowo utworzone IMFMediaSource z wywołania do ActivateObject. Dlatego jeśli ActivateObject zostanie wywołana ponownie przed wywołaniem DetachObject, wystąpienie buforowane zostanie zwrócone i wszelkie zmiany atrybutów zostaną zignorowane.
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;
}
Konfigurowanie trybu udostępniania przy użyciu interfejsu IMFCaptureEngine
Aby aktywować IMFMediaSource w trybie udostępniania przy użyciu IMFCaptureEngine, IMFActivate przekazany dla źródła aparatu musi mieć atrybut MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODE. Jak wspomniano powyżej, po wywołaniu IMFActivate::ActivateObject należy wywołać DetachObject, aby wszelkie zmiany atrybutów zostały odzwierciedlone w aktywowanym obiekcie.
Konfigurowanie trybu udostępniania przy użyciu programu MediaCapture
Podczas uzyskiwania dostępu do aparatu przy użyciu klasy MediaCapture ustaw tryb udostępniania przy użyciu właściwości MediaCaptureInitializationSettings.SharingMode.
Wymagania
Wymaganie | Wartość |
---|---|
Minimalny obsługiwany klient |
Windows 11, kompilacja 26100 |
Minimalny obsługiwany serwer |
Windows Server |
Nagłówek |
|
Zobacz też