diff options
Diffstat (limited to 'dxsdk/Include/edevctrl.h')
-rw-r--r-- | dxsdk/Include/edevctrl.h | 346 |
1 files changed, 346 insertions, 0 deletions
diff --git a/dxsdk/Include/edevctrl.h b/dxsdk/Include/edevctrl.h new file mode 100644 index 00000000..07510447 --- /dev/null +++ b/dxsdk/Include/edevctrl.h @@ -0,0 +1,346 @@ +/*++ + +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__ |