768 lines
34 KiB
C
768 lines
34 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) 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__
|
|||
|
|