Bagikan melalui


Kontrol kamera manual untuk pengambilan video

Artikel ini menunjukkan kepada Anda cara menggunakan kontrol perangkat manual untuk mengaktifkan skenario pengambilan video yang ditingkatkan, termasuk video HDR dan prioritas paparan.

Kontrol perangkat video yang dibahas dalam artikel ini semuanya ditambahkan ke aplikasi Anda dengan menggunakan pola yang sama. Pertama, periksa untuk melihat apakah kontrol didukung pada perangkat saat ini tempat aplikasi Anda berjalan. Jika kontrol didukung, atur mode yang diinginkan untuk kontrol. Biasanya, jika kontrol tertentu tidak didukung pada perangkat saat ini, Anda harus menonaktifkan atau menyembunyikan elemen UI yang memungkinkan pengguna mengaktifkan fitur tersebut.

Semua API kontrol perangkat yang dibahas dalam artikel ini adalah anggota namespace Windows.Media.Devices.

using Windows.Media.Devices;

Catatan

Artikel ini dibangun berdasarkan konsep dan kode yang dibahas dalam pengambilan foto, video, dan audio Dasar dengan MediaCapture, yang menjelaskan langkah-langkah untuk menerapkan pengambilan foto dan video dasar. Sebaiknya Anda membiasakan diri dengan pola tangkapan media dasar dalam artikel tersebut sebelum beralih ke skenario penangkapan yang lebih canggih. Kode dalam artikel ini mengasumsikan bahwa aplikasi Anda sudah memiliki instans MediaCapture yang telah diinisialisasi dengan benar.

Video HDR

Fitur video rentang dinamis tinggi (HDR) menerapkan pemrosesan HDR ke aliran video perangkat pengambilan. Tentukan apakah video HDR didukung dengan memilih properti HdrVideoControl.Supported.

Kontrol video HDR mendukung tiga mode: aktif, nonaktif, dan otomatis, yang berarti bahwa perangkat secara dinamis menentukan apakah pemrosesan video HDR akan meningkatkan pengambilan media dan, jika demikian, mengaktifkan video HDR. Untuk menentukan apakah mode tertentu didukung pada perangkat saat ini, periksa untuk melihat apakah koleksi HdrVideoControl.SupportedModes berisi mode yang diinginkan.

Aktifkan atau nonaktifkan pemrosesan video HDR dengan mengatur HdrVideoControl.Mode ke mode yang diinginkan. Kontrol ini mengharuskan aliran berada pada status berhenti sebelum mode diatur, lihat KSPROPERTY_CAMERACONTROL_EXTENDED_VIDEOHDR.

private void SetHdrVideoMode(HdrVideoMode mode)
{
    if (!_mediaCapture.VideoDeviceController.HdrVideoControl.Supported)
    {
        ShowMessageToUser("HDR Video not available");
        return;
    }

    var hdrVideoModes = _mediaCapture.VideoDeviceController.HdrVideoControl.SupportedModes;

    if (!hdrVideoModes.Contains(mode))
    {
        ShowMessageToUser("HDR Video setting not supported");
        return;
    }

    _mediaCapture.VideoDeviceController.HdrVideoControl.Mode = mode;
}

Prioritas paparan

ExposurePriorityVideoControl, saat diaktifkan, mengevaluasi bingkai video dari perangkat pengambilan untuk menentukan apakah video menangkap adegan cahaya rendah. Jika demikian, kontrol menurunkan kecepatan bingkai video yang diambil untuk meningkatkan waktu paparan untuk setiap bingkai dan meningkatkan kualitas visual video yang diambil.

Tentukan apakah kontrol prioritas paparan didukung pada perangkat saat ini dengan memeriksa properti ExposurePriorityVideoControl.Supported.

Aktifkan atau nonaktifkan kontrol prioritas pencahayaan dengan mengatur ExposurePriorityVideoControl.Enabled ke mode yang diinginkan.

if (!_mediaCapture.VideoDeviceController.ExposurePriorityVideoControl.Supported)
{
    ShowMessageToUser("Exposure priority not available");
    return;
}
_mediaCapture.VideoDeviceController.ExposurePriorityVideoControl.Enabled = true;

Pengodean temporal

Dimulai dengan Windows 10, versi 1803, Anda dapat mengaktifkan penghinaan temporal untuk video di perangkat yang mendukungnya. Fitur ini menggabungkan data gambar dari beberapa bingkai yang berdekatan secara real time untuk menghasilkan bingkai video yang memiliki lebih sedikit kebisingan visual.

VideoTemporalDenoisingControl memungkinkan aplikasi Anda menentukan apakah pengodean temporal didukung pada perangkat saat ini, dan jika demikian, mode pengganggu mana yang didukung. Mode penonaktifan yang tersedia mati, Aktif, dan Otomatis. Perangkat mungkin tidak mendukung semua mode, tetapi setiap perangkat harus mendukung Otomatis atau Aktif dan Nonaktif.

Contoh berikut menggunakan UI sederhana untuk menyediakan tombol radio yang memungkinkan pengguna beralih di antara mode denoising.

<StackPanel Orientation="Vertical" HorizontalAlignment="Right" >
    <StackPanel x:Name="denoiseControls" Visibility="Collapsed">
        <TextBlock>Temporal Denoising</TextBlock>
        <RadioButton x:Name="denoiseOffButton" Checked="denoiseButton_Checked"
    GroupName="Denoise Group" Content="Off"/>
        <RadioButton x:Name="denoiseOnButton" Checked="denoiseButton_Checked"
    GroupName="Denoise Group" Content="On" Visibility="Collapsed"/>
        <RadioButton x:Name="denoiseAutoButton" Checked="denoiseButton_Checked"
    GroupName="Denoise Group" Content="Auto" Visibility="Collapsed"/>
    </StackPanel>
</StackPanel>

Dalam metode berikut, properti VideoTemporalDenoisingControl.Supported diperiksa untuk melihat apakah pengodean temporal didukung sama sekali pada perangkat saat ini. Jika demikian, maka kami memeriksa untuk memastikan bahwa Mati dan Otomatis atau Aktif didukung, dalam hal ini kita membuat tombol radio kita terlihat. Selanjutnya, tombol Otomatis dan Aktif dibuat terlihat jika metode tersebut didukung.

private void UpdateDenoiseCapabilities()
{
    if (_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Supported)
    {
         IReadOnlyList<VideoTemporalDenoisingMode> modes = _mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.SupportedModes;
        if(modes.Contains(Windows.Media.Devices.VideoTemporalDenoisingMode.Off) &&
           (modes.Contains(Windows.Media.Devices.VideoTemporalDenoisingMode.On) || 
           modes.Contains(Windows.Media.Devices.VideoTemporalDenoisingMode.Auto)))
        {
            denoiseControls.Visibility = Visibility.Visible;

            if (modes.Contains(Windows.Media.Devices.VideoTemporalDenoisingMode.On))
            {
                denoiseOnButton.Visibility = Visibility.Visible;
            }
            if (modes.Contains(Windows.Media.Devices.VideoTemporalDenoisingMode.Auto))
            {
                denoiseAutoButton.Visibility = Visibility.Visible;
            }
        }
    }
}

Di penanganan aktivitas yang diperiksa untuk tombol radio, nama tombol dicentang dan mode yang sesuai diatur dengan mengatur properti VideoTemporalDenoisingControl.Mode.

private void denoiseButton_Checked(object sender, RoutedEventArgs e)
{
    var button = sender as RadioButton;
    if(button.Name == "denoiseOffButton")
    {
        _mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Mode = Windows.Media.Devices.VideoTemporalDenoisingMode.Off;
    }
    else if (button.Name == "denoiseOnButton")
    {
        _mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Mode = Windows.Media.Devices.VideoTemporalDenoisingMode.On;
    }
    else if (button.Name == "denoiseAutoButton")
    {
        _mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Mode = Windows.Media.Devices.VideoTemporalDenoisingMode.Auto;
    }
}

Menonaktifkan pengodean temporal saat memproses bingkai

Video yang telah diproses menggunakan denosiasi temporal dapat lebih menyenangkan bagi mata manusia. Namun, karena pengodean temporal dapat memengaruhi konsistensi gambar dan mengurangi jumlah detail dalam bingkai, aplikasi yang melakukan pemrosesan gambar pada bingkai, seperti pendaftaran atau pengenalan karakter optik, mungkin ingin menonaktifkan denoisasi secara terprogram saat pemrosesan gambar diaktifkan.

Contoh berikut menentukan mode penyimpangan mana yang didukung dan menyimpan informasi ini dalam beberapa variabel kelas.

private bool _isVideoTemporalDenoisingOffSupported = false;
private bool _isProcessing = false;
private Windows.Media.Devices.VideoTemporalDenoisingMode? _videoDenoisingEnabledMode = null;
private void ConfigureDenoiseForFrameProcessing()
{
    if (_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Supported)
    {
        // Query support for the VideoTemporalDenoising control Off mode
        _isVideoTemporalDenoisingOffSupported = _mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.SupportedModes.Contains(Windows.Media.Devices.VideoTemporalDenoisingMode.Off);

        // Query support for a mode that would enable VideoTemporalDenoising (On or Auto) and toggle it if supported
        if (_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.SupportedModes.Contains(Windows.Media.Devices.VideoTemporalDenoisingMode.On))
        {
            _videoDenoisingEnabledMode = Windows.Media.Devices.VideoTemporalDenoisingMode.On;
            _mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Mode = (Windows.Media.Devices.VideoTemporalDenoisingMode)_videoDenoisingEnabledMode;
        }
        else if (_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.SupportedModes.Contains(Windows.Media.Devices.VideoTemporalDenoisingMode.Auto))
        {
            _videoDenoisingEnabledMode = Windows.Media.Devices.VideoTemporalDenoisingMode.Auto;
            _mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Mode = (Windows.Media.Devices.VideoTemporalDenoisingMode)_videoDenoisingEnabledMode;
        }
    }

}

Saat aplikasi mengaktifkan pemrosesan bingkai, aplikasi mengatur mode denoising ke Nonaktif jika mode tersebut didukung sehingga pemrosesan bingkai dapat menggunakan bingkai mentah yang belum dinonaktifkan.

public void EnableFrameProcessing()
{
    // Toggle Off VideoTemporalDenoising
    if (_isVideoTemporalDenoisingOffSupported)
    {
        _mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Mode = Windows.Media.Devices.VideoTemporalDenoisingMode.Off;
    }

    _isProcessing = true;
}

Saat aplikasi menonaktifkan pemrosesan bingkai, aplikasi mengatur mode denoising ke Aktif atau Otomatis, tergantung mode mana yang didukung.

public void DisableFrameProcessing()
{
    _isProcessing = false;

    // If a VideoTemporalDenoising mode to enable VideoTemporalDenoising is supported, toggle it
    if (_videoDenoisingEnabledMode != null)
    {
        _mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Mode = (Windows.Media.Devices.VideoTemporalDenoisingMode)_videoDenoisingEnabledMode;
    }
}

Untuk informasi selengkapnya tentang mendapatkan bingkai video untuk pemrosesan gambar, lihat Memproses bingkai media dengan MediaFrameReader.