windows-nt/Source/XPSP1/NT/multimedia/published/dshow/edevctrl.h
2020-09-26 16:20:57 +08:00

347 lines
10 KiB
C

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