|
|
/*++
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__
|