Partager via


attribut MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODES

Configure une source d’appareil photo représentée par une instance de IMFMEdiaSource être en mode de contrôle ou en mode de partage.

Type de données

UINT32

Obtenir/définir

Pour obtenir cet attribut, appelez IMFAttributes ::GetUINT32.

Pour définir cet attribut, appelez IMFAttributes ::SetUINT32.

Remarques

Lorsque cet attribut n’est pas défini ou défini sur 0 valeur, la source de l’appareil photo est configurée en mode de contrôle. Il s’agit du mode par défaut pour les sources de caméra. Lorsque vous contrôlez le mode, toutes les opérations de caméra sont disponibles et l’application peut modifier les types multimédias et/ou les contrôles de caméra étendus.

Une seule instance de mode de contrôle de IMFMediaSource peut être dans un état actif à tout moment. Un IMFMediaSource n’est pas considéré comme actif après sa création d’une initialisation. La source multimédia devient active uniquement une fois le flux démarré, avec un appel à IMFMediaSource ::Start, ou une fois qu’une valeur de contrôle de caméra est définie par l’émission d’un contrôle de caméra en appelant IKsControl ::KsProperty avec la propriété définie KSPROPERTYSETID_ExtendedCameraControl ou à l’aide de l’interface IMFExtendedCameraControl. Pour plus d’informations sur l’obtention d’une instance de IMFExtendedCameraControl, consultez IMFExtendedCameraController

Une tentative de rendu actif d’une instance IMFMediaSource lorsque l’autre instance de mode de contrôle est déjà active entraîne une violation de partage.

À tout moment, il peut y avoir un nombre arbitraire d’instances de mode de partage actif de IMFMediaSource et les instances de mode de partage nouvellement créées peuvent être activées pendant qu’une instance de mode de contrôle est active. Les instances en mode de partage ne peuvent pas modifier les types de supports et doivent utiliser le type de média actuel en cours d’utilisation. Les instances en mode de partage ne peuvent pas modifier les contrôles KSPROPERTYSETID_ExtendedCameraControl. Les contrôles de caméra hérités tels que PROPSETID_VIDCAP_CAMERACONTROL et PROPSETID_VIDCAP_VIDEOPROCAMP et les contrôles spécifiques à OEM/IHV peuvent être modifiés en partageant des instances en mode de partage.

Pour configurer une source de caméra en mode partage, l’attribut doit être défini au moment de la création de IMFMediaSource.

Configurer le mode de partage à l’aide de MFCreateDeviceSource

L’exemple de code suivant illustre la création d’une instance en mode de partage à l’aide de 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;
}

Configurer le mode de partage à l’aide de IMFActivate

L’exemple suivant illustre la création d’une instance IMFMediaSource à l’aide de IMFActivate. Notez que l’objet IMFActivate met en cache en interne un IMFMediaSource nouvellement créé à partir de l’appel à ActivateObject. Par conséquent, si ActivateObject est appelé à nouveau avant qu’un appel à DetachObject soit effectué, l’instance mise en cache est retournée et toutes les modifications apportées aux attributs seront ignorées.

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;
}

Configurer le mode de partage à l’aide de IMFCaptureEngine

Pour activer le IMFMediaSource en mode de partage à l’aide IMFCaptureEngine, le IMFActivate transmis pour la source de l’appareil photo doit avoir l’attribut MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODE. Comme indiqué ci-dessus, après IMFActivate ::ActivateObject est appelée, DetachObject doit être appelé pour que les modifications d’attribut soient reflétées dans l’objet activé.

Configurer le mode de partage à l’aide de MediaCapture

Lorsque vous accédez à la caméra à l’aide de la classe MediaCapture, définissez le mode de partage à l’aide de la propriété MediaCaptureInitializationSettings.SharingMode.

Exigences

Exigence Valeur
Client minimum pris en charge
Windows 11, build 26100
Serveur minimum pris en charge
Windows Server
En-tête
Mfidl.h

Voir aussi

liste alphabétique des attributs Media Foundation

de capture audio/vidéo

capturer des attributs d’appareil