Partager via


Contrôles d’appareil photo manuel pour la capture vidéo

Cet article explique comment utiliser des contrôles d’appareil manuels pour activer des scénarios de capture vidéo améliorés, notamment la vidéo HDR et la priorité d’exposition.

Les contrôles d’appareil vidéo abordés dans cet article sont tous ajoutés à votre application à l’aide du même modèle. Tout d’abord, vérifiez si la commande est prise en charge par l’appareil sur lequel s’exécute votre application. Si c’est le cas, définissez le mode souhaité pour la commande. En règle générale, si un contrôle particulier n’est pas pris en charge sur l’appareil actuel, vous devez désactiver ou masquer l’élément de l’interface utilisateur qui permet à l’utilisateur d’activer la fonctionnalité.

Toutes les API de contrôle d’appareil abordées dans cet article sont membres de l’espace de noms Windows.Media.Devices.

using Windows.Media.Devices;

Remarque

Cet article repose sur les concepts et le code décrits dans Capture photo, vidéo et audio de base à l’aide de MediaCapture, qui décrit comment implémenter la capture photo et vidéo de base. Nous vous recommandons de vous familiariser avec le modèle de capture simple de contenu multimédia de cet article avant d’adopter des scénarios de capture plus avancés. Le code de cet article suppose que votre application a déjà une instance de MediaCapture qui a été correctement initialisée.

Vidéo HDR

La fonctionnalité vidéo de plage dynamique élevée (HDR) applique le traitement HDR au flux vidéo de l’appareil de capture. Déterminez si la vidéo HDR est prise en charge en sélectionnant la propriété HdrVideoControl.Supported.

Le contrôle vidéo HDR prend en charge trois modes : activé, désactivé et automatique, ce qui signifie que l’appareil détermine dynamiquement si le traitement vidéo HDR améliore la capture multimédia et, le cas échéant, active la vidéo HDR. Pour déterminer si un mode particulier est pris en charge sur l’appareil actuel, vérifiez si la collection HdrVideoControl.SupportedModes contient le mode souhaité.

Activez ou désactivez le traitement vidéo HDR en définissant HdrVideoControl.Mode sur le mode souhaité. Ce contrôle nécessite que le flux soit à un état arrêté avant la définition du mode, voir 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;
}

Priorité d’exposition

L’ExposurePriorityVideoControl, lorsqu’il est activé, évalue les images vidéo de l’appareil de capture pour déterminer si la vidéo capture une scène basse lumière. Si c’est le cas, le contrôle réduit la fréquence d’images de la vidéo capturée afin d’augmenter le temps d’exposition pour chaque image et d’améliorer la qualité visuelle de la vidéo capturée.

Déterminez si le contrôle de priorité d’exposition est pris en charge sur l’appareil actuel en vérifiant la propriété ExposurePriorityVideoControl.Supported.

Activez ou désactivez le contrôle de priorité d’exposition en définissant ExposurePriorityVideoControl.Enabled sur le mode souhaité.

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

Dénoisage temporel

À compter de Windows 10, version 1803, vous pouvez activer le dénois temporel pour la vidéo sur les appareils qui le prennent en charge. Cette fonctionnalité fusionne les données d’image de plusieurs images adjacentes en temps réel pour produire des images vidéo qui ont moins de bruit visuel.

VideoTemporalDenoisingControl permet à votre application de déterminer si la dénoisisation temporelle est prise en charge sur l’appareil actuel et, le cas échéant, quels modes de dénoising sont pris en charge. Les modes de dénoisage disponibles sont Désactivé, Activé et Automatique. Un appareil peut ne pas prendre en charge tous les modes, mais chaque appareil doit prendre en charge auto ou activé et désactivé.

L’exemple suivant utilise une interface utilisateur simple pour fournir des cases d’option permettant à l’utilisateur de basculer entre les modes de dénoising.

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

Dans la méthode suivante, la propriété VideoTemporalDenoisingControl.Supported est vérifiée pour voir si la dénoisation temporelle est prise en charge du tout sur l’appareil actuel. Si c’est le cas, nous vérifions que l’option Désactivé et Activé est prise en charge, auquel cas nous rendons nos cases d’option visibles. Ensuite, les boutons Auto et On sont rendus visibles si ces méthodes sont prises en charge.

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

Dans le gestionnaire d’événements Checked pour les cases d’option, le nom du bouton est activé et le mode correspondant est défini en définissant la propriété 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;
    }
}

Désactivation de la dénoisation temporelle lors du traitement des images

La vidéo qui a été traitée à l’aide d’un dénois temporel peut être plus agréable à l’œil humain. Toutefois, étant donné que le dénoisage temporel peut avoir un impact sur la cohérence de l’image et diminuer la quantité de détails dans le cadre, les applications qui effectuent le traitement d’images sur les images, telles que l’inscription ou la reconnaissance optique de caractères, peuvent désactiver par programmation le dénoisage lorsque le traitement d’image est activé.

L’exemple suivant détermine les modes de dénoisage pris en charge et stocke ces informations dans certaines variables de classe.

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

}

Lorsque l’application active le traitement des images, elle définit le mode de dénoising sur Désactivé si ce mode est pris en charge afin que le traitement d’images puisse utiliser des images brutes qui n’ont pas été dénoisées.

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

    _isProcessing = true;
}

Lorsque l’application désactive le traitement d’images, elle définit le mode de dénoising sur Activé ou Automatique, selon le mode pris en charge.

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

Pour plus d’informations sur l’obtention d’images vidéo pour le traitement d’images, consultez Traiter des images multimédias avec MediaFrameReader.