estrutura KSSTREAM_HEADER (ks.h)
A estrutura KSSTREAM_HEADER é uma estrutura de comprimento variável que descreve um pacote de dados a serem lidos ou gravados em um pino de driver de streaming.
Sintaxe
typedef struct {
ULONG Size;
ULONG TypeSpecificFlags;
KSTIME PresentationTime;
LONGLONG Duration;
ULONG FrameExtent;
ULONG DataUsed;
PVOID Data;
ULONG OptionsFlags;
ULONG Reserved;
} KSSTREAM_HEADER, *PKSSTREAM_HEADER;
Membros
Size
Especifica o tamanho, em bytes, da estrutura . Deve ser pelo menos sizeof(KSSTREAM_HEADER).
TypeSpecificFlags
Especifica sinalizadores específicos para um formato de dados. O único sinalizador com suporte no momento para TypeSpecificFlags é KS_AM_UseNewCSSKey. Esse sinalizador indica que o decodificador de hardware deve alternar para a próxima chave de descriptografia CSS (Content Scramble System) enfileirada, pois o exemplo de dados que segue imediatamente o cabeçalho é o primeiro exemplo de dados ao qual uma nova chave de título se aplica.
PresentationTime
Uma estrutura KSTIME que especifica o tempo de apresentação para o buffer de fluxo relacionado em unidades de 100 nanossegundos. Para obter mais informações, consulte a seção Comentários.
Duration
Especifica a duração desse segmento de fluxo nas mesmas unidades que o tempo de apresentação (unidades de 100 nanossegundos). Defina como zero quando não for usado.
FrameExtent
Especifica o tamanho do quadro inteiro. A região dentro da extensão do quadro está disponível para o filtro e o tamanho de dados válido resultante para a operação de fluxo é refletido no membro DataUsed .
DataUsed
Para uma operação de gravação, esse membro especifica o número de bytes dentro do quadro que são válidos ao enviar um quadro para um driver de nível inferior. Os cabeçalhos não são modificados em uma operação de gravação; no entanto, o membro Information da estrutura IO_STATUS_BLOCK contém o número total de bytes realmente gravados. Para uma operação de leitura, esse membro não é usado ao enviar um quadro para um driver de nível inferior e deve ser definido como zero. No retorno, esse membro contém o número de bytes realmente preenchidos nesse quadro e o membro Information da estrutura IO_STATUS_BLOCK contém o tamanho da lista de cabeçalhos realmente usados. Observe que, se o minidriver especificar KSPIN_FLAG_GENERATE_MAPPINGS em KSPIN_DESCRIPTOR_EX, quando um ponteiro de fluxo for avançado após um quadro, DataUsed será definido como Contagem menos Restante (membros de KSSTREAM_POINTER_OFFSET). Se o driver não especificar esse sinalizador, o minidriver será responsável por definir DataUsed.
Data
Especifica o endereço virtual do buffer de dados.
OptionsFlags
Especifica uma variedade de atributos do fluxo de dados. O membro OptionsFlags pode ter os valores listados na tabela a seguir.
Valor | Descrição |
---|---|
KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY | Especifica que houve uma descontinuidade no fluxo de dados antes dos dados contidos neste pacote. Isso implica que o filtro pode precisar redefinir seu estado interno antes de processar os dados. Nenhum buffer de dados real precisa ser anexado. |
KSSTREAM_HEADER_OPTIONSF_DURATIONVALID | Especifica que o membro Duration dessa estrutura é válido. |
KSSTREAM_HEADER_OPTIONSF_ENDOFPHOTOSEQUENCE | Indica que esse quadro representa o final de uma sequência de fotos. |
KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM | Indica que esse quadro representa o final do fluxo de dados. |
KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE | Se o fluxo estiver em pausa, esse buffer deverá ser liberado. Esse sinalizador é usado, por exemplo, por fontes de dados dinâmicas, em que uma pausa torna os dados atuais obsoletos. |
KSSTREAM_HEADER_OPTIONSF_FRAMEINFO | Indica que há uma estrutura KS_FRAME_INFO após KSSTREAM_HEADER. |
KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA | Esse buffer de dados é o início de dados em loop. O driver deve executar um loop nesses dados até que seja interrompido explicitamente. |
KSSTREAM_HEADER_OPTIONSF_METADATA | Indica que há uma KSSTREAM_METADATA_INFO que segue KS_FRAME_INFO após o KSSTREAM_HEADER. Esse sinalizador estará presente somente se KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA tiver suporte. |
KSSTREAM_HEADER_OPTIONSF_PREROLL | Os dados nesse buffer são usados para preparar o estado do dispositivo. Essa é uma opção específica do fluxo. |
KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT | O fluxo de dados está em um ponto natural para a junção. Um cliente usa isso, por exemplo, ao enviar dados que usam compactação entre quadros, como vídeo MPEG, para indicar que é seguro unir neste ponto. |
KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY | Há uma descontinuidade no fluxo de dados após esse pacote. Esse sinalizador pode ser usado para interfaces orientadas a posicionais para indicar o fim dos dados de fluxo. Nenhum buffer de dados real precisa ser anexado. |
KSSTREAM_HEADER_OPTIONSF_TIMEVALID | Especifica que o membro PresentationTime dessa estrutura é válido. Indica que esse buffer tem um carimbo de data/hora válido associado a ele. |
KSSTREAM_HEADER_OPTIONSF_TYPECHANGED | Significa que o formato de dados desse fluxo foi alterado. Se esse sinalizador for definido, o membro Data conterá uma estrutura KSDATAFORMAT que contém o novo formato. Esse sinalizador é válido apenas para fluxos que negociaram anteriormente a alteração de tipo dinâmico. Para uma operação de gravação, inclua o novo formato de dados no lugar de um exemplo de mídia. Se o tamanho da extensão específica da mídia for modificado, esse cabeçalho deverá ser o último cabeçalho em uma lista de cabeçalhos para a solicitação de fluxo fornecida. Durante uma solicitação de leitura, qualquer E/S adicional permanece pendente até que o novo formato seja recuperado por meio de KSPROPERTY_CONNECTION_DATAFORMAT. Para uma operação de gravação, o cabeçalho não deve ser estendido e deve ser o único cabeçalho na operação de gravação. |
KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER | Especifica que o membro Data do cabeçalho de fluxo aponta para uma estrutura do tipo VRAM_SURFACE_INFO. O módulo de proxy KS fornecido pelo sistema define esse sinalizador para indicar que ele está capturando diretamente na VRAM. |
KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER | Especifica que o membro Data do KSSTREAM_HEADER contém uma cópia do modo kernel do buffer original. O Ksproxy define esse sinalizador para pequenas transferências de dados durante a captura do WVDDM (Modelo de Driver de Exibição do Windows Vista). Se esse sinalizador não estiver definido, o KS usará E/S direta para o buffer de dados . |
Reserved
Reservado para uso interno.
Comentários
Essa estrutura pode ser seguida na memória por informações adicionais específicas para o tipo de dados no pacote de dados.
O tempo de apresentação normalmente é em unidades de 100 nanossegundos; no entanto, o formato padrão desta vez é baseado no formato de dados. Você pode normalizar o tempo de apresentação usando como um dimensionamento fracionário da KSSTREAM_HEADER. PresentationTime.Numerator dividido pela KSSTREAM_HEADER. PresentationTime.Denominator .
Uma conversão deve usar o numerador primeiro, depois o denominador, para reduzir os erros de arredondamento. Por exemplo, um fluxo de áudio pode apresentar a hora atual como um deslocamento de bytes no fluxo de dados:
#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;
Em um IOCTL_KS_READ_STREAM, partes do cabeçalho de fluxo são preenchidas pela chamada. Cada KSSTREAM_HEADER. O elemento DataUsed contém o número real de bytes lidos, que é menor ou igual a cada KSSTREAM_HEADER. FrameExtent. O elemento pIrp-IoStatus.Information> contém o tamanho total dos dados de cabeçalho a serem retornados, que é pelo menos um sizeof(KSSTREAM_HEADER).
Em um IOCTL_KS_WRITE_STREAM, os elementos membro devem ser inicializados e cada KSSTREAM_HEADER. O elemento DataUsed contém o número de bytes a serem gravados. O número real de bytes totais gravados é retornado em pIrp-IoStatus.Information>. Isso é menor ou igual ao total de todos os KSSTREAM_HEADER. Elementos DataUsed nos cabeçalhos.
Se você estiver usando a interface IKsReferenceClock para obter carimbos de data/hora a serem colocados no membro PresentationTime do KSSTREAM_HEADER, consulte Relógios AVStream para obter mais informações.
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | ks.h (inclua Ks.h) |