atribut MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODES

Mengonfigurasi sumber perangkat kamera yang diwakili oleh instans IMFMEdiaSource berada dalam mode pengontrol atau mode berbagi.

Jenis data

UINT32

Dapatkan/atur

Untuk mendapatkan atribut ini, panggil IMFAttributes::GetUINT32.

Untuk mengatur atribut ini, panggil IMFAttributes::SetUINT32.

Komentar

Ketika atribut ini tidak diatur atau diatur ke nilai 0, sumber perangkat kamera dikonfigurasi dalam mode pengontrol. Ini adalah mode default untuk sumber kamera. Saat dalam mode kontrol, semua operasi kamera tersedia dan aplikasi dapat mengubah jenis media dan/atau kontrol kamera yang diperluas.

Hanya satu instans mode pengontrol IMFMediaSource dapat berada dalam status aktif kapan saja. IMFMediaSource tidak dianggap aktif setelah dibuat diinisialisasi. Sumber media hanya menjadi aktif setelah aliran dimulai, dengan panggilan ke IMFMediaSource::Start, atau setelah nilai kontrol kamera diatur baik oleh penerbitan kontrol kamera dengan memanggil IKsControl::KsProperty dengan properti yang diatur KSPROPERTYSETID_ExtendedCameraControl atau dengan menggunakan antarmuka IMFExtendedCameraControl. Untuk informasi tentang mendapatkan instans IMFExtendedCameraControl, lihat IMFExtendedCameraController

Mencoba merender instans IMFMediaSource aktif ketika instans mode pengontrol lain sudah aktif akan mengakibatkan pelanggaran berbagi.

Kapan saja mungkin ada sejumlah instans mode berbagi aktif IMFMediaSource dan instans mode berbagi yang baru dibuat dapat diaktifkan saat instans mode pengontrol aktif. Instans mode berbagi tidak dapat mengubah jenis media dan harus menggunakan jenis media saat ini yang digunakan. Instans mode berbagi tidak dapat mengubah kontrol KSPROPERTYSETID_ExtendedCameraControl. Kontrol kamera warisan seperti kontrol khusus PROPSETID_VIDCAP_CAMERACONTROL dan PROPSETID_VIDCAP_VIDEOPROCAMP dan OEM/IHV dapat diubah dengan berbagi instans mode.

Untuk mengonfigurasi sumber kamera agar berada dalam mode Berbagi, atribut harus diatur pada saat pembuatan IMFMediaSource.

Mengonfigurasi mode berbagi menggunakan MFCreateDeviceSource

Contoh kode berikut mengilustrasikan pembuatan instans dalam mode berbagi menggunakan 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;
}

Mengonfigurasi mode berbagi menggunakan IMFActivate

Contoh berikut mengilustrasikan pembuatan instans IMFMediaSource menggunakan IMFActivate. Perhatikan bahwa objek IMFActivate akan secara internal menyimpan IMFMediaSource yang baru dibuat dari panggilan ke ActivateObject. Jadi, jika ActivateObject dipanggil lagi sebelum panggilan ke DetachObject dibuat, instans yang di-cache akan dikembalikan dan setiap perubahan pada atribut akan diabaikan.

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

Mengonfigurasi mode berbagi menggunakan IMFCaptureEngine

Untuk mengaktifkan IMFMediaSource dalam mode berbagi menggunakan IMFCaptureEngine, IMFActivate yang diteruskan untuk sumber kamera harus memiliki atribut MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODE. Seperti yang dinyatakan di atas, setelah IMFActivate::ActivateObject dipanggil, DetachObject harus dipanggil agar perubahan atribut apa pun tercermin dalam objek yang diaktifkan.

Mengonfigurasi mode berbagi menggunakan MediaCapture

Saat mengakses kamera menggunakan kelas MediaCapture, atur mode berbagi menggunakan properti MediaCaptureInitializationSettings.SharingMode.

Persyaratan

Syarat Nilai
Klien minimum yang didukung
Windows 11, build 26100
Server minimum yang didukung
Windows Server
Header
Mfidl.h

Lihat juga

Daftar Alfabet Atribut Media Foundation

Pengambilan Audio/Video

Mengambil Atribut Perangkat