mirror of https://github.com/tongzx/nt5src
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.
346 lines
10 KiB
346 lines
10 KiB
/*++
|
|
|
|
Copyright (C) Microsoft Corporation, 1998 - 1999
|
|
|
|
Module Name:
|
|
|
|
EDevCtrl.h
|
|
|
|
Abstract:
|
|
|
|
This header contain structures and peroperty sets for
|
|
interfacing to an external device, like a DV.
|
|
The code is modeled after DirectShow's Vcrctrl Sample
|
|
(VCR Control Filter). It contain IAMExtDevice,
|
|
IAMExtTransport, and IAMTimecodeReader interfaces, and
|
|
a new interface IAMAdvancedAVControl() is added
|
|
for additional advanced device controls.
|
|
|
|
Note: (From DShow DDK)
|
|
The VCR control sample filter, Vcrctrl, is a simple
|
|
implementation of the external device control interfaces
|
|
that DirectShow provides. Vcrctrl provides basic transport
|
|
control and SMPTE timecode-reading capabilities for certain
|
|
Betacam and SVHS videocassette recorders with RS-422 or RS-232
|
|
serial interfaces (see source code for specific machine types
|
|
supported).
|
|
|
|
Note: some methods in IAM* interfaces may not be
|
|
used and will return not implemented.
|
|
|
|
Created:
|
|
|
|
September 23, 1998
|
|
|
|
Yee J. Wu
|
|
|
|
|
|
Revision:
|
|
|
|
0.6
|
|
|
|
--*/
|
|
|
|
#ifndef __EDevCtrl__
|
|
#define __EDevCtrl__
|
|
|
|
#ifndef TIMECODE_DEFINED
|
|
#define TIMECODE_DEFINED
|
|
typedef union _timecode {
|
|
struct {
|
|
WORD wFrameRate;
|
|
WORD wFrameFract;
|
|
DWORD dwFrames;
|
|
};
|
|
DWORDLONG qw;
|
|
} TIMECODE;
|
|
|
|
|
|
|
|
typedef TIMECODE *PTIMECODE;
|
|
|
|
typedef struct tagTIMECODE_SAMPLE
|
|
{
|
|
LONGLONG qwTick;
|
|
TIMECODE timecode;
|
|
DWORD dwUser;
|
|
DWORD dwFlags;
|
|
} TIMECODE_SAMPLE;
|
|
|
|
typedef TIMECODE_SAMPLE *PTIMECODE_SAMPLE;
|
|
|
|
#endif /* TIMECODE_DEFINED */
|
|
|
|
// Device Capabilities
|
|
typedef struct tagDEVCAPS{
|
|
long CanRecord;
|
|
long CanRecordStrobe;
|
|
long HasAudio;
|
|
long HasVideo;
|
|
long UsesFiles;
|
|
long CanSave;
|
|
long DeviceType;
|
|
long TCRead;
|
|
long TCWrite;
|
|
long CTLRead;
|
|
long IndexRead;
|
|
long Preroll;
|
|
long Postroll;
|
|
long SyncAcc;
|
|
long NormRate;
|
|
long CanPreview;
|
|
long CanMonitorSrc;
|
|
long CanTest;
|
|
long VideoIn;
|
|
long AudioIn;
|
|
long Calibrate;
|
|
long SeekType;
|
|
long SimulatedHardware; // private
|
|
} DEVCAPS, *PDEVCAPS;
|
|
|
|
// transport status
|
|
typedef struct tagTRANSPORTSTATUS{
|
|
long Mode;
|
|
long LastError;
|
|
long RecordInhibit;
|
|
long ServoLock;
|
|
long MediaPresent;
|
|
long MediaLength;
|
|
long MediaSize;
|
|
long MediaTrackCount;
|
|
long MediaTrackLength;
|
|
long MediaTrackSide;
|
|
long MediaType;
|
|
long LinkMode;
|
|
long NotifyOn;
|
|
} TRANSPORTSTATUS, *PTRANSPORTSTATUS;
|
|
|
|
// transport basic parameters
|
|
typedef struct tagTRANSPORTBASICPARMS{
|
|
long TimeFormat;
|
|
long TimeReference;
|
|
long Superimpose;
|
|
long EndStopAction;
|
|
long RecordFormat;
|
|
long StepFrames;
|
|
long SetpField;
|
|
long Preroll;
|
|
long RecPreroll;
|
|
long Postroll;
|
|
long EditDelay;
|
|
long PlayTCDelay;
|
|
long RecTCDelay;
|
|
long EditField;
|
|
long FrameServo;
|
|
long ColorFrameServo;
|
|
long ServoRef;
|
|
long WarnGenlock;
|
|
long SetTracking;
|
|
TCHAR VolumeName[40];
|
|
long Ballistic[20];
|
|
long Speed;
|
|
long CounterFormat;
|
|
long TunerChannel;
|
|
long TunerNumber;
|
|
long TimerEvent;
|
|
long TimerStartDay;
|
|
long TimerStartTime;
|
|
long TimerStopDay;
|
|
long TimerStopTime;
|
|
} TRANSPORTBASICPARMS, *PTRANSPORTBASICPARMS;
|
|
|
|
// transport video parameters
|
|
typedef struct tagTRANSPORTVIDEOPARMS{
|
|
long OutputMode;
|
|
long Input;
|
|
} TRANSPORTVIDEOPARMS, *PTRANSPORTVIDEOPARMS;
|
|
|
|
// transport audio parameters
|
|
typedef struct tagTRANSPORTAUDIOPARMS{
|
|
long EnableOutput;
|
|
long EnableRecord;
|
|
long EnableSelsync;
|
|
long Input;
|
|
long MonitorSource;
|
|
} TRANSPORTAUDIOPARMS, *PTRANSPORTAUDIOPARMS;
|
|
|
|
|
|
// low level machine status structure filled in after
|
|
// REQUEST_STATUS command from above. This structure would
|
|
// grow in a full implementation
|
|
typedef struct tagVCRSTATUS{
|
|
BOOL bCassetteOut; // OATRUE means no cassette
|
|
BOOL bLocal; // OATRUE means front panel switch in local
|
|
} VCRSTATUS;
|
|
|
|
typedef VCRSTATUS far *PVCRSTATUS;
|
|
|
|
|
|
|
|
//---------------------------------------------------------
|
|
// STATIC_PROPSETID_VIDCAP_EXT_DEVICE
|
|
//---------------------------------------------------------
|
|
// This guid and interface is defined in strmif.h
|
|
#define STATIC_PROPSETID_EXT_DEVICE\
|
|
0xB5730A90L, 0x1A2C, 0x11cf, 0x8c, 0x23, 0x00, 0xAA, 0x00, 0x6B, 0x68, 0x14
|
|
DEFINE_GUIDSTRUCT("B5730A90-1A2C-11cf-8C23-00AA006B6814", PROPSETID_EXT_DEVICE);
|
|
#define PROPSETID_EXT_DEVICE DEFINE_GUIDNAMED(PROPSETID_EXT_DEVICE)
|
|
|
|
|
|
// KS properties and structure for this interface
|
|
typedef enum {
|
|
KSPROPERTY_EXTDEVICE_ID, // ID (such as Symbolic Lin) that can uniquely idenfy this device
|
|
KSPROPERTY_EXTDEVICE_VERSION, // Device model number and version (such AV/C VCR Subunit Spec. 2.01)
|
|
KSPROPERTY_EXTDEVICE_POWER_STATE, // Return current device power state.
|
|
KSPROPERTY_EXTDEVICE_PORT, // Can use this to return DEV_PORT_1394
|
|
KSPROPERTY_EXTDEVICE_CAPABILITIES, // Device specific capabilities
|
|
|
|
} KSPROPERTY_EXTDEVICE;
|
|
|
|
|
|
typedef struct {
|
|
KSPROPERTY Property;
|
|
|
|
union {
|
|
// Client is responsible for allocating this.
|
|
DEVCAPS Capabilities; // May need to expand on the existing structure
|
|
ULONG DevPort; //
|
|
ULONG PowerState; // On, off standby
|
|
WCHAR pawchString[MAX_PATH]; // ID and version
|
|
DWORD NodeUniqueID[2]; // Unique NodeID
|
|
} u;
|
|
|
|
} KSPROPERTY_EXTDEVICE_S, *PKSPROPERTY_EXTDEVICE_S;
|
|
|
|
|
|
//---------------------------------------------------------
|
|
// STATIC_PROPSETID_VIDCAP_EXT_TRANSPORT
|
|
//---------------------------------------------------------
|
|
// This guid and interface is defined in strmif.h
|
|
#define STATIC_PROPSETID_EXT_TRANSPORT\
|
|
0xA03CD5F0L, 0x3045, 0x11cf, 0x8c, 0x44, 0x00, 0xAA, 0x00, 0x6B, 0x68, 0x14
|
|
DEFINE_GUIDSTRUCT("A03CD5F0-3045-11cf-8C44-00AA006B6814", PROPSETID_EXT_TRANSPORT);
|
|
#define PROPSETID_EXT_TRANSPORT DEFINE_GUIDNAMED(PROPSETID_EXT_TRANSPORT)
|
|
|
|
|
|
|
|
// KS properties and structure for this interface
|
|
typedef enum {
|
|
KSPROPERTY_EXTXPORT_CAPABILITIES, // Transport specific capability
|
|
KSPROPERTY_EXTXPORT_INPUT_SIGNAL_MODE, // MPEG, D-VHS, Analog VHS etc.
|
|
KSPROPERTY_EXTXPORT_OUTPUT_SIGNAL_MODE, // MPEG, D-VHS, Analog VHS etc.
|
|
KSPROPERTY_EXTXPORT_LOAD_MEDIUM, // Eject, open tray, close tray
|
|
KSPROPERTY_EXTXPORT_MEDIUM_INFO, // cassettte_type and tape_grade_and_write_protect
|
|
KSPROPERTY_EXTXPORT_STATE, // Get/Set transport mode and state
|
|
KSPROPERTY_EXTXPORT_STATE_NOTIFY, // NOTIFY: Mode + State (Table 4-8)
|
|
KSPROPERTY_EXTXPORT_TIMECODE_SEARCH, // Request VCR subunit to search for a specific timecode on the medium
|
|
KSPROPERTY_EXTXPORT_ATN_SEARCH, // Request VCR subunit to search for a specific ATN on the medium
|
|
KSPROPERTY_EXTXPORT_RTC_SEARCH, // Request VCR subunit to search for a specific RelativeTimeCounter on the medium
|
|
|
|
//
|
|
// Implemented for testing purpose
|
|
// Will remove this later...
|
|
//
|
|
KSPROPERTY_RAW_AVC_CMD, // Send/Rcv raw AVC commnad with a FCP packet.
|
|
|
|
} KSPROPERTY_EXTXPORT;
|
|
|
|
typedef struct {
|
|
BOOL MediaPresent; // TRUE/FALSE
|
|
ULONG MediaType; // DVCR standard, small, medium; VHS; VHS-C; unknown
|
|
BOOL RecordInhibit; // TRUE/FALSE
|
|
} MEDIUM_INFO, *PMEDIUM_INFO;
|
|
|
|
|
|
typedef struct {
|
|
ULONG Mode; // LOAD MEDIUM, RECORD, PLAY or WIND
|
|
ULONG State; // Vary depend on mode (Table 4-8)
|
|
} TRANSPORT_STATE, *PTRANSPORT_STATE;
|
|
|
|
typedef struct {
|
|
KSPROPERTY Property;
|
|
|
|
union {
|
|
ULONG Capabilities; // May need to expand on the existing structure
|
|
ULONG SignalMode; // MPEG, D-VHS, Analog VHS etc.
|
|
ULONG LoadMedium; // Eject, open tray, close tray
|
|
MEDIUM_INFO MediumInfo;
|
|
TRANSPORT_STATE XPrtState;
|
|
|
|
struct {
|
|
BYTE frame;
|
|
BYTE second;
|
|
BYTE minute;
|
|
BYTE hour;
|
|
} Timecode;
|
|
DWORD dwTimecode; // hour:minute:second:frame
|
|
DWORD dwAbsTrackNumber; // absolute track number
|
|
|
|
|
|
//
|
|
// Implemented for testing purpose
|
|
// Will remove this later or will keep this for
|
|
// packet specific command.
|
|
//
|
|
struct {
|
|
ULONG PayloadSize;
|
|
BYTE Payload[512]; // This is only for testing sending AVC command from User mode.
|
|
} RawAVC;
|
|
|
|
} u;
|
|
|
|
} KSPROPERTY_EXTXPORT_S, *PKSPROPERTY_EXTXPORT_S;
|
|
|
|
|
|
|
|
//---------------------------------------------------------
|
|
// PROPSETID_TIMECODE
|
|
//---------------------------------------------------------
|
|
// This guid and interface is defined in strmif.h
|
|
#define STATIC_PROPSETID_TIMECODE_READER\
|
|
0x9B496CE1L, 0x811B, 0x11cf, 0x8C, 0x77, 0x00, 0xAA, 0x00, 0x6B, 0x68, 0x14
|
|
DEFINE_GUIDSTRUCT("9B496CE1-811B-11cf-8C77-00AA006B6814", PROPSETID_TIMECODE_READER);
|
|
#define PROPSETID_TIMECODE_READER DEFINE_GUIDNAMED(PROPSETID_TIMECODE_READER)
|
|
|
|
|
|
// KS properties and structure for this interface
|
|
typedef enum {
|
|
KSPROPERTY_TIMECODE_READER, // Timecode for the current medium position
|
|
KSPROPERTY_ATN_READER, // Absolute track number the current medium position
|
|
KSPROPERTY_RTC_READER, // Relative time counter for the current medium position
|
|
|
|
} KSPROPERTY_TIMECODE;
|
|
|
|
|
|
typedef struct {
|
|
KSPROPERTY Property;
|
|
|
|
TIMECODE_SAMPLE TimecodeSamp;
|
|
|
|
} KSPROPERTY_TIMECODE_S, *PKSPROPERTY_TIMECODE_S;
|
|
|
|
|
|
|
|
//---------------------------------------------------------
|
|
// External Device Command event notification
|
|
//---------------------------------------------------------
|
|
|
|
#define STATIC_KSEVENTSETID_EXTDEV_Command\
|
|
0x109c7988L, 0xb3cb, 0x11d2, 0xb4, 0x8e, 0x00, 0x60, 0x97, 0xb3, 0x39, 0x1b
|
|
DEFINE_GUIDSTRUCT("109c7988-b3cb-11d2-b48e-006097b3391b", KSEVENTSETID_EXTDEV_Command);
|
|
#define KSEVENTSETID_EXTDEV_Command DEFINE_GUIDNAMED(KSEVENTSETID_EXTDEV_Command)
|
|
|
|
typedef enum {
|
|
KSEVENT_EXTDEV_COMMAND_NOTIFY_INTERIM_READY,
|
|
KSEVENT_EXTDEV_COMMAND_CONTROL_INTERIM_READY,
|
|
KSEVENT_EXTDEV_COMMAND_BUSRESET,
|
|
KSEVENT_EXTDEV_TIMECODE_UPDATE,
|
|
KSEVENT_EXTDEV_OPERATION_MODE_UPDATE, // Notify mode of operation change (VCR,OFF,Camera)
|
|
KSEVENT_EXTDEV_TRANSPORT_STATE_UPDATE, // XPrt state change
|
|
KSEVENT_EXTDEV_NOTIFY_REMOVAL, // Notify device removal
|
|
KSEVENT_EXTDEV_NOTIFY_MEDIUM_CHANGE, // Notify medium (tape) is removed or added
|
|
|
|
} KSEVENT_DEVCMD;
|
|
|
|
|
|
#endif // __EDevCTrl__
|