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) |