MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODES atributo
Configura uma fonte de dispositivo de câmera representada por uma instância de IMFMEdiaSource estar no modo de controle ou no modo de compartilhamento.
Tipo de dados
UINT32
Obter/definir
Para obter esse atributo, chame IMFAttributes::GetUINT32.
Para definir esse atributo, chame IMFAttributes::SetUINT32.
Comentários
Quando esse atributo não está definido ou definido como 0 valor, a fonte do dispositivo da câmera é configurada no modo de controle. Este é o modo padrão para fontes de câmera. Quando no modo de controle, todas as operações da câmera estão disponíveis e o aplicativo pode alterar os tipos de mídia e/ou controles estendidos da câmera.
Apenas uma instância de modo de controle de IMFMediaSource pode estar em um estado ativo a qualquer momento. Um IMFMediaSource não é considerado ativo depois de ter sido criado um inicializado. A fonte de mídia só se torna ativa depois que o fluxo foi iniciado, com uma chamada para IMFMediaSource::Start, ou depois que um valor de controle de câmera é definido pela emissão de um controle de câmera chamando IKsControl::KsProperty com a propriedade definida KSPROPERTYSETID_ExtendedCameraControl ou usando o IMFExtendedCameraControl interface. Para obter informações sobre como obter a instância de IMFExtendedCameraControl, consulte IMFExtendedCameraController
A tentativa de tornar ativa uma instância de IMFMediaSource quando outra instância do modo de controle já estiver ativa resultará em uma violação de compartilhamento.
A qualquer momento, pode haver um número arbitrário de instâncias de modo de compartilhamento ativo de IMFMediaSource e instâncias de modo de compartilhamento recém-criadas podem ser ativadas enquanto uma instância de modo de controle estiver ativa. As instâncias do modo de compartilhamento não podem alterar os tipos de mídia e devem usar o tipo de mídia atual em uso. As instâncias do modo de compartilhamento não podem alterar KSPROPERTYSETID_ExtendedCameraControl controles. Os controles de câmera herdados, como PROPSETID_VIDCAP_CAMERACONTROL e PROPSETID_VIDCAP_VIDEOPROCAMP e controles específicos de OEM/IHV, podem ser alterados por instâncias de modo de compartilhamento.
Para configurar uma fonte de câmera para estar no modo de compartilhamento, o atributo deve ser definido no momento da criação do IMFMediaSource IMFMediaSource.
Configurar o modo de compartilhamento usando MFCreateDeviceSource
O exemplo de código a seguir ilustra a criação de uma instância no modo de compartilhamento usando 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 o modo de compartilhamento usando IMFActivate
O exemplo a seguir ilustra a criação de uma instância de IMFMediaSource usando IMFActivate. Observe que o IMFActivate objeto armazenará em cache internamente um IMFMediaSource recém-criado da chamada para ActivateObject . Portanto, se ActivateObject for chamado novamente antes que uma chamada para DetachObject seja feita, a instância armazenada em cache será retornada e quaisquer alterações nos atributos serão ignoradas.
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 o modo de compartilhamento usando IMFCaptureEngine
Para ativar o IMFMediaSource no modo de compartilhamento usando IMFCaptureEngine, o IMFActivate passado para a fonte da câmera deve ter o atributo MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODE. Como dito acima, depois que IMFActivate::ActivateObject é chamado, DetachObject deve ser chamado para que quaisquer alterações de atributo sejam refletidas no objeto ativado.
Configurar o modo de compartilhamento usando MediaCapture
Ao acessar a câmera usando a classe MediaCapture, defina o modo de compartilhamento usando a propriedade MediaCaptureInitializationSettings.SharingMode.
Requerimentos
Exigência | Valor |
---|---|
Cliente mínimo suportado |
Windows 11, compilação 26100 |
Servidor mínimo suportado |
Servidor Windows |
Cabeçalho |
|
Ver também