//==========================================================================; // // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY // KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR // PURPOSE. // // Copyright (c) 1992 - 1996 Microsoft Corporation. All Rights Reserved. // //==========================================================================; #ifndef __CAPSTRM_H__ #define __CAPSTRM_H__ #ifdef __cplusplus extern "C" { #endif // __cplusplus KSPIN_MEDIUM StandardMedium = { STATIC_KSMEDIUMSETID_Standard, 0, 0 }; // ------------------------------------------------------------------------ // The master list of all streams supported by this driver // ------------------------------------------------------------------------ typedef enum { STREAM_Capture, #ifndef TOSHIBA STREAM_Preview, STREAM_AnalogVideoInput #endif//TOSHIBA }; // ------------------------------------------------------------------------ // Property sets for all video capture streams // ------------------------------------------------------------------------ DEFINE_KSPROPERTY_TABLE(VideoStreamConnectionProperties) { DEFINE_KSPROPERTY_ITEM ( KSPROPERTY_CONNECTION_ALLOCATORFRAMING, TRUE, // GetSupported or Handler sizeof(KSPROPERTY), // MinProperty sizeof(KSALLOCATOR_FRAMING), // MinData FALSE, // SetSupported or Handler NULL, // Values 0, // RelationsCount NULL, // Relations NULL, // SupportHandler 0 // SerializedSize ), }; DEFINE_KSPROPERTY_TABLE(VideoStreamDroppedFramesProperties) { DEFINE_KSPROPERTY_ITEM ( KSPROPERTY_DROPPEDFRAMES_CURRENT, TRUE, // GetSupported or Handler sizeof(KSPROPERTY_DROPPEDFRAMES_CURRENT_S),// MinProperty sizeof(KSPROPERTY_DROPPEDFRAMES_CURRENT_S),// MinData FALSE, // SetSupported or Handler NULL, // Values 0, // RelationsCount NULL, // Relations NULL, // SupportHandler 0 // SerializedSize ), }; // ------------------------------------------------------------------------ // Array of all of the property sets supported by video streams // ------------------------------------------------------------------------ DEFINE_KSPROPERTY_SET_TABLE(VideoStreamProperties) { DEFINE_KSPROPERTY_SET ( &KSPROPSETID_Connection, // Set SIZEOF_ARRAY(VideoStreamConnectionProperties), // PropertiesCount VideoStreamConnectionProperties, // PropertyItem 0, // FastIoCount NULL // FastIoTable ), DEFINE_KSPROPERTY_SET ( &PROPSETID_VIDCAP_DROPPEDFRAMES, // Set SIZEOF_ARRAY(VideoStreamDroppedFramesProperties), // PropertiesCount VideoStreamDroppedFramesProperties, // PropertyItem 0, // FastIoCount NULL // FastIoTable ), }; #define NUMBER_VIDEO_STREAM_PROPERTIES (SIZEOF_ARRAY(VideoStreamProperties)) //--------------------------------------------------------------------------- // All of the video and vbi data formats we might use //--------------------------------------------------------------------------- #define D_X 320 #define D_Y 240 #ifdef TOSHIBA static KS_DATARANGE_VIDEO StreamFormatYVU9_Capture = { // KSDATARANGE { sizeof (KS_DATARANGE_VIDEO), // FormatSize 0, // Flags (D_X * D_Y * 9)/8, // SampleSize 0, // Reserved STATIC_KSDATAFORMAT_TYPE_VIDEO, // aka. MEDIATYPE_Video FOURCC_YVU9, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71, //MEDIASUBTYPE_YVU9 STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO // aka. FORMAT_VideoInfo }, TRUE, // BOOL, bFixedSizeSamples (all samples same size?) TRUE, // BOOL, bTemporalCompression (all I frames?) 0, // Reserved (was StreamDescriptionFlags) 0, // Reserved (was MemoryAllocationFlags (KS_VIDEO_ALLOC_*)) // _KS_VIDEO_STREAM_CONFIG_CAPS { STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO, // GUID #if 1 KS_AnalogVideo_None, // VideoStandard #else KS_AnalogVideo_NTSC_M | KS_AnalogVideo_PAL_B, // AnalogVideoStandard #endif 640,480, // InputSize, (the inherent size of the incoming signal // with every digitized pixel unique) 160,120, // MinCroppingSize, smallest rcSrc cropping rect allowed 640,480, // MaxCroppingSize, largest rcSrc cropping rect allowed 2, // CropGranularityX, granularity of cropping size 2, // CropGranularityY 2, // CropAlignX, alignment of cropping rect 2, // CropAlignY; 160, 120, // MinOutputSize, smallest bitmap stream can produce 640, 480, // MaxOutputSize, largest bitmap stream can produce 16, // OutputGranularityX, granularity of output bitmap size 4, // OutputGranularityY; 0, // StretchTapsX (0 no stretch, 1 pix dup, 2 interp...) 0, // StretchTapsY 2, // ShrinkTapsX 2, // ShrinkTapsY 333667, // MinFrameInterval, 100 nS units 640000000, // MaxFrameInterval, 100 nS units 30 * 160 * 120 * 9, // MinBitsPerSecond; 30 * 640 * 480 * 9 // MaxBitsPerSecond; }, // KS_VIDEOINFOHEADER (default format) { 0,0,0,0, // RECT rcSource; 0,0,0,0, // RECT rcTarget; D_X * D_Y * 9 / 8 * 30, // DWORD dwBitRate; 0L, // DWORD dwBitErrorRate; 333667, // REFERENCE_TIME AvgTimePerFrame; sizeof (KS_BITMAPINFOHEADER), // DWORD biSize; D_X, // LONG biWidth; D_Y, // LONG biHeight; 1, // WORD biPlanes; 9, // WORD biBitCount; FOURCC_YVU9, // DWORD biCompression; D_X * D_Y * 9 / 8, // DWORD biSizeImage; 0, // LONG biXPelsPerMeter; 0, // LONG biYPelsPerMeter; 0, // DWORD biClrUsed; 0 // DWORD biClrImportant; } }; static KS_DATARANGE_VIDEO StreamFormatYUV12_Capture = { // KSDATARANGE { sizeof (KS_DATARANGE_VIDEO), // FormatSize 0, // Flags (D_X * D_Y * 12)/8, // SampleSize 0, // Reserved STATIC_KSDATAFORMAT_TYPE_VIDEO, // aka. MEDIATYPE_Video FOURCC_YUV12, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71, //MEDIASUBTYPE_YUV12 STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO // aka. FORMAT_VideoInfo }, TRUE, // BOOL, bFixedSizeSamples (all samples same size?) TRUE, // BOOL, bTemporalCompression (all I frames?) 0, // Reserved (was StreamDescriptionFlags) 0, // Reserved (was MemoryAllocationFlags (KS_VIDEO_ALLOC_*)) // _KS_VIDEO_STREAM_CONFIG_CAPS { STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO, // GUID #if 1 KS_AnalogVideo_None, // VideoStandard #else KS_AnalogVideo_NTSC_M | KS_AnalogVideo_PAL_B, // AnalogVideoStandard #endif 640,480, // InputSize, (the inherent size of the incoming signal // with every digitized pixel unique) 160,120, // MinCroppingSize, smallest rcSrc cropping rect allowed 640,480, // MaxCroppingSize, largest rcSrc cropping rect allowed 2, // CropGranularityX, granularity of cropping size 2, // CropGranularityY 2, // CropAlignX, alignment of cropping rect 2, // CropAlignY; 160, 120, // MinOutputSize, smallest bitmap stream can produce 640, 480, // MaxOutputSize, largest bitmap stream can produce 16, // OutputGranularityX, granularity of output bitmap size 4, // OutputGranularityY; 0, // StretchTapsX (0 no stretch, 1 pix dup, 2 interp...) 0, // StretchTapsY 2, // ShrinkTapsX 2, // ShrinkTapsY 333667, // MinFrameInterval, 100 nS units 640000000, // MaxFrameInterval, 100 nS units 30 * 160 * 120 * 12, // MinBitsPerSecond; 30 * 640 * 480 * 12 // MaxBitsPerSecond; }, // KS_VIDEOINFOHEADER (default format) { 0,0,0,0, // RECT rcSource; 0,0,0,0, // RECT rcTarget; D_X * D_Y * 12 / 8 * 30, // DWORD dwBitRate; 0L, // DWORD dwBitErrorRate; 333667, // REFERENCE_TIME AvgTimePerFrame; sizeof (KS_BITMAPINFOHEADER), // DWORD biSize; D_X, // LONG biWidth; D_Y, // LONG biHeight; 1, // WORD biPlanes; 12, // WORD biBitCount; FOURCC_YUV12, // DWORD biCompression; D_X * D_Y * 12 / 8, // DWORD biSizeImage; 0, // LONG biXPelsPerMeter; 0, // LONG biYPelsPerMeter; 0, // DWORD biClrUsed; 0 // DWORD biClrImportant; } }; #else //TOSHIBA static KS_DATARANGE_VIDEO StreamFormatRGB24Bpp_Capture = { // KSDATARANGE { sizeof (KS_DATARANGE_VIDEO), // FormatSize 0, // Flags D_X * D_Y * 3, // SampleSize 0, // Reserved STATIC_KSDATAFORMAT_TYPE_VIDEO, // aka. MEDIATYPE_Video 0xe436eb7d, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70, //MEDIASUBTYPE_RGB24, STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO // aka. FORMAT_VideoInfo }, TRUE, // BOOL, bFixedSizeSamples (all samples same size?) TRUE, // BOOL, bTemporalCompression (all I frames?) 0, // Reserved (was StreamDescriptionFlags) 0, // Reserved (was MemoryAllocationFlags (KS_VIDEO_ALLOC_*)) // _KS_VIDEO_STREAM_CONFIG_CAPS { STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO, // GUID KS_AnalogVideo_NTSC_M | KS_AnalogVideo_PAL_B, // AnalogVideoStandard 720,480, // InputSize, (the inherent size of the incoming signal // with every digitized pixel unique) 160,120, // MinCroppingSize, smallest rcSrc cropping rect allowed 720,480, // MaxCroppingSize, largest rcSrc cropping rect allowed 8, // CropGranularityX, granularity of cropping size 1, // CropGranularityY 8, // CropAlignX, alignment of cropping rect 1, // CropAlignY; 160, 120, // MinOutputSize, smallest bitmap stream can produce 720, 480, // MaxOutputSize, largest bitmap stream can produce 8, // OutputGranularityX, granularity of output bitmap size 1, // OutputGranularityY; 0, // StretchTapsX (0 no stretch, 1 pix dup, 2 interp...) 0, // StretchTapsY 0, // ShrinkTapsX 0, // ShrinkTapsY 333667, // MinFrameInterval, 100 nS units 640000000, // MaxFrameInterval, 100 nS units 8 * 3 * 30 * 160 * 120, // MinBitsPerSecond; 8 * 3 * 30 * 720 * 480 // MaxBitsPerSecond; }, // KS_VIDEOINFOHEADER (default format) { 0,0,0,0, // RECT rcSource; 0,0,0,0, // RECT rcTarget; D_X * D_Y * 3 * 30, // DWORD dwBitRate; 0L, // DWORD dwBitErrorRate; 333667, // REFERENCE_TIME AvgTimePerFrame; sizeof (KS_BITMAPINFOHEADER), // DWORD biSize; D_X, // LONG biWidth; D_Y, // LONG biHeight; 1, // WORD biPlanes; 24, // WORD biBitCount; KS_BI_RGB, // DWORD biCompression; D_X * D_Y * 3, // DWORD biSizeImage; 0, // LONG biXPelsPerMeter; 0, // LONG biYPelsPerMeter; 0, // DWORD biClrUsed; 0 // DWORD biClrImportant; } }; #undef D_X #undef D_Y #define D_X 320 #define D_Y 240 static KS_DATARANGE_VIDEO StreamFormatUYU2_Capture = { // KSDATARANGE { sizeof (KS_DATARANGE_VIDEO), // FormatSize 0, // Flags D_X * D_Y * 2, // SampleSize 0, // Reserved STATIC_KSDATAFORMAT_TYPE_VIDEO, // aka. MEDIATYPE_Video 0x59565955, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71, //MEDIASUBTYPE_UYVY, STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO // aka. FORMAT_VideoInfo }, TRUE, // BOOL, bFixedSizeSamples (all samples same size?) TRUE, // BOOL, bTemporalCompression (all I frames?) 0, // Reserved (was StreamDescriptionFlags) 0, // Reserved (was MemoryAllocationFlags (KS_VIDEO_ALLOC_*)) // _KS_VIDEO_STREAM_CONFIG_CAPS { STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO, // GUID KS_AnalogVideo_NTSC_M | KS_AnalogVideo_PAL_B, // AnalogVideoStandard 720,480, // InputSize, (the inherent size of the incoming signal // with every digitized pixel unique) 160,120, // MinCroppingSize, smallest rcSrc cropping rect allowed 720,480, // MaxCroppingSize, largest rcSrc cropping rect allowed 8, // CropGranularityX, granularity of cropping size 1, // CropGranularityY 8, // CropAlignX, alignment of cropping rect 1, // CropAlignY; 160, 120, // MinOutputSize, smallest bitmap stream can produce 720, 480, // MaxOutputSize, largest bitmap stream can produce 8, // OutputGranularityX, granularity of output bitmap size 1, // OutputGranularityY; 0, // StretchTapsX (0 no stretch, 1 pix dup, 2 interp...) 0, // StretchTapsY 0, // ShrinkTapsX 0, // ShrinkTapsY 333667, // MinFrameInterval, 100 nS units 640000000, // MaxFrameInterval, 100 nS units 8 * 2 * 30 * 160 * 120, // MinBitsPerSecond; 8 * 2 * 30 * 720 * 480 // MaxBitsPerSecond; }, // KS_VIDEOINFOHEADER (default format) { 0,0,0,0, // RECT rcSource; 0,0,0,0, // RECT rcTarget; D_X * D_Y * 2 * 30, // DWORD dwBitRate; 0L, // DWORD dwBitErrorRate; 333667, // REFERENCE_TIME AvgTimePerFrame; sizeof (KS_BITMAPINFOHEADER), // DWORD biSize; D_X, // LONG biWidth; D_Y, // LONG biHeight; 1, // WORD biPlanes; 16, // WORD biBitCount; FOURCC_YUV422, // DWORD biCompression; D_X * D_Y * 2, // DWORD biSizeImage; 0, // LONG biXPelsPerMeter; 0, // LONG biYPelsPerMeter; 0, // DWORD biClrUsed; 0 // DWORD biClrImportant; } }; #endif//TOSHIBA #undef D_X #undef D_Y #ifndef TOSHIBA static KS_DATARANGE_ANALOGVIDEO StreamFormatAnalogVideo = { // KS_DATARANGE_ANALOGVIDEO { sizeof (KS_DATARANGE_ANALOGVIDEO), // FormatSize 0, // Flags sizeof (KS_TVTUNER_CHANGE_INFO), // SampleSize 0, // Reserved STATIC_KSDATAFORMAT_TYPE_ANALOGVIDEO, // aka MEDIATYPE_AnalogVideo STATIC_KSDATAFORMAT_SUBTYPE_NONE, STATIC_KSDATAFORMAT_SPECIFIER_ANALOGVIDEO, // aka FORMAT_AnalogVideo }, // KS_ANALOGVIDEOINFO { 0, 0, 720, 480, // rcSource; 0, 0, 720, 480, // rcTarget; 720, // dwActiveWidth; 480, // dwActiveHeight; 0, // REFERENCE_TIME AvgTimePerFrame; } }; #endif//TOSHIBA //--------------------------------------------------------------------------- // STREAM_Capture Formats //--------------------------------------------------------------------------- static PKSDATAFORMAT Stream0Formats[] = { #ifdef TOSHIBA (PKSDATAFORMAT) &StreamFormatYUV12_Capture, (PKSDATAFORMAT) &StreamFormatYVU9_Capture, #else //TOSHIBA (PKSDATAFORMAT) &StreamFormatRGB24Bpp_Capture, (PKSDATAFORMAT) &StreamFormatUYU2_Capture, #endif//TOSHIBA }; #define NUM_STREAM_0_FORMATS (SIZEOF_ARRAY(Stream0Formats)) #ifndef TOSHIBA //--------------------------------------------------------------------------- // STREAM_Preview Formats //--------------------------------------------------------------------------- static PKSDATAFORMAT Stream1Formats[] = { #ifdef TOSHIBA (PKSDATAFORMAT) &StreamFormatYUV12_Capture, (PKSDATAFORMAT) &StreamFormatYVU9_Capture, #else //TOSHIBA (PKSDATAFORMAT) &StreamFormatRGB24Bpp_Capture, (PKSDATAFORMAT) &StreamFormatUYU2_Capture, #endif//TOSHIBA }; #define NUM_STREAM_1_FORMATS (SIZEOF_ARRAY (Stream1Formats)) //--------------------------------------------------------------------------- // STREAM_AnalogVideoInput Formats //--------------------------------------------------------------------------- static PKSDATAFORMAT Stream2Formats[] = { (PKSDATAFORMAT) &StreamFormatAnalogVideo, }; #define NUM_STREAM_2_FORMATS (SIZEOF_ARRAY (Stream2Formats)) #endif//TOSHIBA //--------------------------------------------------------------------------- // Create an array that holds the list of all of the streams supported //--------------------------------------------------------------------------- typedef struct _ALL_STREAM_INFO { HW_STREAM_INFORMATION hwStreamInfo; HW_STREAM_OBJECT hwStreamObject; } ALL_STREAM_INFO, *PALL_STREAM_INFO; static ALL_STREAM_INFO Streams [] = { // ----------------------------------------------------------------- // STREAM_Capture // ----------------------------------------------------------------- { // HW_STREAM_INFORMATION ------------------------------------------- { 1, // NumberOfPossibleInstances KSPIN_DATAFLOW_OUT, // DataFlow TRUE, // DataAccessible NUM_STREAM_0_FORMATS, // NumberOfFormatArrayEntries Stream0Formats, // StreamFormatsArray 0, // ClassReserved[0] 0, // ClassReserved[1] 0, // ClassReserved[2] 0, // ClassReserved[3] NUMBER_VIDEO_STREAM_PROPERTIES, // NumStreamPropArrayEntries (PKSPROPERTY_SET) VideoStreamProperties,// StreamPropertiesArray 0, // NumStreamEventArrayEntries; 0, // StreamEventsArray; (GUID *) &PINNAME_VIDEO_CAPTURE, // Category (GUID *) &PINNAME_VIDEO_CAPTURE, // Name 1, // MediumsCount &StandardMedium, // Mediums FALSE, // BridgeStream }, // HW_STREAM_OBJECT ------------------------------------------------ { sizeof (HW_STREAM_OBJECT), // SizeOfThisPacket 0, // StreamNumber 0, // HwStreamExtension VideoReceiveDataPacket, // HwReceiveDataPacket VideoReceiveCtrlPacket, // HwReceiveControlPacket { NULL, 0 }, // HW_CLOCK_OBJECT FALSE, // Dma TRUE, // Pio NULL, // HwDeviceExtension sizeof (KS_FRAME_INFO), // StreamHeaderMediaSpecific 0, // StreamHeaderWorkspace FALSE, // Allocator NULL, // HwEventRoutine { 0, 0 }, // Reserved[2] }, #ifndef TOSHIBA }, // ----------------------------------------------------------------- // STREAM_Preview // ----------------------------------------------------------------- { // HW_STREAM_INFORMATION ------------------------------------------- { 1, // NumberOfPossibleInstances KSPIN_DATAFLOW_OUT, // DataFlow TRUE, // DataAccessible NUM_STREAM_1_FORMATS, // NumberOfFormatArrayEntries Stream1Formats, // StreamFormatsArray 0, // ClassReserved[0] 0, // ClassReserved[1] 0, // ClassReserved[2] 0, // ClassReserved[3] NUMBER_VIDEO_STREAM_PROPERTIES, // NumStreamPropArrayEntries (PKSPROPERTY_SET) VideoStreamProperties,// StreamPropertiesArray 0, // NumStreamEventArrayEntries; 0, // StreamEventsArray; (GUID *) &PINNAME_VIDEO_PREVIEW, // Category (GUID *) &PINNAME_VIDEO_PREVIEW, // Name 1, // MediumsCount &StandardMedium, // Mediums FALSE, // BridgeStream }, // HW_STREAM_OBJECT ------------------------------------------------ { sizeof (HW_STREAM_OBJECT), // SizeOfThisPacket 1, // StreamNumber 0, // HwStreamExtension VideoReceiveDataPacket, // HwReceiveDataPacket VideoReceiveCtrlPacket, // HwReceiveControlPacket { NULL, 0 }, // HW_CLOCK_OBJECT FALSE, // Dma TRUE, // Pio 0, // HwDeviceExtension sizeof (KS_FRAME_INFO), // StreamHeaderMediaSpecific 0, // StreamHeaderWorkspace FALSE, // Allocator NULL, // HwEventRoutine { 0, 0 }, // Reserved[2] }, }, // ----------------------------------------------------------------- // STREAM_AnalogVideoInput // ----------------------------------------------------------------- { // HW_STREAM_INFORMATION ------------------------------------------- { 1, // NumberOfPossibleInstances KSPIN_DATAFLOW_IN, // DataFlow TRUE, // DataAccessible NUM_STREAM_2_FORMATS, // NumberOfFormatArrayEntries Stream2Formats, // StreamFormatsArray 0, // ClassReserved[0] 0, // ClassReserved[1] 0, // ClassReserved[2] 0, // ClassReserved[3] 0, // NumStreamPropArrayEntries 0, // StreamPropertiesArray 0, // NumStreamEventArrayEntries; 0, // StreamEventsArray; (GUID *) &PINNAME_VIDEO_ANALOGVIDEOIN, // Category (GUID *) &PINNAME_VIDEO_ANALOGVIDEOIN, // Name 1, // MediumsCount &CrossbarMediums[9], // Mediums FALSE, // BridgeStream }, // HW_STREAM_OBJECT ------------------------------------------------ { sizeof (HW_STREAM_OBJECT), // SizeOfThisPacket 2, // StreamNumber 0, // HwStreamExtension AnalogVideoReceiveDataPacket, // HwReceiveDataPacket AnalogVideoReceiveCtrlPacket, // HwReceiveControlPacket { NULL, 0 }, // HW_CLOCK_OBJECT FALSE, // Dma TRUE, // Pio 0, // HwDeviceExtension 0, // StreamHeaderMediaSpecific 0, // StreamHeaderWorkspace FALSE, // Allocator NULL, // HwEventRoutine { 0, 0 }, // Reserved[2] } #endif//TOSHIBA } }; #define DRIVER_STREAM_COUNT (SIZEOF_ARRAY (Streams)) //--------------------------------------------------------------------------- // Topology //--------------------------------------------------------------------------- // Categories define what the device does. static const GUID Categories[] = { #ifdef TOSHIBA STATIC_KSCATEGORY_VIDEO, STATIC_KSCATEGORY_CAPTURE, #else //TOSHIBA STATIC_KSCATEGORY_VIDEO, STATIC_KSCATEGORY_CAPTURE, STATIC_KSCATEGORY_TVTUNER, STATIC_KSCATEGORY_CROSSBAR, STATIC_KSCATEGORY_TVAUDIO #endif//TOSHIBA }; #define NUMBER_OF_CATEGORIES SIZEOF_ARRAY (Categories) static KSTOPOLOGY Topology = { NUMBER_OF_CATEGORIES, // CategoriesCount (GUID*) &Categories, // Categories 0, // TopologyNodesCount NULL, // TopologyNodes 0, // TopologyConnectionsCount NULL, // TopologyConnections NULL, // TopologyNodesNames 0, // Reserved }; //--------------------------------------------------------------------------- // The Main stream header //--------------------------------------------------------------------------- static HW_STREAM_HEADER StreamHeader = { DRIVER_STREAM_COUNT, // NumberOfStreams sizeof (HW_STREAM_INFORMATION), // Future proofing 0, // NumDevPropArrayEntries set at init time NULL, // DevicePropertiesArray set at init time 0, // NumDevEventArrayEntries; NULL, // DeviceEventsArray; &Topology // Pointer to Device Topology }; #ifdef __cplusplus } #endif // __cplusplus #endif // __CAPSTRM_H__