estructura KSSTREAM_HEADER (ks.h)

La estructura de KSSTREAM_HEADER es una estructura de longitud variable que describe un paquete de datos que se va a leer o escribir en un pin del controlador de streaming.

Sintaxis

typedef struct {
  ULONG    Size;
  ULONG    TypeSpecificFlags;
  KSTIME   PresentationTime;
  LONGLONG Duration;
  ULONG    FrameExtent;
  ULONG    DataUsed;
  PVOID    Data;
  ULONG    OptionsFlags;
  ULONG    Reserved;
} KSSTREAM_HEADER, *PKSSTREAM_HEADER;

Miembros

Size

Especifica el tamaño, en bytes, de la estructura. Debe ser al menos sizeof(KSSTREAM_HEADER).

TypeSpecificFlags

Especifica marcas específicas de un formato de datos. La única marca admitida actualmente para TypeSpecificFlags es KS_AM_UseNewCSSKey. Esta marca indica que el descodificador de hardware debe cambiar a la siguiente clave de descifrado CSS en cola (Content Scramble System), ya que el ejemplo de datos que sigue inmediatamente al encabezado es el primer ejemplo de datos al que se aplica una nueva clave de título.

PresentationTime

Estructura KSTIME que especifica el tiempo de presentación del búfer de secuencia relacionado en unidades de 100 nanosegundos. Para más información, vea la sección Comentarios.

Duration

Especifica la duración de este segmento de secuencia en las mismas unidades que el tiempo de presentación (unidades de 100 nanosegundos). Se establece en cero cuando no se usa.

FrameExtent

Especifica el tamaño de todo el marco. La región dentro de la extensión del marco está disponible para el filtro y el tamaño de datos válido resultante para la operación de secuencia se refleja en el miembro DataUsed .

DataUsed

Para una operación de escritura, este miembro especifica el número de bytes dentro del marco que son válidos al enviar un fotograma a un controlador de nivel inferior. Los encabezados no se modifican en una operación de escritura; sin embargo, el miembro Information de la estructura IO_STATUS_BLOCK contiene el número total de bytes escritos realmente. Para una operación de lectura, este miembro no se usa al enviar un marco a un controlador de nivel inferior y debe establecerse en cero. Al devolverlo, este miembro contiene el número de bytes rellenados realmente en este marco y el miembro Information de la estructura de IO_STATUS_BLOCK contiene el tamaño de la lista de encabezados usados realmente. Tenga en cuenta que si el minidriver especifica KSPIN_FLAG_GENERATE_MAPPINGS en KSPIN_DESCRIPTOR_EX, cuando un puntero de secuencia está avanzado más allá de un fotograma, DataUsed se establece en Count menos Remaining (miembros de KSSTREAM_POINTER_OFFSET). Si el controlador no especifica esta marca, el minidriver es responsable de establecer DataUsed.

Data

Especifica la dirección virtual del búfer de datos.

OptionsFlags

Especifica una variedad de atributos del flujo de datos. El miembro OptionsFlags puede tener los valores enumerados en la tabla siguiente.

Valor Descripción
KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY Especifica que se ha producido una discontinuidad en el flujo de datos antes de los datos contenidos en este paquete. Esto implica que el filtro podría necesitar restablecer su estado interno antes de procesar los datos. No es necesario adjuntar ningún búfer de datos real.
KSSTREAM_HEADER_OPTIONSF_DURATIONVALID Especifica que el miembro Duration de esta estructura es válido.
KSSTREAM_HEADER_OPTIONSF_ENDOFPHOTOSEQUENCE Indica que este marco representa el final de una secuencia de fotos.
KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM Indica que este marco representa el final del flujo de datos.
KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE Si la secuencia está en pausa, este búfer debe vaciarse. Este indicador se usa, por ejemplo, mediante orígenes de datos activos, donde una pausa representa los datos actuales obsoletos.
KSSTREAM_HEADER_OPTIONSF_FRAMEINFO Indica que hay una estructura de KS_FRAME_INFO después de KSSTREAM_HEADER.
KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA Este búfer de datos es el inicio de los datos en bucle. El controlador debe recorrer en bucle estos datos hasta que se detenga explícitamente.
KSSTREAM_HEADER_OPTIONSF_METADATA Indica que hay un KSSTREAM_METADATA_INFO que sigue KS_FRAME_INFO después del KSSTREAM_HEADER. Esta marca solo está presente si se admite KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA.
KSSTREAM_HEADER_OPTIONSF_PREROLL Los datos de este búfer se usan para primor el estado del dispositivo. Se trata de una opción específica de la secuencia.
KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT El flujo de datos está en un punto natural para la splicing. Un cliente usa esto, por ejemplo, al enviar datos que usan compresión entre fotogramas, como el vídeo MPEG, para indicar que es seguro para la inserción en este momento.
KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY Hay una discontinuidad en el flujo de datos después de este paquete. Esta marca se puede usar para interfaces orientadas a posición para indicar un final de los datos de flujo. No es necesario adjuntar ningún búfer de datos real.
KSSTREAM_HEADER_OPTIONSF_TIMEVALID Especifica que el miembro PresentationTime de esta estructura es válido. Indica que este búfer tiene asociada una marca de tiempo válida.
KSSTREAM_HEADER_OPTIONSF_TYPECHANGED Indica que el formato de datos de esta secuencia ha cambiado. Si se establece esta marca, el miembro Data contiene una estructura KSDATAFORMAT que contiene el nuevo formato. Esta marca solo es válida para las secuencias que han negociado previamente el cambio de tipo dinámico. Para una operación de escritura, incluya el nuevo formato de datos en lugar de un ejemplo multimedia. Si se modifica el tamaño de extensión específico del medio, este encabezado debe ser el último encabezado de una lista de encabezados para la solicitud de secuencia especificada. Durante una solicitud de lectura, cualquier E/S adicional permanece pendiente hasta que se recupere el nuevo formato a través de KSPROPERTY_CONNECTION_DATAFORMAT. Para una operación de escritura, el encabezado no se debe extender y debe ser el único encabezado en la operación de escritura.
KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER Especifica que el miembro Data del encabezado de secuencia apunta a una estructura de tipo VRAM_SURFACE_INFO. El módulo de proxy KS proporcionado por el sistema establece esta marca para indicar que se está capturando directamente en VRAM.
KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER Especifica que el miembro Data de KSSTREAM_HEADER contiene una copia en modo kernel del búfer original. Ksproxy establece esta marca para transferencias de datos pequeñas durante la captura de WVDDM (modelo de controlador de pantalla de Windows Vista). Si no se establece esta marca, KS usa E/S directa en el búfer de datos .

Reserved

Reservado para uso interno.

Comentarios

Esta estructura se puede seguir en memoria mediante información adicional específica del tipo de datos en el paquete de datos.

El tiempo de presentación suele estar en unidades de 100 nanosegundos; Sin embargo, el formato estándar de esta hora se basa en el formato de datos. Puede normalizar el tiempo de presentación mediante como una fracción de escalado de la KSSTREAM_HEADER. PresentationTime.Numerator dividido por el KSSTREAM_HEADER. PresentationTime.Denominator .

Una conversión debe usar primero el numerador y, a continuación, el denominador para reducir los errores de redondeo. Por ejemplo, una secuencia de audio podría presentar la hora actual como desplazamiento de bytes en el flujo de datos:

#define BITS_PER_BYTE8
#define NANOSECONDS10000000

StreamHdr->PresentationTime.Numerator = BITS_PER_BYTE * NANOSECONDS;
StreamHdr->PresentationTime.Denominator = BitsPerSample * Channels * Frequency;
StreamHdr->PresentationTime.Time = ByteOffset;
StreamHdr->Duration = ByteLength;

En una IOCTL_KS_READ_STREAM, las partes del encabezado de secuencia se rellenan mediante la llamada. Cada KSSTREAM_HEADER. El elemento DataUsed contiene el número real de bytes leídos, que es menor o igual que cada KSSTREAM_HEADER. FrameExtent. El elemento pIrp-IoStatus.Information> contiene el tamaño total de los datos de encabezado que se van a devolver, que es al menos un tamañoof(KSSTREAM_HEADER).

En un IOCTL_KS_WRITE_STREAM, se deben inicializar los elementos miembro y cada KSSTREAM_HEADER. El elemento DataUsed contiene el número de bytes que se van a escribir. El número real de bytes totales escritos se devuelve en pIrp-IoStatus.Information>. Esto es menor o igual que el total de todos los KSSTREAM_HEADER. Elementos DataUsed en los encabezados.

Si usa la interfaz IKsReferenceClock para obtener marcas de tiempo para colocar en el miembro PresentationTime de KSSTREAM_HEADER, vea AVStream Clocks para obtener más información.

Requisitos

Requisito Valor
Header ks.h (incluya Ks.h)

Consulte también

KSDATAFORMAT