summaryrefslogtreecommitdiff
path: root/sdk/dx8sdk/Include/edevctrl.h
diff options
context:
space:
mode:
Diffstat (limited to 'sdk/dx8sdk/Include/edevctrl.h')
-rw-r--r--sdk/dx8sdk/Include/edevctrl.h346
1 files changed, 346 insertions, 0 deletions
diff --git a/sdk/dx8sdk/Include/edevctrl.h b/sdk/dx8sdk/Include/edevctrl.h
new file mode 100644
index 00000000..07510447
--- /dev/null
+++ b/sdk/dx8sdk/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__