Contrôles de caméra manuelle 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 le contrôle est pris en charge sur l’appareil actuel sur lequel votre application s’exécute. Si le contrôle est pris en charge, définissez le mode souhaité pour le contrôle. 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 d’interface utilisateur qui permet à l’utilisateur d’activer la fonctionnalité.
Remarque
Cet article s’appuie sur les concepts et le code abordés dans capture photo, vidéo et audio de base avec MediaCapture, qui décrit les étapes d’implémentation de la capture photo et vidéo de base. Nous vous recommandons de vous familiariser avec le modèle de capture multimédia de base dans cet article avant de passer à 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 le HdrVideoControl.SupportedModes collection contient le mode souhaité.
Activez ou désactivez le traitement vidéo HDR en définissant le
private void SetHdrVideoMode(HdrVideoMode mode)
{
if (!m_mediaCapture.VideoDeviceController.HdrVideoControl.Supported)
{
tbStatus.Text = "HDR Video not available";
return;
}
var hdrVideoModes = m_mediaCapture.VideoDeviceController.HdrVideoControl.SupportedModes;
if (!hdrVideoModes.Contains(mode))
{
tbStatus.Text = "HDR Video setting not supported";
return;
}
m_mediaCapture.VideoDeviceController.HdrVideoControl.Mode = mode;
}
Priorité d’exposition
Le 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 l'ExposurePriorityVideoControl.Enabled en mode souhaité.
if (!m_mediaCapture.VideoDeviceController.ExposurePriorityVideoControl.Supported)
{
tbStatus.Text = "Exposure priority not available";
return;
}
m_mediaCapture.VideoDeviceController.ExposurePriorityVideoControl.Enabled = true;
Débruitage temporel
À partir de Windows 10, version 1803, vous pouvez activer la réduction de bruit temporel pour les vidéos sur les appareils qui la 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.
La VideoTemporalDenoisingControl permet à votre application de déterminer si le débruitage temporel est supporté sur l’appareil actuel et, le cas échéant, quels modes de débruitage sont supportés. Les modes de débruitage disponibles sont Off, On et Auto. Un appareil peut ne pas prendre en charge tous les modes, mais tous les appareils doivent prendre en charge soit Auto, soit On et Off.
L'exemple suivant utilise une interface utilisateur simple pour offrir des boutons radio permettant à l'utilisateur de basculer entre les modes de réduction de bruit.
<StackPanel Orientation="Vertical" HorizontalAlignment="Right" >
<StackPanel x:Name="spDenoise" Visibility="Collapsed">
<TextBlock>Temporal Denoising</TextBlock>
<RadioButton x:Name="rbDenoiseOff" Checked="rbDenoise_Checked"
GroupName="Denoise Group" Content="Off"/>
<RadioButton x:Name="rbDenoiseOn" Checked="rbDenoise_Checked"
GroupName="Denoise Group" Content="On" Visibility="Collapsed"/>
<RadioButton x:Name="rbDenoiseAuto" Checked="rbDenoise_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 le débruitage temporel est pris en charge sur l'appareil actuel. Si c'est le cas, nous vérifions que les options Off et Auto ou On sont prises en charge, auquel cas nous rendons nos boutons radio visibles. Ensuite, les boutons Auto et On sont rendus visibles si ces méthodes sont prises en charge.
private void bUpdateDenoiseCapabilities_Click(object sender, RoutedEventArgs e)
{
if (m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Supported)
{
IReadOnlyList<VideoTemporalDenoisingMode> modes = m_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)))
{
spDenoise.Visibility = Visibility.Visible;
if (modes.Contains(Windows.Media.Devices.VideoTemporalDenoisingMode.On))
{
rbDenoiseOn.Visibility = Visibility.Visible;
}
if (modes.Contains(Windows.Media.Devices.VideoTemporalDenoisingMode.Auto))
{
rbDenoiseAuto.Visibility = Visibility.Visible;
}
}
}
}
Dans le gestionnaire d'événement Checked pour les boutons radio, le nom du bouton est vérifié et le mode correspondant est défini en définissant la propriété VideoTemporalDenoisingControl.Mode.
private void rbDenoise_Checked(object sender, RoutedEventArgs e)
{
var button = sender as RadioButton;
if(button.Name == "denoiseOffButton")
{
m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Mode = Windows.Media.Devices.VideoTemporalDenoisingMode.Off;
}
else if (button.Name == "denoiseOnButton")
{
m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Mode = Windows.Media.Devices.VideoTemporalDenoisingMode.On;
}
else if (button.Name == "denoiseAutoButton")
{
m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Mode = Windows.Media.Devices.VideoTemporalDenoisingMode.Auto;
}
}
Désactivation du débruitage temporel lors du traitement des trames
Une vidéo traitée grâce à un débruitage 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 (m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Supported)
{
// Query support for the VideoTemporalDenoising control Off mode
_isVideoTemporalDenoisingOffSupported = m_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 (m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.SupportedModes.Contains(Windows.Media.Devices.VideoTemporalDenoisingMode.On))
{
_videoDenoisingEnabledMode = Windows.Media.Devices.VideoTemporalDenoisingMode.On;
m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Mode = (Windows.Media.Devices.VideoTemporalDenoisingMode)_videoDenoisingEnabledMode;
}
else if (m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.SupportedModes.Contains(Windows.Media.Devices.VideoTemporalDenoisingMode.Auto))
{
_videoDenoisingEnabledMode = Windows.Media.Devices.VideoTemporalDenoisingMode.Auto;
m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Mode = (Windows.Media.Devices.VideoTemporalDenoisingMode)_videoDenoisingEnabledMode;
}
}
}
Lorsque l’application active le traitement d’images, elle définit le mode de dénoisage sur désactivé si ce mode est pris en charge afin que le traitement des images puisse utiliser des images brutes qui n’ont pas été dénoisées.
public void EnableFrameProcessing()
{
// Toggle Off VideoTemporalDenoising
if (_isVideoTemporalDenoisingOffSupported)
{
m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Mode = Windows.Media.Devices.VideoTemporalDenoisingMode.Off;
}
_isProcessing = true;
}
Lorsque l'application désactive le traitement des trames, elle définit le mode de débruitage sur On ou Auto, 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)
{
m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Mode = (Windows.Media.Devices.VideoTemporalDenoisingMode)_videoDenoisingEnabledMode;
}
}
Pour plus d’informations sur l’obtention de trames vidéo pour le traitement d’images, consultez Traiter des images multimédias avec MediaFrameReader.
Rubriques connexes
Windows developer