Desain terperinci untuk IHV dan OEM (Profil Kamera V2)

Untuk membantu memahami skema Camera Profile V2 baru, kita mulai dengan deklarasi profil sederhana dan membedahnya untuk memahami bagian individual.

Kami mengambil kamera hipotetis yang mendukung profil High Frame Rate baru. Pertama-tama, kami mendefinisikan beberapa batasan perangkat keras hipotetis untuk perangkat kami.

  1. Pin pratinjau adalah pin 0. Dalam KSFILTER_DESCRIPTOR yang ditentukan oleh driver kamera, ketika array KSPIN_DESCRIPTOR_EX ditentukan, KSPIN_DESCRIPTOR_EX pertama adalah pendeskripsi pin Pratinjau. Demikian pula, pin 1 adalah Pin tangkap dan pin 2 adalah Pin foto.

  2. Karena keterbatasan perangkat keras, perangkat yang dimaksud tidak dapat menangani penskalaan pada kecepatan bingkai 60 fps atau lebih besar. Oleh karena itu, aliran Pratinjau dan Pengambilan harus memiliki resolusi yang sama.

  3. Demikian pula, perangkat juga tidak dapat menangani konversi ruang warna untuk 60 fps atau lebih tinggi, sehingga subjenisnya harus sama antara Pratinjau dan Pengambilan.

  4. Kamera mampu streaming video 4K 16x9 pada 60 fps. Kamera juga mampu 3840x2880@60fps (video 4:3 pada 60 fps).

  5. Kamera tidak dapat menyediakan operasi foto apa pun saat berjalan pada 60 fps.

  6. Selain Profil Kecepatan Bingkai Tinggi, kami menyatakan Profil Perekaman Video.

  7. Profil Perekaman Video memungkinkan kombinasi jenis media apa pun, tetapi tidak ada jenis media yang lebih besar dari 30 fps.

  8. Profil Perekaman Video juga mendukung operasi foto tunggal (misalnya, Urutan non-Foto).

Untuk deklarasi berbasis INF, di bagian DDInstall.Interfaces, direktif AddReg digunakan untuk menerbitkan informasi profil.

Setiap Filter Tipe Media Pin harus diberi nama entri registri. Nama ini harus MTF# di mana # mewakili nilai bilangan bulat. Nilai bilangan bulat tidak perlu berurutan, hanya unik karena mewakili nilai bernama dalam registri OS.

Mengingat batasan ini, kita dapat mendeklarasikan profil berikut:

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
; This is our High Frame Rate Profile.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","BlockedControls",0,"VHDR;VPS;{E0766E84-36A2-4945-906D-092ECBD87445},2;WARM1"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF1",0,"Pin1:((RES==;FRT>=60,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF2",0,"Pin2:(!)"

; Declare the Video Recording Profile here.
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF1",0,"Pin1:((RES==;FRT<=30,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF2",0,"Pin2:((RES==;FRT==;SUT==ALL))"

OEMCameraProfileVersion

Untuk mengaktifkan dukungan Profil Kamera V2, nyatakan versi profil:

Entri OEMCameraProfileVersion mendefinisikan versi profil kami dan untuk revisi spesifikasi ini, harus 2:

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2

Jika entri registri OEMCameraProfileVersion tidak ada, dan entri OEMCameraProfile ada, alur kembali ke skema Profil Kamera 1507.

Ini memastikan kompatibilitas mundur dengan Profil Kamera yang ada.

Ketika entri OEMCameraProfileVersion tersedia, informasi Profil Kamera 1507 yang ada diabaikan dan hanya Profil Kamera V2 yang akan diproses.

Catatan: Jika entri OEMCameraProfileVersion diatur ke 2, tetapi tidak ada deklarasi Camera Profile V2 yang ditemukan, profil tidak akan diterbitkan.

Setelah dideklarasikan, semua profil harus disimpan di bawah kunci registri Profil di bawah simpul Antarmuka Perangkat.

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
; This is our High Frame Rate Profile.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"

Setiap profil harus berupa subkunjuk di bawah kunci Profil menggunakan ID Profil.

ID Profil adalah kombinasi dari Jenis Profil, Indeks Profil.

Tipe Profil mungkin salah satu string berikut atau mungkin berupa string {GUID}:

  • KSCAMERAPROFILE_VideoRecording

  • KSCAMERAPROFILE_HighQualityPhoto

  • KSCAMERAPROFILE_BalancedVideoAndPhoto

  • KSCAMERAPROFILE_VideoConferencing

  • KSCAMERAPROFILE_PhotoSequence

  • KSCAMERAPROFILE_FaceAuth_Mode

  • KSCAMERAPROFILE_HighFrameRate

  • KSCAMERAPROFILE_HDRWithWCGVideo

  • KSCAMERAPROFILE_HDRWithWCGPhoto

  • KSCAMERAPROFILE_VariablePhotoSequence

  • KSCAMERAPROFILE_VideoHDR8

Indeks Profil dapat berupa nilai apa pun dari 0 hingga 0x7FFFFFFF. Nilai indeks dengan set bit urutan tinggi dicadangkan untuk penggunaan internal.

Dasar Profil Kamera V2 dipecah menjadi dua entri skema utama:

  • Batasan Profil

  • Sematkan Filter Tipe Media

Batasan Profil

Batasan Profil adalah deklarasi luas profil yang berpengaruh pada pemrosesan Sematkan Filter Jenis Media. Ini adalah enam tag yang didukung. Mereka mungkin muncul dalam urutan apa pun yang dipisahkan oleh ";":

Batasan Profil Deskripsi
LRS Kunci Resolusi di semua pin. Semua pin yang dideklarasikan dalam profil harus memiliki resolusi yang sama saat aktif.
LFR Kunci Kecepatan Bingkai di semua pin. Semua pin yang dideklarasikan dalam profil harus memiliki kecepatan bingkai yang sama saat aktif.
LST Kunci Subjenis di semua pin. Semua pin yang dideklarasikan dalam profil harus memiliki subjenis yang sama saat aktif.
AAR Terapkan deklarasi profil tingkat pin ke semua rasio aspek.

Pemfilteran berbasis resolusi dilakukan dengan menggunakan produk Lebar * Tinggi resolusi dan produk tersebut digunakan sebagai nilai perbandingan. Namun, jika tag AAR tidak diatur, perbandingan hanya akan dilakukan untuk resolusi dengan rasio aspek yang sama.
DIS Nonaktif. Jika Batasan ini digunakan untuk Batasan Profil, Sematkan Filter Tipe Media diabaikan dan akan diperlakukan sebagai sintaks profil yang tidak valid.

Tag ini mungkin tidak digabungkan dengan tag Batasan Profil lainnya.
UAR Izinkan kombinasi arbitrer rasio aspek resolusi antara pin.

Secara default, rasio aspek di seluruh pin harus sama. Tag ini menghapus batasan default tersebut.

Catatan: Aplikasi didorong untuk menjaga rasio aspek yang sama di seluruh pin yang tersedia.

Jika tag UAR tidak diatur pada deklarasi profil, semua rasio aspek antara pin harus sama. Secara khusus, Pratinjau streaming pada pukul 16:9 saat mengambil foto atau streaming dari pin Ambil pada pukul 4:3 tidak didukung. Upaya untuk melakukannya akan mengakibatkan kesalahan.

Memproses profil sampel di atas:

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
; This is our High Frame Rate Profile.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"

Batasan Profil menunjukkan bahwa untuk profil [KSCAMERAPROFILE_HighFrameRate,0], resolusi, dan subjenis di semua pin harus sama. Ini cocok dengan batasan HW kamera hipotetis kami (tidak ada konversi ruang penskalaan/warna saat berjalan pada 60 fps atau lebih tinggi).

Batasan Encoder

Sekumpulan Batasan Profil opsional mungkin berisi parameter encoder yang direkomendasikan untuk aplikasi yang memilih untuk memilih profil untuk operasi pengodean video. Misalnya, IHV/OEM dapat memilih untuk merekomendasikan penggunaan HEVC melalui H264 untuk sistem tertentu ketika jenis media melebihi ambang batas yang telah ditentukan dalam hal resolusi dan/atau kecepatan bingkai.

Selain itu, karena encoder HW yang ada pada mesin dapat memberikan operasi yang lebih optimal ketika dikonfigurasi dengan parameter pengodean, OEM dapat memilih untuk menulis profil dengan lebih banyak "petunjuk" ke aplikasi.

Untuk memfasilitasi dukungan ini, Batasan tambahan berikut dapat ditambahkan ke profil apa pun.

Subjenis Yang Dikodekan Pilihan

Daftar subjenis berikut adalah Subjenis Yang Dikodekan Pilihan untuk encoder:

  • eSPSubtype_H264

  • eSPSubtype_HEVC

Kedua batasan ini saling eksklusif. Hanya satu yang dapat dinyatakan. Menyatakan keduanya akan menghasilkan profil yang tidak valid dan akan ditolak.

Ketika Batasan Subjenis Yang Dikodekan Pilihan dideklarasikan, penyimpanan atribut MF IMFSensorProfile mengekspos Subjenis Dikodekan Pilihan yang dideklarasikan dengan atribut MF_MT_SUBTYPE.

Profil Encoder Pilihan

Daftar Profil Encoder Pilihan berikut ini sesuai dengan enumerasi eAVEncH264VProfile .

  • eSPProfile_Simple

  • eSPProfile_Base

  • eSPProfile_Main

  • eSPProfile_High

  • eSPProfile_422

  • eSPProfile_High10

  • eSPProfile_444

  • eSPProfile_Extended

  • eSPProfile_ScalableBase

  • eSPProfile_ScalableHigh

  • eSPProfile_MultiviewHigh

  • eSPProfile_StereoHigh

  • eSPProfile_ConstrainedBase

  • eSPProfile_UCConstrainedHigh

  • eSPProfile_UCScalableConstrainedBase

  • eSPProfile_UCScalableConstrainedHigh

  • eSPProfileH265_Main_420_8

  • eSPProfileH265_Main_420_10

  • eSPProfileH265_Main_420_12

  • eSPProfileH265_Main_422_10

  • eSPProfileH265_Main_422_12

  • eSPProfileH265_Main_444_8

  • eSPProfileH265_Main_444_10

  • eSPProfileH265_Main_444_12

  • eSPProfileH265_Monochrome_12

  • eSPProfileH265_Monochrome_16

  • eSPProfileH265_MainIntra_420_8

  • eSPProfileH265_MainIntra_420_10

  • eSPProfileH265_MainIntra_420_12

  • eSPProfileH265_MainIntra_422_10

  • eSPProfileH265_MainIntra_422_12

  • eSPProfileH265_MainIntra_444_8

  • eSPProfileH265_MainIntra_444_10

  • eSPProfileH265_MainIntra_444_12

  • eSPProfileH265_MainIntra_444_12

  • eSPProfileH265_MainStill_420_8

  • eSPProfileH265_MainStill_444_8

  • eSPProfileH265_MainStill_444_16

Deklarasi Profil Encoder Pilihan di atas saling eksklusif. Hanya satu yang dapat dinyatakan. Menyatakan lebih dari satu akan menghasilkan profil yang tidak valid dan akan ditolak.

Ketika Batasan Profil Encoder Pilihan dideklarasikan, penyimpanan atribut MF IMFSensorProfile mengekspos Profil Encoder Pilihan yang dinyatakan dengan atribut MF_MT_MPEG2_PROFILE.

CATATAN: Profil eSPProfileH265 hanya valid untuk subjenis yang dikodekan HEVC.

Batasan Jumlah BFrame yang Direkomendasikan menyediakan cara bagi OEM untuk menunjukkan jumlah bingkai B yang direkomendasikan untuk video yang dikodekan:

  • eSPBFCount_X

Di mana X mewakili Jumlah BFrame: Misalnya, eSPBFCount_0 menunjukkan Jumlah Bingkai 0 B.

Ketika Batasan Jumlah BFrame yang Direkomendasikan dinyatakan, penyimpanan atribut MF IMFSensorProfile mengekspos Jumlah BFrame yang Direkomendasikan yang dinyatakan dengan atribut CODECAPI_AVEncMPVDefaultBPictureCount.

Batasan Laju Bit yang Direkomendasikan menyediakan cara bagi OEM untuk menentukan laju bit pengodean rata-rata (saat menggunakan mode kontrol laju pengodean yang sesuai) dan/atau laju bit maksimum:

  • eSPBitRate_XXXXX

  • eSPMaxBitRate_XXXXX

Kedua Batasan ini dapat ditentukan secara independen atau bersama-sama. XXXXX mewakili laju bit dalam Kbps. Misalnya, eSPBitRate_5000 mewakili 5.000.000 bit per detik.

eSPBitRate_XXXXX, ketika ditentukan oleh OEM akan diekspos melalui penyimpanan atribut MF IMFSensorProfile melalui atribut CODECAPI_AVEncCommonMeanBitRate.

eSPMaxBitRate_XXXXX ketika ditentukan oleh OEM, akan diekspos melalui penyimpanan atribut MF IMFSensorProfile melalui CODECAPI_AVEncCommonMaxBitRate.

Contoh Batasan Encoder

Contoh INF berikut menunjukkan bagaimana OEM dapat mendeklarasikan Batasan Encoder:

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","Constraint",0,"eSPSubtype_HEVC;eSPProfile_Main;eSPBFCount_1;eSPBitRate_20000;eSPMaxBitRate_50000"

Contoh Batasan Encoder di atas akan menghasilkan penyimpanan atribut MF IMFSensorProfile profil KSCAMERAPROFILE_VideoRecording,0 (lihat deskripsi API di bawah) yang berisi berbagai atribut encoder sebagai berikut:

HRESULT
CheckEncoderParameters(
    _In_ IMFSensorProfile* pProfile
    )
{
    HRESULT hr = S_OK;
    ComPtr<IMFAttributes> spAttributes;
    GUID guidSubtype = GUID_NULL;
    UINT32 eProfile = eAVEncH264VProfile_unknown;
    UINT32 uiBFrameCount = 0;
    UINT32 uiBitRate = 0;
    UINT32 uiMaxBitRate = 0;

    if (nullptr == pProfile)
    {
        return E_INVALIDARG;
    }

    RETURN_IF_FAILED (pProfile->QueryInterface(IID_PPV_ARGS(&spAttributes)));
    if (SUCCEEDED(spAttributes->GetGUID(MF_MT_SUBTYPE, &guidSubtype)))
    {
        if (guidSubtype == MFVideoFormat_HEVC)
        {
            // Use HEVC codec.
        }
        else
        {
            // Use H264 codec.
        }
    }
    if (SUCCEEDED(spAttributes->GetUINT32(MF_MT_MPEG2_PROFILE, &eProfile)))
    {
        // Use the eProfile provided for encoder profile.
    }
    if (SUCCEEDED(spAttributes->GetUINT32(CODECAPI_AVEncMPVDefaultBPictureCount, &uiBFrameCount)))
    {
        // This is the BFrame count...
    }
    if (SUCCEEDED(spAttributes->GetUINT32(CODECAPI_AVEncCommonMeanBitRate, &uiBitRate)))
    {
        // This is the average bit rate...
    }
    if (SUCCEEDED(spAttributes->GetUINT32(CODECAPI_AVEncCommonMaxBitRate, &uiMaxBitRate)))
    {
        // This is the max bit rate...
    }

    return hr;
}

Di permukaan WINRT API, atribut yang sama ini dapat diperoleh melalui CameraProfile.Properties (lihat deskripsi WINRT API di bawah).

Kontrol Yang Diblokir

Kontrol yang Diblokir akan memungkinkan OEM/IHV untuk secara selektif menonaktifkan kontrol kamera tertentu berdasarkan profil yang dipilih:

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
; This is our High Frame Rate Profile.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","BlockedControls",0,"VHDR;PHSEQ;{E0766E84-36A2-4945-906D-092ECBD87445},2;WARM1"

Dalam contoh di atas, KSCAMERAPROFILE_HighFrameRate,0 menyatakan bahwa Video HDR (VHDR), Photo Sequence (PHSEQ), kontrol kustom yang KSPROPERTY-nya. Set = {E0766E84-36A2-4945-906D-092ECBD87445} dan KSPROPERTY.Id = 2, dan Warm Start on Pin1 tidak didukung.

Ketika profil ini dipilih, alur akan secara eksplisit memblokir kontrol tersebut agar tidak dikeluarkan ke Driver DMFT/Kamera. Ini memungkinkan Driver DMFT/Kamera untuk mengekspos dukungan untuk semua kontrol kamera dan alur akan memastikan bahwa aplikasi yang menggunakan profil kamera tidak akan mencoba menyentuh kontrol yang diblokir.

Kontrol yang Diblokir dapat ditentukan menggunakan salah satu tag di bawah ini untuk kontrol kamera yang ditentukan, atau dapat menggunakan format {GUID},Id.

Tag Deskripsi kontrol
PHSEQ Kontrol Kamera Yang Diperluas - Urutan Foto

Catatan: Memblokir Urutan Foto juga akan memblokir Urutan Foto Variabel.
HANGAT# Kontrol Kamera yang Diperluas - Kontrol Warm Start.

# mewakili ID Pin untuk menonaktifkan kontrol Warm Start.
ADEGAN Kontrol Kamera Yang Diperluas - Mode Adegan.
OBOR Kontrol Kamera Yang Diperluas - Mode Obor.
FLASH Kontrol Kamera Yang Diperluas - Mode Lampu Kilat.
ISO Kontrol Kamera Yang Diperluas - ISO
EVCOMP Kontrol Kamera Yang Diperluas - Kompensasi EV
WBAL Kontrol Kamera Yang Diperluas - Keseimbangan Putih
PAMERAN Kontrol Kamera Yang Diperluas - Pencahayaan
FOKUS Kontrol Kamera yang Diperluas - Fokus
ROI Kontrol Kamera Yang Diperluas - ROI
EXTZOOM Kontrol Kamera Yang Diperluas - Zoom
ADVISO Kontrol Kamera Yang Diperluas - ISO Tingkat Lanjut
VIDST Kontrol Kamera Yang Diperluas - Stabilisasi Video
FACEDT Kontrol Kamera Yang Diperluas - Deteksi Wajah
VHDR Kontrol Kamera yang Diperluas - Video HDR
OIS Kontrol Kamera Yang Diperluas - Stabilisasi Gambar Optik
ADVPHOTO Kontrol Kamera Yang Diperluas - Foto Tingkat Lanjut
FACEAUTH Kontrol Kamera yang Diperluas - Autentikasi Wajah
AMAN Kontrol Kamera Yang Diperluas - Mode Aman
VFP Kontrol Kamera yang Diperluas - VFR

Selain Kontrol Kamera yang Diperluas, profil juga dapat memblokir kontrol warisan di bawah set kontrol PROPSETID_VIDCAP_VIDEOPROCAMP dan PROPSETID_VIDCAP_CAMERACONTROL. PROPSETID_VIDCAP_VIDEOPROCAMP kontrol dapat diblokir dengan menggunakan:

VIDPROC#

Di mana # mewakili ID kontrol:

KSPROPERTY_VIDEOPROCAMP_BRIGHTNESS // 0
KSPROPERTY_VIDEOPROCAMP_CONTRAST // 1
KSPROPERTY_VIDEOPROCAMP_HUE // 2
KSPROPERTY_VIDEOPROCAMP_SATURATION // 3
KSPROPERTY_VIDEOPROCAMP_SHARPNESS // 4
KSPROPERTY_VIDEOPROCAMP_GAMMA // 5
KSPROPERTY_VIDEOPROCAMP_COLORENABLE // 6
KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE // 7
KSPROPERTY_VIDEOPROCAMP_BACKLIGHT_COMPENSATION // 8
KSPROPERTY_VIDEOPROCAMP_GAIN // 9
KSPROPERTY_VIDEOPROCAMP_DIGITAL_MULTIPLIER // 10
KSPROPERTY_VIDEOPROCAMP_DIGITAL_MULTIPLIER_LIMIT // 11
KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE_COMPONENT // 12
KSPROPERTY_VIDEOPROCAMP_POWERLINE_FREQUENCY // 13

Misalnya: VIDPROC13 memblokir kontrol Frekuensi Garis Daya.

Demikian pula, PROPSETID_VIDCAP_CAMERACONTROL dapat diblokir dengan:

CAMCTRL#

Di mana # mewakili ID kontrol:

KSPROPERTY_CAMERACONTROL_PAN // 0
KSPROPERTY_CAMERACONTROL_TILT // 1
KSPROPERTY_CAMERACONTROL_ROLL // 2
KSPROPERTY_CAMERACONTROL_ZOOM // 3
KSPROPERTY_CAMERACONTROL_EXPOSURE // 4
KSPROPERTY_CAMERACONTROL_IRIS // 5
KSPROPERTY_CAMERACONTROL_FOCUS // 6
KSPROPERTY_CAMERACONTROL_SCANMODE // 7
KSPROPERTY_CAMERACONTROL_PRIVACY // 8
KSPROPERTY_CAMERACONTROL_PANTILT // 9
KSPROPERTY_CAMERACONTROL_PAN_RELATIVE // 10
KSPROPERTY_CAMERACONTROL_TILT_RELATIVE // 11
KSPROPERTY_CAMERACONTROL_ROLL_RELATIVE // 12
KSPROPERTY_CAMERACONTROL_ZOOM_RELATIVE // 13
KSPROPERTY_CAMERACONTROL_EXPOSURE_RELATIVE // 14
KSPROPERTY_CAMERACONTROL_IRIS_RELATIVE // 15
KSPROPERTY_CAMERACONTROL_FOCUS_RELATIVE // 16
KSPROPERTY_CAMERACONTROL_PANTILT_RELATIVE // 17
KSPROPERTY_CAMERACONTROL_FOCAL_LENGTH // 18
KSPROPERTY_CAMERACONTROL_AUTO_EXPOSURE_PRIORITY // 19

Sematkan Filter Tipe Media

Beralih ke profil sampel, kita melihat Filter Jenis Media Pin untuk profil Kecepatan Bingkai Tinggi:

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
; This is our High Frame Rate Profile.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF1",0,"Pin1:((RES==;FRT>=60,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF2",0,"Pin2:(!)"

Di bagian di atas, Pin0 (pin Pratinjau) dari profil Kecepatan Bingkai Tinggi, kami mengizinkan resolusi/kecepatan bingkai apa pun yang tersedia pada pin. Untuk perangkat hipotetis kami, driver tidak akan mengekspos kecepatan bingkai apa pun yang lebih besar dari 30 fps untuk pin Pratinjau.

Sematkan angka saat dinyatakan menggunakan INF sesuai dengan ordinal indeks berbasis 0 dari struktur KSPIN_DESCRIPTOR_EX yang ditentukan dalam struktur KSFILTER_DESCRIPTOR yang diiklankan driver port mini AVStream.

Untuk menginterpretasikan Filter Jenis Media Pin dan Set Filter terkait, kita perlu menentukan skema sintaks:

Definisi string ini menggunakan skema Filter Tipe Media Pin berikut. Jika [] ditampilkan, string yang disertakan bersifat opsional, jika tidak, semua string yang dideklarasikan dalam sintaks wajib (sintaks batasan tidak peka huruf besar/kecil):

PinMediaTypeFilter     : Pin#:[(!)]|(FilterSet0)(FilterSet1)...(FilterSetN)
FilterSet              : [!](ResolutionFilter;FrameRateFilter;FourCCFilter)
Resolution             : RES[==|<=|>=|!=]Width,Height
FrameRate              : FRT[==|<=|>=|!=]Num,Denom
Subtype                : SUT[==|!=]SubtypeValue
SubtypeValue           : <See below>

SubtypeValue dapat berbentuk representasi heksadesimal tunggal dari empat nilai CC (misalnya, 0x3231564E == NV12), {GUID} dalam kasus jenis media kustom (kurung kurawal buka/tutup diperlukan dan GUID harus berbentuk: {55D24460-45B7-450E-829B-91A94FF84180} atau tag yang sangat dikenal (NV12, YUY2, dan sebagainya)).

Representasi {GUID} juga dapat digunakan untuk subjenis MFVideoFormat_* jika subjenis yang diketahui tidak memiliki tag yang tercantum.

Untuk sampel kami:

Pin0:((RES==;FRT==;SUT==ALL))

Mengurai ke:

Resolution  : Ignore all resolution checks (implies all resolutions are allowed)
Frame rate  : Ignore all frame rate checks (implies all frame rates are allowed)
Subtype     : All

Ini secara semantik: "Izinkan semua jenis media".

Lihat Filter Kecepatan Bingkai di bawah ini untuk definisi tag Resolusi, Kecepatan Bingkai, dan Subjenis individual.

Untuk Pin1 (pin Capture), deklarasi Frame Rate memiliki nilai yang berbeda:

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
; This is our High Frame Rate Profile.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF1",0,"Pin1:((RES==;FRT>=60,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF2",0,"Pin2:(!)"

Mengurai ke:

Resolution  : Ignore all resolution checks (implies all resolutions are allowed)
Frame rate  : Equal or greater than 60,1
Subtype     : All

Hanya jenis media dengan kecepatan bingkai 60 fps atau lebih besar yang akan diizinkan di bawah profil ini untuk Pin1.

Sementara untuk Pin2 (pin Foto) tidak tersedia:

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
; This is our High Frame Rate Profile.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF1",0,"Pin1:((RES==;FRT>=60,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF2",0,"Pin2:(!)"

Seperti yang tersirat dari sintaksis, Pin Media Type Filter dapat secara opsional menjadi deklarasi tunggal (!), yang menyiratkan untuk pin tersebut, tidak ada format media yang didukung (pin tanpa jenis media yang didukung akan disembunyikan ke klien).

Beralih ke profil Perekaman Video, sekali lagi, kami tidak memiliki batasan pada pin Pratinjau karena kamera hipotetis kami hanya mengekspos pratinjau 30 fps hanya dengan jenis media yang dijamin bersamaan dalam skenario Perekaman Video atau Kecepatan Bingkai Tinggi.

; Declare the Video Recording Profile here.
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","BlockedControls",0,"PHSEQ"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF1",0,"Pin1:((RES==;FRT<=30,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF2",0,"Pin2:((RES==;FRT==;SUT==ALL))"

Tetapi untuk pin Capture, kita perlu membatasi ini hanya untuk jenis media 30 fps karena kita tidak dapat mendukung kecepatan bingkai yang lebih tinggi untuk resolusi yang berbeda antara operasi Pratinjau dan Ambil atau Foto.

; Declare the Video Recording Profile here.
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","BlockedControls",0,"PHSEQ"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF1",0,"Pin1:((RES==;FRT<=30,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF2",0,"Pin2:((RES==;FRT==;SUT==ALL))"

Ini dilakukan menggunakan Frame Rate Equal of Less Than tag (FRT<=) dan menentukan kecepatan bingkai 30 fps.

Pin1:((RES==;FRT<=30,1;SUT==ALL))

Mengurai ke:

Resolution    : Ignore all resolution checks (implies all resolutions are allowed)
Frame rate    : Equal or less than 30,1
Subtype       : All

Untuk pin Foto, kami menyatakan tidak ada dukungan Urutan Foto dengan mendeklarasikan BlockedControls dengan PHSEQ sebagai kontrol yang tidak diizinkan.

; Declare the Video Recording Profile here.
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","BlockedControls",0,"PHSEQ"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF1",0,"Pin1:((RES==;FRT<=30,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF2",0,"Pin2:((RES==;FRT==;SUT==ALL))"

Filter Set

Di bagian sebelumnya, kami melihat beberapa Set Filter dan menjelaskan apa yang diwakili oleh beberapa string skema tersebut. Pada titik ini, perlu untuk menggambarkan sintaks skema Kumpulan Filter untuk diskusi lebih lanjut.

Setiap Set Filter terdiri dari serangkaian deklarasi tertentu untuk Resolusi, Kecepatan Bingkai, dan Subjenis. Trio deklarasi ini, dalam urutan yang ditentukan, diperlukan untuk Set Filter yang valid.

Filter Tipe Media Pin mungkin terdiri dari beberapa Entri Filter:

PinMediaTypeFilter : Pin#:[(!)]|(FilterSet0)(FilterSet1)...(FilterSetN)
FilterSet          : [!](ResolutionFilter;FrameRateFilter;SubtypeFilter)

Jika Set Filter tidak memenuhi skema ini, seluruh deklarasi profil akan ditolak.

Semua string Skema Profil tidak peka huruf besar/kecil.

Setiap Filter harus dipisahkan oleh ";" dan trio Filter Resolusi, Filter Kecepatan Bingkai, dan Filter Subjenis harus dibatasi oleh tanda kurung buka/tutup.

Contoh lain dari Set Filter:

; Allow only 1080p@60fps for any media subtype.
Pin0:((RES==1920,1080;FRT==60,1;SUT==ALL))

; Allow either 1080p@60fps or 1080p@120fps for any subtype but nothing else.
Pin0:((RES==1920,1080;FRT==60,1;SUT==ALL))((RES==1920,1080;FRT==120,1;SUT==ALL))

Seperti yang ditunjukkan pada contoh kedua di atas, untuk beberapa Set Filter pada pin, perbandingan dilakukan dengan OR logis dari dua Set Filter. Misalnya, jika jenis media cocok dengan salah satu dari dua Set Filter, jenis tersebut diizinkan.

Catatan: Untuk memfasilitasi kemampuan baca deklarasi, Set Filter dapat dijelaskan dalam beberapa baris. Untuk melakukannya, mereka harus memiliki Pin# yang sama untuk dikelompokkan bersama:

; Allow only 1080p@60fps or 1080p@120fps
Pin0:((RES==1920,1080;FRT==60,1;SUT==ALL))
Pin0:((RES==1920,1080;FRT==120,1;SUT==ALL))

Secara semantik identik dengan deklarasi di atas. Namun, setiap baris harus memiliki entri MTF# yang unik.

Disabled Pin

Filter Resolusi

Seperti yang didefinisikan dalam Ketentuan Dokumen, Filter Resolusi menentukan cara memfilter berdasarkan atribut MF_MT_FRAME_SIZE IMFMediaType.

Sintaks Filter Resolusi:

Resolution : RES[==|<=|>=|!=]Width,Height

Atribut Filter Resolusi

Atribut Filter Resolusi menggunakan string RES. String ini tidak peka huruf besar/kecil.

Operator Perbandingan Filter Resolusi

Berikut ini adalah operator yang didukung:

Operator perbandingan Deskripsi
== Memungkinkan jika Resolusi sama dengan resolusi yang dideklarasikan.

Jika Set Filter adalah Set Filter Pengecualian, tag ini akan Melarang jika Resolusi sama dengan resolusi yang dinyatakan.

Catatan: Jika deklarasi menggunakan operator == dan Nilai Filter kosong (misalnya, RES==;), atribut MF_MT_FRAME_SIZE diabaikan.
<= Izinkan jika Resolusi sama atau kurang dari resolusi yang dinyatakan.

Perbandingan resolusi dilakukan berdasarkan jumlah piksel total (produk Lebar *Tinggi) dan berdasarkan rasio aspek.

Jika AAR dideklarasikan dalam Batasan Profil, jumlah piksel total diterapkan ke semua rasio aspek. Jika tidak, hanya rasio aspek yang cocok.

Jika Set Filter adalah Set Filter Pengecualian, tag ini akan Melarang jika Resolusi sama atau kurang dari resolusi yang dinyatakan.
>= Izinkan jika Resolusi sama atau lebih besar dari resolusi yang dinyatakan.

Perbandingan resolusi dilakukan berdasarkan jumlah piksel total (produk Lebar * Tinggi) dan berdasarkan rasio aspek.

Jika AAR dideklarasikan dalam Batasan Profil, jumlah piksel total diterapkan ke semua rasio aspek. Jika tidak, hanya rasio aspek yang cocok.

Jika Set Filter adalah Set Filter Pengecualian, tag ini akan Melarang jika Resolusi sama atau lebih besar dari resolusi yang dinyatakan.
!= Izinkan jika Resolusi TIDAK sama dengan resolusi yang dideklarasikan.

Jika Set Filter adalah Set Filter Pengecualian, tag ini akan Melarang jika Resolusi TIDAK sama dengan resolusi yang dinyatakan.

Nilai Filter Resolusi

Lebar dan Tinggi Nilai Filter Resolusi harus dalam format desimal yang dipisahkan oleh koma (",") tanpa spasi kosong:

; 1080p only.
RES==1920,1080

Lihat contoh berikut:

; 1080p and any lower resolution.
RES<=1920,1080

Hanya akan cocok dengan resolusi 16:9 sama atau kurang dari 1080p jika tag AAR tidak dinyatakan dalam Batasan Profil. Namun, jika AAR dinyatakan, AAR cocok dengan semua resolusi yang produk Lebar * Tingginya sama atau kurang dari (1920 * 1080 = 2073600).

Contohnya:

  • Jika AAR tidak dinyatakan, entri ini cocok dengan 720p, tetapi bukan 1280x960.

  • Jika AAR dinyatakan, entri ini cocok dengan 720p, 1280x960 dan semua resolusi yang lebih rendah.

Jika AAR tidak dinyatakan untuk memastikan kecocokan resolusi selektif untuk rasio aspek 16:9 dan 4:3, beberapa Set Filter dapat digunakan:

; This will match any 16:9 resolution of 1080p or lower
; and match any 4:3 resolution of 800x600 or lower.
; Effectively skipping 1280x960.
((RES<=1920,1080;FRT==;SUT==ALL))((RES<=800,600;FRT==;SUT==ALL))

Untuk mencocokkan semua resolusi, tentukan sama atau lebih besar dari 0,0

; Match all resolutions.
RES>=0,0

Filter Kecepatan Bingkai

Seperti yang didefinisikan dalam Ketentuan Dokumen, Filter Kecepatan Bingkai menentukan cara memfilter berdasarkan atribut MF_MT_FRAME_RATE IMFMediaType.

Sintaks Filter Kecepatan Bingkai:

FrameRate : FRT[==|<=|>=|!=]Num,Denom

Atribut Filter Kecepatan Bingkai

Atribut Filter Kecepatan Bingkai menggunakan string FRT. String ini tidak peka huruf besar/kecil.

Operator Perbandingan Filter Kecepatan Bingkai

Ini adalah tag Frame Rate yang didukung:

Operator Perbandingan Deskripsi
== Izinkan jika Frame Rate sama dengan Frame Rate yang dinyatakan.

Jika Set Filter adalah Set Filter Pengecualian, tag ini akan Melarang jika Kecepatan Bingkai sama dengan Kecepatan Bingkai yang dideklarasikan.

Catatan: Jika deklarasi menggunakan operator == dan Nilai Filter kosong (misalnya, FRT==;), atribut MF_MT_FRAME_RATE diabaikan.
<= Izinkan jika Kecepatan Bingkai sama atau kurang dari Kecepatan Bingkai yang dinyatakan.

Jika Set Filter adalah Set Filter Pengecualian, tag ini akan Melarang jika Kecepatan Bingkai sama atau kurang dari Kecepatan Bingkai yang dinyatakan.
>= Izinkan jika Kecepatan Bingkai sama atau lebih besar dari Kecepatan Bingkai yang dinyatakan.

Jika Set Filter adalah Set Filter Pengecualian, tag ini akan Melarang jika Kecepatan Bingkai sama atau lebih besar dari Kecepatan Bingkai yang dideklarasikan.
!= Izinkan hanya jika Frame Rate TIDAK sama dengan Frame Rate yang dideklarasikan.

Jika Set Filter adalah Set Filter Pengecualian, tag ini akan Melarang jika Kecepatan Bingkai TIDAK sama dengan Kecepatan Bingkai yang dideklarasikan.
; Allow 30fps.
FRT==30,1

; Allow 30fps or lower.
FRT<=30,1

; Allow 60fps or higher.
FRT>=60,1

; Match for all frame rate.
FRT>=0,0

FRT==;, dan FRT>=0,0 memiliki perbedaan semantik yang halang.

FRT==; : Ignore all frame rate checks for the Filter Set.

FRT>=0,0 : Match any frame rate.

Perbedaan antara FRT==; dan FRT>=0,0 adalah yang pertama memiliki arti yang sama untuk Set Filter Inklusi dan Set Filter Pengecualian. Sedangkan arti FRT>=0,0 akan berubah tergantung pada apakah itu Set Filter Inklusi atau Set Filter Pengecualian.

Lihat Set Filter untuk penjelasan Tentang Kumpulan Filter Pengecualian.

Filter Subjenis

Filter Subjenis menentukan cara memfilter berdasarkan atribut MF_MT_SUBTYPE IMFMediaType.

Sintaks Filter Subjenis:

Subtype : SUT[==|!=]SubtypeValue
SubtypeValue : <See Below>

Atribut Filter Subjenis

Atribut Filter Subjenis menggunakan string SUT. String ini tidak peka huruf besar/kecil.

Operator Perbandingan Filter Subjenis

Operator Perbandingan berikut didukung:

Operator Perbandingan Deskripsi
== Izinkan jika Subjenis sama dengan Subjenis yang dinyatakan.

Jika Set Filter adalah Set Filter Pengecualian, tag ini akan Melarang jika Subjenis sama dengan Subjenis yang dinyatakan.

Catatan: Jika deklarasi menggunakan operator == dan Nilai Filter kosong (misalnya, FRT==;), atribut MF_MT_SUBTYPE diabaikan.
!= Izinkan jika Subjenis TIDAK sama dengan Subjenis yang dinyatakan.

Jika Set Filter adalah Set Filter Pengecualian, tag ini akan Melarang jika Subjenis TIDAK sama dengan Subjenis yang dinyatakan.

Operator Equal atau Less Than (<=) dan Equal atau Greater Than (>=) tidak didukung untuk Filter Subjenis. Jika dinyatakan, profil tidak valid dan ditolak oleh alur.

Nilai Filter Subjenis

Nilai Filter Subjenis mungkin merupakan representasi heksadesimal dari nilai FourCC, deklarasi string GUID jika jenis media kustom digunakan (GUID subjenis MFVideoFormat yang diketahui juga dapat digunakan) atau Tag Subjenis yang Diketahui (lihat daftar di bawah).

; Match any media type which has NV12 subtype
SUT==0x3231564E
; Same as aboveā€¦
SUT=={3231564E-0000-0010-8000-00AA00389B71}
; Still the same (and the recommended declaration).
SUT==NV12

; Allow any subtype except for NV12
SUT!=0x3231564E
; Another way to say the same thing
SUT!={3231564E-0000-0010-8000-00AA00389B71}
; Yet another (and recommended).
SUT!=NV12

; Valid syntax. Profile allow/disallow should ignore
; the subtype and only check against resolution and
; frame rate.
SUT==;

Nilai 0/GUID_NULL dan ALL memiliki arti khusus.

Ini berarti "Keempat nilai CC".

; Match all subtypes
SUT==0
; Another way to say the same thing
SUT=={00000000-0000-0000-0000-000000000000}
; Yet another (and recommended).
SUT==ALL

Secara semantik SUT==; dan SUT==0 memiliki arti yang sangat berbeda.

Saat digunakan dalam filter Inklusi, mereka memiliki efek yang sama: Izinkan subjenis apa pun. Tetapi ketika digunakan dalam filter Pengecualian, SUT==0 berarti mengecualikan semua subjenis. Namun, karena ini memiliki efek yang sama dengan menandai seluruh pin sebagai dinonaktifkan (!), tidak ada alasan untuk menggunakan SUT==0 dalam filter Pengecualian.

Tag Subjenis yang Diketahui

Tag
RGB32
ARGB32
RGB24
L8
L16
D16
AI44
AYUV
YUY2
YVYU
YVU9
UYVY
NV11
NV12
YV12
I420
IYUV
Y210
Y216
Y410
Y416
Y41P
Y41T
Y42T
P210
P216
P010
P016
V210
V216
V410
MP43
MP4S
M4S2
MP4V
WMV1
WMV2
WMV3
WVC1
MSS1
MSS2
MPG1
DVSL
DVSD
DVHD
DV25
DV50
DVH1
DVC
H264
H265
MJPG
420O
HEVC
HEVS
VP80
VP90
ORAW
H263
VP10
AV01
JPEG

Set Filter Pengecualian

Semua contoh Set Filter sejauh ini adalah Entri Filter Inklusif. Mereka secara semantik "jika jenis media memenuhi kriteria, izinkan jenis media dikonsumsi oleh klien".

Hilang dari diskusi setara dengan "jika jenis media memenuhi kriteria, larang jenis media tersedia untuk klien".

Untuk itu kita memerlukan Set Filter Pengecualian.

Jika Set Filter didahului dengan "!":

; Allow everything except 1080p@60fps of any subtype.
Pin0:(!(RES==1920,1080;FRT==60,1;SUT==))

Ini adalah Set Filter Pengecualian. Set Filter Pengecualian, jika jenis media cocok, akan dikecualikan dari daftar jenis media yang tersedia.

Mendeklarasikan beberapa Set Filter akan mengakibatkan pemeriksaan Batasan dari setiap Set Filter untuk di-LOGISKAN satu sama lain:

; Allow everything except 1080p@60fps or 1080p@120fps
Pin0:(!(RES==1920,1080;FRT==60,1;SUT==))(!(RES==1920,1080;FRT==120,1;SUT==))

Pengecualian vs. Set Filter Inklusi

Seperti yang ditunjukkan, Set Filter bisa menjadi Set Filter Inklusi atau Set Filter Pengecualian. Mencampur Set Filter yang berbeda diperbolehkan, tetapi tergantung pada jenis Set Filter apa yang ditambahkan, arti dari Filter Jenis Media Pin dapat berubah:

  1. Jika hanya Entri Filter Inklusi yang dideklarasikan untuk Filter Tipe Media Pin, tipe media apa pun yang tidak cocok dengan salah satu Entri Filter akan dikecualikan dari tipe media yang tersedia.

  2. Jika hanya Entri Filter Pengecualian yang dideklarasikan untuk Filter Tipe Media Pin, tipe media apa pun yang tidak cocok dengan salah satu Entri Filter akan disertakan dari tipe media yang tersedia.

  3. Jika Entri Filter Penyertaan dan Pengecualian dideklarasikan untuk Filter Tipe Media Pin, jenis media apa pun yang cocok dengan Set Filter Inklusi disertakan kecuali juga cocok dengan Set Filter Pengecualian. Set Filter Pengecualian menggantikan Set Filter Inklusi.

Untuk mengilustrasikan contoh ini, mari kita asumsikan untuk Pin0, kita memiliki jenis media berikut yang tersedia:

  • 1920x1080@60fps, NV12

  • 1920x1080@30fps, NV12

  • 1280x720@60fps, NV12

  • 1280x720@30fps, NV12

  • 640x360@60fps, NV12

  • 640x360@30fps, NV12

Jika kita mendeklarasikan Set Filter Inklusi saja:

; Allow all media types 720p and lower resolution whose frame
; rate is 30fps or lower. for example, no 60fps is allowed and no
; 1080p is allowed.
Pin0:((RES<=1280,720;FRT<=30,1;SUT==ALL))

Jika kita mendeklarasikan Set Filter Pengecualian saja:

; Disallow 1080p resolutions or higher or any media types with
; 60fps or higher. Ignore Subtypes.
Pin0:(!(RES>=1920,1080;FRT>=60,1;SUT==))

Jika kami menyatakan Set Filter Inklusi dan Pengecualian:

; Allow all media types except for 640x360@60fps NV12.
Pin0:((RES<=1920,1080;FRT<=60,1;SUT==ALL))
Pin0:(!(RES==640,360;FRT==60,1;SUT==NV12))

Catatan: Karena aturan #2 dalam pernyataan pemrosesan filter, contoh akhir "Izinkan semua jenis media kecuali untuk 640x360@60fps NV12" dapat untuk pin0 sampel kami:

; Allow all media types except for 640x360@60fps NV12.
Pin0:(!(RES==640,360;FRT==60,1;SUT==NV12))

Karena hanya ada satu Set Filter Pengecualian, semua jenis media diizinkan kecuali untuk jenis media yang cocok dengan Set Filter Pengecualian.

Untuk mengilustrasikan Entri Filter Penyertaan dan Pengecualian, beberapa contoh lainnya:

; Allow any media type that is 30fps.
Pin0:((RES==;FRT==30,1;SUT==ALL))

; Allow any media type that is NV12.
Pin0:((RES==;FRT==;SUT==0x3132564E))

; Allow any media type, except for 4K@60fps of any subtype.
Pin0:(!(RES==3840,2160;FRT==60,1;SUT==))

; Allow any media type less than equal to 4K resolution,
; except for YUY2 subtypes.
Pin0:((RES<=3840,2160;FRT>=0,0;SUT==ALL))
Pin0:(!(RES==;FRT==;SUT==YUY2))

; Allow any media type equal or less than 4K
; and equal or less than 60fps
Pin0:((RES<=3840,2160;FRT<=60,1;SUT==ALL))

; Allow any NV12 and YUY2 media types
Pin0:((RES==;FRT>=0,0;SUT==NV12))((RES==;FRT>=0,0;SUT==YUY2))

; Allow any except for MJPG and H264
Pin0:((RES==;FRT>=0,0;SUT!=MJPG))((RES==;FRT>=0,0;SUT!=H264))

; Allow any but exclude only 4K@60fps NV12 & 3840x2880@60fps NV12
Pin0:(!(RES==3840,2160;FRT==60,1;SUT==NV12))(!(RES==3840,2880;FRT==60,1;SUT==NV12))

Spesifikasi pengembang Profil Kamera V2