windows-nt/Source/XPSP1/NT/drivers/wdm/capture/mini/1394dcam/strmdata.h

641 lines
27 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
//===========================================================================
//
// 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) 1996 - 1998 Microsoft Corporation. All Rights Reserved.
//
//===========================================================================
//
// External functions
//
#include "sonydcam.h"
//
// Local variables
//
CAMERA_ISOCH_INFO IsochInfoTable[] = {
0, SPEED_FLAGS_100, 0, // Reserved <---+
0, SPEED_FLAGS_100, 0, // 3.75 fps |
15, SPEED_FLAGS_100, 57600, // 7.5 fps |
30, SPEED_FLAGS_100, 57600, // 15 fps +- Mode0
60, SPEED_FLAGS_100, 57600, // 30 fps |
0, SPEED_FLAGS_100, 0, // 60 fps <---+
0, SPEED_FLAGS_100, 0, // Reserved <---+
20, SPEED_FLAGS_100, 153600, // 3.75 fps |
40, SPEED_FLAGS_100, 153600, // 7.5 fps |
80, SPEED_FLAGS_100, 153600, // 15 fps +- Mode1
160, SPEED_FLAGS_100, 153600, // 30 fps |
0, SPEED_FLAGS_100, 0, // 60 fps <---+
0, SPEED_FLAGS_100, 0, // Reserved <---+
60, SPEED_FLAGS_100, 460800, // 3.75 fps |
120, SPEED_FLAGS_100, 460800, // 7.5 fps |
240, SPEED_FLAGS_100, 460800, // 15 fps +- Mode2
480, SPEED_FLAGS_200, 460800, // 30 fps |
0, SPEED_FLAGS_100, 0, // 60 fps <---+
0, SPEED_FLAGS_100, 0, // Reserved <---+
80, SPEED_FLAGS_100, 614400, // 3.75 fps |
160, SPEED_FLAGS_100, 614400, // 7.5 fps |
320, SPEED_FLAGS_200, 614400, // 15 fps +- Mode3
640, SPEED_FLAGS_400, 614400, // 30 fps |
0, SPEED_FLAGS_100, 0, // 60 fps <---+
0, SPEED_FLAGS_100, 0, // Reserved <---+
120, SPEED_FLAGS_100, 921600, // 3.75 fps |
240, SPEED_FLAGS_100, 921600, // 7.5 fps |
480, SPEED_FLAGS_200, 921600, // 15 fps +- Mode4
960, SPEED_FLAGS_400, 921600, // 30 fps |
0, SPEED_FLAGS_100, 0, // 60 fps <---+
0, SPEED_FLAGS_100, 0, // Reserved <---+
40, SPEED_FLAGS_100, 307200, // 3.75 fps |
80, SPEED_FLAGS_100, 307200, // 7.5 fps |
160, SPEED_FLAGS_100, 307200, // 15 fps +- Mode5
320, SPEED_FLAGS_200, 307200, // 30 fps |
640, SPEED_FLAGS_400, 307200, // 60 fps <---+
};
// ------------------------------------------------------------------------
// Property set 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
sizeof(ULONG) // 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))
#ifndef mmioFOURCC
#define mmioFOURCC( ch0, ch1, ch2, ch3 ) \
( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) | \
( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )
#endif
//
// FourCC of the YUV formats
// For information about FourCC, go to http://www.webartz.com/fourcc/indexyuv.htm
//
#define FOURCC_Y444 mmioFOURCC('Y', '4', '4', '4') // TIYUV: 1394 conferencing camera 4:4:4 mode 0
#define FOURCC_UYVY mmioFOURCC('U', 'Y', 'V', 'Y') // MSYUV: 1394 conferencing camera 4:4:4 mode 1 and 3
#define FOURCC_Y411 mmioFOURCC('Y', '4', '1', '1') // TIYUV: 1394 conferencing camera 4:1:1 mode 2
#define FOURCC_Y800 mmioFOURCC('Y', '8', '0', '0') // TIYUV: 1394 conferencing camera 4:1:1 mode 5
#ifdef SUPPORT_YUV444
#define DX 160
#define DY 120
#define DBITCOUNT 32
KS_DATARANGE_VIDEO DCAM_StreamMode_0 =
{
// KSDATARANGE
{
sizeof (KS_DATARANGE_VIDEO), // Flags
0,
57600, // SampleSize
0, // Reserved
STATIC_KSDATAFORMAT_TYPE_VIDEO,
FOURCC_Y444, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71,
STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO
},
TRUE, // BOOL, bFixedSizeSamples (all samples same size?)
TRUE, // BOOL, bTemporalCompression (all I frames?)
KS_VIDEOSTREAM_CAPTURE, // StreamDescriptionFlags (KS_VIDEO_DESC_*)
0, // MemoryAllocationFlags (KS_VIDEO_ALLOC_*)
// _KS_VIDEO_STREAM_CONFIG_CAPS
{
STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO,
KS_AnalogVideo_None, // AnalogVideoStandard
DX,DY, // InputSize, (the inherent size of the incoming signal
// with every digitized pixel unique)
DX,DY, // MinCroppingSize, smallest rcSrc cropping rect allowed
DX,DY, // MaxCroppingSize, largest rcSrc cropping rect allowed
1, // CropGranularityX, granularity of cropping size
1, // CropGranularityY
1, // CropAlignX, alignment of cropping rect
1, // CropAlignY;
DX, DY, // MinOutputSize, smallest bitmap stream can produce
DX, DY, // MaxOutputSize, largest bitmap stream can produce
DX, // OutputGranularityX, granularity of output bitmap size
DY, // OutputGranularityY;
0, // StretchTapsX (0 no stretch, 1 pix dup, 2 interp...)
0, // StretchTapsY
0, // ShrinkTapsX
0, // ShrinkTapsY
// Allow 1% difference
333000, // MinFrameInterval (10,000,000 / 30.00FPS), 100nS units
1333333, // MaxFrameInterval (10,000,000 / 7.50FPS), 100nS units
4608000, // (DX * DY * DBITCOUNT) * DFPS_MIN, // MinBitsPerSecond (7.50 FPS);
36864000, // (DX * DY * DBITCOUNT) * DFPS_MAX // MaxBitsPerSecond (30.0 FPS);
},
// KS_VIDEOINFOHEADER (default format)
{
0,0,0,0, // RECT rcSource;
0,0,0,0, // RECT rcTarget;
13824000, // DWORD dwBitRate; 57600 * 30FPS * 8 bit/Byte
0L, // DWORD dwBitErrorRate;
333333, // REFERENCE_TIME AvgTimePerFrame (30 FPS);
sizeof (KS_BITMAPINFOHEADER), // DWORD biSize;
DX, // LONG biWidth;
DY, // LONG biHeight;
1, // WORD biPlanes;
DBITCOUNT, // WORD biBitCount;
FOURCC_Y444, // DWORD biCompression;
57600, // DWORD biSizeImage;
0, // LONG biXPelsPerMeter;
0, // LONG biYPelsPerMeter;
0, // DWORD biClrUsed;
0 // DWORD biClrImportant;
}
};
#endif
#undef DX
#undef DY
#undef DBITCOUNT
#define DX 320
#define DY 240
#define DBITCOUNT 16
KS_DATARANGE_VIDEO DCAM_StreamMode_1 =
{
// KSDATARANGE
{
sizeof (KS_DATARANGE_VIDEO), // Flags
0,
153600, // SampleSize
0, // Reserved
STATIC_KSDATAFORMAT_TYPE_VIDEO,
FOURCC_UYVY, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71,
STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO
},
TRUE, // BOOL, bFixedSizeSamples (all samples same size?)
TRUE, // BOOL, bTemporalCompression (all I frames?)
KS_VIDEOSTREAM_CAPTURE, // StreamDescriptionFlags (KS_VIDEO_DESC_*)
0, // MemoryAllocationFlags (KS_VIDEO_ALLOC_*)
// _KS_VIDEO_STREAM_CONFIG_CAPS
{
STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO,
KS_AnalogVideo_None, // AnalogVideoStandard
DX,DY, // InputSize, (the inherent size of the incoming signal
// with every digitized pixel unique)
DX,DY, // MinCroppingSize, smallest rcSrc cropping rect allowed
DX,DY, // MaxCroppingSize, largest rcSrc cropping rect allowed
1, // CropGranularityX, granularity of cropping size
1, // CropGranularityY
1, // CropAlignX, alignment of cropping rect
1, // CropAlignY;
DX, DY, // MinOutputSize, smallest bitmap stream can produce
DX, DY, // MaxOutputSize, largest bitmap stream can produce
DX, // OutputGranularityX, granularity of output bitmap size
DY, // OutputGranularityY;
0, // StretchTapsX (0 no stretch, 1 pix dup, 2 interp...)
0, // StretchTapsY
0, // ShrinkTapsX
0, // ShrinkTapsY
// Allow 1% difference
333000, // MinFrameInterval (10,000,000 / 30.00FPS), 100nS units
2666666, // MaxFrameInterval (10,000,000 / 3.75FPS), 100nS units
4608000, // (DX * DY * DBITCOUNT) * DFPS_MIN, // MinBitsPerSecond (3.75 FPS);
36864000, // (DX * DY * DBITCOUNT) * DFPS_MAX // MaxBitsPerSecond (30.0 FPS);
},
// KS_VIDEOINFOHEADER (default format)
{
0,0,0,0, // RECT rcSource;
0,0,0,0, // RECT rcTarget;
18432000, // DWORD dwBitRate; 153600 * 15FPS * 8 bit/Byte
0L, // DWORD dwBitErrorRate;
666666, // REFERENCE_TIME AvgTimePerFrame (15 FPS);
sizeof (KS_BITMAPINFOHEADER), // DWORD biSize;
DX, // LONG biWidth;
DY, // LONG biHeight;
1, // WORD biPlanes;
DBITCOUNT, // WORD biBitCount;
FOURCC_UYVY, // DWORD biCompression;
153600, // DWORD biSizeImage;
0, // LONG biXPelsPerMeter;
0, // LONG biYPelsPerMeter;
0, // DWORD biClrUsed;
0 // DWORD biClrImportant;
}
};
#ifdef SUPPORT_YUV411
#undef DX
#undef DY
#undef DBITCOUNT
//
// This has format of UYYV YYUY YVYY (8Y+2U+2V = 12 bytes = 8 pixels)
//
#define DX 640
#define DY 480
#define DBITCOUNT 12
// To support Mode 2, 640x480, FourCC=Y411
KS_DATARANGE_VIDEO DCAM_StreamMode_2 =
{
// KSDATARANGE
{
sizeof (KS_DATARANGE_VIDEO),
0, // Flags
460800, // SampleSize
0, // Reserved
STATIC_KSDATAFORMAT_TYPE_VIDEO,
FOURCC_Y411, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71,
STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO
},
TRUE, // BOOL, bFixedSizeSamples (all samples same size?)
TRUE, // BOOL, bTemporalCompression (all I frames?)
KS_VIDEOSTREAM_CAPTURE, // StreamDescriptionFlags (KS_VIDEO_DESC_*)
0, // MemoryAllocationFlags (KS_VIDEO_ALLOC_*)
// _KS_VIDEO_STREAM_CONFIG_CAPS
{
STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO,
KS_AnalogVideo_None, // AnalogVideoStandard
DX,DY, // InputSize, (the inherent size of the incoming signal
// with every digitized pixel unique)
DX,DY, // MinCroppingSize, smallest rcSrc cropping rect allowed
DX,DY, // MaxCroppingSize, largest rcSrc cropping rect allowed
1, // CropGranularityX, granularity of cropping size
1, // CropGranularityY
1, // CropAlignX, alignment of cropping rect
1, // CropAlignY;
DX, DY, // MinOutputSize, smallest bitmap stream can produce
DX, DY, // MaxOutputSize, largest bitmap stream can produce
DX, // OutputGranularityX, granularity of output bitmap size
DY, // OutputGranularityY;
0, // StretchTapsX (0 no stretch, 1 pix dup, 2 interp...)
0, // StretchTapsY
0, // ShrinkTapsX
0, // ShrinkTapsY
// allow 1% difference
333000, // MinFrameInterval (10,000,000 / 30.00FPS), 100nS units
2666666, // MaxFrameInterval (10,000,000 / 3.75FPS), 100nS units
27648000, // MinBitsPerSecond (7.5 FPS);
110592000 // MaxBitsPerSecond (30.0 FPS);
},
// KS_VIDEOINFOHEADER (default format)
{
0,0,0,0, // RECT rcSource;
0,0,0,0, // RECT rcTarget;
110592000, // DWORD dwBitRate;
0L, // DWORD dwBitErrorRate;
333333, // REFERENCE_TIME AvgTimePerFrame (30 FPS);
sizeof (KS_BITMAPINFOHEADER), // DWORD biSize;
DX, // LONG biWidth;
DY, // LONG biHeight;
1, // WORD biPlanes;
DBITCOUNT, // WORD biBitCount;
FOURCC_Y411, // DWORD biCompression;
460800, // DWORD biSizeImage;
0, // LONG biXPelsPerMeter;
0, // LONG biYPelsPerMeter;
0, // DWORD biClrUsed;
0 // DWORD biClrImportant;
}
};
#endif // SUPPORT_YUV411
#undef DX
#undef DY
#undef DBITCOUNT
#define DX 640
#define DY 480
#define DBITCOUNT 16
// To support mode3, 640x480
KS_DATARANGE_VIDEO DCAM_StreamMode_3 =
{
// KSDATARANGE
{
sizeof (KS_DATARANGE_VIDEO),
0, // Flags
614400, // SampleSize
0, // Reserved
STATIC_KSDATAFORMAT_TYPE_VIDEO,
FOURCC_UYVY, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71,
STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO
},
TRUE, // BOOL, bFixedSizeSamples (all samples same size?)
TRUE, // BOOL, bTemporalCompression (all I frames?)
KS_VIDEOSTREAM_CAPTURE, // StreamDescriptionFlags (KS_VIDEO_DESC_*)
0, // MemoryAllocationFlags (KS_VIDEO_ALLOC_*)
// _KS_VIDEO_STREAM_CONFIG_CAPS
{
STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO,
KS_AnalogVideo_None, // AnalogVideoStandard
DX,DY, // InputSize, (the inherent size of the incoming signal
// with every digitized pixel unique)
DX,DY, // MinCroppingSize, smallest rcSrc cropping rect allowed
DX,DY, // MaxCroppingSize, largest rcSrc cropping rect allowed
1, // CropGranularityX, granularity of cropping size
1, // CropGranularityY
1, // CropAlignX, alignment of cropping rect
1, // CropAlignY;
DX, DY, // MinOutputSize, smallest bitmap stream can produce
DX, DY, // MaxOutputSize, largest bitmap stream can produce
DX, // OutputGranularityX, granularity of output bitmap size
DY, // OutputGranularityY;
0, // StretchTapsX (0 no stretch, 1 pix dup, 2 interp...)
0, // StretchTapsY
0, // ShrinkTapsX
0, // ShrinkTapsY
666666, // MinFrameInterval (10,000,000 / 15.00FPS), 100nS units
2666666, // MaxFrameInterval (10,000,000 / 3.75FPS), 100nS units
36864000, // MinBitsPerSecond ( 7.5 FPS);
73728000, // MaxBitsPerSecond (15 FPS);
},
// KS_VIDEOINFOHEADER (default format)
{
0,0,0,0, // RECT rcSource;
0,0,0,0, // RECT rcTarget;
73728000, // DWORD dwBitRate;
0L, // DWORD dwBitErrorRate;
666666, // REFERENCE_TIME AvgTimePerFrame (15 FPS);
sizeof (KS_BITMAPINFOHEADER), // DWORD biSize;
DX, // LONG biWidth;
DY, // LONG biHeight;
1, // WORD biPlanes;
DBITCOUNT, // WORD biBitCount;
FOURCC_UYVY, // DWORD biCompression;
614400, // DWORD biSizeImage;
0, // LONG biXPelsPerMeter;
0, // LONG biYPelsPerMeter;
0, // DWORD biClrUsed;
0 // DWORD biClrImportant;
}
};
#ifdef SUPPORT_RGB24
#undef DX
#undef DY
#undef DBITCOUNT
#undef DFPS_DEF
#undef DFPS_MAX
#undef DFPS_MIN
#define DX 640
#define DY 480
#define DBITCOUNT 24
// To support mode4, 640x480, RGB
KS_DATARANGE_VIDEO DCAM_StreamMode_4 =
{
// KSDATARANGE
{
sizeof (KS_DATARANGE_VIDEO),
0, // Flags
921600, // SampleSize
0, // Reserved
STATIC_KSDATAFORMAT_TYPE_VIDEO,
0xe436eb7d, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70,
STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO
},
TRUE, // BOOL, bFixedSizeSamples (all samples same size?)
TRUE, // BOOL, bTemporalCompression (all I frames?)
KS_VIDEOSTREAM_CAPTURE, // StreamDescriptionFlags (KS_VIDEO_DESC_*)
0, // MemoryAllocationFlags (KS_VIDEO_ALLOC_*)
// _KS_VIDEO_STREAM_CONFIG_CAPS
{
STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO,
KS_AnalogVideo_None, // AnalogVideoStandard
DX,DY, // InputSize, (the inherent size of the incoming signal
// with every digitized pixel unique)
DX,DY, // MinCroppingSize, smallest rcSrc cropping rect allowed
DX,DY, // MaxCroppingSize, largest rcSrc cropping rect allowed
1, // CropGranularityX, granularity of cropping size
1, // CropGranularityY
1, // CropAlignX, alignment of cropping rect
1, // CropAlignY;
DX, DY, // MinOutputSize, smallest bitmap stream can produce
DX, DY, // MaxOutputSize, largest bitmap stream can produce
DX, // OutputGranularityX, granularity of output bitmap size
DY, // OutputGranularityY;
0, // StretchTapsX (0 no stretch, 1 pix dup, 2 interp...)
0, // StretchTapsY
0, // ShrinkTapsX
0, // ShrinkTapsY
666666, // MinFrameInterval (10,000,000 / 15.00FPS), 100nS units
2666666, // MaxFrameInterval (10,000,000 / 3.75FPS), 100nS units
55296000, // MinBitsPerSecond ( 7.50 FPS);
110592000 // MaxBitsPerSecond (15.00 FPS);
},
// KS_VIDEOINFOHEADER (default format)
{
0,0,0,0, // RECT rcSource;
0,0,0,0, // RECT rcTarget;
110592000, // DWORD dwBitRate;
0L, // DWORD dwBitErrorRate;
666666, // REFERENCE_TIME AvgTimePerFrame (15 FPS);
sizeof (KS_BITMAPINFOHEADER), // DWORD biSize;
DX, // LONG biWidth;
-DY, // LONG biHeight; -biHeight indicate TopDown for RGB
1, // WORD biPlanes;
DBITCOUNT, // WORD biBitCount;
KS_BI_RGB, // DWORD biCompression;
921600, // DWORD biSizeImage;
0, // LONG biXPelsPerMeter;
0, // LONG biYPelsPerMeter;
0, // DWORD biClrUsed;
0 // DWORD biClrImportant;
}
};
#endif // SUPPORT_RGB24
#ifdef SUPPORT_YUV800
#undef DX
#undef DY
#undef DBITCOUNT
#define DX 640
#define DY 480
#define DBITCOUNT 8
KS_DATARANGE_VIDEO DCAM_StreamMode_5 =
{
// KSDATARANGE
{
sizeof (KS_DATARANGE_VIDEO), // Flags
0,
307200, // SampleSize
0, // Reserved
STATIC_KSDATAFORMAT_TYPE_VIDEO,
FOURCC_Y800, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71,
STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO
},
TRUE, // BOOL, bFixedSizeSamples (all samples same size?)
TRUE, // BOOL, bTemporalCompression (all I frames?)
KS_VIDEOSTREAM_CAPTURE, // StreamDescriptionFlags (KS_VIDEO_DESC_*)
0, // MemoryAllocationFlags (KS_VIDEO_ALLOC_*)
// _KS_VIDEO_STREAM_CONFIG_CAPS
{
STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO,
KS_AnalogVideo_None, // AnalogVideoStandard
DX,DY, // InputSize, (the inherent size of the incoming signal
// with every digitized pixel unique)
DX,DY, // MinCroppingSize, smallest rcSrc cropping rect allowed
DX,DY, // MaxCroppingSize, largest rcSrc cropping rect allowed
1, // CropGranularityX, granularity of cropping size
1, // CropGranularityY
1, // CropAlignX, alignment of cropping rect
1, // CropAlignY;
DX, DY, // MinOutputSize, smallest bitmap stream can produce
DX, DY, // MaxOutputSize, largest bitmap stream can produce
DX, // OutputGranularityX, granularity of output bitmap size
DY, // OutputGranularityY;
0, // StretchTapsX (0 no stretch, 1 pix dup, 2 interp...)
0, // StretchTapsY
0, // ShrinkTapsX
0, // ShrinkTapsY
// Allow 1% difference
333000, // MinFrameInterval (10,000,000 / 30.00FPS), 100nS units
2666666, // MaxFrameInterval (10,000,000 / 3.75FPS), 100nS units
4608000, // (DX * DY * DBITCOUNT) * DFPS_MIN, // MinBitsPerSecond (3.75 FPS);
36864000, // (DX * DY * DBITCOUNT) * DFPS_MAX // MaxBitsPerSecond (30.0 FPS);
},
// KS_VIDEOINFOHEADER (default format)
{
0,0,0,0, // RECT rcSource;
0,0,0,0, // RECT rcTarget;
73728000, // DWORD dwBitRate; 307200 * 30FPS * 8 bit/Byte
0L, // DWORD dwBitErrorRate;
333333, // REFERENCE_TIME AvgTimePerFrame (30 FPS);
sizeof (KS_BITMAPINFOHEADER), // DWORD biSize;
DX, // LONG biWidth;
DY, // LONG biHeight;
1, // WORD biPlanes;
DBITCOUNT, // WORD biBitCount;
FOURCC_Y800, // DWORD biCompression;
307200, // DWORD biSizeImage;
0, // LONG biXPelsPerMeter;
0, // LONG biYPelsPerMeter;
0, // DWORD biClrUsed;
0 // DWORD biClrImportant;
}
};
#endif
//---------------------------------------------------------------------------
// Topology
//---------------------------------------------------------------------------
// Categories define what the device does.
static GUID Categories[] = {
STATIC_KSCATEGORY_VIDEO,
STATIC_KSCATEGORY_CAPTURE
};
#define NUMBER_OF_CATEGORIES SIZEOF_ARRAY (Categories)
static KSTOPOLOGY Topology = {
NUMBER_OF_CATEGORIES,
(GUID*) &Categories,
0,
NULL,
0,
NULL
};