home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the 3D Game Programming Gurus / gurus.iso / DirectX / dx9sdkcp.exe / SDK (C++) / Include / edevctrl.h < prev    next >
Encoding:
C/C++ Source or Header  |  2002-11-12  |  10.6 KB  |  347 lines

  1. /*++
  2.  
  3. Copyright (C) Microsoft Corporation, 1998 - 1999
  4.  
  5. Module Name:
  6.  
  7.     EDevCtrl.h
  8.  
  9. Abstract:
  10.  
  11.     This header contain structures and peroperty sets for 
  12.     interfacing to an external device, like a DV.
  13.     The code is modeled after DirectShow's Vcrctrl Sample 
  14.     (VCR Control Filter). It contain IAMExtDevice, 
  15.     IAMExtTransport, and IAMTimecodeReader interfaces, and 
  16.     a new interface IAMAdvancedAVControl() is added
  17.     for additional advanced device controls.
  18.  
  19.     Note:  (From DShow DDK)
  20.         The VCR control sample filter, Vcrctrl, is a simple 
  21.         implementation of the external device control interfaces 
  22.         that DirectShow provides. Vcrctrl provides basic transport 
  23.         control and SMPTE timecode-reading capabilities for certain 
  24.         Betacam and SVHS videocassette recorders with RS-422 or RS-232 
  25.         serial interfaces (see source code for specific machine types 
  26.         supported).
  27.  
  28.     Note:  some methods in IAM* interfaces may not be 
  29.            used and will return not implemented.           
  30.  
  31. Created:
  32.  
  33.     September 23, 1998    
  34.  
  35.     Yee J. Wu
  36.  
  37.  
  38. Revision:
  39.  
  40.    0.6
  41.  
  42. --*/
  43.  
  44. #ifndef __EDevCtrl__
  45. #define __EDevCtrl__
  46.  
  47. #ifndef TIMECODE_DEFINED
  48. #define TIMECODE_DEFINED
  49. typedef union _timecode {
  50.    struct {
  51.      WORD   wFrameRate;
  52.      WORD   wFrameFract;
  53.      DWORD  dwFrames;
  54.      };
  55.    DWORDLONG  qw;
  56.    } TIMECODE;
  57.  
  58.  
  59.  
  60. typedef TIMECODE *PTIMECODE;
  61.  
  62. typedef struct tagTIMECODE_SAMPLE
  63.     {
  64.     LONGLONG qwTick;
  65.     TIMECODE timecode;
  66.     DWORD dwUser;
  67.     DWORD dwFlags;
  68.     }    TIMECODE_SAMPLE;
  69.  
  70. typedef TIMECODE_SAMPLE *PTIMECODE_SAMPLE;
  71.  
  72. #endif /* TIMECODE_DEFINED */
  73.  
  74. // Device Capabilities
  75. typedef struct tagDEVCAPS{
  76.     long CanRecord;
  77.     long CanRecordStrobe;
  78.     long HasAudio;
  79.     long HasVideo;
  80.     long UsesFiles;
  81.     long CanSave;
  82.     long DeviceType;
  83.     long TCRead;
  84.     long TCWrite;
  85.     long CTLRead;
  86.     long IndexRead;
  87.     long Preroll;
  88.     long Postroll;
  89.     long SyncAcc;
  90.     long NormRate;
  91.     long CanPreview;
  92.     long CanMonitorSrc;
  93.     long CanTest;
  94.     long VideoIn;
  95.     long AudioIn;
  96.     long Calibrate;
  97.     long SeekType;
  98.     long SimulatedHardware;        // private
  99. } DEVCAPS, *PDEVCAPS;
  100.  
  101. // transport status
  102. typedef struct tagTRANSPORTSTATUS{
  103.     long Mode;
  104.     long LastError;
  105.     long RecordInhibit;
  106.     long ServoLock;
  107.     long MediaPresent;
  108.     long MediaLength;
  109.     long MediaSize;
  110.     long MediaTrackCount;
  111.     long MediaTrackLength;
  112.     long MediaTrackSide;
  113.     long MediaType;
  114.     long LinkMode;
  115.     long NotifyOn;
  116. } TRANSPORTSTATUS, *PTRANSPORTSTATUS;
  117.  
  118. // transport basic parameters
  119. typedef struct tagTRANSPORTBASICPARMS{
  120.     long TimeFormat;
  121.     long TimeReference;
  122.     long Superimpose;
  123.     long EndStopAction;
  124.     long RecordFormat;
  125.     long StepFrames;
  126.     long SetpField;
  127.     long Preroll;
  128.     long RecPreroll;
  129.     long Postroll;
  130.     long EditDelay;
  131.     long PlayTCDelay;
  132.     long RecTCDelay;
  133.     long EditField;
  134.     long FrameServo;
  135.     long ColorFrameServo;
  136.     long ServoRef;
  137.     long WarnGenlock;
  138.     long SetTracking;
  139.     TCHAR VolumeName[40];
  140.     long Ballistic[20];
  141.     long Speed;
  142.     long CounterFormat;
  143.     long TunerChannel;
  144.     long TunerNumber;
  145.     long TimerEvent;
  146.     long TimerStartDay;
  147.     long TimerStartTime;
  148.     long TimerStopDay;
  149.     long TimerStopTime;
  150. } TRANSPORTBASICPARMS, *PTRANSPORTBASICPARMS;
  151.  
  152. // transport video parameters
  153. typedef struct tagTRANSPORTVIDEOPARMS{
  154.     long OutputMode;
  155.     long Input;
  156. } TRANSPORTVIDEOPARMS, *PTRANSPORTVIDEOPARMS;
  157.  
  158. // transport audio parameters
  159. typedef struct tagTRANSPORTAUDIOPARMS{
  160.     long EnableOutput;
  161.     long EnableRecord;
  162.     long EnableSelsync;
  163.     long Input;
  164.     long MonitorSource;
  165. } TRANSPORTAUDIOPARMS, *PTRANSPORTAUDIOPARMS;
  166.  
  167.  
  168. // low level machine status structure filled in after
  169. // REQUEST_STATUS command from above.  This structure would
  170. // grow in a full implementation
  171. typedef struct tagVCRSTATUS{
  172.     BOOL bCassetteOut;    // OATRUE means no cassette
  173.     BOOL bLocal;        // OATRUE means front panel switch in local
  174. } VCRSTATUS;
  175.  
  176. typedef VCRSTATUS far *PVCRSTATUS;
  177.  
  178.  
  179.  
  180. //---------------------------------------------------------
  181. // STATIC_PROPSETID_VIDCAP_EXT_DEVICE
  182. //---------------------------------------------------------
  183. // This guid and interface is defined in strmif.h 
  184. #define STATIC_PROPSETID_EXT_DEVICE\
  185.     0xB5730A90L, 0x1A2C, 0x11cf, 0x8c, 0x23, 0x00, 0xAA, 0x00, 0x6B, 0x68, 0x14
  186. DEFINE_GUIDSTRUCT("B5730A90-1A2C-11cf-8C23-00AA006B6814", PROPSETID_EXT_DEVICE);
  187. #define PROPSETID_EXT_DEVICE DEFINE_GUIDNAMED(PROPSETID_EXT_DEVICE)
  188.  
  189.  
  190. // KS properties and structure for this interface
  191. typedef enum {
  192.     KSPROPERTY_EXTDEVICE_ID,           // ID (such as Symbolic Lin) that can uniquely idenfy this device
  193.     KSPROPERTY_EXTDEVICE_VERSION,      // Device model number and version (such AV/C VCR Subunit Spec. 2.01)
  194.     KSPROPERTY_EXTDEVICE_POWER_STATE,  // Return current device power state.
  195.     KSPROPERTY_EXTDEVICE_PORT,         // Can use this to return DEV_PORT_1394
  196.     KSPROPERTY_EXTDEVICE_CAPABILITIES, // Device specific capabilities  
  197.  
  198. } KSPROPERTY_EXTDEVICE;
  199.  
  200.  
  201. typedef struct {
  202.     KSPROPERTY Property;
  203.  
  204.     union {
  205.         // Client is responsible for allocating this.
  206.         DEVCAPS  Capabilities;          // May need to expand on the existing structure
  207.         ULONG    DevPort;               // 
  208.         ULONG    PowerState;            // On, off standby
  209.         WCHAR    pawchString[MAX_PATH]; // ID and version
  210.         DWORD    NodeUniqueID[2];       // Unique NodeID
  211.     } u;
  212.  
  213. } KSPROPERTY_EXTDEVICE_S, *PKSPROPERTY_EXTDEVICE_S;
  214.  
  215.  
  216. //---------------------------------------------------------
  217. // STATIC_PROPSETID_VIDCAP_EXT_TRANSPORT
  218. //---------------------------------------------------------
  219. // This guid and interface is defined in strmif.h 
  220. #define STATIC_PROPSETID_EXT_TRANSPORT\
  221.     0xA03CD5F0L, 0x3045, 0x11cf, 0x8c, 0x44, 0x00, 0xAA, 0x00, 0x6B, 0x68, 0x14
  222. DEFINE_GUIDSTRUCT("A03CD5F0-3045-11cf-8C44-00AA006B6814", PROPSETID_EXT_TRANSPORT);
  223. #define PROPSETID_EXT_TRANSPORT DEFINE_GUIDNAMED(PROPSETID_EXT_TRANSPORT)
  224.  
  225.  
  226.  
  227. // KS properties and structure for this interface
  228. typedef enum {
  229.     KSPROPERTY_EXTXPORT_CAPABILITIES,       // Transport specific capability 
  230.     KSPROPERTY_EXTXPORT_INPUT_SIGNAL_MODE,  // MPEG, D-VHS, Analog VHS etc. 
  231.     KSPROPERTY_EXTXPORT_OUTPUT_SIGNAL_MODE, // MPEG, D-VHS, Analog VHS etc. 
  232.     KSPROPERTY_EXTXPORT_LOAD_MEDIUM,        // Eject, open tray, close tray
  233.     KSPROPERTY_EXTXPORT_MEDIUM_INFO,        // cassettte_type and tape_grade_and_write_protect    
  234.     KSPROPERTY_EXTXPORT_STATE,              // Get/Set transport mode and state
  235.     KSPROPERTY_EXTXPORT_STATE_NOTIFY,       // NOTIFY: Mode + State (Table 4-8) 
  236.     KSPROPERTY_EXTXPORT_TIMECODE_SEARCH,    // Request VCR subunit to search for a specific timecode on the medium
  237.     KSPROPERTY_EXTXPORT_ATN_SEARCH,         // Request VCR subunit to search for a specific ATN on the medium
  238.     KSPROPERTY_EXTXPORT_RTC_SEARCH,         // Request VCR subunit to search for a specific RelativeTimeCounter on the medium
  239.  
  240.     //
  241.     // Implemented for testing purpose
  242.     // Will remove this later...
  243.     //
  244.     KSPROPERTY_RAW_AVC_CMD,                 // Send/Rcv raw AVC commnad with a FCP packet.
  245.  
  246. } KSPROPERTY_EXTXPORT;
  247.  
  248. typedef struct {
  249.     BOOL  MediaPresent;      // TRUE/FALSE
  250.     ULONG MediaType;         // DVCR standard, small, medium; VHS; VHS-C; unknown
  251.     BOOL  RecordInhibit;     // TRUE/FALSE
  252. } MEDIUM_INFO, *PMEDIUM_INFO;
  253.  
  254.  
  255. typedef struct {
  256.     ULONG Mode;              // LOAD MEDIUM, RECORD, PLAY or WIND
  257.     ULONG State;             // Vary depend on mode (Table 4-8) 
  258. } TRANSPORT_STATE, *PTRANSPORT_STATE;
  259.  
  260. typedef struct {
  261.     KSPROPERTY Property;
  262.  
  263.     union {    
  264.         ULONG      Capabilities;     // May need to expand on the existing structure
  265.         ULONG      SignalMode;       // MPEG, D-VHS, Analog VHS etc.
  266.         ULONG      LoadMedium;       // Eject, open tray, close tray
  267.         MEDIUM_INFO MediumInfo;
  268.         TRANSPORT_STATE XPrtState;
  269.  
  270.         struct {
  271.           BYTE frame;        
  272.           BYTE second;
  273.           BYTE minute;
  274.           BYTE hour;
  275.         } Timecode;
  276.         DWORD dwTimecode;       // hour:minute:second:frame
  277.         DWORD dwAbsTrackNumber; // absolute track number
  278.  
  279.  
  280.        //
  281.        // Implemented for testing purpose
  282.        // Will remove this later or will keep this for 
  283.        // packet specific command.
  284.        //
  285.        struct {
  286.            ULONG   PayloadSize;
  287.            BYTE    Payload[512];  // This is only for testing sending AVC command from User mode.
  288.        } RawAVC;
  289.  
  290.      } u;
  291.      
  292. } KSPROPERTY_EXTXPORT_S, *PKSPROPERTY_EXTXPORT_S;
  293.  
  294.  
  295.  
  296. //---------------------------------------------------------
  297. // PROPSETID_TIMECODE
  298. //---------------------------------------------------------
  299. // This guid and interface is defined in strmif.h 
  300. #define STATIC_PROPSETID_TIMECODE_READER\
  301.     0x9B496CE1L, 0x811B, 0x11cf, 0x8C, 0x77, 0x00, 0xAA, 0x00, 0x6B, 0x68, 0x14
  302. DEFINE_GUIDSTRUCT("9B496CE1-811B-11cf-8C77-00AA006B6814", PROPSETID_TIMECODE_READER);
  303. #define PROPSETID_TIMECODE_READER DEFINE_GUIDNAMED(PROPSETID_TIMECODE_READER)
  304.  
  305.  
  306. // KS properties and structure for this interface
  307. typedef enum {
  308.     KSPROPERTY_TIMECODE_READER,  // Timecode for the current medium position
  309.     KSPROPERTY_ATN_READER,       // Absolute track number the current medium position
  310.     KSPROPERTY_RTC_READER,       // Relative time counter for the current medium position
  311.  
  312. } KSPROPERTY_TIMECODE;
  313.  
  314.  
  315. typedef struct {
  316.     KSPROPERTY Property;
  317.  
  318.     TIMECODE_SAMPLE TimecodeSamp;
  319.      
  320. } KSPROPERTY_TIMECODE_S, *PKSPROPERTY_TIMECODE_S;
  321.  
  322.  
  323.  
  324. //---------------------------------------------------------
  325. //  External Device Command event notification
  326. //---------------------------------------------------------
  327.  
  328. #define STATIC_KSEVENTSETID_EXTDEV_Command\
  329.     0x109c7988L, 0xb3cb, 0x11d2, 0xb4, 0x8e, 0x00, 0x60, 0x97, 0xb3, 0x39, 0x1b
  330. DEFINE_GUIDSTRUCT("109c7988-b3cb-11d2-b48e-006097b3391b", KSEVENTSETID_EXTDEV_Command);
  331. #define KSEVENTSETID_EXTDEV_Command DEFINE_GUIDNAMED(KSEVENTSETID_EXTDEV_Command)
  332.  
  333. typedef enum {
  334.     KSEVENT_EXTDEV_COMMAND_NOTIFY_INTERIM_READY,
  335.     KSEVENT_EXTDEV_COMMAND_CONTROL_INTERIM_READY,
  336.     KSEVENT_EXTDEV_COMMAND_BUSRESET,
  337.     KSEVENT_EXTDEV_TIMECODE_UPDATE,
  338.     KSEVENT_EXTDEV_OPERATION_MODE_UPDATE,    // Notify mode of operation change (VCR,OFF,Camera)
  339.     KSEVENT_EXTDEV_TRANSPORT_STATE_UPDATE,   // XPrt state change
  340.     KSEVENT_EXTDEV_NOTIFY_REMOVAL,           // Notify device removal
  341.     KSEVENT_EXTDEV_NOTIFY_MEDIUM_CHANGE,     // Notify medium (tape) is removed or added
  342.  
  343. } KSEVENT_DEVCMD;
  344.  
  345.  
  346. #endif // __EDevCTrl__
  347.