Leaked source code of windows server 2003
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

// $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__