1657 lines
63 KiB
C
1657 lines
63 KiB
C
/*++
|
|
|
|
Copyright (C) Microsoft Corporation, 1999 - 2001
|
|
|
|
Module Name:
|
|
|
|
StrmData.h
|
|
|
|
Abstract:
|
|
|
|
Header file for supporting SD DV over 1394;
|
|
|
|
Last changed by:
|
|
|
|
Author: Yee J. Wu
|
|
|
|
--*/
|
|
|
|
#ifndef _DVSTRM_INC
|
|
#define _DVSTRM_INC
|
|
|
|
|
|
|
|
#define STATIC_KSCATEGORY_RENDER_EXTERNAL \
|
|
0xcc7bfb41L, 0xf175, 0x11d1, 0xa3, 0x92, 0x00, 0xe0, 0x29, 0x1f, 0x39, 0x59
|
|
DEFINE_GUIDSTRUCT("cc7bfb41-f175-11d1-a392-00e0291f3959", KSCATEGORY_RENDER_EXTERNAL);
|
|
#define KSCATEGORY_RENDER_EXTERNAL DEFINE_GUIDNAMED(KSCATEGORY_RENDER_EXTERNAL)
|
|
|
|
// stream topology stuff for DV
|
|
static GUID DVCategories[] = {
|
|
STATIC_KSCATEGORY_VIDEO, // Output pin
|
|
STATIC_KSCATEGORY_CAPTURE, // Output pin
|
|
STATIC_KSCATEGORY_RENDER, // Input pin
|
|
STATIC_KSCATEGORY_RENDER_EXTERNAL, // Input pin
|
|
};
|
|
|
|
#define NUMBER_OF_DV_CATEGORIES SIZEOF_ARRAY (DVCategories)
|
|
|
|
static KSTOPOLOGY DVTopology = {
|
|
NUMBER_OF_DV_CATEGORIES, // CategoriesCount
|
|
DVCategories, // Categories
|
|
0, // TopologyNodesCount
|
|
NULL, // TopologyNodes
|
|
0, // TopologyConnectionsCount
|
|
NULL, // TopologyConnections
|
|
NULL, // TopologyNodesNames
|
|
0, // Reserved
|
|
};
|
|
|
|
// stream topology stuff for MPEG2TS
|
|
static GUID MPEG2TSCategories[] = {
|
|
STATIC_KSCATEGORY_VIDEO, // Output pin
|
|
STATIC_KSCATEGORY_CAPTURE, // Output pin
|
|
};
|
|
|
|
#define NUMBER_OF_MPEG2TS_CATEGORIES SIZEOF_ARRAY (MPEG2TSCategories)
|
|
|
|
static KSTOPOLOGY MPEG2TSTopology = {
|
|
NUMBER_OF_MPEG2TS_CATEGORIES, // CategoriesCount
|
|
MPEG2TSCategories, // Categories
|
|
0, // TopologyNodesCount
|
|
NULL, // TopologyNodes
|
|
0, // TopologyConnectionsCount
|
|
NULL, // TopologyConnections
|
|
NULL, // TopologyNodesNames
|
|
0, // Reserved
|
|
};
|
|
|
|
#ifndef mmioFOURCC
|
|
#define mmioFOURCC( ch0, ch1, ch2, ch3 ) \
|
|
( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) | \
|
|
( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )
|
|
#endif
|
|
#define FOURCC_DVSD mmioFOURCC('d', 'v', 's', 'd')
|
|
|
|
#undef D_X_NTSC
|
|
#undef D_Y_NTSC
|
|
#undef D_X_NTSC_MIN
|
|
#undef D_Y_NTSC_MIN
|
|
#undef D_X_PAL
|
|
#undef D_Y_PAL
|
|
#undef D_X_PAL_MIN
|
|
#undef D_Y_PAL_MIN
|
|
|
|
#define D_X_NTSC 720
|
|
#define D_Y_NTSC 480
|
|
#define D_X_NTSC_MIN 360
|
|
#define D_Y_NTSC_MIN 240
|
|
|
|
#define D_X_PAL 720
|
|
#define D_Y_PAL 576
|
|
#define D_X_PAL_MIN 360
|
|
#define D_Y_PAL_MIN 288
|
|
|
|
|
|
// ------------------------------------------------------------------------
|
|
// External Device PROPERTY
|
|
// ------------------------------------------------------------------------
|
|
|
|
DEFINE_KSPROPERTY_TABLE(ExternalDeviceProperties)
|
|
{
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_EXTDEVICE_CAPABILITIES,
|
|
TRUE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
sizeof(KSPROPERTY_EXTDEVICE_S), // MinData
|
|
FALSE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
sizeof(ULONG) // SerializedSize
|
|
),
|
|
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_EXTDEVICE_PORT,
|
|
TRUE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
sizeof(KSPROPERTY_EXTDEVICE_S), // MinData
|
|
FALSE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
sizeof(ULONG) // SerializedSize
|
|
),
|
|
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_EXTDEVICE_POWER_STATE,
|
|
TRUE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
sizeof(KSPROPERTY_EXTDEVICE_S), // MinData
|
|
TRUE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
sizeof(ULONG) // SerializedSize
|
|
),
|
|
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_EXTDEVICE_ID,
|
|
TRUE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
sizeof(KSPROPERTY_EXTDEVICE_S), // MinData
|
|
FALSE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
sizeof(ULONG) // SerializedSize
|
|
),
|
|
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_EXTDEVICE_VERSION,
|
|
TRUE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
sizeof(KSPROPERTY_EXTDEVICE_S), // MinData
|
|
FALSE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
sizeof(ULONG) // SerializedSize
|
|
),
|
|
|
|
};
|
|
|
|
|
|
|
|
DEFINE_KSPROPERTY_TABLE(ExternalTransportProperties)
|
|
{
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_EXTXPORT_CAPABILITIES,
|
|
TRUE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
sizeof(KSPROPERTY_EXTXPORT_S), // MinData
|
|
FALSE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
sizeof(ULONG) // SerializedSize
|
|
),
|
|
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_EXTXPORT_INPUT_SIGNAL_MODE,
|
|
TRUE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
sizeof(KSPROPERTY_EXTXPORT_S), // MinData
|
|
FALSE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
sizeof(ULONG) // SerializedSize
|
|
),
|
|
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_EXTXPORT_OUTPUT_SIGNAL_MODE,
|
|
TRUE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
sizeof(KSPROPERTY_EXTXPORT_S), // MinData
|
|
FALSE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
sizeof(ULONG) // SerializedSize
|
|
),
|
|
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_EXTXPORT_LOAD_MEDIUM,
|
|
FALSE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
sizeof(KSPROPERTY_EXTXPORT_S), // MinData
|
|
TRUE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
sizeof(ULONG) // SerializedSize
|
|
),
|
|
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_EXTXPORT_MEDIUM_INFO,
|
|
TRUE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
sizeof(KSPROPERTY_EXTXPORT_S), // MinData
|
|
FALSE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
sizeof(ULONG) // SerializedSize
|
|
),
|
|
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_EXTXPORT_STATE,
|
|
TRUE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
sizeof(KSPROPERTY_EXTXPORT_S), // MinData
|
|
TRUE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
sizeof(ULONG) // SerializedSize
|
|
),
|
|
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
// If this is an asychronous operation, we need to set and then get in separate calls.
|
|
KSPROPERTY_EXTXPORT_STATE_NOTIFY,
|
|
TRUE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
sizeof(KSPROPERTY_EXTXPORT_S), // MinData
|
|
TRUE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
sizeof(ULONG) // SerializedSize
|
|
),
|
|
|
|
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_EXTXPORT_TIMECODE_SEARCH,
|
|
FALSE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
sizeof(KSPROPERTY_EXTXPORT_S), // MinData
|
|
TRUE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
sizeof(ULONG) // SerializedSize
|
|
),
|
|
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_EXTXPORT_ATN_SEARCH,
|
|
FALSE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
sizeof(KSPROPERTY_EXTXPORT_S), // MinData
|
|
TRUE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
sizeof(ULONG) // SerializedSize
|
|
),
|
|
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_EXTXPORT_RTC_SEARCH,
|
|
FALSE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
sizeof(KSPROPERTY_EXTXPORT_S), // MinData
|
|
TRUE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
sizeof(ULONG) // SerializedSize
|
|
),
|
|
|
|
//
|
|
// Allow any RAW AVC to go through including Vendor dependent
|
|
//
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_RAW_AVC_CMD,
|
|
TRUE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
sizeof(KSPROPERTY_EXTXPORT_S), // MinData
|
|
TRUE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
sizeof(ULONG) // SerializedSize
|
|
),
|
|
|
|
};
|
|
|
|
|
|
DEFINE_KSPROPERTY_TABLE(TimeCodeReaderProperties)
|
|
{
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_TIMECODE_READER,
|
|
TRUE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
sizeof(KSPROPERTY_TIMECODE_S), // MinData
|
|
FALSE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
sizeof(ULONG) // SerializedSize
|
|
),
|
|
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_ATN_READER,
|
|
TRUE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
sizeof(KSPROPERTY_TIMECODE_S), // MinData
|
|
FALSE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
sizeof(ULONG) // SerializedSize
|
|
),
|
|
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_RTC_READER,
|
|
TRUE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
sizeof(KSPROPERTY_TIMECODE_S), // MinData
|
|
FALSE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
sizeof(ULONG) // SerializedSize
|
|
),
|
|
};
|
|
|
|
|
|
DEFINE_KSPROPERTY_TABLE(MediaSeekingProperties)
|
|
{
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
// Corresponding to IMediaSeeking::IsFormatSupported()
|
|
KSPROPERTY_MEDIASEEKING_FORMATS,
|
|
TRUE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
0, // MinData; MULTIPLE_ITEM, 2 step process to get data
|
|
FALSE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
sizeof(ULONG) // SerializedSize
|
|
),
|
|
};
|
|
|
|
KSPROPERTY_SET VideoDeviceProperties[] =
|
|
{
|
|
DEFINE_KSPROPERTY_SET
|
|
(
|
|
&PROPSETID_EXT_DEVICE, // Set
|
|
SIZEOF_ARRAY(ExternalDeviceProperties), // PropertiesCount
|
|
ExternalDeviceProperties, // PropertyItem
|
|
0, // FastIoCount
|
|
NULL // FastIoTable
|
|
),
|
|
|
|
DEFINE_KSPROPERTY_SET
|
|
(
|
|
&PROPSETID_EXT_TRANSPORT, // Set
|
|
SIZEOF_ARRAY(ExternalTransportProperties), // PropertiesCount
|
|
ExternalTransportProperties, // PropertyItem
|
|
0, // FastIoCount
|
|
NULL // FastIoTable
|
|
),
|
|
|
|
DEFINE_KSPROPERTY_SET
|
|
(
|
|
&PROPSETID_TIMECODE_READER, // Set
|
|
SIZEOF_ARRAY(TimeCodeReaderProperties), // PropertiesCount
|
|
TimeCodeReaderProperties, // PropertyItem
|
|
0, // FastIoCount
|
|
NULL // FastIoTable
|
|
),
|
|
|
|
DEFINE_KSPROPERTY_SET
|
|
(
|
|
&KSPROPSETID_MediaSeeking, // Set
|
|
SIZEOF_ARRAY(MediaSeekingProperties), // PropertiesCount
|
|
MediaSeekingProperties, // PropertyItem
|
|
0, // FastIoCount
|
|
NULL // FastIoTable
|
|
),
|
|
};
|
|
|
|
#define NUMBER_VIDEO_DEVICE_PROPERTIES (SIZEOF_ARRAY(VideoDeviceProperties))
|
|
|
|
|
|
// ------------------------------------------------------------------------
|
|
// External Device Events
|
|
// ------------------------------------------------------------------------
|
|
|
|
KSEVENT_ITEM ExtDevCommandItm[] =
|
|
{
|
|
{
|
|
KSEVENT_EXTDEV_COMMAND_NOTIFY_INTERIM_READY,
|
|
0, // sizeof(KSEVENT_ITEM),
|
|
0,
|
|
NULL,
|
|
NULL,
|
|
NULL
|
|
},
|
|
|
|
{
|
|
KSEVENT_EXTDEV_COMMAND_CONTROL_INTERIM_READY,
|
|
0, // sizeof(KSEVENT_ITEM),
|
|
0,
|
|
NULL,
|
|
NULL,
|
|
NULL
|
|
},
|
|
|
|
#ifdef MSDVDV_SUPPORT_BUSRESET_EVENT
|
|
// Application cares about this since AVC command will be ABORTED!
|
|
{
|
|
KSEVENT_EXTDEV_COMMAND_BUSRESET,
|
|
0, // sizeof(KSEVENT_ITEM),
|
|
0,
|
|
NULL,
|
|
NULL,
|
|
NULL
|
|
},
|
|
#endif
|
|
|
|
// Tell client this device is being removed.
|
|
{
|
|
KSEVENT_EXTDEV_NOTIFY_REMOVAL,
|
|
0, // sizeof(KSEVENT_ITEM),
|
|
0,
|
|
NULL,
|
|
NULL,
|
|
NULL
|
|
},
|
|
};
|
|
|
|
// define event set related with streams
|
|
KSEVENT_SET VideoDeviceEvents[] =
|
|
{
|
|
{
|
|
&KSEVENTSETID_EXTDEV_Command,
|
|
SIZEOF_ARRAY(ExtDevCommandItm),
|
|
ExtDevCommandItm,
|
|
},
|
|
};
|
|
|
|
#define NUMBER_VIDEO_DEVICE_EVENTS (SIZEOF_ARRAY(VideoDeviceEvents))
|
|
|
|
|
|
// ------------------------------------------------------------------------
|
|
// Stream 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
|
|
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
|
|
),
|
|
};
|
|
|
|
|
|
KSPROPERTY_SET 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))
|
|
|
|
|
|
// ----------------------------------------------------------------------
|
|
// Stream events
|
|
// ------------------------------------------------------------------------
|
|
|
|
|
|
// FORMAT_DVInfo
|
|
//
|
|
// Create a local copy of this GUID and make sure that it is not in the PAGED segment
|
|
//
|
|
const
|
|
GUID
|
|
KSEVENTSETID_Connection_Local = {STATICGUIDOF(KSEVENTSETID_Connection)};
|
|
|
|
const
|
|
GUID
|
|
KSEVENTSETID_Clock_Local = {STATICGUIDOF(KSEVENTSETID_Clock)};
|
|
|
|
// Isoch transmit End of stream event item
|
|
KSEVENT_ITEM EndOfStreamEventItm[] =
|
|
{
|
|
{
|
|
KSEVENT_CONNECTION_ENDOFSTREAM,
|
|
0,
|
|
0,
|
|
NULL,
|
|
NULL,
|
|
NULL
|
|
}
|
|
};
|
|
|
|
// Clock event item
|
|
KSEVENT_ITEM ClockEventItm[] =
|
|
{
|
|
{
|
|
KSEVENT_CLOCK_POSITION_MARK, // position mark event supported
|
|
sizeof (KSEVENT_TIME_MARK), // requires this data as input
|
|
sizeof (KSEVENT_TIME_MARK), // allocate space to copy the data
|
|
NULL,
|
|
NULL,
|
|
NULL
|
|
},
|
|
#if 0
|
|
{
|
|
KSEVENT_CLOCK_INTERVAL_MARK, // interval mark event supported
|
|
sizeof (KSEVENT_TIME_INTERVAL), // requires interval data as input
|
|
sizeof (MYTIME), // we use an additional workspace of
|
|
// size longlong for processing
|
|
// this event
|
|
NULL,
|
|
NULL,
|
|
NULL
|
|
}
|
|
#endif
|
|
};
|
|
|
|
KSEVENT_SET ClockEventSet[] =
|
|
{
|
|
{
|
|
&KSEVENTSETID_Clock,
|
|
SIZEOF_ARRAY(ClockEventItm),
|
|
ClockEventItm,
|
|
}
|
|
};
|
|
|
|
|
|
// define event set related with streams
|
|
|
|
// Output pin event set
|
|
KSEVENT_SET StreamEventsOutPin[] =
|
|
{
|
|
{
|
|
&KSEVENTSETID_Clock_Local,
|
|
SIZEOF_ARRAY(ClockEventItm),
|
|
ClockEventItm,
|
|
},
|
|
};
|
|
|
|
// Input pin events set
|
|
KSEVENT_SET StreamEventsInPin[] =
|
|
{
|
|
{
|
|
&KSEVENTSETID_Connection_Local,
|
|
SIZEOF_ARRAY(EndOfStreamEventItm),
|
|
EndOfStreamEventItm,
|
|
},
|
|
{
|
|
&KSEVENTSETID_Clock_Local,
|
|
SIZEOF_ARRAY(ClockEventItm),
|
|
ClockEventItm,
|
|
},
|
|
};
|
|
|
|
// Input pin events set for MPEG2TS (has EOS but no clock event)
|
|
KSEVENT_SET StreamEventsInPinMPEG2TS[] =
|
|
{
|
|
{
|
|
&KSEVENTSETID_Connection_Local,
|
|
SIZEOF_ARRAY(EndOfStreamEventItm),
|
|
EndOfStreamEventItm,
|
|
},
|
|
};
|
|
|
|
#define NUMBER_STREAM_EVENTS_OUT_PIN (SIZEOF_ARRAY(StreamEventsOutPin))
|
|
#define NUMBER_STREAM_EVENTS_IN_PIN (SIZEOF_ARRAY(StreamEventsInPin))
|
|
|
|
#define NUMBER_STREAM_EVENTS_IN_PIN_MPEG2TS (SIZEOF_ARRAY(StreamEventsInPinMPEG2TS))
|
|
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------
|
|
// Stream data ranges
|
|
// ------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
SDDV data range
|
|
**********************************************************************/
|
|
|
|
// NTSC stream
|
|
KS_DATARANGE_VIDEO DvcrNTSCVideoStream =
|
|
{
|
|
// KSDATARANGE
|
|
{
|
|
sizeof (KS_DATARANGE_VIDEO), // FormatSize
|
|
0, // Flags
|
|
FRAME_SIZE_SDDV_NTSC, // SampleSize
|
|
0, // Reserved
|
|
STATIC_KSDATAFORMAT_TYPE_VIDEO,
|
|
STATIC_KSDATAFORMAT_SUBTYPE_DVSD,
|
|
STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO,
|
|
},
|
|
|
|
TRUE, // BOOL, bFixedSizeSamples (all samples same size?)
|
|
FALSE, // 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, //MEDIATYPE_Video
|
|
KS_AnalogVideo_NTSC_M, // AnalogVideoStandard
|
|
D_X_NTSC, D_Y_NTSC, // InputSize, (the inherent size of the incoming signal
|
|
// with every digitized pixel unique)
|
|
D_X_NTSC_MIN, D_Y_NTSC_MIN, // MinCroppingSize, smallest rcSrc cropping rect allowed
|
|
D_X_NTSC, D_Y_NTSC, // MaxCroppingSize, largest rcSrc cropping rect allowed
|
|
1, // CropGranularityX, granularity of cropping size
|
|
1, // CropGranularityY
|
|
1, // CropAlignX, alignment of cropping rect
|
|
1, // CropAlignY;
|
|
D_X_NTSC_MIN, D_Y_NTSC_MIN, // MinOutputSize, smallest bitmap stream can produce
|
|
D_X_NTSC, D_Y_NTSC, // MaxOutputSize, largest bitmap stream can produce
|
|
1, // 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// MinFrameInterval, 100 nS units
|
|
333667, // MaxFrameInterval, 100 nS units
|
|
(FRAME_SIZE_SDDV_NTSC * 8)*30, // MinBitsPerSecond;
|
|
(FRAME_SIZE_SDDV_NTSC * 8)*30, // MaxBitsPerSecond;
|
|
},
|
|
|
|
// KS_VIDEOINFOHEADER (default format)
|
|
{
|
|
0,0,0,0, //D_X_NTSC,D_Y_NTSC, // 0,0,720,480
|
|
0,0,0,0, // RECT rcTarget; // Where the video should go
|
|
(FRAME_SIZE_SDDV_NTSC * 8 * 30), // DWORD dwBitRate; // Approximate bit data rate
|
|
0L, // DWORD dwBitErrorRate; // Bit error rate for this stream
|
|
333667, // REFERENCE_TIME AvgTimePerFrame; // Average time per frame (100ns units)
|
|
|
|
sizeof (KS_BITMAPINFOHEADER), // DWORD biSize;
|
|
D_X_NTSC, // LONG biWidth;
|
|
D_Y_NTSC, // LONG biHeight;
|
|
1, // WORD biPlanes;
|
|
24, // WORD biBitCount;
|
|
FOURCC_DVSD, // DWORD biCompression;
|
|
FRAME_SIZE_SDDV_NTSC, // DWORD biSizeImage;
|
|
0, // LONG biXPelsPerMeter;
|
|
0, // LONG biYPelsPerMeter;
|
|
0, // DWORD biClrUsed;
|
|
0, // DWORD biClrImportant;
|
|
},
|
|
};
|
|
|
|
// PAL stream format
|
|
KS_DATARANGE_VIDEO DvcrPALVideoStream =
|
|
{
|
|
// KSDATARANGE
|
|
{
|
|
sizeof (KS_DATARANGE_VIDEO),
|
|
0, // Flags
|
|
FRAME_SIZE_SDDV_PAL, // SampleSize
|
|
0, // Reserved
|
|
STATIC_KSDATAFORMAT_TYPE_VIDEO,
|
|
STATIC_KSDATAFORMAT_SUBTYPE_DVSD,
|
|
STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO,
|
|
},
|
|
|
|
TRUE, // BOOL, bFixedSizeSamples (all samples same size?)
|
|
FALSE, // 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, //MEDIATYPE_Video
|
|
KS_AnalogVideo_PAL_B, // AnalogVideoStandard
|
|
D_X_PAL, D_Y_PAL, // InputSize, (the inherent size of the incoming signal
|
|
// with every digitized pixel unique)
|
|
D_X_PAL_MIN, D_Y_PAL_MIN, // MinCroppingSize, smallest rcSrc cropping rect allowed
|
|
D_X_PAL, D_Y_PAL, // MaxCroppingSize, largest rcSrc cropping rect allowed
|
|
1, // CropGranularityX, granularity of cropping size
|
|
1, // CropGranularityY
|
|
1, // CropAlignX, alignment of cropping rect
|
|
1, // CropAlignY;
|
|
D_X_PAL_MIN, D_Y_PAL_MIN, // MinOutputSize, smallest bitmap stream can produce
|
|
D_X_PAL, D_Y_PAL, // MaxOutputSize, largest bitmap stream can produce
|
|
1, // OutputGranularityX, granularity of output bitmap size
|
|
1, // OutputGranularityY;
|
|
0, // StretchTapsX (0 no stretch, 1 pix dup, 2 interp...)
|
|
0, // StretchTapsY
|
|
0, // ShrinkTapsX
|
|
0, // ShrinkTapsY
|
|
400000, // MinFrameInterval, 100 nS units
|
|
400000, // MaxFrameInterval, 100 nS units
|
|
(FRAME_SIZE_SDDV_PAL * 8)*25, // MinBitsPerSecond;
|
|
(FRAME_SIZE_SDDV_PAL * 8)*25, // MaxBitsPerSecond;
|
|
},
|
|
|
|
// KS_VIDEOINFOHEADER (default format)
|
|
{
|
|
0,0,0,0, // D_X_PAL,D_Y_PAL, // 0,0,720,480
|
|
0,0,0,0, // RECT rcTarget; // Where the video should go
|
|
(FRAME_SIZE_SDDV_PAL * 8 * 25), // DWORD dwBitRate; // Approximate bit data rate
|
|
0L, // DWORD dwBitErrorRate; // Bit error rate for this stream
|
|
400000, // REFERENCE_TIME AvgTimePerFrame; // Average time per frame (100ns units)
|
|
|
|
sizeof (KS_BITMAPINFOHEADER), // DWORD biSize;
|
|
D_X_PAL, // LONG biWidth;
|
|
D_Y_PAL, // LONG biHeight;
|
|
1, // WORD biPlanes;
|
|
24, // WORD biBitCount;
|
|
FOURCC_DVSD, // DWORD biCompression;
|
|
FRAME_SIZE_SDDV_PAL, // DWORD biSizeImage;
|
|
0, // LONG biXPelsPerMeter;
|
|
0, // LONG biYPelsPerMeter;
|
|
0, // DWORD biClrUsed;
|
|
0, // DWORD biClrImportant;
|
|
},
|
|
};
|
|
|
|
|
|
|
|
#define NTSC_DVAAuxSrc 0xd1c030cf
|
|
#define PAL_DVAAuxSrc 0xd1e030d0
|
|
|
|
#define NTSC_DVAAuxSrc_DVCPRO 0xd1de30cf
|
|
#define PAL_DVAAuxSrc_DVCPRO 0xd1fe30d0
|
|
|
|
// NTSC stream (for iavs connections)
|
|
#ifdef SUPPORT_NEW_AVC
|
|
KS_DATARANGE_DV_AVC
|
|
#else
|
|
KS_DATARANGE_DVVIDEO
|
|
#endif
|
|
DvcrNTSCiavStream =
|
|
{
|
|
// KSDATARANGE
|
|
{
|
|
#ifdef SUPPORT_NEW_AVC
|
|
sizeof (KS_DATARANGE_DV_AVC), // FormatSize
|
|
#else
|
|
sizeof (KS_DATARANGE_DVVIDEO), // FormatSize
|
|
#endif
|
|
0, // Flags
|
|
FRAME_SIZE_SDDV_NTSC, // SampleSize
|
|
0, // Reserved
|
|
STATIC_KSDATAFORMAT_TYPE_INTERLEAVED,
|
|
STATIC_KSDATAFORMAT_SUBTYPE_DVSD,
|
|
STATIC_KSDATAFORMAT_SPECIFIER_DVINFO,
|
|
},
|
|
|
|
// DVINFO
|
|
// Note: audio is set for 32khz
|
|
{
|
|
//for 1st 5/6 DIF seq.
|
|
NTSC_DVAAuxSrc, // 0xd1c030cf, // DWORD dwDVAAuxSrc;
|
|
0xffa0c733, // DWORD dwDVAAuxCtl;
|
|
// for 2nd 5/6 DIF seq.
|
|
0xd1c03fcf, // DWORD dwDVAAuxSrc1; 32K, 12bit
|
|
0xffa0ff3f, // DWORD dwDVAAuxCtl1;
|
|
//for video information
|
|
0xff00ffff, // DWORD dwDVVAuxSrc;
|
|
0xfffcc833, // DWORD dwDVVAuxCtl;
|
|
0, // DWORD dwDVReserved[2];
|
|
0, //
|
|
},
|
|
#ifdef SUPPORT_NEW_AVC
|
|
// AVCPRECONNECTINFO
|
|
{
|
|
0, // Device ID
|
|
0, // Subunit address
|
|
0, // Subunit Plug number
|
|
0, // Data Flow
|
|
0, // Flag/Plug Handle
|
|
0, // UnitPlugNumber
|
|
},
|
|
#endif
|
|
};
|
|
|
|
|
|
// PAL stream (for iavs connections)
|
|
#ifdef SUPPORT_NEW_AVC
|
|
KS_DATARANGE_DV_AVC
|
|
#else
|
|
KS_DATARANGE_DVVIDEO
|
|
#endif
|
|
DvcrPALiavStream =
|
|
{
|
|
// KSDATARANGE
|
|
{
|
|
#ifdef SUPPORT_NEW_AVC
|
|
sizeof (KS_DATARANGE_DV_AVC), // FormatSize
|
|
#else
|
|
sizeof (KS_DATARANGE_DVVIDEO), // FormatSize
|
|
#endif
|
|
0, // Flags
|
|
FRAME_SIZE_SDDV_PAL, // SampleSize
|
|
0, // Reserved
|
|
STATIC_KSDATAFORMAT_TYPE_INTERLEAVED,
|
|
STATIC_KSDATAFORMAT_SUBTYPE_DVSD,
|
|
STATIC_KSDATAFORMAT_SPECIFIER_DVINFO,
|
|
},
|
|
|
|
// DVINFO
|
|
// Note: Audio is set for 32khz.
|
|
{
|
|
//for 1st 5/6 DIF seq.
|
|
PAL_DVAAuxSrc, // 0xd1e030d0, // DWORD dwDVAAuxSrc;
|
|
0xffa0cf3f, // DWORD dwDVAAuxCtl;
|
|
// for 2nd 5/6 DIF seq.
|
|
0xd1e03fd0, // DWORD dwDVAAuxSrc1; 32k, 12bit
|
|
0xffa0cf3f, // DWORD dwDVAAuxCtl1;
|
|
//for video information
|
|
0xff20ffff, // DWORD dwDVVAuxSrc;
|
|
0xfffdc83f, // DWORD dwDVVAuxCtl;
|
|
0, // DWORD dwDVReserved[2];
|
|
0, //
|
|
},
|
|
#ifdef SUPPORT_NEW_AVC
|
|
// AVCPRECONNECTINFO
|
|
{
|
|
0, // Device ID
|
|
0, // Subunit address
|
|
0, // Subunit Plug number
|
|
0, // Data Flow
|
|
0, // Flag/Plug Handle
|
|
0, // UnitPlugNumber
|
|
},
|
|
#endif
|
|
};
|
|
|
|
|
|
// NTSC stream (for iavs connections)
|
|
#ifdef SUPPORT_NEW_AVC
|
|
KS_DATARANGE_DV_AVC
|
|
#else
|
|
KS_DATARANGE_DVVIDEO
|
|
#endif
|
|
DvcrNTSCiavStreamIn =
|
|
{
|
|
// KSDATARANGE
|
|
{
|
|
#ifdef SUPPORT_NEW_AVC
|
|
sizeof (KS_DATARANGE_DV_AVC), // FormatSize
|
|
#else
|
|
sizeof (KS_DATARANGE_DVVIDEO), // FormatSize
|
|
#endif
|
|
0, // Flags
|
|
FRAME_SIZE_SDDV_NTSC, // SampleSize
|
|
0, // Reserved
|
|
STATIC_KSDATAFORMAT_TYPE_INTERLEAVED,
|
|
STATIC_KSDATAFORMAT_SUBTYPE_DVSD,
|
|
STATIC_KSDATAFORMAT_SPECIFIER_DVINFO,
|
|
},
|
|
|
|
// DVINFO
|
|
// Note: audio is set for 32khz
|
|
{
|
|
//for 1st 5/6 DIF seq.
|
|
NTSC_DVAAuxSrc, // 0xd1c030cf, // DWORD dwDVAAuxSrc;
|
|
0xffa0c733, // DWORD dwDVAAuxCtl;
|
|
// for 2nd 5/6 DIF seq.
|
|
0xd1c03fcf, // DWORD dwDVAAuxSrc1; 32K, 12bit
|
|
0xffa0ff3f, // DWORD dwDVAAuxCtl1;
|
|
//for video information
|
|
0xff00ffff, // DWORD dwDVVAuxSrc;
|
|
0xfffcc833, // DWORD dwDVVAuxCtl;
|
|
0, // DWORD dwDVReserved[2];
|
|
0, //
|
|
},
|
|
#ifdef SUPPORT_NEW_AVC
|
|
// AVCPRECONNECTINFO
|
|
{
|
|
0, // Device ID
|
|
0, // Subunit address
|
|
0, // Subunit Plug number
|
|
0, // Data Flow
|
|
0, // Flag/Plug Handle
|
|
0, // UnitPlugNumber
|
|
},
|
|
#endif
|
|
};
|
|
|
|
|
|
// PAL stream (for iavs connections)
|
|
#ifdef SUPPORT_NEW_AVC
|
|
KS_DATARANGE_DV_AVC
|
|
#else
|
|
KS_DATARANGE_DVVIDEO
|
|
#endif
|
|
DvcrPALiavStreamIn =
|
|
{
|
|
// KSDATARANGE
|
|
{
|
|
#ifdef SUPPORT_NEW_AVC
|
|
sizeof (KS_DATARANGE_DV_AVC), // FormatSize
|
|
#else
|
|
sizeof (KS_DATARANGE_DVVIDEO), // FormatSize
|
|
#endif
|
|
0, // Flags
|
|
FRAME_SIZE_SDDV_PAL, // SampleSize
|
|
0, // Reserved
|
|
STATIC_KSDATAFORMAT_TYPE_INTERLEAVED,
|
|
STATIC_KSDATAFORMAT_SUBTYPE_DVSD,
|
|
STATIC_KSDATAFORMAT_SPECIFIER_DVINFO,
|
|
},
|
|
|
|
// DVINFO
|
|
// Note: Audio is set for 32khz.
|
|
{
|
|
//for 1st 5/6 DIF seq.
|
|
PAL_DVAAuxSrc, // 0xd1e030d0, // DWORD dwDVAAuxSrc;
|
|
0xffa0cf3f, // DWORD dwDVAAuxCtl;
|
|
// for 2nd 5/6 DIF seq.
|
|
0xd1e03fd0, // DWORD dwDVAAuxSrc1; 32k, 12bit
|
|
0xffa0cf3f, // DWORD dwDVAAuxCtl1;
|
|
//for video information
|
|
0xff20ffff, // DWORD dwDVVAuxSrc;
|
|
0xfffdc83f, // DWORD dwDVVAuxCtl;
|
|
0, // DWORD dwDVReserved[2];
|
|
0, //
|
|
},
|
|
#ifdef SUPPORT_NEW_AVC
|
|
// AVCPRECONNECTINFO
|
|
{
|
|
0, // Device ID
|
|
0, // Subunit address
|
|
0, // Subunit Plug number
|
|
0, // Data Flow
|
|
0, // Flag/Plug Handle
|
|
0, // UnitPlugNumber
|
|
},
|
|
#endif
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
// A driver does not support both format at the same time,
|
|
// the MediaType (NTSC or PAL) is determined at the load time.
|
|
//
|
|
|
|
PKSDATAFORMAT DVCRStream0Formats[] =
|
|
{
|
|
(PKSDATAFORMAT) &DvcrNTSCVideoStream,
|
|
(PKSDATAFORMAT) &DvcrPALVideoStream,
|
|
};
|
|
|
|
PKSDATAFORMAT DVCRStream1Formats[] =
|
|
{
|
|
(PKSDATAFORMAT) &DvcrNTSCiavStream,
|
|
(PKSDATAFORMAT) &DvcrPALiavStream,
|
|
};
|
|
|
|
PKSDATAFORMAT DVCRStream2Formats[] =
|
|
{
|
|
(PKSDATAFORMAT) &DvcrNTSCiavStreamIn,
|
|
(PKSDATAFORMAT) &DvcrPALiavStreamIn,
|
|
};
|
|
|
|
|
|
static KSPIN_MEDIUM NULLMedium = {STATIC_GUID_NULL, 0, 0};
|
|
|
|
|
|
#define NUM_DVCR_STREAM0_FORMATS (SIZEOF_ARRAY(DVCRStream0Formats))
|
|
#define NUM_DVCR_STREAM1_FORMATS (SIZEOF_ARRAY(DVCRStream1Formats))
|
|
#define NUM_DVCR_STREAM2_FORMATS (SIZEOF_ARRAY(DVCRStream2Formats))
|
|
|
|
static GUID guidPinCategoryCapture = {STATIC_PINNAME_VIDEO_CAPTURE};
|
|
|
|
static GUID guidPinNameDVVidOutput = {STATIC_PINNAME_DV_VID_OUTPUT};
|
|
static GUID guidPinNameDVAVOutput = {STATIC_PINNAME_DV_AV_OUTPUT};
|
|
static GUID guidPinNameDVAVInput = {STATIC_PINNAME_DV_AV_INPUT};
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Create an array that holds the list of all of the streams supported
|
|
//---------------------------------------------------------------------------
|
|
|
|
STREAM_INFO_AND_OBJ DVStreams [] =
|
|
{
|
|
// -----------------------------------------------------------------
|
|
// Stream 0, DV coming from the camcorder
|
|
// -----------------------------------------------------------------
|
|
{
|
|
// HW_STREAM_INFORMATION -------------------------------------------
|
|
{
|
|
1, // NumberOfPossibleInstances
|
|
KSPIN_DATAFLOW_OUT, // DataFlow
|
|
TRUE, // DataAccessible
|
|
NUM_DVCR_STREAM0_FORMATS, // NumberOfFormatArrayEntries
|
|
DVCRStream0Formats, // StreamFormatsArray
|
|
0, // ClassReserved[0]
|
|
0, // ClassReserved[1]
|
|
0, // ClassReserved[2]
|
|
0, // ClassReserved[3]
|
|
NUMBER_VIDEO_STREAM_PROPERTIES, // NumStreamPropArrayEntries
|
|
(PKSPROPERTY_SET) VideoStreamProperties, // StreamPropertiesArray
|
|
NUMBER_STREAM_EVENTS_OUT_PIN, // NumStreamEventArrayEntries
|
|
StreamEventsOutPin, // StreamEventsArray
|
|
&guidPinCategoryCapture, // Category
|
|
&guidPinNameDVVidOutput, // Name
|
|
0, // Mediums count
|
|
&NULLMedium, // Mediums
|
|
FALSE, // BridgeStream
|
|
0, // Reserved[0]
|
|
0, // Reserved[1]
|
|
},
|
|
|
|
// HW_STREAM_OBJECT ------------------------------------------------
|
|
{
|
|
sizeof(HW_STREAM_OBJECT),
|
|
0, // StreamNumber
|
|
0, // HwStreamExtension
|
|
AVCTapeRcvDataPacket, // ReceiveDataPacket
|
|
AVCTapeRcvControlPacket, // ReceiveControlPacket
|
|
{
|
|
(PHW_CLOCK_FUNCTION) AVCTapeStreamClockRtn, // HW_CLOCK_OBJECT.HWClockFunction
|
|
CLOCK_SUPPORT_CAN_RETURN_STREAM_TIME, // HW_CLOCK_OBJECT.ClockSupportFlags
|
|
0, // HW_CLOCK_OBJECT.Reserved[0]
|
|
0, // HW_CLOCK_OBJECT.Reserved[1]
|
|
},
|
|
FALSE, // Dma
|
|
FALSE, // Pio
|
|
0, // HwDeviceExtension
|
|
sizeof(KS_FRAME_INFO), // StreamHeaderMediaSpecific
|
|
0, // StreamHeaderWorkspace
|
|
FALSE, // Allocator
|
|
AVCTapeEventHandler, // HwEventRoutine
|
|
0, // Reserved[0]
|
|
0, // Reserved[1]
|
|
},
|
|
},
|
|
|
|
// -----------------------------------------------------------------
|
|
// Stream 1, DV coming from the camcorder (interleaved format)
|
|
// -----------------------------------------------------------------
|
|
{
|
|
// HW_STREAM_INFORMATION -------------------------------------------
|
|
{
|
|
1, // NumberOfPossibleInstances
|
|
KSPIN_DATAFLOW_OUT, // DataFlow
|
|
TRUE, // DataAccessible
|
|
NUM_DVCR_STREAM1_FORMATS, // NumberOfFormatArrayEntries
|
|
DVCRStream1Formats, // StreamFormatsArrayf
|
|
0, // ClassReserved[0]
|
|
0, // ClassReserved[1]
|
|
0, // ClassReserved[2]
|
|
0, // ClassReserved[3]
|
|
NUMBER_VIDEO_STREAM_PROPERTIES, // NumStreamPropArrayEntries
|
|
(PKSPROPERTY_SET) VideoStreamProperties, // StreamPropertiesArray
|
|
NUMBER_STREAM_EVENTS_OUT_PIN, // NumStreamEventArrayEntries
|
|
StreamEventsOutPin, // StreamEventsArray
|
|
&guidPinCategoryCapture, // Category
|
|
&guidPinNameDVAVOutput, // Name
|
|
0, // Mediums count
|
|
&NULLMedium, // Mediums
|
|
FALSE, // BridgeStream
|
|
0, // Reserved[0]
|
|
0, // Reserved[1]
|
|
},
|
|
|
|
// HW_STREAM_OBJECT ------------------------------------------------
|
|
{
|
|
sizeof(HW_STREAM_OBJECT),
|
|
1, // StreamNumber
|
|
0, // HwStreamExtension
|
|
AVCTapeRcvDataPacket, // ReceiveDataPacket
|
|
AVCTapeRcvControlPacket, // ReceiveControlPacket
|
|
{
|
|
(PHW_CLOCK_FUNCTION) AVCTapeStreamClockRtn, // HW_CLOCK_OBJECT.HWClockFunction
|
|
CLOCK_SUPPORT_CAN_RETURN_STREAM_TIME, // HW_CLOCK_OBJECT.ClockSupportFlags
|
|
0, // HW_CLOCK_OBJECT.Reserved[0]
|
|
0, // HW_CLOCK_OBJECT.Reserved[1]
|
|
},
|
|
FALSE, // Dma
|
|
FALSE, // Pio
|
|
0, // HwDeviceExtension
|
|
0, // StreamHeaderMediaSpecific
|
|
0, // StreamHeaderWorkspace
|
|
FALSE, // Allocator
|
|
AVCTapeEventHandler, // HwEventRoutine
|
|
0, // Reserved[0]
|
|
0, // Reserved[1]
|
|
},
|
|
},
|
|
|
|
|
|
// -----------------------------------------------------------------
|
|
// Stream 2, DV flows out of the adapter (interleaved)
|
|
// -----------------------------------------------------------------
|
|
{
|
|
// HW_STREAM_INFORMATION -------------------------------------------
|
|
{
|
|
1, // NumberOfPossibleInstances
|
|
KSPIN_DATAFLOW_IN, // DataFlow
|
|
TRUE, // DataAccessible
|
|
NUM_DVCR_STREAM2_FORMATS, // NumberOfFormatArrayEntries
|
|
DVCRStream2Formats, // StreamFormatsArray
|
|
0, // ClassReserved[0]
|
|
0, // ClassReserved[1]
|
|
0, // ClassReserved[2]
|
|
0, // ClassReserved[3]
|
|
NUMBER_VIDEO_STREAM_PROPERTIES, // NumStreamPropArrayEntries
|
|
(PKSPROPERTY_SET) VideoStreamProperties, // StreamPropertiesArray
|
|
NUMBER_STREAM_EVENTS_IN_PIN, // NumStreamEventArrayEntries
|
|
StreamEventsInPin, // StreamEventsArray
|
|
NULL, // Category
|
|
&guidPinNameDVAVInput, // Name
|
|
0, // Mediums count
|
|
&NULLMedium, // Mediums
|
|
FALSE, // BridgeStream
|
|
0, // Reserved[0]
|
|
0, // Reserved[1]
|
|
},
|
|
|
|
// HW_STREAM_OBJECT ------------------------------------------------
|
|
{
|
|
sizeof(HW_STREAM_OBJECT),
|
|
2, // StreamNumber
|
|
0, // HwStreamExtension
|
|
AVCTapeRcvDataPacket, // ReceiveDataPacket
|
|
AVCTapeRcvControlPacket, // ReceiveControlPacket
|
|
{
|
|
(PHW_CLOCK_FUNCTION) AVCTapeStreamClockRtn, // HW_CLOCK_OBJECT.HWClockFunction
|
|
CLOCK_SUPPORT_CAN_RETURN_STREAM_TIME, // HW_CLOCK_OBJECT.ClockSupportFlags
|
|
0, // HW_CLOCK_OBJECT.Reserved[0]
|
|
0, // HW_CLOCK_OBJECT.Reserved[1]
|
|
},
|
|
FALSE, // Dma
|
|
FALSE, // Pio
|
|
0, // HwDeviceExtension
|
|
0, // StreamHeaderMediaSpecific
|
|
0, // StreamHeaderWorkspace
|
|
FALSE, // Allocator
|
|
AVCTapeEventHandler, // HwEventRoutine
|
|
0, // Reserved[0]
|
|
0, // Reserved[1]
|
|
}
|
|
}
|
|
};
|
|
|
|
#define DV_STREAM_COUNT (SIZEOF_ARRAY(DVStreams))
|
|
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
MPEG2TS data range
|
|
**********************************************************************/
|
|
|
|
|
|
static GUID guidPinNameMPEG2TSOutput = {STATIC_PINNAME_MPEG2TS_OUTPUT};
|
|
static GUID guidPinNameMPEG2TSInput = {STATIC_PINNAME_MPEG2TS_INPUT};
|
|
|
|
//
|
|
// Default buffer setting for MPEG2TS
|
|
//
|
|
|
|
#define SRC_PACKETS_PER_MPEG2TS_FRAME 256 // Variable length
|
|
|
|
#define BUFFER_SIZE_MPEG2TS (((CIP_DBS_MPEG << 2) * (1 << CIP_FN_MPEG) - 4) * SRC_PACKETS_PER_MPEG2TS_FRAME)
|
|
#define BUFFER_SIZE_MPEG2TS_SPH (((CIP_DBS_MPEG << 2) * (1 << CIP_FN_MPEG) ) * SRC_PACKETS_PER_MPEG2TS_FRAME)
|
|
|
|
#define NUM_OF_RCV_BUFFERS_MPEG2TS MAX_DATA_BUFFERS
|
|
#define NUM_OF_XMT_BUFFERS_MPEG2TS MAX_DATA_BUFFERS
|
|
|
|
|
|
// These values are from the "Blue book" Part 4 P. 9-10
|
|
// transmission rate:
|
|
// Src Pkt/cycle
|
|
// 1/8 : 188/8 bytes * 8000 cycles * 8 bits/byte = 1,504,000 bits/sec
|
|
// ...
|
|
// 1/2 : 188/2 bytes * 8000 cycles * 8 bits/byte = 6,015,000 bits/sec
|
|
// 1 : 188 bytes * 8000 cycles * 8 bits/byte = 12,032,000 bits/sec
|
|
// 5 : 188*5 bytes * 8000 cycles * 8 bits/byte = 60,160,000 bits/sec
|
|
//
|
|
|
|
|
|
// this structure reuqires inclusion of "bdatypes.h" for MPEG2_TRANSPORT_STRIDE
|
|
typedef struct tagKS_DATARANGE_MPEG2TS_STRIDE_AVC {
|
|
KSDATARANGE DataRange;
|
|
MPEG2_TRANSPORT_STRIDE Stride;
|
|
AVCPRECONNECTINFO ConnectInfo;
|
|
} KS_DATARANGE_MPEG2TS_STRIDE_AVC, *PKS_DATARANGE_MPEG2TS_STRIDE_AVC;
|
|
|
|
KS_DATARANGE_MPEG2TS_STRIDE_AVC
|
|
MPEG2TStreamOutStride =
|
|
{
|
|
// KSDATARANGE
|
|
{
|
|
#ifdef SUPPORT_NEW_AVC
|
|
sizeof(KS_DATARANGE_MPEG2TS_STRIDE_AVC), // FormatSize
|
|
#else
|
|
sizeof(KS_DATARANGE_MPEG2TS_STRIDE_AVC) - sizeof(AVCPRECONNECTINFO), // FormatSize; exclude AVCPRECONNECTINFO
|
|
#endif
|
|
0, // Flags
|
|
BUFFER_SIZE_MPEG2TS_SPH, // SampleSize with SPH:192*N
|
|
0, // Reserved
|
|
STATIC_KSDATAFORMAT_TYPE_STREAM,
|
|
STATIC_KSDATAFORMAT_TYPE_MPEG2_TRANSPORT_STRIDE,
|
|
// If there is a format block (like MPEG2_TRANSPORT_STRIDE),
|
|
// the specifier cannot use STATIC_KSDATAFORMAT_SPECIFIER_NONE or _WILDCARD
|
|
STATIC_KSDATAFORMAT_SPECIFIER_61883_4,
|
|
},
|
|
// MPEG2_TRANSPORT_STRIDE
|
|
{
|
|
MPEG2TS_STRIDE_OFFSET, // 4
|
|
MPEG2TS_STRIDE_PACKET_LEN, // 188
|
|
MPEG2TS_STRIDE_STRIDE_LEN, // 192
|
|
},
|
|
#ifdef SUPPORT_NEW_AVC
|
|
// AVCPRECONNECTINFO
|
|
{
|
|
0, // Device ID
|
|
0, // Subunit address
|
|
0, // Subunit Plug number
|
|
0, // Data Flow
|
|
0, // Flag/Plug handle
|
|
0, // UnitPlugNumber
|
|
},
|
|
#endif
|
|
};
|
|
|
|
KS_DATARANGE_MPEG2TS_AVC
|
|
MPEG2TStreamOut =
|
|
{
|
|
// KSDATARANGE
|
|
{
|
|
#ifdef SUPPORT_NEW_AVC
|
|
sizeof(KS_DATARANGE_MPEG2TS_AVC), // FormatSize
|
|
#else
|
|
sizeof(KS_DATARANGE_MPEG2TS_AVC) - sizeof(AVCPRECONNECTINFO), // FormatSize; exclude AVCPRECONNECTINFO
|
|
#endif
|
|
0, // Flags
|
|
BUFFER_SIZE_MPEG2TS, // SampleSize:188*N
|
|
0, // Reserved
|
|
STATIC_KSDATAFORMAT_TYPE_STREAM,
|
|
STATIC_KSDATAFORMAT_TYPE_MPEG2_TRANSPORT,
|
|
STATIC_KSDATAFORMAT_SPECIFIER_NONE,
|
|
},
|
|
#ifdef SUPPORT_NEW_AVC
|
|
// AVCPRECONNECTINFO
|
|
{
|
|
0, // Device ID
|
|
0, // Subunit address
|
|
0, // Subunit Plug number
|
|
0, // Data Flow
|
|
0, // Flag/Plug handle
|
|
0, // UnitPlugNumber
|
|
},
|
|
#endif
|
|
};
|
|
|
|
|
|
|
|
KS_DATARANGE_MPEG2TS_STRIDE_AVC
|
|
MPEG2TStreamInStride =
|
|
{
|
|
// KSDATARANGE
|
|
{
|
|
#ifdef SUPPORT_NEW_AVC
|
|
sizeof(KS_DATARANGE_MPEG2TS_STRIDE_AVC), // FormatSize
|
|
#else
|
|
sizeof(KS_DATARANGE_MPEG2TS_STRIDE_AVC) - sizeof(AVCPRECONNECTINFO), // FormatSize; exclude AVCPRECONNECTINFO
|
|
#endif
|
|
0, // Flags
|
|
BUFFER_SIZE_MPEG2TS_SPH, // SampleSize with SPH:192*N
|
|
0, // Reserved
|
|
STATIC_KSDATAFORMAT_TYPE_STREAM,
|
|
STATIC_KSDATAFORMAT_TYPE_MPEG2_TRANSPORT_STRIDE,
|
|
// If there is a format block (like MPEG2_TRANSPORT_STRIDE),
|
|
// the specifier cannot use STATIC_KSDATAFORMAT_SPECIFIER_NONE or _WILDCARD
|
|
STATIC_KSDATAFORMAT_SPECIFIER_61883_4,
|
|
},
|
|
// MPEG2_TRANSPORT_STRIDE
|
|
{
|
|
MPEG2TS_STRIDE_OFFSET, // 4
|
|
MPEG2TS_STRIDE_PACKET_LEN, // 188
|
|
MPEG2TS_STRIDE_STRIDE_LEN, // 192
|
|
},
|
|
#ifdef SUPPORT_NEW_AVC
|
|
// AVCPRECONNECTINFO
|
|
{
|
|
0, // Device ID
|
|
0, // Subunit address
|
|
0, // Subunit Plug number
|
|
0, // Data Flow
|
|
0, // Flag/Plug handle
|
|
0, // UnitPlugNumber
|
|
},
|
|
#endif
|
|
};
|
|
|
|
|
|
PKSDATAFORMAT MPEG2TStream0Formats[] =
|
|
{
|
|
|
|
(PKSDATAFORMAT) &MPEG2TStreamOutStride,
|
|
(PKSDATAFORMAT) &MPEG2TStreamOut,
|
|
};
|
|
|
|
#define NUM_MPEG_STREAM0_FORMATS (SIZEOF_ARRAY(MPEG2TStream0Formats))
|
|
|
|
PKSDATAFORMAT MPEG2TStream1Formats[] =
|
|
{
|
|
(PKSDATAFORMAT) &MPEG2TStreamInStride,
|
|
};
|
|
|
|
#define NUM_MPEG_STREAM1_FORMATS (SIZEOF_ARRAY(MPEG2TStream1Formats))
|
|
|
|
|
|
STREAM_INFO_AND_OBJ MPEGStreams [] =
|
|
{
|
|
// -----------------------------------------------------------------
|
|
// Stream 0, MPEG2 TS coming from the AV device
|
|
// -----------------------------------------------------------------
|
|
{
|
|
// HW_STREAM_INFORMATION -------------------------------------------
|
|
{
|
|
1, // NumberOfPossibleInstances
|
|
KSPIN_DATAFLOW_OUT, // DataFlow
|
|
TRUE, // DataAccessible
|
|
NUM_MPEG_STREAM0_FORMATS, // NumberOfFormatArrayEntries
|
|
MPEG2TStream0Formats, // StreamFormatsArray
|
|
0, // ClassReserved[0]
|
|
0, // ClassReserved[1]
|
|
0, // ClassReserved[2]
|
|
0, // ClassReserved[3]
|
|
NUMBER_VIDEO_STREAM_PROPERTIES, // NumStreamPropArrayEntries
|
|
(PKSPROPERTY_SET) VideoStreamProperties, // StreamPropertiesArray
|
|
0, // NUMBER_STREAM_EVENTS, // NumStreamEventArrayEntries
|
|
NULL, // StreamEvents,
|
|
&guidPinCategoryCapture, // Category
|
|
&guidPinNameMPEG2TSOutput, // Name
|
|
0, // MediumsCount
|
|
NULL, // Mediums
|
|
FALSE, // BridgeStream
|
|
0,
|
|
0
|
|
},
|
|
|
|
|
|
// HW_STREAM_OBJECT ------------------------------------------------
|
|
{
|
|
sizeof(HW_STREAM_OBJECT),
|
|
0, // StreamNumber
|
|
0, // HwStreamExtension
|
|
AVCTapeRcvDataPacket, // ReceiveDataPacket
|
|
AVCTapeRcvControlPacket, // ReceiveControlPacket
|
|
{
|
|
#if 0
|
|
(PHW_CLOCK_FUNCTION) AVCTapeStreamClockRtn, // HW_CLOCK_OBJECT.HWClockFunction
|
|
CLOCK_SUPPORT_CAN_RETURN_STREAM_TIME, // HW_CLOCK_OBJECT.ClockSupportFlags
|
|
#else
|
|
(PHW_CLOCK_FUNCTION) NULL, // HW_CLOCK_OBJECT.HWClockFunction
|
|
0, // HW_CLOCK_OBJECT.ClockSupportFlags
|
|
#endif
|
|
0, // HW_CLOCK_OBJECT.Reserved[0]
|
|
0, // HW_CLOCK_OBJECT.Reserved[1]
|
|
},
|
|
FALSE, // Dma
|
|
FALSE, // Pio
|
|
0, // HwDeviceExtension
|
|
0, // StreamHeaderMediaSpecific
|
|
0, // StreamHeaderWorkspace
|
|
FALSE, // Allocator
|
|
NULL, // EventRoutine
|
|
0, // Reserved[0]
|
|
0, // Reserved[1]
|
|
},
|
|
},
|
|
// -----------------------------------------------------------------
|
|
// Stream 1, MPEG2 TS from adapter to the AV device
|
|
// -----------------------------------------------------------------
|
|
{
|
|
// HW_STREAM_INFORMATION -------------------------------------------
|
|
{
|
|
1, // NumberOfPossibleInstances
|
|
KSPIN_DATAFLOW_IN, // DataFlow
|
|
TRUE, // DataAccessible
|
|
NUM_MPEG_STREAM1_FORMATS, // NumberOfFormatArrayEntries
|
|
MPEG2TStream1Formats, // StreamFormatsArray
|
|
0, // ClassReserved[0]
|
|
0, // ClassReserved[1]
|
|
0, // ClassReserved[2]
|
|
0, // ClassReserved[3]
|
|
NUMBER_VIDEO_STREAM_PROPERTIES, // NumStreamPropArrayEntries
|
|
(PKSPROPERTY_SET) VideoStreamProperties, // StreamPropertiesArray
|
|
NUMBER_STREAM_EVENTS_IN_PIN_MPEG2TS, // NumStreamEventArrayEntries
|
|
StreamEventsInPinMPEG2TS, // StreamEventsArray
|
|
&guidPinCategoryCapture, // Category
|
|
&guidPinNameMPEG2TSInput, // Name
|
|
0, // MediumsCount
|
|
NULL, // Mediums
|
|
FALSE, // BridgeStream
|
|
0,
|
|
0
|
|
},
|
|
|
|
|
|
// HW_STREAM_OBJECT ------------------------------------------------
|
|
{
|
|
sizeof(HW_STREAM_OBJECT),
|
|
1, // StreamNumber
|
|
0, // HwStreamExtension
|
|
AVCTapeRcvDataPacket, // ReceiveDataPacket
|
|
AVCTapeRcvControlPacket, // ReceiveControlPacket
|
|
{
|
|
#if 0
|
|
(PHW_CLOCK_FUNCTION) AVCTapeStreamClockRtn, // HW_CLOCK_OBJECT.HWClockFunction
|
|
CLOCK_SUPPORT_CAN_RETURN_STREAM_TIME, // HW_CLOCK_OBJECT.ClockSupportFlags
|
|
#else
|
|
(PHW_CLOCK_FUNCTION) NULL, // HW_CLOCK_OBJECT.HWClockFunction
|
|
0, // HW_CLOCK_OBJECT.ClockSupportFlags
|
|
#endif
|
|
0, // HW_CLOCK_OBJECT.Reserved[0]
|
|
0, // HW_CLOCK_OBJECT.Reserved[1]
|
|
},
|
|
FALSE, // Dma
|
|
FALSE, // Pio
|
|
0, // HwDeviceExtension
|
|
0, // StreamHeaderMediaSpecific
|
|
0, // StreamHeaderWorkspace
|
|
FALSE, // Allocator
|
|
NULL, // EventRoutine
|
|
0, // Reserved[0]
|
|
0, // Reserved[1]
|
|
},
|
|
}
|
|
};
|
|
|
|
|
|
#define MPEG_STREAM_COUNT (SIZEOF_ARRAY(MPEGStreams))
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
Supported AVC Stream format information table
|
|
**********************************************************************/
|
|
|
|
#define BLOCK_PERIOD_MPEG2TS 192 // number of 1394 cycle offset to send one block
|
|
|
|
AVCSTRM_FORMAT_INFO AVCStrmFormatInfoTable[] = {
|
|
//
|
|
// SDDV_NTSC
|
|
//
|
|
{
|
|
sizeof(AVCSTRM_FORMAT_INFO),
|
|
AVCSTRM_FORMAT_SDDV_NTSC,
|
|
{
|
|
0,0,
|
|
CIP_DBS_SDDV,
|
|
CIP_FN_DV,
|
|
CIP_QPC_DV,
|
|
CIP_SPH_DV,0,
|
|
0
|
|
}, // CIP header[0]
|
|
{
|
|
0x2,
|
|
CIP_FMT_DV,
|
|
CIP_60_FIELDS,
|
|
CIP_STYPE_DV, 0,
|
|
0
|
|
}, // CIP header[1]
|
|
SRC_PACKETS_PER_NTSC_FRAME,
|
|
FRAME_SIZE_SDDV_NTSC,
|
|
NUM_OF_RCV_BUFFERS_DV,
|
|
NUM_OF_XMT_BUFFERS_DV,
|
|
FALSE, // No source header
|
|
FRAME_TIME_NTSC,
|
|
BLOCK_PERIOD_2997,
|
|
0,0,0,0,
|
|
},
|
|
//
|
|
// SDDV_PAL
|
|
//
|
|
{
|
|
sizeof(AVCSTRM_FORMAT_INFO),
|
|
AVCSTRM_FORMAT_SDDV_PAL,
|
|
{
|
|
0,0,
|
|
CIP_DBS_SDDV,
|
|
CIP_FN_DV,
|
|
CIP_QPC_DV,
|
|
CIP_SPH_DV,0,
|
|
0
|
|
}, // CIP header[0]
|
|
{
|
|
0x2,
|
|
CIP_FMT_DV,
|
|
CIP_50_FIELDS,
|
|
CIP_STYPE_DV, 0,
|
|
0
|
|
}, // CIP header[1]
|
|
SRC_PACKETS_PER_PAL_FRAME,
|
|
FRAME_SIZE_SDDV_PAL,
|
|
NUM_OF_RCV_BUFFERS_DV,
|
|
NUM_OF_XMT_BUFFERS_DV,
|
|
FALSE, // No source header
|
|
FRAME_TIME_PAL,
|
|
BLOCK_PERIOD_25,
|
|
0,0,0,0,
|
|
},
|
|
//
|
|
// MPEG2TS
|
|
//
|
|
{
|
|
sizeof(AVCSTRM_FORMAT_INFO),
|
|
AVCSTRM_FORMAT_MPEG2TS,
|
|
{
|
|
0,0,
|
|
CIP_DBS_MPEG,
|
|
CIP_FN_MPEG,
|
|
CIP_QPC_MPEG,
|
|
CIP_SPH_MPEG,0,
|
|
0
|
|
}, // CIP header[0]
|
|
{
|
|
0x2,
|
|
CIP_FMT_MPEG,
|
|
CIP_TSF_OFF,\
|
|
0, 0,
|
|
0
|
|
}, // CIP header[1]
|
|
SRC_PACKETS_PER_MPEG2TS_FRAME, // Default
|
|
BUFFER_SIZE_MPEG2TS_SPH, // Default
|
|
NUM_OF_RCV_BUFFERS_MPEG2TS,
|
|
NUM_OF_XMT_BUFFERS_MPEG2TS,
|
|
FALSE, // Strip source packet header
|
|
FRAME_TIME_NTSC,
|
|
BLOCK_PERIOD_MPEG2TS,
|
|
0,0,0,0,
|
|
},
|
|
//
|
|
// HDDV_NTSC
|
|
// ...
|
|
|
|
//
|
|
// HDDV_PAL
|
|
// ...
|
|
|
|
//
|
|
// SDLDV_NTSC
|
|
// ...
|
|
|
|
//
|
|
// SDLDV_PAL
|
|
// ...
|
|
};
|
|
|
|
|
|
|
|
#endif // _DVSTRM_INC
|