Compartilhar via


Alterações de fluxo

O formato de um fluxo de DVD pode mudar a qualquer momento. Por exemplo, o formato de fluxo de áudio pode ser alterado entre AC3 e LPCM durante a reprodução.

Cada exemplo de dados no fluxo contém uma estrutura KSSTREAM_HEADER acrescentada a ele. Essa estrutura contém um membro OptionsFlags .

O exemplo de dados associado a um cabeçalho que contém um dos sinalizadores a seguir pode ou não conter um pacote de dados nulo ou dados válidos.

Os seguintes valores do membro KSSTREAM_HEADER OptionsFlags são importantes para a reprodução de DVD:

KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY
O bit KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY indica que o exemplo imediatamente após ele pertence a uma fonte (ou local/posição) de dados diferente do exemplo anterior. Isso indica que qualquer processamento em andamento usando o exemplo anterior deve ser concluído. Esse bit geralmente vem no meio de um quadro anterior, indicando que o decodificador deve descartar o quadro anterior e começar a processar com os novos dados.

KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY
O bit KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY indica que haverá um intervalo de tempo nos dados imediatamente após este exemplo. Por exemplo, se o fluxo de DVD contiver um quadro ainda codificado como um único quadro I, o decodificador receberá todos os dados do quadro I, com o último exemplo contendo o sinalizador KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY. Isso indica que o decodificador deve decodificar imediatamente o quadro I e não esperar por dados de quadro B.

KSSTREAM_HEADER_OPTIONSF_TYPECHANGED
O bit KSSTREAM_HEADER_OPTIONSF_TYPECHANGED indica que o exemplo conectado ao cabeçalho será um novo bloco KSDATAFORMAT para o fluxo. Isso permite a alteração dinâmica de tipos de dados. Um exemplo seria a alteração do vídeo de 4x3 para 16x9 ou a alteração do áudio do AC3 para o PCM. O decodificador deve fazer todas as alterações necessárias para o novo bloco de formato somente quando todos os dados anteriores ao pacote com o novo bloco de formato tiverem sido processados.

Quando ocorre uma alteração no formato de fluxo, o minidriver recebe um pacote de dados com o KSSTREAM_HEADER_OPTIONSF_TYPECHANGED bit definido no membro OptionsFlags da estrutura KSSTREAM_HEADER do pacote de dados.

O minidriver poderá nunca ver o sinalizador de KSSTREAM_HEADER_OPTIONSF_TYPECHANGED se ele não expor corretamente os formatos de dados compatíveis com seu fluxo de áudio.

Expor corretamente os formatos de dados compatíveis com um fluxo envolve duas etapas:

  1. O manipulador SRB_GET_STREAM_INFO para o fluxo deve definir o ponteiro StreamFormatsArray para apontar para uma matriz de ponteiros NumberOfFormatArrayEntries , cada um dos quais aponta para um bloco de formato válido.

  2. O manipulador de SRB_GET_DATA_INTERSECTION deve copiar o bloco de formato correspondente ao formato proposto no buffer fornecido.

Uma alteração no formato de vídeo também deve sinalizar eventos KSSTREAM para a conexão de porta de vídeo para indicar que o formato de vídeo foi alterado. Um minidriver deve usar StreamClassStreamNotification(SignalMultipleStreamEvents, pMyHwDevExt-pMyStreamObject>, &MY_KSEVENTSETID_VPNOTIFY, KSEVENT_VPNOTIFY_FORMATCHANGE) para essa finalidade.

Quando algum parâmetro do formato de vídeo é alterado, como a taxa de proporção de pixel, o decodificador recebe um bloco de formato. O decodificador deve sinalizar a porta de vídeo para renegociar a conexão de porta de vídeo. O decodificador chama StreamClassStreamNotification com o parâmetro SignalMultipleStreamEvents.

O minidriver de decodificador de DVD deve indicar que o suporte é fornecido para esse evento na entrada HW_STREAM_INFORMATION para o fluxo videoport. A ID do conjunto de eventos para o evento de porta de vídeo é KSEVENTSETID_VPNotify e a ID do evento é KSEVENT_VPNOTIFY_FORMATCHANGE.