Video capture devices can capture video in a number of different formats. The KSDATARANGE structure is used to convey information about the width, height, granularity, cropping, and frame rates for a particular color space. The structures KS_DATARANGE_VIDEO and KS_DATARANGE_VIDEO2 are extensions of the KSDATARANGE structure and should be used for describing video capture formats. Use KS_DATARANGE_VIDEO to describe video frames only. Use KS_DATARANGE_VIDEO2 to describe video fields and video frames, with or without bob or weave settings.
The process of selecting a stream format is called performing a data intersection. The Stream class interface sends an SRB_GET_DATA_INTERSECTION request to a Stream class minidriver to perform a data intersection. The minidriver is responsible for determining the validity of the data range requested and then selecting a particular stream format from the supplied data range, typically using KS_DATAFORMAT_VIDEOINFOHEADER or KS_DATAFORMAT_VIDEOINFOHEADER2 structures.
Finally, the minidriver must set certain members of the resulting format as shown below:
. . . // 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); . .