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