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