You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
413 lines
18 KiB
413 lines
18 KiB
// $Header: G:/SwDev/WDM/Video/bt848/rcs/Capstrm.h 1.14 1998/05/01 05:05:10 tomz Exp $
|
|
|
|
//==========================================================================;
|
|
//
|
|
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
|
|
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
|
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
|
|
// PURPOSE.
|
|
//
|
|
// Copyright (c) 1992 - 1996 Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
//==========================================================================;
|
|
|
|
#ifndef __CAPSTRM_H__
|
|
#define __CAPSTRM_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif // __cplusplus
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// All of the data formats we might use
|
|
//---------------------------------------------------------------------------
|
|
|
|
#include "rgb24fmt.h"
|
|
#include "rgb16fmt.h"
|
|
#include "yuvfmt.h"
|
|
#include "vbifmt.h"
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Stream 0 (Capture) Formats
|
|
//---------------------------------------------------------------------------
|
|
|
|
PKSDATAFORMAT Stream0Formats[] =
|
|
{
|
|
// prefer RGB first for capture
|
|
|
|
(PKSDATAFORMAT) &StreamFormatRGB555,
|
|
//(PKSDATAFORMAT) &StreamFormatRGB565,
|
|
(PKSDATAFORMAT) &StreamFormatRGB24Bpp,
|
|
|
|
(PKSDATAFORMAT) &StreamFormatYUY2
|
|
//(PKSDATAFORMAT) &StreamFormatYVYU,
|
|
//(PKSDATAFORMAT) &StreamFormatUYVY,
|
|
//(PKSDATAFORMAT) &StreamFormatYVU9
|
|
};
|
|
#define NUM_STREAM_0_FORMATS (sizeof (Stream0Formats) / sizeof (PKSDATAFORMAT))
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Stream 1 (Preview) Formats
|
|
//---------------------------------------------------------------------------
|
|
|
|
PKSDATAFORMAT Stream1Formats[] =
|
|
{
|
|
// prefer YUV first for preview
|
|
#if 0
|
|
//TODO: leave VIDEOINFOHEADER2 out for now
|
|
(PKSDATAFORMAT) &StreamFormat2YUY2,
|
|
(PKSDATAFORMAT) &StreamFormat2RGB555,
|
|
(PKSDATAFORMAT) &StreamFormat2RGB24Bpp,
|
|
#else
|
|
(PKSDATAFORMAT) &StreamFormatYUY2,
|
|
(PKSDATAFORMAT) &StreamFormatRGB555,
|
|
(PKSDATAFORMAT) &StreamFormatRGB24Bpp
|
|
#endif
|
|
//(PKSDATAFORMAT) &StreamFormatYVYU,
|
|
//(PKSDATAFORMAT) &StreamFormatUYVY,
|
|
//(PKSDATAFORMAT) &StreamFormatYVU9,
|
|
//(PKSDATAFORMAT) &StreamFormatRGB565,
|
|
};
|
|
#define NUM_STREAM_1_FORMATS (sizeof (Stream1Formats) / sizeof (PKSDATAFORMAT))
|
|
|
|
//---------------------------------------------------------------------------
|
|
// VBI Stream Formats
|
|
//---------------------------------------------------------------------------
|
|
|
|
PKSDATAFORMAT VBIStreamFormats[] =
|
|
{
|
|
(PKSDATAFORMAT) &StreamFormatVBI
|
|
};
|
|
|
|
#define NUM_VBI_FORMATS (sizeof (VBIStreamFormats) / sizeof (PKSDATAFORMAT))
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Analog Video Stream Formats
|
|
//---------------------------------------------------------------------------
|
|
|
|
static KS_DATARANGE_ANALOGVIDEO StreamFormatAnalogVideo =
|
|
{
|
|
// KS_DATARANGE_ANALOGVIDEO
|
|
{
|
|
{
|
|
sizeof( KS_DATARANGE_ANALOGVIDEO ),
|
|
0,
|
|
sizeof (KS_TVTUNER_CHANGE_INFO), // SampleSize
|
|
0,
|
|
{ 0x482dde1, 0x7817, 0x11cf, { 0x8a, 0x3, 0x0, 0xaa, 0x0, 0x6e, 0xcb, 0x65 } }, // MEDIATYPE_AnalogVideo
|
|
{ 0x482dde2, 0x7817, 0x11cf, { 0x8a, 0x3, 0x0, 0xaa, 0x0, 0x6e, 0xcb, 0x65 } }, // WILDCARD
|
|
{ 0x482dde0, 0x7817, 0x11cf, { 0x8a, 0x3, 0x0, 0xaa, 0x0, 0x6e, 0xcb, 0x65 } } // FORMAT_AnalogVideo
|
|
}
|
|
},
|
|
// KS_ANALOGVIDEOINFO
|
|
{
|
|
{ 0, 0, 720, 480 }, // rcSource;
|
|
{ 0, 0, 720, 480 }, // rcTarget;
|
|
720, // dwActiveWidth;
|
|
480, // dwActiveHeight;
|
|
0, // REFERENCE_TIME AvgTimePerFrame;
|
|
}
|
|
};
|
|
|
|
static PKSDATAFORMAT AnalogVideoFormats[] =
|
|
{
|
|
(PKSDATAFORMAT) &StreamFormatAnalogVideo,
|
|
};
|
|
#define NUM_ANALOG_VIDEO_FORMATS SIZEOF_ARRAY( AnalogVideoFormats )
|
|
|
|
// ------------------------------------------------------------------------
|
|
// 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
|
|
)
|
|
};
|
|
|
|
|
|
// ------------------------------------------------------------------------
|
|
// 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 NUMBER_VIDEO_STREAM_PROPERTIES (SIZEOF_ARRAY(VideoStreamProperties))
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// 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;
|
|
|
|
ALL_STREAM_INFO Streams [] =
|
|
{
|
|
// -----------------------------------------------------------------
|
|
// Stream 0
|
|
// -----------------------------------------------------------------
|
|
|
|
// HW_STREAM_INFORMATION -------------------------------------------
|
|
{
|
|
{
|
|
1, // NumberOfPossibleInstances
|
|
KSPIN_DATAFLOW_OUT, // DataFlow
|
|
TRUE, // DataAccessible
|
|
NUM_STREAM_0_FORMATS, // NumberOfFormatArrayEntries
|
|
Stream0Formats, // StreamFormatsArray
|
|
{
|
|
0, // ClassReserved[0]
|
|
0, // ClassReserved[1]
|
|
0, // ClassReserved[2]
|
|
0 // ClassReserved[3]
|
|
},
|
|
NUMBER_VIDEO_STREAM_PROPERTIES, // NumStreamPropArrayEntries
|
|
(PKSPROPERTY_SET)VideoStreamProperties, // StreamPropertiesArray
|
|
0, // NumStreamEventArrayEntries;
|
|
0, // StreamEventsArray;
|
|
(GUID *) &PINNAME_VIDEO_CAPTURE, // Category
|
|
(GUID *) &PINNAME_VIDEO_CAPTURE, // Name
|
|
1, // MediumsCount
|
|
&CaptureMediums[0], // Mediums
|
|
},
|
|
// HW_STREAM_OBJECT ------------------------------------------------
|
|
{
|
|
sizeof (HW_STREAM_OBJECT), // SizeOfThisPacket
|
|
0, // StreamNumber
|
|
0, // HwStreamExtension
|
|
VideoReceiveDataPacket, // HwReceiveDataPacket
|
|
VideoReceiveCtrlPacket, // HwReceiveControlPacket
|
|
{ NULL, 0 }, // HW_CLOCK_OBJECT
|
|
FALSE, // Dma
|
|
TRUE, // Pio
|
|
NULL, // HwDeviceExtension
|
|
sizeof (KS_FRAME_INFO), // StreamHeaderMediaSpecific
|
|
0, // StreamHeaderWorkspace
|
|
TRUE, // Allocator
|
|
NULL, // HwEventRoutine
|
|
{ 0, 0 }, // Reserved[2]
|
|
},
|
|
},
|
|
|
|
// -----------------------------------------------------------------
|
|
// Stream 1
|
|
// -----------------------------------------------------------------
|
|
|
|
// HW_STREAM_INFORMATION -------------------------------------------
|
|
{
|
|
{
|
|
1, // NumberOfPossibleInstances
|
|
KSPIN_DATAFLOW_OUT, // DataFlow
|
|
TRUE, // DataAccessible
|
|
NUM_STREAM_1_FORMATS, // NumberOfFormatArrayEntries
|
|
Stream1Formats, // StreamFormatsArray
|
|
{
|
|
0, // ClassReserved[0]
|
|
0, // ClassReserved[1]
|
|
0, // ClassReserved[2]
|
|
0 // ClassReserved[3]
|
|
},
|
|
NUMBER_VIDEO_STREAM_PROPERTIES, // NumStreamPropArrayEntries
|
|
(PKSPROPERTY_SET)VideoStreamProperties, // StreamPropertiesArray
|
|
0, // NumStreamEventArrayEntries;
|
|
0, // StreamEventsArray;
|
|
//(GUID *) &PINNAME_VIDEO_VIDEOPORT, // Category
|
|
//(GUID *) &PINNAME_VIDEO_VIDEOPORT, // Name
|
|
(GUID *) &PINNAME_VIDEO_PREVIEW, // Category
|
|
(GUID *) &PINNAME_VIDEO_PREVIEW, // Name
|
|
1, // MediumsCount
|
|
&CaptureMediums[1], // Mediums
|
|
},
|
|
// HW_STREAM_OBJECT ------------------------------------------------
|
|
{
|
|
sizeof (HW_STREAM_OBJECT), // SizeOfThisPacket
|
|
1, // StreamNumber
|
|
0, // HwStreamExtension
|
|
VideoReceiveDataPacket, // HwReceiveDataPacket
|
|
VideoReceiveCtrlPacket, // HwReceiveControlPacket
|
|
{ NULL, 0 }, // HW_CLOCK_OBJECT
|
|
FALSE, // Dma
|
|
TRUE, // Pio
|
|
0, // HwDeviceExtension
|
|
sizeof (KS_FRAME_INFO), // StreamHeaderMediaSpecific
|
|
0, // StreamHeaderWorkspace
|
|
TRUE, // Allocator
|
|
NULL, // HwEventRoutine
|
|
{ 0, 0 }, // Reserved[2]
|
|
},
|
|
|
|
},
|
|
// -----------------------------------------------------------------
|
|
// VBI Stream
|
|
// -----------------------------------------------------------------
|
|
|
|
// HW_STREAM_INFORMATION -------------------------------------------
|
|
{
|
|
{
|
|
1, // NumberOfPossibleInstances
|
|
KSPIN_DATAFLOW_OUT, // DataFlow
|
|
TRUE, // DataAccessible
|
|
NUM_VBI_FORMATS, // NumberOfFormatArrayEntries
|
|
VBIStreamFormats, // StreamFormatsArray
|
|
{
|
|
0, // ClassReserved[0]
|
|
0, // ClassReserved[1]
|
|
0, // ClassReserved[2]
|
|
0 // ClassReserved[3]
|
|
},
|
|
/*[TMZ]*/ NUMBER_VIDEO_STREAM_PROPERTIES, // NumStreamPropArrayEntries
|
|
/*[TMZ]*/ (PKSPROPERTY_SET)VideoStreamProperties, // StreamPropertiesArray
|
|
0, // NumStreamEventArrayEntries;
|
|
0, // StreamEventsArray;
|
|
#if 1 // [TMZ] [!!!] [HACK] - ALLOW_VBI_PIN
|
|
(GUID *) &PINNAME_VIDEO_VBI, // Category
|
|
(GUID *) &PINNAME_VIDEO_VBI, // Name
|
|
#else
|
|
(GUID *) &PINNAME_VIDEO_STILL, // Category
|
|
(GUID *) &PINNAME_VIDEO_STILL, // Name
|
|
#endif
|
|
0, //1, // MediumsCount
|
|
NULL, //&CaptureMediums[2], // Mediums
|
|
},
|
|
// HW_STREAM_OBJECT ------------------------------------------------
|
|
{
|
|
sizeof (HW_STREAM_OBJECT), // SizeOfThisPacket
|
|
2, // StreamNumber
|
|
0, // HwStreamExtension
|
|
VideoReceiveDataPacket, // HwReceiveDataPacket
|
|
VideoReceiveCtrlPacket, // HwReceiveControlPacket
|
|
{ NULL, 0 }, // HW_CLOCK_OBJECT
|
|
FALSE, // Dma
|
|
TRUE, // Pio
|
|
0, // HwDeviceExtension
|
|
sizeof (KS_VBI_FRAME_INFO), // StreamHeaderMediaSpecific
|
|
0, // StreamHeaderWorkspace
|
|
TRUE, // Allocator
|
|
NULL, // HwEventRoutine
|
|
{ 0, 0 }, // Reserved[2]
|
|
}
|
|
|
|
},
|
|
// -----------------------------------------------------------------
|
|
// Analog Video Input Stream
|
|
// -----------------------------------------------------------------
|
|
|
|
// HW_STREAM_INFORMATION -------------------------------------------
|
|
{
|
|
{
|
|
1, // NumberOfPossibleInstances
|
|
KSPIN_DATAFLOW_IN, // DataFlow
|
|
TRUE, // DataAccessible
|
|
NUM_ANALOG_VIDEO_FORMATS, // NumberOfFormatArrayEntries
|
|
AnalogVideoFormats, // 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
|
|
&CaptureMediums[3], // Mediums
|
|
},
|
|
// HW_STREAM_OBJECT ------------------------------------------------
|
|
{
|
|
sizeof (HW_STREAM_OBJECT), // SizeOfThisPacket
|
|
3, // StreamNumber
|
|
0, // HwStreamExtension
|
|
VideoReceiveDataPacket, // HwReceiveDataPacket
|
|
VideoReceiveCtrlPacket, // HwReceiveControlPacket
|
|
{ NULL, 0 }, // HW_CLOCK_OBJECT
|
|
FALSE, // Dma
|
|
TRUE, // Pio
|
|
0, // HwDeviceExtension
|
|
0, // StreamHeaderMediaSpecific
|
|
0, // StreamHeaderWorkspace
|
|
TRUE, // Allocator
|
|
NULL, // HwEventRoutine
|
|
{ 0, 0 }, // Reserved[2]
|
|
}
|
|
}
|
|
|
|
};
|
|
|
|
|
|
#define DRIVER_STREAM_COUNT (sizeof (Streams) / sizeof (ALL_STREAM_INFO))
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Topology
|
|
//---------------------------------------------------------------------------
|
|
|
|
// Categories define what the device does.
|
|
|
|
static 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,
|
|
(GUID*) &Categories,
|
|
0,
|
|
NULL,
|
|
0,
|
|
NULL
|
|
};
|
|
|
|
//---------------------------------------------------------------------------
|
|
// 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__
|