641 lines
27 KiB
C
641 lines
27 KiB
C
|
//===========================================================================
|
||
|
//
|
||
|
// 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
|
||
|
};
|
||
|
|
||
|
|