Compartir a través de


Cambios de flujo

El formato de una secuencia de DVD puede cambiar en cualquier momento. Por ejemplo, el formato de secuencia de audio puede cambiar entre AC3 y LPCM durante la reproducción.

Cada ejemplo de datos de la secuencia contiene una estructura KSSTREAM_HEADER anexada. Esta estructura contiene un miembro OptionsFlags .

El ejemplo de datos asociado a un encabezado que contiene una de las marcas siguientes puede contener o no un paquete de datos NULL o datos válidos.

Los siguientes valores del miembro KSSTREAM_HEADER OptionsFlags son importantes para la reproducción de DVD:

KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY
El bit de KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY indica que el ejemplo inmediatamente después pertenece a un origen diferente (o ubicación/posición) de datos que el ejemplo anterior. Esto indica que se debe completar el procesamiento que estaba en curso mediante el ejemplo anterior. Este bit suele aparecer en medio de un fotograma anterior, lo que indica que el descodificador debe descartar el fotograma anterior y comenzar a procesarlos con los nuevos datos.

KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY
El bit KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY indica que habrá un intervalo de tiempo en los datos inmediatamente después de este ejemplo. Por ejemplo, si la secuencia de DVD contiene un fotograma todavía codificado como un fotograma I único, el descodificador recibe todos los datos del marco I, con el último ejemplo que contiene la marca KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY. Esto indica que el descodificador debe descodificar inmediatamente el marco I y no esperar a los datos de fotogramaS B.

KSSTREAM_HEADER_OPTIONSF_TYPECHANGED
El bit de KSSTREAM_HEADER_OPTIONSF_TYPECHANGED indica que el ejemplo conectado con el encabezado será un nuevo bloque KSDATAFORMAT para la secuencia. Esto permite cambiar los tipos de datos dinámicamente. Un ejemplo sería el cambio de vídeo de 4x3 a 16x9, o el cambio de audio de AC3 a PCM. El descodificador debe realizar todos los cambios necesarios para el nuevo bloque de formato solo cuando se hayan procesado todos los datos anteriores al paquete con el nuevo bloque de formato.

Cuando se produce un cambio de formato de secuencia, el minidriver recibe un paquete de datos con el bit KSSTREAM_HEADER_OPTIONSF_TYPECHANGED establecido en el miembro OptionsFlags de la estructura KSSTREAM_HEADER del paquete de datos.

Es posible que el minidriver nunca vea la marca KSSTREAM_HEADER_OPTIONSF_TYPECHANGED si no expone correctamente los formatos de datos admitidos por su secuencia de audio.

Exponer correctamente los formatos de datos admitidos por una secuencia implica dos pasos:

  1. El controlador SRB_GET_STREAM_INFO de la secuencia debe establecer el puntero StreamFormatsArray para que apunte a una matriz de punteros NumberOfFormatArrayEntries , cada uno de los cuales apunta a un bloque de formato válido.

  2. El controlador de SRB_GET_DATA_INTERSECTION debe copiar el bloque de formato correspondiente al formato propuesto en el búfer proporcionado.

Un cambio de formato de vídeo también debe indicar eventos KSSTREAM a la conexión de puerto de vídeo para indicar que el formato de vídeo ha cambiado. Un minidriver debe usar StreamClassStreamNotification(SignalMultipleStreamEvents, pMyHwDevExt-pMyStreamObject>, &MY_KSEVENTSETID_VPNOTIFY, KSEVENT_VPNOTIFY_FORMATCHANGE) para este fin.

Cuando cambia algún parámetro del formato de vídeo, como la relación de aspecto de píxeles, el descodificador recibe un bloque de formato. El descodificador debe indicar el puerto de vídeo para renegociar la conexión de puerto de vídeo. El descodificador llama a StreamClassStreamNotification con el parámetro SignalMultipleStreamEvents.

El minidriver de descodificador de DVD debe indicar que se proporciona compatibilidad para este evento en la entrada HW_STREAM_INFORMATION para la secuencia de VideoPort. El identificador del conjunto de eventos para el evento de puerto de vídeo se KSEVENTSETID_VPNotify y el identificador de evento se KSEVENT_VPNOTIFY_FORMATCHANGE.