attributo MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODES
Configura un'origine del dispositivo fotocamera rappresentata da un'istanza di IMFMEdiaSource in modalità di controllo o in modalità di condivisione.
Tipo di dati
UINT32
Get/set
Per ottenere questo attributo, chiamare IMFAttributes::GetUINT32.
Per impostare questo attributo, chiamare IMFAttributes::SetUINT32.
Osservazioni
Quando questo attributo non è impostato o impostato su 0, l'origine del dispositivo fotocamera viene configurata in modalità di controllo. Questa è la modalità predefinita per le origini della fotocamera. Quando si usa la modalità di controllo, tutte le operazioni della fotocamera sono disponibili e l'applicazione può modificare i tipi di supporti e/o i controlli della fotocamera estesa.
Solo un'istanza della modalità di controllo di IMFMediaSource può trovarsi in uno stato attivo in qualsiasi momento. Un IMFMediaSource non viene considerato attivo dopo la creazione di un inizializzato. L'origine multimediale diventa attiva solo dopo l'avvio del flusso, con una chiamata a IMFMediaSource::Starto dopo l'impostazione di un valore di controllo della fotocamera tramite l'emissione di un controllo fotocamera chiamando IKsControl::KsProperty con il set di proprietà KSPROPERTYSETID_ExtendedCameraControl o usando l'interfaccia IMFExtendedCameraControl. Per informazioni su come ottenere un'istanza di IMFExtendedCameraControl, vedere IMFExtendedCameraController
Il tentativo di eseguire il rendering di un'istanza di IMFMediaSource quando un'altra istanza della modalità di controllo è già attiva genererà una violazione della condivisione.
In qualsiasi momento è possibile attivare un numero arbitrario di istanze in modalità di condivisione attiva di IMFMediaSource e le nuove istanze della modalità di condivisione create mentre è attiva un'istanza della modalità di controllo. Le istanze della modalità di condivisione non possono modificare i tipi di supporti e devono usare il tipo di supporto corrente in uso. Le istanze della modalità di condivisione non possono modificare KSPROPERTYSETID_ExtendedCameraControl controlli. I controlli della fotocamera legacy, ad esempio PROPSETID_VIDCAP_CAMERACONTROL e PROPSETID_VIDCAP_VIDEOPROCAMP e i controlli specifici oem/IHV, possono essere modificati dalle istanze della modalità di condivisione.
Per configurare un'origine della fotocamera in modalità condivisione, l'attributo deve essere impostato al momento della creazione di IMFMediaSource.
Configurare la modalità di condivisione con MFCreateDeviceSource
L'esempio di codice seguente illustra la creazione di un'istanza in modalità di condivisione 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;
}
Configurare la modalità di condivisione tramite IMFActivate
Nell'esempio seguente viene illustrata la creazione di un'istanza di IMFMediaSource usando IMFActivate. Si noti che l'oggetto IMFActivate memorizza internamente nella cache un IMFMedia Source appena creato dalla chiamata a ActivateObject. Pertanto, se viene chiamato di nuovo ActivateObject prima che venga eseguita una chiamata a DetachObject, l'istanza memorizzata nella cache verrà restituita e tutte le modifiche apportate agli attributi verranno ignorate.
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;
}
Configurare la modalità di condivisione con IMFCaptureEngine
Per attivare il IMFMediaSource in modalità di condivisione tramite IMFCaptureEngine, l'FMIActivate passato per l'origine della fotocamera deve avere l'attributo MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODE. Come indicato in precedenza, dopo la chiamata IMFActivate::ActivateObject, è necessario chiamare DetachObject affinché qualsiasi modifica dell'attributo venga riflessa nell'oggetto attivato.
Configurare la modalità di condivisione con MediaCapture
Quando si accede alla fotocamera usando la classe MediaCapture, impostare la modalità di condivisione usando la proprietà MediaCaptureInitializationSettings.SharingMode.
Fabbisogno
Requisito | Valore |
---|---|
Client minimo supportato |
Windows 11, build 26100 |
Server minimo supportato |
Windows Server |
Intestazione |
|
Vedere anche