Améliorations de la lecture DVD dans Windows Vista

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Elle a été remplacée par MediaPlayer, IMFMediaEngine et Capture audio/vidéo dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement d’utiliser MediaPlayer, IMFMediaEngine et Capture audio/vidéo dans Media Foundation pour le nouveau code, au lieu de DirectShow, si possible. Microsoft recommande, si possible, la réécriture du code existant qui utilise les API héritées pour être à jour avec les nouvelles API.]

Cette section décrit les améliorations apportées à la lecture et la navigation DVD dans Windows Vista.

Spécification d’un décodeur

Dans les versions antérieures de DirectShow, il était difficile de spécifier un décodeur MPEG-2 particulier pendant la création d’un graphique de lecture DVD. À compter de Windows Vista, une application peut spécifier le décodeur de la façon suivante :

  1. Ajoutez le décodeur au graphique avant d’appeler IDvdGraphBuilder::RenderDvdVideoVolume.
  2. Appelez RenderDvdVideoVolume et définissez l’indicateur AM_DVD_DO_NOT_CLEAR. Le navigateur DVD donne la préférence au décodeur que vous avez ajouté.

Prise en charge du Convertisseur vidéo amélioré

Nous vous recommandons d’utiliser le Convertisseur vidéo amélioré (EVR) pour la lecture vidéo dans les applications écrites pour Windows Vista ou version ultérieure. Pour utiliser l’EVR dans une application de lecture DVD, définissez l’indicateur AM_DVD_EVR_ONLY quand vous appelez RenderDvdVideoVolume.

Pour configurer l’EVR avant de générer le graphique, appelez IDvdGraphBuilder::GetDvdInterface et recherchez l’interface IEVRFilterConfig ou IMFVideoRenderer. (Ces interfaces sont documentées dans la documentation du SDK Media Foundation.) Pour plus d’informations sur la configuration du convertisseur vidéo dans un graphique de lecture DVD, consultez Création du graphique de filtre DVD.

Le navigateur DVD n’utilise pas l’EVR, sauf si la méthode IAMDecoderCaps::GetDecoderCaps du décodeur renvoie l’indicateur AM_GETDECODERCAP_QUERY_EVR_SUPPORT. Cet indicateur est défini pour que les applications soient compatibles avec les décodeurs existants. Si RenderDvdVideoVolume ne peut pas utiliser l’indicateur AM_DVD_EVR_ONLY, choisissez un autre convertisseur vidéo en appelant à nouveau la méthode sans l’indicateur.

Lecture inverse fluide

Le navigateur DVD peut désormais effectuer une lecture inverse fluide. En lecture inverse fluide, le navigateur DVD envoie des unités d’objet vidéo (VOBU) entières au décodeur, et le décodeur émet les images dans l’ordre inverse. Cette fonctionnalité nécessite que les décodeurs prennent en charge la lecture inverse fluide.

Quand l’application définit la vitesse de lecture sur une valeur négative, le navigateur DVD recherche la propriété AM_RATE_ReverseMaxFullDataRate dans les décodeurs. La valeur de cette propriété est la valeur absolue de la vitesse inverse maximale x 10000. Par exemple, si la vitesse inverse maximale est -2,0, la valeur est 20000.

Si le décodeur vidéo prend en charge la propriété, le navigateur DVD utilise la lecture inverse fluide. Le flux audio est lu en sens inverse si le décodeur audio prend en charge la propriété, sinon, le flux audio est désactivé. Si le décodeur vidéo ne prend pas en charge la propriété ou que la vitesse de lecture dépasse la vitesse de lecture inverse maximale du décodeur vidéo, le navigateur DVD bascule en mode d’analyse. En mode d’analyse, le navigateur DVD envoie uniquement des images I au décodeur, et supprime toutes les images B et P.

Pendant la lecture inverse fluide, le navigateur DVD envoie des VOBU complètes au décodeur. Le navigateur DVD envoie les VOBU dans l’ordre inverse, mais envoie les images de chaque VOBU dans leur ordre de transfert normal. Au début de chaque VOBU, le navigateur DVD définit l’indicateur AM_ReverseBlockStart sur l’échantillon. À la fin de la VOBU, le navigateur DVD envoie un échantillon vide avec l’indicateur AM_ReverseBlockEnd. Pour récupérer ces indicateurs, appelez IMediaSample2::GetProperties sur l’échantillon. Les indicateurs sont définis dans le membre dwTypeSpecificFlags de la structure AM_SAMPLE2_PROPERTIES.

Le décodeur met en cache les données vidéo jusqu’à ce qu’il reçoive l’échantillon avec l’indicateur AM_ReverseBlockEnd. À ce stade, le décodeur distribue des images décodées dans l’ordre inverse. Par exemple, si VOBU 1 contient les images 1 à 4 et VOBU 2 contient les images 5 à 8, le navigateur DVD envoie les images dans cet ordre :

(Début du bloc) F5 F6 F7 F8 (fin du bloc) (début du bloc) F1 F2 F3 F4 (fin du bloc)

Le décodeur doit traiter les images de la façon suivante :

  1. Décoder VOBU 2.
  2. Images de sortie : F8 F7 F6 F5
  3. Décoder VOBU 1.
  4. Images de sortie : F4 F3 F2 F1

Le navigateur DVD définit l’horodatage sur le premier échantillon de la VOBU (F1 et F5 dans cet exemple), mais l’horodatage contient l’heure de présentation du début du bloc, donc le décodeur doit s’appliquer cette fois au dernier échantillon du bloc (F4 et F8). Les temps de présentation augmentent pendant la lecture inverse.

En règle générale, une VOBU contient jusqu’à 42 images et peut contenir plusieurs groupes d’images (GOP). Pour permettre le décodage de la VOBU entière, le décodeur doit mettre en cache les images I et P décodées. Les VOBU sur les DVD ne sont pas des GOP fermés. Par conséquent, une image B au sein d’un GOP peut nécessiter le décodage de toutes les images de référence du GOP précédent. Si le décodeur n’a pas suffisamment de surfaces pour contenir toutes les images décodées, il peut devoir redécoder les images sélectionnées.

Changements de vitesse

Par défaut, le navigateur DVD vide le graphique entre les changements de vitesse. Toutefois, si le décodeur prend en charge la propriété AM_RATE_ResetOnTimeDisc, le navigateur DVD ne vide pas le graphique, ce qui entraîne une transition plus fluide entre les vitesses de lecture.

Le navigateur DVD relève toujours l’horodatage des échantillons dont la vitesse de lecture est 1x, quelle que soit la vitesse de lecture réelle. Le décodeur doit mettre à l’échelle les horodatages sur les échantillons décodés pour qu’ils correspondent à la vitesse de lecture réelle. (Pour plus d’informations, consultez Propriété AM_RATE_SimpleRateChange.) Par conséquent, quand la vitesse de lecture est différente de 1x, les horodatages des images décodées diffèrent de ceux des images encodées. Chaque fois que le navigateur DVD définit l’indicateur AM_SAMPLE_TIMEDISCONTINUITY sur un échantillon, le décodeur doit resynchroniser ses horodatages. En d’autres termes, l’image décodée doit avoir le même horodatage que l’image d’entrée. Pour récupérer l’indicateur AM_SAMPLE_TIMEDISCONTINUITY, appelez IMediaSample2::GetProperties sur l’échantillon. L’indicateur est défini dans le membre dwSampleFlags de la structure AM_SAMPLE2_PROPERTIES.

Gestion de l’alimentation

Dans Windows Vista, le navigateur DVD offre les améliorations suivantes de gestion de l’alimentation :

  • Résolution plus élevée du minuteur
  • Cache de données plus grand

Résolution du minuteur : les applications peuvent demander une résolution minimale du minuteur en appelant la fonction timeBeginPeriod. Une résolution plus élevée (période plus courte) augmente la réactivité du système aux événements périodiques, comme les délais d’expiration, mais peut également augmenter la fréquence des commutateurs de contexte de thread.

Par défaut, l’horloge de référence dans DirectShow définit la résolution du minuteur sur 1 milliseconde. À cette résolution, le processeur n’entre dans aucun mode d’économie d’énergie. À compter de Windows Vista, le navigateur DVD remplace le comportement par défaut de l’horloge de référence en appelant IReferenceClockTimerControl::SetDefaultTimerResolution sur l’horloge de référence. Cela supprime la demande de résolution de minuteur de 1 milliseconde de l’horloge. Cela peut permettre au processeur d’entrer en mode d’économie d’énergie.

La résolution du minuteur étant un paramètre général, Windows sélectionne la valeur la plus basse demandée. Les filtres du convertisseur de mixage vidéo (VMR) (VMR-7 et VMR-9) définissent la résolution du minuteur sur 1 milliseconde. L’EVR définit généralement la résolution sur une valeur comprise entre 4 et 8 millisecondes, si la composition du Bureau est activée et que l’EVR est en mode plein écran. D’autres applications peuvent également définir la résolution.

Taille du cache : les applications peuvent spécifier la quantité de données mises en cache par le navigateur DVD en définissant l’option DVD_CacheSizeInMo dans la méthode IDvdControl2::SetOption. Si l’application définit cet indicateur sur une valeur élevée (> 50 Mo), le lecteur DVD peut ralentir après la pré-récupération initiale, en fonction du matériel, ce qui peut réduire la consommation d’énergie.

Applications DVD