Dela via


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
Mfidl.h

Se även

alfabetisk lista över Media Foundation-attribut

ljud-/videoinspelning

Avbilda enhetsattribut