struttura KSSTREAM_HEADER (ks.h)

La struttura KSSTREAM_HEADER è una struttura a lunghezza variabile che descrive un pacchetto di dati da leggere o scrivere in un pin del driver di streaming.

Sintassi

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

Members

Size

Specifica la dimensione in byte della struttura. Deve essere almeno sizeof(KSSTREAM_HEADER).

TypeSpecificFlags

Specifica i flag specifici di un formato di dati. L'unico flag attualmente supportato per TypeSpecificFlags è KS_AM_UseNewCSSKey. Questo flag indica che il decodificatore hardware deve passare alla chiave di decrittografia CSS (Content Scramble System) in coda successiva, perché l'esempio di dati che segue immediatamente l'intestazione è il primo esempio di dati a cui si applica una nuova chiave del titolo.

PresentationTime

Struttura KSTIME che specifica l'ora di presentazione per il buffer di flusso correlato in unità da 100 nanosecondi. Per altre informazioni, vedere la sezione Osservazioni .

Duration

Specifica la durata di questo segmento di flusso nelle stesse unità dell'ora di presentazione (unità di 100 nanosecondi). Impostare su zero se non usato.

FrameExtent

Specifica le dimensioni dell'intero frame. L'area all'interno dell'extent del frame è disponibile per il filtro e le dimensioni dei dati valide risultanti per l'operazione di flusso vengono riflesse nel membro DataUsed .

DataUsed

Per un'operazione di scrittura, questo membro specifica il numero di byte all'interno del frame validi durante l'invio di un frame a un driver di livello inferiore. Le intestazioni non vengono modificate in un'operazione di scrittura; Tuttavia, il membro Informazioni della struttura IO_STATUS_BLOCK contiene il numero totale di byte effettivamente scritti. Per un'operazione di lettura, questo membro non viene usato quando si invia un frame a un driver di livello inferiore e deve essere impostato su zero. Al ritorno, questo membro contiene il numero di byte effettivamente compilati in questa cornice e il membro Informazioni della struttura IO_STATUS_BLOCK contiene le dimensioni dell'elenco di intestazioni effettivamente utilizzate. Si noti che se il minidriver specifica KSPIN_FLAG_GENERATE_MAPPINGS in KSPIN_DESCRIPTOR_EX, quando un puntatore di flusso è avanzato oltre un frame, DataUsed è impostato su Count minus Remaining (membri di KSSTREAM_POINTER_OFFSET). Se il driver non specifica questo flag, il minidriver è responsabile dell'impostazione di DataUsed.

Data

Specifica l'indirizzo virtuale del buffer di dati.

OptionsFlags

Specifica un'ampia gamma di attributi del flusso di dati. Il membro OptionsFlags può avere i valori elencati nella tabella seguente.

Valore Descrizione
KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY Specifica che si è verificata una discontinuità nel flusso di dati prima dei dati contenuti in questo pacchetto. Ciò implica che il filtro potrebbe dover reimpostare lo stato interno prima di elaborare i dati. Non è necessario collegare alcun buffer di dati effettivo.
KSSTREAM_HEADER_OPTIONSF_DURATIONVALID Specifica che il membro Duration di questa struttura è valido.
KSSTREAM_HEADER_OPTIONSF_ENDOFPHOTOSEQUENCE Indica che questa cornice rappresenta la fine di una sequenza di foto.
KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM Indica che questo frame rappresenta la fine del flusso di dati.
KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE Se il flusso è sospeso, questo buffer deve essere scaricato. Questo flag viene usato, ad esempio, dalle origini dati attive, in cui una pausa esegue il rendering dei dati correnti non aggiornati.
KSSTREAM_HEADER_OPTIONSF_FRAMEINFO Indica che è presente una struttura KS_FRAME_INFO che segue KSSTREAM_HEADER.
KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA Questo buffer di dati è l'inizio dei dati a ciclo continuo. Il driver deve eseguire un ciclo su questi dati fino a quando non viene arrestato in modo esplicito.
KSSTREAM_HEADER_OPTIONSF_METADATA Indica che è presente un KSSTREAM_METADATA_INFO che segue KS_FRAME_INFO dopo il KSSTREAM_HEADER. Questo flag è presente solo se KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA è supportato.
KSSTREAM_HEADER_OPTIONSF_PREROLL I dati in questo buffer vengono usati per primere lo stato del dispositivo. Si tratta di un'opzione specifica del flusso.
KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT Il flusso di dati si trova in un punto naturale per lo splicing. Un client usa questo, ad esempio, quando si inviano dati che usano la compressione tra fotogrammi, ad esempio mpeg, per indicare che è possibile eseguire la giunzione in questo momento.
KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY Dopo questo pacchetto è presente una discontinuità nel flusso di dati. Questo flag può essere usato per le interfacce orientate alla posizione per indicare una fine dei dati del flusso. Non è necessario collegare alcun buffer di dati effettivo.
KSSTREAM_HEADER_OPTIONSF_TIMEVALID Specifica che il membro PresentationTime di questa struttura è valido. Indica che a questo buffer è associato un timestamp valido.
KSSTREAM_HEADER_OPTIONSF_TYPECHANGED Indica che il formato dei dati per questo flusso è stato modificato. Se questo flag è impostato, il membro Dati contiene una struttura KSDATAFORMAT che contiene il nuovo formato. Questo flag è valido solo per i flussi che hanno negoziato in precedenza la modifica del tipo dinamico. Per un'operazione di scrittura, includere il nuovo formato dati al posto di un esempio multimediale. Se le dimensioni dell'estensione specifiche del supporto vengono modificate, questa intestazione deve essere l'ultima intestazione di un elenco di intestazioni per la richiesta di flusso specificata. Durante una richiesta di lettura, qualsiasi ulteriore I/O rimane in sospeso fino a quando il nuovo formato non viene recuperato tramite KSPROPERTY_CONNECTION_DATAFORMAT. Per un'operazione di scrittura, l'intestazione non deve essere estesa e deve essere l'unica intestazione nell'operazione di scrittura.
KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER Specifica che il membro Data dell'intestazione del flusso punta a una struttura di tipo VRAM_SURFACE_INFO. Il modulo proxy KS fornito dal sistema imposta questo flag per indicare che sta acquisendo direttamente in VRAM.
KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER Specifica che il membro Dati di KSSTREAM_HEADER contiene una copia in modalità kernel del buffer originale. Ksproxy imposta questo flag per i trasferimenti di dati di piccole dimensioni durante l'acquisizione WVDDM (Windows Vista Display Driver Model). Se questo flag non è impostato, KS usa L/O diretto nel buffer dei dati .

Reserved

Riservato per utilizzo interno.

Commenti

Questa struttura può essere seguita in memoria da informazioni aggiuntive specifiche per il tipo di dati nel pacchetto di dati.

Il tempo di presentazione è in genere espresso in unità di 100 nanosecondi; Tuttavia, il formato standard di questa ora è basato sul formato dati. È possibile normalizzare il tempo di presentazione usando come ridimensionamento frazionaria il KSSTREAM_HEADER. PresentationTime.Numerator diviso per il KSSTREAM_HEADER. PresentationTime.Denominator .

Una conversione deve usare prima il numeratore, quindi il denominatore, per ridurre gli errori di arrotondamento. Ad esempio, un flusso audio potrebbe presentare l'ora corrente come offset di byte nel flusso di dati:

#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;

In una IOCTL_KS_READ_STREAM, le parti dell'intestazione del flusso vengono compilate dalla chiamata. Ogni KSSTREAM_HEADER. L'elemento DataUsed contiene il numero effettivo di byte letti, minore o uguale a ogni KSSTREAM_HEADER. FrameExtent. L'elemento pIrp-IoStatus.Information> contiene le dimensioni totali dei dati di intestazione da restituire, ovvero almeno una dimensioneof(KSSTREAM_HEADER).

In un IOCTL_KS_WRITE_STREAM, gli elementi membro devono essere inizializzati e ogni KSSTREAM_HEADER. L'elemento DataUsed contiene il numero di byte da scrivere. Il numero effettivo di byte totali scritti viene restituito in pIrp-IoStatus.Information>. Questo valore è minore o uguale al totale di tutti i KSSTREAM_HEADER. Elementi DataUsed nelle intestazioni.

Se si usa l'interfaccia IKsReferenceClock per ottenere timestamp da inserire nel membro PresentationTime di KSSTREAM_HEADER, vedere Orologi AVStream per altre informazioni.

Requisiti

Requisito Valore
Intestazione ks.h (include Ks.h)

Vedi anche

KSDATAFORMAT