Selecionando um formato de fluxo
Os dispositivos de captura de vídeo podem capturar vídeos em vários formatos diferentes. A estrutura KSDATARANGE é usada para transmitir informações sobre a largura, altura, granularidade, corte e taxas de quadros para um espaço de cor específico. As estruturas KS_DATARANGE_VIDEO e KS_DATARANGE_VIDEO2 são extensões da estrutura KSDATARANGE e devem ser usadas para descrever formatos de captura de vídeo. Use KS_DATARANGE_VIDEO para descrever apenas quadros de vídeo. Use KS_DATARANGE_VIDEO2 para descrever campos de vídeo e quadros de vídeo, com ou sem configurações bob ou weave.
O processo de seleção de um formato de fluxo é chamado executando uma interseção de dados. A interface da classe Stream envia uma solicitação de SRB_GET_DATA_INTERSECTION para um minidriver da classe Stream para executar uma interseção de dados. O minidriver é responsável por determinar a validade do intervalo de dados solicitado e, em seguida, selecionar um formato de fluxo específico no intervalo de dados fornecido, normalmente usando estruturas KS_DATAFORMAT_VIDEOINFOHEADER ou KS_DATAFORMAT_VIDEOINFOHEADER2 .
Por fim, o minidriver deve definir determinados membros do formato resultante, conforme mostrado abaixo:
.
.
.
// Calculate biSizeImage for this request, and put the result in both
// the biSizeImage field of the bmiHeader AND in the SampleSize field
// of the DataFormat.
//
// Note that for compressed sizes, this calculation will probably not
// be just width * height * bitdepth
DataFormatVideoInfoHeaderOut->VideoInfoHeader.bmiHeader.biSizeImage =
DataFormatVideoInfoHeaderOut->DataFormat.SampleSize =
KS_DIBSIZE(DataFormatVideoInfoHeaderOut->VideoInfoHeader.bmiHeader);
.
.