//==========================================================================; // // 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 - 1999 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 }; // ------------------------------------------------------------------------ // 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 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; } }; #undef D_X #undef D_Y 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; } }; #define VBIStride (768*2) #define VBISamples (768*2) #define VBIStart 10 #define VBIEnd 21 #define VBILines (((VBIEnd)-(VBIStart))+1) KS_DATARANGE_VIDEO_VBI StreamFormatVBI = { // KSDATARANGE { { sizeof( KS_DATARANGE_VIDEO_VBI ), 0, VBIStride * VBILines, // SampleSize 0, // Reserved { STATIC_KSDATAFORMAT_TYPE_VBI }, { STATIC_KSDATAFORMAT_SUBTYPE_RAW8 }, { STATIC_KSDATAFORMAT_SPECIFIER_VBI } } }, 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_VBI }, KS_AnalogVideo_NTSC_M, // AnalogVideoStandard { VBIStride, 480 /*VBILines*/ // SIZE InputSize }, { VBISamples, VBILines // SIZE MinCroppingSize; smallest rcSrc cropping rect allowed }, { VBIStride, VBILines // SIZE MaxCroppingSize; largest rcSrc cropping rect allowed }, 1, // int CropGranularityX; // granularity of cropping size 1, // int CropGranularityY; 1, // int CropAlignX; // alignment of cropping rect 1, // int CropAlignY; { VBISamples, VBILines // SIZE MinOutputSize; // smallest bitmap stream can produce }, { VBIStride, VBILines // SIZE MaxOutputSize; // largest bitmap stream can produce }, 1, // int OutputGranularityX; // granularity of output bitmap size 2, // int OutputGranularityY; 0, // StretchTapsX (0 no stretch, 1 pix dup, 2 interp...) 0, // StretchTapsY 0, // ShrinkTapsX 0, // ShrinkTapsY 166834, // LONGLONG MinFrameInterval; // 100 nS units 166834, // LONGLONG MaxFrameInterval; // 16683.4uS == 1/60 sec VBIStride * VBILines * 8 * 30 * 2, // LONG MinBitsPerSecond; VBIStride * VBILines * 8 * 30 * 2 // LONG MaxBitsPerSecond; }, // KS_VBIINFOHEADER (default format) { VBIStart, // StartLine -- inclusive VBIEnd, // EndLine -- inclusive KS_VBISAMPLINGRATE_5X_NABTS, // SamplingFrequency; Hz. 732, // MinLineStartTime; 732, // MaxLineStartTime; 732, // ActualLineStartTime 0, // ActualLineEndTime; KS_AnalogVideo_NTSC_M, // VideoStandard; VBISamples, // SamplesPerLine; VBIStride, // StrideInBytes; VBIStride * VBILines // BufferSize; } }; // output is NABTS records KSDATARANGE StreamFormatNABTS = { sizeof (KSDATARANGE), 0, sizeof (NABTS_BUFFER), 0, // Reserved { STATIC_KSDATAFORMAT_TYPE_VBI }, { STATIC_KSDATAFORMAT_SUBTYPE_NABTS }, { STATIC_KSDATAFORMAT_SPECIFIER_NONE } }; KSDATARANGE StreamFormatCC = { // Definition of the CC stream { sizeof (KSDATARANGE), // FormatSize 0, // Flags sizeof (CC_HW_FIELD), // SampleSize 0, // Reserved { STATIC_KSDATAFORMAT_TYPE_VBI }, { STATIC_KSDATAFORMAT_SUBTYPE_CC }, { STATIC_KSDATAFORMAT_SPECIFIER_NONE } } }; //--------------------------------------------------------------------------- // STREAM_Capture Formats //--------------------------------------------------------------------------- static PKSDATAFORMAT StreamCaptureFormats[] = { (PKSDATAFORMAT) &StreamFormatRGB24Bpp_Capture, (PKSDATAFORMAT) &StreamFormatUYU2_Capture, }; #define NUM_STREAM_CAPTURE_FORMATS (SIZEOF_ARRAY(StreamCaptureFormats)) //--------------------------------------------------------------------------- // STREAM_Preview Formats //--------------------------------------------------------------------------- static PKSDATAFORMAT StreamPreviewFormats[] = { (PKSDATAFORMAT) &StreamFormatRGB24Bpp_Capture, (PKSDATAFORMAT) &StreamFormatUYU2_Capture, }; #define NUM_STREAM_PREVIEW_FORMATS (SIZEOF_ARRAY (StreamPreviewFormats)) //--------------------------------------------------------------------------- // STREAM_VBI Formats //--------------------------------------------------------------------------- static PKSDATAFORMAT StreamVBIFormats[] = { (PKSDATAFORMAT) &StreamFormatVBI, }; #define NUM_STREAM_VBI_FORMATS (SIZEOF_ARRAY(StreamVBIFormats)) //--------------------------------------------------------------------------- // STREAM_NABTS Formats //--------------------------------------------------------------------------- static PKSDATAFORMAT StreamNABTSFormats[] = { (PKSDATAFORMAT) &StreamFormatNABTS, }; #define NUM_STREAM_NABTS_FORMATS (SIZEOF_ARRAY(StreamNABTSFormats)) static PKSDATAFORMAT StreamCCFormats[] = { (PKSDATAFORMAT) &StreamFormatCC, }; #define NUM_STREAM_CC_FORMATS (SIZEOF_ARRAY (StreamCCFormats)) //--------------------------------------------------------------------------- // STREAM_AnalogVideoInput Formats //--------------------------------------------------------------------------- static PKSDATAFORMAT StreamAnalogVidInFormats[] = { (PKSDATAFORMAT) &StreamFormatAnalogVideo, }; #define NUM_STREAM_ANALOGVIDIN_FORMATS (SIZEOF_ARRAY (StreamAnalogVidInFormats)) //--------------------------------------------------------------------------- // 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; // Warning: The StreamNumber element of the HW_STREAM_OBJECT below MUST be // the same as its position in the Streams[] array. static ALL_STREAM_INFO Streams [] = { // ----------------------------------------------------------------- // STREAM_Capture // ----------------------------------------------------------------- { // HW_STREAM_INFORMATION ------------------------------------------- { 1, // NumberOfPossibleInstances KSPIN_DATAFLOW_OUT, // DataFlow TRUE, // DataAccessible NUM_STREAM_CAPTURE_FORMATS, // NumberOfFormatArrayEntries StreamCaptureFormats, // 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 STREAM_Capture, // 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] }, }, // ----------------------------------------------------------------- // STREAM_Preview // ----------------------------------------------------------------- { // HW_STREAM_INFORMATION ------------------------------------------- { 1, // NumberOfPossibleInstances KSPIN_DATAFLOW_OUT, // DataFlow TRUE, // DataAccessible NUM_STREAM_PREVIEW_FORMATS, // NumberOfFormatArrayEntries StreamPreviewFormats, // 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 STREAM_Preview, // 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_VBI // ----------------------------------------------------------------- { // HW_STREAM_INFORMATION ------------------------------------------- { 1, // NumberOfPossibleInstances KSPIN_DATAFLOW_OUT, // DataFlow TRUE, // DataAccessible NUM_STREAM_VBI_FORMATS, // NumberOfFormatArrayEntries StreamVBIFormats, // 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_VBI, // Category (GUID *)&PINNAME_VIDEO_VBI, // Name 0, // MediumsCount NULL, // Mediums FALSE, // BridgeStream }, // HW_STREAM_OBJECT ------------------------------------------------ { sizeof (HW_STREAM_OBJECT), // SizeOfThisPacket STREAM_VBI, // StreamNumber (PVOID)NULL, // HwStreamExtension VBIReceiveDataPacket, // HwReceiveDataPacket VBIReceiveCtrlPacket, // HwReceiveControlPacket { // HW_CLOCK_OBJECT NULL, // .HWClockFunction 0, // .ClockSupportFlags }, FALSE, // Dma TRUE, // Pio (PVOID)NULL, // HwDeviceExtension sizeof (KS_VBI_FRAME_INFO), // StreamHeaderMediaSpecific 0, // StreamHeaderWorkspace FALSE, // Allocator NULL, // HwEventRoutine { 0, 0 }, // Reserved[2] }, }, // ----------------------------------------------------------------- // STREAM_CC (Closed Caption Output) // ----------------------------------------------------------------- { // HW_STREAM_INFORMATION ------------------------------------------- { 1, // NumberOfPossibleInstances KSPIN_DATAFLOW_OUT, // DataFlow TRUE, // DataAccessible NUM_STREAM_CC_FORMATS, // NumberOfFormatArrayEntries StreamCCFormats, // 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_CC_CAPTURE, // Category (GUID *)&PINNAME_VIDEO_CC_CAPTURE, // Name 0, // MediumsCount NULL, // Mediums FALSE, // BridgeStream }, // HW_STREAM_OBJECT ------------------------------------------------ { sizeof (HW_STREAM_OBJECT), // SizeOfThisPacket STREAM_CC, // StreamNumber (PVOID)NULL, // HwStreamExtension VBIReceiveDataPacket, // HwReceiveDataPacket VBIReceiveCtrlPacket, // HwReceiveControlPacket { // HW_CLOCK_OBJECT NULL, // .HWClockFunction 0, // .ClockSupportFlags }, FALSE, // Dma TRUE, // Pio (PVOID)NULL, // HwDeviceExtension 0, // StreamHeaderMediaSpecific 0, // StreamHeaderWorkspace FALSE, // Allocator NULL, // HwEventRoutine { 0, 0 }, // Reserved[2] }, }, // ----------------------------------------------------------------- // STREAM_NABTS // ----------------------------------------------------------------- { // HW_STREAM_INFORMATION ------------------------------------------- { 1, // NumberOfPossibleInstances KSPIN_DATAFLOW_OUT, // DataFlow TRUE, // DataAccessible NUM_STREAM_NABTS_FORMATS, // NumberOfFormatArrayEntries StreamNABTSFormats, // 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_NABTS_CAPTURE, // Category (GUID *)&PINNAME_VIDEO_NABTS_CAPTURE, // Name 0, // MediumsCount NULL, // Mediums FALSE, // BridgeStream }, // HW_STREAM_OBJECT ------------------------------------------------ { sizeof (HW_STREAM_OBJECT), // SizeOfThisPacket STREAM_NABTS, // StreamNumber (PVOID)NULL, // HwStreamExtension VBIReceiveDataPacket, // HwReceiveDataPacket VBIReceiveCtrlPacket, // HwReceiveControlPacket { // HW_CLOCK_OBJECT NULL, // .HWClockFunction 0, // .ClockSupportFlags }, FALSE, // Dma TRUE, // Pio (PVOID)NULL, // HwDeviceExtension 0, // 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_ANALOGVIDIN_FORMATS, // NumberOfFormatArrayEntries StreamAnalogVidInFormats, // 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 STREAM_AnalogVideoInput, // 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] } } }; #define DRIVER_STREAM_COUNT (SIZEOF_ARRAY (Streams)) //--------------------------------------------------------------------------- // Topology //--------------------------------------------------------------------------- // Categories define what the device does. static const GUID Categories[] = { STATIC_KSCATEGORY_VIDEO, STATIC_KSCATEGORY_CAPTURE, STATIC_KSCATEGORY_TVTUNER, STATIC_KSCATEGORY_CROSSBAR, STATIC_KSCATEGORY_TVAUDIO }; #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__