Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Configura un origen de dispositivo de cámara representado por una instancia de IMFMEdiaSource que esté en modo de control o modo de uso compartido.
Tipo de dato
UINT32
Obtener o establecer
Para obtener este atributo, llame a IMFAttributes::GetUINT32.
Para establecer este atributo, llame a IMFAttributes::SetUINT32.
Observaciones
Cuando este atributo no se establece o se establece en 0 valor, el origen del dispositivo de cámara se configura en modo de control. Este es el modo predeterminado para los orígenes de cámara. Cuando se encuentra en modo de control, todas las operaciones de cámara están disponibles y la aplicación puede cambiar los tipos multimedia o los controles extendidos de la cámara.
Solo una instancia de modo de control de IMFMediaSource puede estar en un estado activo en cualquier momento. Una IMFMediaSource no se considera activa después de haber creado una inicialización. El origen multimedia solo se activa una vez iniciada la secuencia, con una llamada a IMFMediaSource::Start, o después de establecer un valor de control de cámara mediante la emisión de un control de cámara llamando a IKsControl::KsProperty con la propiedad establecida KSPROPERTYSETID_ExtendedCameraControl o mediante el uso de la interfaz IMFExtendedCameraControl. Para obtener información sobre cómo obtener una instancia de IMFExtendedCameraControl, consulte IMFExtendedCameraController
Si intenta representar una instancia de IMFMediaSource activa cuando otra instancia de modo de control ya esté activa, se producirá una infracción de uso compartido.
En cualquier momento puede haber un número arbitrario de instancias de modo de uso compartido activo de IMFMediaSource y las instancias del modo de uso compartido recién creadas se pueden activar mientras una instancia de modo de control está activa. Las instancias del modo de uso compartido no pueden cambiar los tipos de medios y deben usar el tipo de medio actual en uso. Las instancias del modo de uso compartido no pueden cambiar los controles de KSPROPERTYSETID_ExtendedCameraControl. Los controles de cámara heredados, como PROPSETID_VIDCAP_CAMERACONTROL y PROPSETID_VIDCAP_VIDEOPROCAMP y controles específicos de OEM/IHV, se pueden cambiar mediante instancias de modo de uso compartido.
Para configurar un origen de cámara para que esté en modo de uso compartido, el atributo debe establecerse en el momento de la creación de IMFMediaSource.
Configurar el modo de uso compartido mediante MFCreateDeviceSource
En el ejemplo de código siguiente se muestra cómo crear una instancia en modo de uso compartido mediante 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;
}
Configurar el modo de uso compartido mediante IMFActivate
En el ejemplo siguiente se muestra cómo crear una instancia de IMFMediaSource mediante IMFActivate. Tenga en cuenta que el objeto IMFActivate almacenará internamente en caché un IMFMediaSource recién creado desde la llamada a ActivateObject. Por lo tanto, si se vuelve a llamar a ActivateObject antes de que se realice una llamada a DetachObject, se devolverá la instancia almacenada en caché y se omitirán los cambios realizados en los atributos.
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;
}
Configurar el modo de uso compartido mediante IMFCaptureEngine
Para activar el IMFMediaSource en modo de uso compartido mediante IMFCaptureEngine, el IMFActivate pasado para la fuente de cámara debe tener el atributo MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODE. Como se indicó anteriormente, después de llamar a IMFActivate::ActivateObject, se debe llamar a DetachObject para que los cambios de atributo se reflejen en el objeto activado.
Configuración del modo de uso compartido mediante MediaCapture
Al acceder a la cámara mediante la clase MediaCapture, establezca el modo de uso compartido mediante la propiedad MediaCaptureInitializationSettings.SharingMode.
Requisitos
| Requisito | Valor |
|---|---|
| Cliente mínimo admitido |
Windows 11, compilación 26100 |
| Servidor mínimo admitido |
Windows Server |
| Encabezado |
|
Consulte también