Share via


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)

Confira também

KSDATAFORMAT