Specifying Stream Formats
Generally, DirectShow and kernel streaming share media format definitions and streaming conventions. This uniformity is somewhat obscured by the differences in naming conventions used by kernel-mode and user-mode components. Many media format and GUID definitions used in kernel mode have the prefix KS_ but are otherwise identical to their user-mode counterparts. For example, the Win32 user-mode version of the kernel-mode structure, KS_BITMAPINFOHEADER, is BITMAPINFOHEADER.
A video capture minidriver describes a specific stream format using a KSDATAFORMAT structure. However, a minidriver can also expose a large range of potential stream formats by specifying an array of KSDATARANGE structures. The KSDATARANGE structure describes image characteristics such as color format, bit depth, and cropping and scaling possibilities.
A single KSDATARANGE structure can describe thousands of potential KSDATAFORMAT structures. For example, a KSDATARANGE structure could specify a video stream of RGB24 samples with a minimum dimension of 160x120 pixels and a maximum dimension of 720x480 pixels, with granularity stepping size value of 1 in the x and y dimensions. From this, an application could request any of more than 200,000 possible output image dimensions through a unique KSDATAFORMAT structure.
DirectShow uses a structure similar to KSDATAFORMAT to define stream formats. For example:
typedef struct _AMMediaType {
GUID majortype; // Same as KSDATAFORMAT.MajorFormat
GUID subtype; // Same as KSDATAFORMAT.SubFormat
BOOL bFixedSizeSamples;
BOOL bTemporalCompression;
ULONG lSampleSize; // Same as KSDATAFORMAT.SampleSize
GUID formattype; // Same as KSDATAFORMAT.Specifier
IUnknown __RPC_FAR *pUnk;
ULONG cbFormat;
BYTE *pbFormat;
} AM_MEDIA_TYPE;
Despite the differences in naming conventions, the GUIDs used in both the kernel-mode KSDATARANGE/KSDATAFORMAT and user-mode AM_MEDIA_TYPE structures are identical.
Note : The low-order four bytes of the SubFormat member of the KSDATAFORMAT structure (that is analogous to the subtype member of the AM_MEDIA_TYPE user-mode structure) should match the FOURCC values used in the biCompression member of the KS_BITMAPINFOHEADER structure. These bytes hold hexadecimal ASCII characters that describe a format, in reverse order.
For example, the following GUID corresponds to the YVU9 FOURCC video format:
39555659-0000-0010-8000-00AA00389B71
59 = 'Y'
56 = 'V'
55 = 'U'
39 = '9'
Feedback
https://aka.ms/ContentUserFeedback.
Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see:Submit and view feedback for