MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODES attribut
Konfigurerar en kameraenhetskälla som representeras av en instans av IMFMEdiaSource vara i antingen kontrollläge eller delningsläge.
Datatyp
UINT32
Hämta/ange
Hämta det här attributet genom att anropa IMFAttributes::GetUINT32.
Om du vill ange det här attributet anropar du IMFAttributes::SetUINT32.
Anmärkningar
När det här attributet antingen inte har angetts eller angetts till 0 konfigureras kamerans enhetskälla i kontrollläge. Detta är standardläget för kamerakällor. När du är i kontrollläge är alla kameraåtgärder tillgängliga och programmet kan ändra medietyper och/eller utökade kamerakontroller.
Endast en kontrolllägesinstans av IMFMediaSource- kan vara i ett aktivt tillstånd när som helst. En IMFMediaSource- anses inte vara aktiv efter att den har skapats en initierad. Mediekällan blir aktiv först när strömmen har startats, med ett anrop till IMFMediaSource::Start, eller efter att ett kamerakontrollvärde har angetts antingen genom att utfärda en kamerakontroll genom att anropa IKsControl::KsProperty med egenskapsuppsättningen KSPROPERTYSETID_ExtendedCameraControl eller med hjälp av IMFExtendedCameraControl gränssnitt. Information om hur du hämtar instansen av IMFExtendedCameraControlfinns i IMFExtendedCameraController
Om du försöker aktivera en IMFMediaSource instans när en annan instans av kontrollläget redan är aktiv resulterar det i en delningsöverträdelse.
När som helst kan det finnas ett godtyckligt antal instanser av aktivt delningsläge för IMFMediaSource- och nyligen skapade instanser av delningsläge kan aktiveras medan en instans av kontrollläge är aktiv. Instanser i delningsläge kan inte ändra medietyper och måste använda den aktuella medietypen som används. Delningslägesinstanser kan inte ändra KSPROPERTYSETID_ExtendedCameraControl kontroller. Äldre kamerakontroller som PROPSETID_VIDCAP_CAMERACONTROL och PROPSETID_VIDCAP_VIDEOPROCAMP och OEM/IHV-specifika kontroller kan ändras genom instanser av delningsläge.
Om du vill konfigurera att en kamerakälla ska vara i delningsläge måste attributet anges vid tidpunkten för IMFMediaSource skapandet.
Konfigurera delningsläge med MFCreateDeviceSource
I följande kodexempel visas hur du skapar en instans i delningsläge med 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;
}
Konfigurera delningsläge med hjälp av IMFActivate
I följande exempel visas hur du skapar en IMFMediaSource--instans med hjälp av IMFActivate. Observera att objektet IMFActivate internt cachelagra en nyskapade IMFMediaSource från anropet till ActivateObject. Så om ActivateObject- anropas igen innan ett anrop till DetachObject görs, returneras den cachelagrade instansen och eventuella ändringar av attributen ignoreras.
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;
}
Konfigurera delningsläge med HJÄLP av IMFCaptureEngine
Om du vill aktivera IMFMediaSource i delningsläge med hjälp av IMFCaptureEnginemåste IMFActivate skickas in för kamerakällan ha attributet MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODE. Efter IMFActivate::ActivateObject anropas måste DetachObject anropas för att eventuella attributändringar ska återspeglas i det aktiverade objektet.
Konfigurera delningsläge med MediaCapture
När du öppnar kameran med hjälp av klassen MediaCapture anger du delningsläge med hjälp av egenskapen MediaCaptureInitializationSettings.SharingMode.
Krav
Krav | Värde |
---|---|
Lägsta klient som stöds |
Windows 11, build 26100 |
Lägsta server som stöds |
Windows Server |
Rubrik |
|
Se även