Mejoras de reproducción de DVD en Windows Vista

[La característica asociada a esta página, DirectShow es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine, y Captura de audio y vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código useMediaPlayer, IMFMediaEngine y Captura de audio y vídeo en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible].

En estas secciones se describen las mejoras en la reproducción de DVD y la navegación en Windows Vista.

Especificación de un descodificador

En versiones anteriores de DirectShow, era difícil especificar un descodificador MPEG-2 determinado al compilar un grafo de reproducción de DVD. A partir de Windows Vista, una aplicación puede especificar el descodificador de la siguiente manera:

  1. Agregue el descodificador al grafo antes de llamar a IDvdGraphBuilder::RenderDvdVideoVolume.
  2. Llame a RenderDvdVideoVolume y establezca la marca AM_DVD_DO_NOT_CLEAR. El navegador de DVD dará preferencia al descodificador que agregó.

Compatibilidad con el representador de vídeo mejorado

Se recomienda que las aplicaciones escritas para Windows Vista o versiones posteriores usen el Representador de vídeo mejorado (EVR) para la reproducción de vídeo. Para usar el EVR en una aplicación de reproducción de DVD, establezca la marca AM_DVD_EVR_ONLY al llamar a RenderDvdVideoVolume.

Para configurar el EVR antes de compilar el gráfico, llame a IDvdGraphBuilder::GetDvdInterface y consulte la interfaz IEVRFilterConfig o IMFVideoRenderer. (Estas interfaces se documentan en la documentación del SDK de Media Foundation). Para obtener más información sobre cómo configurar el representador de vídeo en un grafo de reproducción de DVD, vea Compilación del grafo de filtro de DVD.

El navegador de DVD no usará el EVR a menos que el método IAMDecoderCaps::GetDecoderCaps del descodificador devuelva la marca AM_GETDECODERCAP_QUERY_EVR_SUPPORT. Esta marca se define para asegurarse de que las aplicaciones son compatibles con los descodificadores existentes. Si RenderDvdVideoVolume no usa la marca AM_DVD_EVR_ONLY, vuelva a otro representador de vídeo llamando al método de nuevo sin la marca .

Reproducción inversa fluida

El navegador de DVD ahora puede realizar una reproducción inversa fluida. En la reproducción inversa fluida, el navegador de DVD envía unidades de objeto de vídeo completas (VOBU) al descodificador y el descodificador emite los fotogramas en orden inverso. Esta característica requiere que los descodificadores admitan una reproducción inversa fluida.

Cuando la aplicación establece la velocidad de reproducción en un valor negativo, el navegador de DVD consulta los descodificadores para la propiedad AM_RATE_ReverseMaxFullDataRate. El valor de esta propiedad es el valor absoluto de la velocidad inversa máxima x 10000. Por ejemplo, si la velocidad inversa máxima es -2,0, el valor es 20000.

Si el descodificador de vídeo admite la propiedad, el navegador de DVD usa una reproducción inversa fluida. La secuencia de audio se reproduce de manera inversa si el descodificador de audio admite la propiedad; de lo contrario, la secuencia de audio estará silenciada. Si el descodificador de vídeo no admite la propiedad o la velocidad de reproducción supera la velocidad inversa máxima del descodificador de vídeo, el navegador de DVD cambia al modo de exploración. En el modo de exploración, el navegador de DVD envía solo fotogramas I al descodificador y quita todos los fotogramas B y P.

Durante la reproducción inversa fluida, el navegador de DVD envía VOBU completos al descodificador. El navegador de DVD envía los VOBU en orden inverso, pero envía los fotogramas dentro de cada VOBU en su orden de avance normal. Al principio de cada VOBU, el navegador de DVD establece la marca AM_ReverseBlockStart en la muestra. Al final del VOBU, el navegador de DVD envía una muestra vacía con la marca AM_ReverseBlockEnd. Para recuperar estas marcas, llame a IMediaSample2::GetProperties en la muestra. Las marcas se establecen en el miembro dwTypeSpecificFlags de la estructura AM_SAMPLE2_PROPERTIES.

El descodificador almacena en caché los datos de vídeo hasta que recibe la muestra con la marca AM_ReverseBlockEnd. En ese momento, el descodificador entrega fotogramas descodificados en orden inverso. Por ejemplo, si VOBU 1 contiene los fotogramas 1–4 y VOBU 2 contiene los fotogramas 5–8, el navegador de DVD enviará los fotogramas en este orden:

(Inicio del bloque) F5 F6 F7 F8 (fin de bloque) (inicio de bloque) F1 F2 F3 F4 (fin de bloque)

El descodificador debe procesar los fotogramas de la siguiente manera:

  1. Descodificar VOBU 2.
  2. Fotogramas de salida: F8 F7 F6 F5
  3. Descodificar VOBU 1.
  4. Fotogramas de salida: F4 F3 F2 F1

El navegador de DVD establece la marca de tiempo en la primera muestra del VOBU (F1 y F5 en este ejemplo), pero la marca de tiempo contiene el tiempo de presentación del inicio del bloque, por lo que el descodificador debe aplicar este tiempo a la última muestra del bloque (F4 y F8). Los tiempos de presentación aumentan durante la reproducción inversa.

Normalmente, un VOBU contiene hasta 42 fotogramas y puede contener más de un grupo de imágenes (GOP). Para permitir que todo el VOBU se descodifique, el descodificador debe almacenar en caché los fotogramas I y P descodificados. Las VOBU en DVD no son GOP cerrados, por lo que un fotograma B dentro de un GOP puede requerir descodificar todos los fotogramas de referencia del GOP anterior. Si el descodificador no tiene suficientes superficies para contener todos los fotogramas descodificados, es posible que tenga que volver a descodificar los fotogramas seleccionados.

Cambios de velocidad

De forma predeterminada, el navegador de DVD vacía el grafo entre los cambios de velocidad. Sin embargo, si el descodificador admite la propiedad AM_RATE_ResetOnTimeDisc, el navegador de DVD no vaciará el grafo, lo que provocará una transición más fluida entre las velocidades de reproducción.

El navegador de DVD siempre marca las muestras de tiempo para la reproducción a una velocidad de 1x, independientemente de la velocidad de reproducción real. El descodificador debe escalar las marcas de tiempo en las muestras descodificadas para que coincidan con la velocidad de reproducción real. (Para obtener más información, consulte Propiedad AM_RATE_SimpleRateChange). Como resultado, al reproducir a velocidades distintas de 1x, las marcas de tiempo de los fotogramas descodificados se diferencian de las de los fotogramas codificados. Cada vez que el navegador de DVD establece la marca AM_SAMPLE_TIMEDISCONTINUITY en una muestra, el descodificador debe volver a sincronizar sus marcas de tiempo. En otras palabras, el fotograma descodificado debe tener la misma marca de tiempo que el fotograma de entrada. Para recuperar la marca AM_SAMPLE_TIMEDISCONTINUITY, llame a IMediaSample2::GetProperties en la muestra. La marca se establece en el miembro dwSampleFlags de la estructura AM_SAMPLE2_PROPERTIES.

Administración de energía

En Windows Vista, el navegador de DVD permite las siguientes mejoras en la administración de energía:

  • Resolución de temporizador más alta
  • Caché de datos más grande

Resolución del temporizador: las aplicaciones pueden solicitar una resolución mínima del temporizador llamando a la función timeBeginPeriod. Una resolución más alta (período más corto) aumenta la capacidad de respuesta del sistema a eventos periódicos, como los tiempos de espera, pero también puede aumentar la frecuencia de los conmutaciones de contexto del subproceso.

De forma predeterminada, el reloj de referencia de DirectShow establece la resolución del temporizador en 1 milisegundo. En esa resolución, el procesador no entrará en ningún modo de ahorro de energía. A partir de Windows Vista, el navegador de DVD invalida el comportamiento predeterminado del reloj de referencia llamando a IReferenceClockTimerControl::SetDefaultTimerResolution en el reloj de referencia. Esto quita la solicitud del reloj para una resolución de temporizador de 1 milisegundo. Esto podría permitir que el procesador entre en modo de ahorro de energía.

La resolución del temporizador es una configuración global; Windows elige el valor solicitado más bajo. Los filtros (VMR-7 y VMR-9) del representador de mezcla de vídeos (VMR) establecen la resolución del temporizador en 1 milisegundo. EVR normalmente establece la resolución en un valor entre 4 y 8 milisegundos, dependiendo de si la composición del escritorio está habilitada y si EVR está en modo de pantalla completa. Otras aplicaciones también pueden establecer la resolución.

Tamaño de caché: las aplicaciones pueden especificar cuántos datos almacena en caché el navegador de DVD estableciendo la opción DVD_CacheSizeInMB en el método IDvdControl2::SetOption. Si la aplicación establece esta marca en un valor grande (> 50 MB), la unidad de DVD puede reducir la velocidad después de la captura previa inicial, en función del hardware, lo que puede reducir el consumo de energía.

Aplicaciones de DVD