Source code of Windows XP (NT5)
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.

1701 lines
66 KiB

  1. //------------------------------------------------------------------------------
  2. // File: QEdit.idl
  3. //
  4. // Desc:
  5. //
  6. // Copyright (c) 1992 - 2000, Microsoft Corporation. All rights reserved.
  7. //------------------------------------------------------------------------------
  8. import "oaidl.idl";
  9. import "ocidl.idl";
  10. import "dxtrans.idl";
  11. import "amstream.idl";
  12. import "msxml.idl";
  13. //
  14. // forward declare
  15. //
  16. interface IAMTimelineGroup;
  17. interface IAMTimelineObj;
  18. interface IAMTimelineEffect;
  19. interface IAMTimelineTrans;
  20. interface IAMTimelineSrc;
  21. interface IAMTimeline;
  22. interface IAMErrorLog;
  23. interface ISampleGrabber;
  24. interface IPropertySetter;
  25. // used by DEXTER_VALUE's dwInterp var
  26. typedef enum
  27. {
  28. DEXTERF_JUMP,
  29. DEXTERF_INTERPOLATE
  30. } DEXTERF;
  31. // used to set values on the property setter
  32. typedef struct
  33. {
  34. BSTR Name;
  35. DISPID dispID;
  36. LONG nValues;
  37. } DEXTER_PARAM;
  38. // used to set values on the property setter
  39. typedef struct
  40. {
  41. VARIANT v;
  42. REFERENCE_TIME rt;
  43. DWORD dwInterp; // one of the DEXTERF_ flags
  44. } DEXTER_VALUE;
  45. // used by bMethod directly below
  46. enum
  47. {
  48. DEXTER_AUDIO_JUMP,
  49. DEXTER_AUDIO_INTERPOLATE
  50. };
  51. // used to set volumes on the mixer and mixer pins
  52. typedef struct
  53. {
  54. REFERENCE_TIME rtEnd; //end Time
  55. double dLevel; //end Volume Level
  56. BOOL bMethod; //jump or interpolate
  57. } DEXTER_AUDIO_VOLUMEENVELOPE ;
  58. // used in IAMTimeline::Get(Set)InsertMode
  59. enum
  60. {
  61. TIMELINE_INSERT_MODE_INSERT = 1,
  62. TIMELINE_INSERT_MODE_OVERLAY = 2
  63. };
  64. //
  65. // define what main 'things' can be put into the timeline tree.
  66. // these values are used quite a bit with timeline access
  67. // (bitmap mask flags)
  68. typedef enum
  69. {
  70. TIMELINE_MAJOR_TYPE_COMPOSITE = 1,
  71. TIMELINE_MAJOR_TYPE_TRACK = 2,
  72. TIMELINE_MAJOR_TYPE_SOURCE = 4,
  73. TIMELINE_MAJOR_TYPE_TRANSITION = 8,
  74. TIMELINE_MAJOR_TYPE_EFFECT = 16,
  75. TIMELINE_MAJOR_TYPE_GROUP = 128
  76. } TIMELINE_MAJOR_TYPE;
  77. // used in various IAMTimelineXXX "search" functions. Look in this
  78. // file for "SearchDirection" to see where it's used. I didn't want
  79. // to use an enum as an interface param type, so I used a long. Probably
  80. // silly of me.
  81. typedef enum
  82. {
  83. DEXTERF_BOUNDING = -1, // finds any source whose start <= Time and stop > Time
  84. DEXTERF_EXACTLY_AT = 0, // finds any source that starts exactly at Time
  85. DEXTERF_FORWARDS = 1 // finds any source that starts at or after Time
  86. } DEXTERF_TRACK_SEARCH_FLAGS;
  87. // right now, the media type in the group contains enough information about
  88. // how we want to recompress. This might not be enough information in the
  89. // future, so we define a structure we can get and set to the group.
  90. //
  91. typedef struct _SCompFmt0
  92. {
  93. long nFormatId;
  94. AM_MEDIA_TYPE MediaType;
  95. } SCompFmt0;
  96. // used in IAMTimelineSrc::Get(Set)StretchMode
  97. //
  98. enum
  99. {
  100. RESIZEF_STRETCH,
  101. RESIZEF_CROP,
  102. RESIZEF_PRESERVEASPECTRATIO,
  103. RESIZEF_PRESERVEASPECTRATIO_NOLETTERBOX
  104. };
  105. // used in IRenderEngine::SetDynamicReconnectLevel
  106. // (bitmap mask flags)
  107. enum
  108. {
  109. CONNECTF_DYNAMIC_NONE = 0x00000000,
  110. CONNECTF_DYNAMIC_SOURCES = 0x00000001,
  111. CONNECTF_DYNAMIC_EFFECTS = 0x00000002
  112. };
  113. // used in
  114. // IMediaLocator::FindMediaFile
  115. // IRenderEngine::SetSourceNameValidation
  116. // IAMTimeline::ValidateSourceNames
  117. // (bitmap mask flags)
  118. enum
  119. {
  120. SFN_VALIDATEF_CHECK = 0x00000001, // do a check. Without this set, no check will be done.
  121. SFN_VALIDATEF_POPUP = 0x00000002, // should UI popup show if not found
  122. SFN_VALIDATEF_TELLME = 0x00000004, // warn user about replaced files
  123. SFN_VALIDATEF_REPLACE = 0x00000008, // should it replace names in the tldb if found
  124. SFN_VALIDATEF_USELOCAL = 0x000000010, // use local media preferrably over networked media
  125. SFN_VALIDATEF_NOFIND = 0x000000020, // never find filenames, always use UI popup to find.,
  126. // when used, _POPUP must be used as well
  127. SFN_VALIDATEF_IGNOREMUTED = 0x000000040, // ignore muted files in the tldb
  128. SFN_VALIDATEF_END
  129. };
  130. // key transitions types
  131. enum
  132. {
  133. DXTKEY_RGB,
  134. DXTKEY_NONRED,
  135. DXTKEY_LUMINANCE,
  136. DXTKEY_ALPHA,
  137. DXTKEY_HUE
  138. };
  139. ////////////////////////////////////////////////////////////////
  140. ////////////////////////////////////////////////////////////////
  141. // New Property setting Interfaces
  142. ////////////////////////////////////////////////////////////////
  143. ////////////////////////////////////////////////////////////////
  144. // interface for objects which can save/load IDispatch-able properties
  145. [
  146. object,
  147. uuid(AE9472BD-B0C3-11D2-8D24-00A0C9441E20),
  148. helpstring("IPropertySetter Interface"),
  149. pointer_default(unique)
  150. ]
  151. interface IPropertySetter : IUnknown // IPersist?
  152. {
  153. // for loading and saving through XML
  154. HRESULT LoadXML([in] IUnknown * pxml);
  155. // !!! doesn't work HRESULT LoadXML([in] IXMLElement * pxml);
  156. HRESULT PrintXML([out] char *pszXML, [in] int cbXML, [out] int *pcbPrinted,[in] int indent);
  157. // for cloning a portion of the props when splitting the object
  158. //AUTOMATE
  159. HRESULT CloneProps([out] IPropertySetter **ppSetter,
  160. [in] REFERENCE_TIME rtStart,
  161. [in] REFERENCE_TIME rtStop);
  162. // for loading and saving programmatically
  163. // caller must call this in pre-sorted order, this time must be > all
  164. // previous times
  165. //AUTOMATE
  166. HRESULT AddProp([in] DEXTER_PARAM Param,
  167. [in] DEXTER_VALUE *paValue);
  168. //AUTOMATE
  169. HRESULT GetProps([out] LONG *pcParams,
  170. [out] DEXTER_PARAM **paParam,
  171. [out] DEXTER_VALUE **paValue);
  172. // after calling GetProps, you must call FreeProps to free resources
  173. //AUTOMATE
  174. HRESULT FreeProps([in] LONG cParams,
  175. [in] DEXTER_PARAM *paParam,
  176. [in] DEXTER_VALUE *paValue);
  177. // to empty to property setter, so you can start over again
  178. HRESULT ClearProps();
  179. // for persisting
  180. HRESULT SaveToBlob([out] LONG *pcSize, [out] BYTE **ppb);
  181. HRESULT LoadFromBlob([in] LONG cSize, [in] BYTE *pb);
  182. // to program the object that supports IDispatch with the props
  183. // call with rtNow == -1 to set Static Props when your object instantiates
  184. // errors will be logged, if a log is provided
  185. //AUTOMATE
  186. HRESULT SetProps([in] IUnknown *pTarget,
  187. [in] REFERENCE_TIME rtNow);
  188. // unicode version
  189. HRESULT PrintXMLW([out] WCHAR *pszXML, [in] int cchXML, [out] int *pcchPrinted,[in] int indent);
  190. };
  191. // supported by our DxtCompositor class, this allows us to draw whatever comes in
  192. // upon only a portion of the output bitmap
  193. [
  194. object,
  195. uuid(BB44391E-6ABD-422f-9E2E-385C9DFF51FC),
  196. dual,
  197. helpstring("IDxtCompositor Interface"),
  198. pointer_default(unique)
  199. ]
  200. interface IDxtCompositor : IDXEffect
  201. {
  202. [propget, id(1), helpstring("property OffsetX")] HRESULT OffsetX([out, retval] long *pVal);
  203. [propput, id(1), helpstring("property OffsetX")] HRESULT OffsetX([in] long newVal);
  204. [propget, id(2), helpstring("property OffsetY")] HRESULT OffsetY([out, retval] long *pVal);
  205. [propput, id(2), helpstring("property OffsetY")] HRESULT OffsetY([in] long newVal);
  206. [propget, id(3), helpstring("property Width")] HRESULT Width([out, retval] long *pVal);
  207. [propput, id(3), helpstring("property Width")] HRESULT Width([in] long newVal);
  208. [propget, id(4), helpstring("property Height")] HRESULT Height([out, retval] long *pVal);
  209. [propput, id(4), helpstring("property Height")] HRESULT Height([in] long newVal);
  210. [propget, id(5), helpstring("property SrcOffsetX")] HRESULT SrcOffsetX([out, retval] long *pVal);
  211. [propput, id(5), helpstring("property SrcOffsetX")] HRESULT SrcOffsetX([in] long newVal);
  212. [propget, id(6), helpstring("property SrcOffsetY")] HRESULT SrcOffsetY([out, retval] long *pVal);
  213. [propput, id(6), helpstring("property SrcOffsetY")] HRESULT SrcOffsetY([in] long newVal);
  214. [propget, id(7), helpstring("property SrcWidth")] HRESULT SrcWidth([out, retval] long *pVal);
  215. [propput, id(7), helpstring("property SrcWidth")] HRESULT SrcWidth([in] long newVal);
  216. [propget, id(8), helpstring("property SrcHeight")] HRESULT SrcHeight([out, retval] long *pVal);
  217. [propput, id(8), helpstring("property SrcHeight")] HRESULT SrcHeight([in] long newVal);
  218. };
  219. [
  220. object,
  221. uuid(4EE9EAD9-DA4D-43d0-9383-06B90C08B12B),
  222. dual,
  223. helpstring("IDxtAlphaSetter Interface"),
  224. pointer_default(unique)
  225. ]
  226. interface IDxtAlphaSetter : IDXEffect
  227. {
  228. // set the alpha to a particular number
  229. [propget, id(1), helpstring("property Alpha")] HRESULT Alpha([out, retval] long *pVal);
  230. [propput, id(1), helpstring("property Alpha")] HRESULT Alpha([in] long newVal);
  231. // set the alpha to a percentage of it's full value
  232. [propget, id(2), helpstring("property AlphaRamp")] HRESULT AlphaRamp([out, retval] double *pVal);
  233. [propput, id(2), helpstring("property AlphaRamp")] HRESULT AlphaRamp([in] double newVal);
  234. };
  235. // Supported by our JPEG DXT, that can do any wipe based on a bitmap
  236. //
  237. [
  238. object,
  239. uuid(DE75D011-7A65-11D2-8CEA-00A0C9441E20),
  240. dual,
  241. helpstring("IDxtJpeg Interface"),
  242. pointer_default(unique)
  243. ]
  244. interface IDxtJpeg : IDXEffect
  245. {
  246. [propget, id(1), helpstring("property MaskNum")] HRESULT MaskNum([out, retval] long *);
  247. [propput, id(1), helpstring("property MaskNum")] HRESULT MaskNum([in] long);
  248. [propget, id(2), helpstring("property MaskName")] HRESULT MaskName([out, retval] BSTR *pVal);
  249. [propput, id(2), helpstring("property MaskName")] HRESULT MaskName([in] BSTR newVal);
  250. [propget, id(3), helpstring("property ScaleX")] HRESULT ScaleX([out, retval] double *);
  251. [propput, id(3), helpstring("property ScaleX")] HRESULT ScaleX([in] double);
  252. [propget, id(4), helpstring("property ScaleY")] HRESULT ScaleY([out, retval] double *);
  253. [propput, id(4), helpstring("property ScaleY")] HRESULT ScaleY([in] double);
  254. [propget, id(5), helpstring("property OffsetX")] HRESULT OffsetX([out, retval] long *);
  255. [propput, id(5), helpstring("property OffsetX")] HRESULT OffsetX([in] long);
  256. [propget, id(6), helpstring("property OffsetY")] HRESULT OffsetY([out, retval] long *);
  257. [propput, id(6), helpstring("property OffsetY")] HRESULT OffsetY([in] long);
  258. [propget, id(7), helpstring("property ReplicateX")] HRESULT ReplicateX([out, retval] long *pVal);
  259. [propput, id(7), helpstring("property ReplicateX")] HRESULT ReplicateX([in] long newVal);
  260. [propget, id(8), helpstring("property ReplicateY")] HRESULT ReplicateY([out, retval] long *pVal);
  261. [propput, id(8), helpstring("property ReplicateY")] HRESULT ReplicateY([in] long newVal);
  262. [propget, id(9), helpstring("property BorderColor")] HRESULT BorderColor([out, retval] long *pVal);
  263. [propput, id(9), helpstring("property BorderColor")] HRESULT BorderColor([in] long newVal);
  264. [propget, id(10), helpstring("property BorderWidth")] HRESULT BorderWidth([out, retval] long *pVal);
  265. [propput, id(10), helpstring("property BorderWidth")] HRESULT BorderWidth([in] long newVal);
  266. [propget, id(11), helpstring("property BorderSoftness")] HRESULT BorderSoftness([out, retval] long *pVal);
  267. [propput, id(11), helpstring("property BorderSoftness")] HRESULT BorderSoftness([in] long newVal);
  268. HRESULT ApplyChanges();
  269. HRESULT LoadDefSettings();
  270. };
  271. // key
  272. [
  273. object,
  274. uuid(3255de56-38fb-4901-b980-94b438010d7b),
  275. dual,
  276. helpstring("IDxtKey Interface"),
  277. pointer_default(unique)
  278. ]
  279. interface IDxtKey : IDXEffect
  280. {
  281. [propget, id(1), helpstring("property KeyType")] HRESULT KeyType([out, retval] int *);
  282. [propput, id(1), helpstring("property Keytype")] HRESULT KeyType([in] int);
  283. [propget, id(2), helpstring("property Hue")] HRESULT Hue([out, retval] int *);
  284. [propput, id(2), helpstring("property Hue")] HRESULT Hue([in] int );
  285. [propget, id(3), helpstring("property Luminance")] HRESULT Luminance([out, retval] int *);
  286. [propput, id(3), helpstring("property Luminance")] HRESULT Luminance([in] int );
  287. [propget, id(4), helpstring("property RGB")] HRESULT RGB([out, retval] DWORD *);
  288. [propput, id(4), helpstring("property RGB")] HRESULT RGB([in] DWORD );
  289. [propget, id(5), helpstring("property Similarity")] HRESULT Similarity([out,retval] int * );
  290. [propput, id(5), helpstring("property Similarity")] HRESULT Similarity([in] int );
  291. [propget, id(6), helpstring("property Invert")] HRESULT Invert([out, retval] BOOL *);
  292. [propput, id(6), helpstring("property Invert")] HRESULT Invert([in] BOOL);
  293. };
  294. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  295. // This little COM interface will look 'around' for the closest
  296. // path match for a given file. If the file already exists, then
  297. // this interface should hardly do anything. If it's not found,
  298. // it will go look for it and if successful, return S_FALSE. If it
  299. // cannot find the file, it will call the hook, if set and return
  300. // it's return code. if the hook is not set, it is in a type of
  301. // error condition. The Dexter-provided MediaLocator will bring up
  302. // a dialog box asking you to browse for your file. Other COM
  303. // objects may do something else.
  304. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  305. [
  306. object,
  307. uuid(288581E0-66CE-11d2-918F-00C0DF10D434),
  308. odl,
  309. helpstring("IMediaLocator Interface"),
  310. pointer_default(unique)
  311. ]
  312. interface IMediaLocator : IUnknown
  313. {
  314. // same flags as used by IRenderEngine's SetSourceNameValidation
  315. HRESULT FindMediaFile( BSTR Input, BSTR FilterString, BSTR * pOutput, long Flags );
  316. HRESULT AddFoundLocation( BSTR DirectoryName );
  317. };
  318. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  319. // This object provides caching of duration and stream type
  320. // information for files that would produce a directshow source
  321. // filter. It takes too long to figure this out in DShow right
  322. // now, so this is one way around it. The way it works is that
  323. // you first fill out the Filename property, then call and
  324. // ask how many streams it has, or, set the CurrentStream prop
  325. // and then ask for the per-stream properties, StreamType or
  326. // StreamLength. They both reference the CurrentStream prop that
  327. // you set. I also allowed you (for convenience) to just give
  328. // it a IUnknown Filter that represents an IBaseFilter source
  329. // filter that is NOT currently in a graph. It will use that
  330. // instead. When using this, though, you will not get cached
  331. // values. The cached values are stored in the system's ini file
  332. // called DCBC2A70-70D8-4459-BFFA-E0D61DEA3FDF.INI. Nice, huh? :-)
  333. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  334. [
  335. object,
  336. uuid(65BD0710-24D2-4ff7-9324-ED2E5D3ABAFA),
  337. odl,
  338. helpstring("IMediaDet Interface"),
  339. pointer_default(unique)
  340. ]
  341. interface IMediaDet : IUnknown
  342. {
  343. [propget, id(1), helpstring("property Filter")] HRESULT Filter([out, retval] IUnknown* *pVal);
  344. [propput, id(1), helpstring("property Filter")] HRESULT Filter([in] IUnknown* newVal);
  345. [propget, id(2), helpstring("property OutputStreams")] HRESULT OutputStreams([out, retval] long *pVal);
  346. [propget, id(3), helpstring("property CurrentStream")] HRESULT CurrentStream([out, retval] long *pVal);
  347. [propput, id(3), helpstring("property CurrentStream")] HRESULT CurrentStream([in] long newVal);
  348. [propget, id(4), helpstring("property StreamType")] HRESULT StreamType([out, retval] GUID *pVal);
  349. [propget, id(5), helpstring("property StreamTypeB")] HRESULT StreamTypeB([out, retval] BSTR *pVal);
  350. [propget, id(6), helpstring("property StreamLength")] HRESULT StreamLength([out, retval] double *pVal);
  351. [propget, id(7), helpstring("property Filename")] HRESULT Filename([out, retval] BSTR *pVal);
  352. [propput, id(7), helpstring("property Filename")] HRESULT Filename([in] BSTR newVal);
  353. [id(8), helpstring("method GetBitmapBits")] HRESULT GetBitmapBits(double StreamTime, long * pBufferSize, char * pBuffer, long Width, long Height);
  354. [id(9), helpstring("method WriteBitmapBits")] HRESULT WriteBitmapBits(double StreamTime, long Width, long Height, BSTR Filename );
  355. [propget, id(10), helpstring("property StreamMediaType")] HRESULT StreamMediaType([out, retval] AM_MEDIA_TYPE * pVal);
  356. [id(11), helpstring("method GetSampleGrabber")] HRESULT GetSampleGrabber( [out] ISampleGrabber ** ppVal );
  357. [propget, id(12), helpstring("property FrameRate")] HRESULT FrameRate([out, retval] double *pVal);
  358. [id(13), helpstring("method EnterBitmapGrabMode")] HRESULT EnterBitmapGrabMode( double SeekTime );
  359. };
  360. // useless interface, don't use it!
  361. [
  362. object,
  363. uuid(AE9472BE-B0C3-11D2-8D24-00A0C9441E20),
  364. odl,
  365. helpstring("IGrfCache Interface"),
  366. pointer_default(unique)
  367. ]
  368. interface IGrfCache : IDispatch
  369. {
  370. [id(1), helpstring("method AddFilter")]
  371. HRESULT AddFilter(
  372. IGrfCache * ChainedCache,
  373. LONGLONG ID,
  374. const IBaseFilter * pFilter,
  375. LPCWSTR pName);
  376. [id(2), helpstring("method ConnectPins")]
  377. HRESULT ConnectPins(
  378. IGrfCache * ChainedCache,
  379. LONGLONG PinID1,
  380. const IPin * pPin1,
  381. LONGLONG PinID2,
  382. const IPin * pPin2);
  383. [id(3), helpstring("method SetGraph")]
  384. HRESULT SetGraph(const IGraphBuilder * pGraph);
  385. [id(4), helpstring("method DoConnectionsNow")]
  386. HRESULT DoConnectionsNow();
  387. };
  388. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  389. // The RenderEngin builds a graph from the timeline and gives
  390. // you some simple positional commands.
  391. // explained methods:
  392. // SetTimelineObject - tell the render engine who to parse
  393. // ConnectEverything - build up a graph based on the timeline
  394. // ScrapIt - throw away graph and everything
  395. // GetFilterGraph - get the graph that's built up, if any
  396. // SetFilterGraph - allows you to preset the graph that's built up.
  397. // cannot call this if there already is a graph.
  398. // !!! the following methods are unused/not implemented
  399. // SetInterestRange - discard COM objects and memory outside of this
  400. // range, if possible. Used for scrubbing on a long timeline and
  401. // freeing up resources
  402. // SetRenderRange - pretend like a portion of the timeline IS the timeline
  403. // and don't connect anything in the graph outside of that range.
  404. // Commit - allocate what's necessary and get prepared to run
  405. // Decommit - free anything possible
  406. // GetCaps - find out some info about the render engine
  407. // DoSmartRecompression - connect compressed sources if
  408. // possible
  409. // in the graph, this will RenderPin( ) on every switcher
  410. // rendering pin.
  411. // SetSourceNameValidation - allows you to set some flags which
  412. // determine how source files are found, if they need to be found.
  413. // FilterString is a list of extensions to find for the media
  414. // files (see OPENFILENAME filters)
  415. // pOverride is a media locator you would like to use instead
  416. // of the built in one
  417. // The flags are defined in the struct immediately below.
  418. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  419. [
  420. object,
  421. uuid(6BEE3A81-66C9-11d2-918F-00C0DF10D434),
  422. odl,
  423. helpstring("IRenderEngine Interface"),
  424. pointer_default(unique)
  425. ]
  426. interface IRenderEngine : IUnknown
  427. {
  428. HRESULT SetTimelineObject( IAMTimeline * pTimeline );
  429. HRESULT GetTimelineObject( [out] IAMTimeline ** ppTimeline );
  430. HRESULT GetFilterGraph( [out] IGraphBuilder ** ppFG );
  431. HRESULT SetFilterGraph( IGraphBuilder * pFG );
  432. HRESULT SetInterestRange( REFERENCE_TIME Start, REFERENCE_TIME Stop );
  433. HRESULT SetInterestRange2( double Start, double Stop );
  434. HRESULT SetRenderRange( REFERENCE_TIME Start, REFERENCE_TIME Stop );
  435. HRESULT SetRenderRange2( double Start, double Stop );
  436. HRESULT GetGroupOutputPin( long Group, [out] IPin ** ppRenderPin );
  437. HRESULT ScrapIt( );
  438. HRESULT RenderOutputPins( );
  439. HRESULT GetVendorString( [out,retval] BSTR * pVendorID );
  440. HRESULT ConnectFrontEnd( );
  441. HRESULT SetSourceConnectCallback( IGrfCache * pCallback );
  442. HRESULT SetDynamicReconnectLevel( long Level );
  443. HRESULT DoSmartRecompression( );
  444. HRESULT UseInSmartRecompressionGraph( );
  445. HRESULT SetSourceNameValidation( BSTR FilterString, IMediaLocator * pOverride, LONG Flags );
  446. // not implemented yet
  447. HRESULT Commit( );
  448. HRESULT Decommit( );
  449. HRESULT GetCaps( long Index, long * pReturn );
  450. };
  451. // used for the smart render engine when it needs to find a compressor
  452. [
  453. object,
  454. uuid(F03FA8DE-879A-4d59-9B2C-26BB1CF83461),
  455. odl,
  456. helpstring("IFindCompressorCB Interface"),
  457. pointer_default(unique)
  458. ]
  459. interface IFindCompressorCB : IUnknown
  460. {
  461. HRESULT GetCompressor( AM_MEDIA_TYPE * pType, AM_MEDIA_TYPE * pCompType, [out] IBaseFilter ** ppFilter );
  462. }
  463. [
  464. object,
  465. uuid(F03FA8CE-879A-4d59-9B2C-26BB1CF83461),
  466. odl,
  467. helpstring("ISmartRenderEngine Interface"),
  468. pointer_default(unique)
  469. ]
  470. interface ISmartRenderEngine : IUnknown
  471. {
  472. HRESULT SetGroupCompressor( long Group, IBaseFilter * pCompressor );
  473. HRESULT GetGroupCompressor( long Group, IBaseFilter ** pCompressor );
  474. HRESULT SetFindCompressorCB( IFindCompressorCB * pCallback );
  475. }
  476. ////////////////////////////////////////////////////////////////
  477. ////////////////////////////////////////////////////////////////
  478. // TIMELINE TIMELINE TIMELINE TIMELINE TIMELINE TIMELINE
  479. ////////////////////////////////////////////////////////////////
  480. ////////////////////////////////////////////////////////////////
  481. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  482. // Every object on the timeline supports at least this interface.
  483. // explained methods:
  484. // Get/SetStartStop - the timeline times at which this object is
  485. // active. Groups and Tracks have start times of zero.
  486. // FixTimes - used by the render engine. Rounds the input times
  487. // to the nearest FPS of the parent Group, for use in setting
  488. // up the big switch.
  489. // GetSubObject - get the sub-object which is associated with this
  490. // timeline object. Each timeline object can carry around a
  491. // pointer to 'something else'. For our Render Engine, this is
  492. // a pointer to a filter that gets put into a graph.
  493. // NOTE: Getting the subobject will FORCE it to load if it's possible
  494. // to force this. If you don't want it to do this, don't call
  495. // this function.
  496. // SetSubObject - see GetSubObject
  497. // SetSubObjectGUID - instead of giving the node a pointer, you can
  498. // instead give it a GUID and see if this works instead. The
  499. // sub-object will attempt to be instantiated when 'necessary'
  500. // which is really when it's asked for with GetSubObject./
  501. // !!! a better way to do this perhaps?
  502. // GetSubObjectLoaded - ask if the sub-object pointer is set
  503. // Get/SetTimelineType - return the major type which is stored here,
  504. // used by the API user and the render engine.
  505. // Get/SetTimelineSubType - see above
  506. // Get/SetUserID - get and set a number, any number
  507. // GetGenID - every created object has a unique number to it. Used
  508. // by the render engine.
  509. // Get/SetUserName - a storable name, for users of the API
  510. // Get/SetPropertySetter - the object that will set properties for this
  511. // object (it will support IPropertySetter and it is created by
  512. // CPropertySetter)
  513. // Get/SetUserData - gets the persistant data used by the user of
  514. // the API.
  515. // Get/SetMuted - set whether this object should be active or not.
  516. // Setting a parent of other objects off also turns off the
  517. // sub-objects.
  518. // Get/SetLocked - set whether you can edit this object or not.
  519. // Note: the timeline doesn't enforce this, it just stores
  520. // a value for convenience.
  521. // Get/SetDirtyRange -
  522. // RemoveAll - remove this object, and if in the tree already, all it's
  523. // sub objects, including children
  524. // Remove - remove this object, and if in the tree already, all it's
  525. // sub objects, but not kids
  526. // GetTimelineNoRef - called internally by the timeline.
  527. // GetGroupIBelongTo - called internally by the timeline.
  528. // GetEmbedDepth - find out how many tracks we are a part of
  529. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  530. [
  531. object,
  532. local,
  533. uuid(78530B77-61F9-11D2-8CAD-00A024580902),
  534. odl,
  535. helpstring("IAMTimelineObj Interface"),
  536. pointer_default(unique)
  537. ]
  538. interface IAMTimelineObj : IUnknown
  539. {
  540. [helpstring("method GetStartStop")]
  541. HRESULT GetStartStop(REFERENCE_TIME * pStart, REFERENCE_TIME * pStop);
  542. [helpstring("method GetStartStop2")]
  543. HRESULT GetStartStop2(REFTIME * pStart, REFTIME * pStop);
  544. [helpstring("method FixTimes")]
  545. HRESULT FixTimes(REFERENCE_TIME * pStart, REFERENCE_TIME * pStop);
  546. [helpstring("method FixTimes2")]
  547. HRESULT FixTimes2(REFTIME * pStart, REFTIME * pStop);
  548. [helpstring("method SetStartStop")]
  549. HRESULT SetStartStop(REFERENCE_TIME Start, REFERENCE_TIME Stop);
  550. [helpstring("method SetStartStop2")]
  551. HRESULT SetStartStop2(REFTIME Start, REFTIME Stop);
  552. [helpstring("method GetPropertySetter")]
  553. HRESULT GetPropertySetter([out,retval] IPropertySetter* *pVal);
  554. [helpstring("method SetPropertySetter")]
  555. HRESULT SetPropertySetter(IPropertySetter* newVal);
  556. [helpstring("method GetSubObject")]
  557. HRESULT GetSubObject([out,retval] IUnknown* *pVal);
  558. [helpstring("method SetSubObject")]
  559. HRESULT SetSubObject(IUnknown* newVal);
  560. [helpstring("method SetSubObjectGUID")]
  561. HRESULT SetSubObjectGUID(GUID newVal);
  562. [helpstring("method SetSubObjectGUIDByBSTR")]
  563. HRESULT SetSubObjectGUIDB(BSTR newVal);
  564. [helpstring("method GetSubObjectGUID")]
  565. HRESULT GetSubObjectGUID(GUID * pVal);
  566. [helpstring("method GetSubObjectGUIDByBSTR")]
  567. HRESULT GetSubObjectGUIDB([out,retval] BSTR * pVal);
  568. [helpstring("method GetSubObjectLoaded")]
  569. HRESULT GetSubObjectLoaded(BOOL * pVal);
  570. [helpstring("method GetTimelineType")]
  571. HRESULT GetTimelineType(TIMELINE_MAJOR_TYPE * pVal);
  572. [helpstring("method SetTimelineType")]
  573. HRESULT SetTimelineType(TIMELINE_MAJOR_TYPE newVal);
  574. [helpstring("method GetUserID")]
  575. HRESULT GetUserID(long * pVal);
  576. [helpstring("method SetUserID")]
  577. HRESULT SetUserID(long newVal);
  578. [helpstring("method GetGenID")]
  579. HRESULT GetGenID( long * pVal );
  580. [helpstring("method GetUserName")]
  581. HRESULT GetUserName([out,retval] BSTR * pVal);
  582. [helpstring("method SetUserName")]
  583. HRESULT SetUserName(BSTR newVal);
  584. [helpstring("method GetUserData")]
  585. HRESULT GetUserData(BYTE * pData, long * pSize);
  586. [helpstring("method SetUserData")]
  587. HRESULT SetUserData(BYTE * pData, long Size);
  588. [helpstring("method GetMuted")]
  589. HRESULT GetMuted(BOOL * pVal);
  590. [helpstring("method SetMuted")]
  591. HRESULT SetMuted(BOOL newVal);
  592. [helpstring("method GetLocked")]
  593. HRESULT GetLocked(BOOL * pVal);
  594. [helpstring("method SetLocked")]
  595. HRESULT SetLocked(BOOL newVal);
  596. [helpstring("method GetDirtyRange")]
  597. HRESULT GetDirtyRange(REFERENCE_TIME * pStart, REFERENCE_TIME * pStop);
  598. [helpstring("method GetDirtyRange")]
  599. HRESULT GetDirtyRange2(REFTIME * pStart, REFTIME * pStop);
  600. [helpstring("method SetDirtyRange")]
  601. HRESULT SetDirtyRange(REFERENCE_TIME Start, REFERENCE_TIME Stop);
  602. [helpstring("method SetDirtyRange")]
  603. HRESULT SetDirtyRange2(REFTIME Start, REFTIME Stop);
  604. [helpstring("method ClearDirty")]
  605. HRESULT ClearDirty( );
  606. [helpstring("method Remove")]
  607. HRESULT Remove();
  608. [helpstring("method RemoveAll")]
  609. HRESULT RemoveAll();
  610. HRESULT GetTimelineNoRef( IAMTimeline ** ppResult );
  611. HRESULT GetGroupIBelongTo( [out] IAMTimelineGroup ** ppGroup );
  612. HRESULT GetEmbedDepth( long * pVal );
  613. };
  614. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  615. // Any object on the timeline that can have an effect put on it
  616. // implements this interface. This includes sources, tracks, and
  617. // compositions.
  618. // explained methods:
  619. // EffectInsBefore - insert an effect at the given priority onto
  620. // this object. The effect's times will be clipped within
  621. // this object's bounds. Use -1 to specify 'at the end' for priority.
  622. // You cannot have two effects at the same priority.
  623. // EffectSwapPriorities - swaparoo two effects. Makes undo easier to
  624. // implement.
  625. // EffectGetCount - get how many effects are applied to this object.
  626. // GetEffect - get the nth effect applied to this object
  627. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  628. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  629. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  630. [
  631. object,
  632. uuid(EAE58537-622E-11d2-8CAD-00A024580902),
  633. odl,
  634. helpstring("IAMTimelineEffectable Interface"),
  635. pointer_default(unique)
  636. ]
  637. interface IAMTimelineEffectable : IUnknown
  638. {
  639. [helpstring("method EffectInsBefore")]
  640. HRESULT EffectInsBefore(IAMTimelineObj * pFX, long priority);
  641. [helpstring("method EffectSwapPriorities")]
  642. HRESULT EffectSwapPriorities(long PriorityA, long PriorityB);
  643. [helpstring("method EffectGetCount")]
  644. HRESULT EffectGetCount(long * pCount);
  645. [helpstring("method GetEffect")]
  646. HRESULT GetEffect([out] IAMTimelineObj ** ppFx, long Which);
  647. };
  648. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  649. // Any effect on the timeline will support at least this interface.
  650. // NOTE: The Start/Stop times on this object are RELATIVE to their
  651. // parent's, as are all start/stop times.
  652. // explained methods:
  653. // EffectGetPriority - finds out this effect's priority related to the others.
  654. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  655. [
  656. object,
  657. uuid(BCE0C264-622D-11d2-8CAD-00A024580902),
  658. odl,
  659. helpstring("IAMTimelineEffect Interface"),
  660. pointer_default(unique)
  661. ]
  662. interface IAMTimelineEffect : IUnknown
  663. {
  664. [helpstring("method EffectGetPriority")]
  665. HRESULT EffectGetPriority(long * pVal);
  666. };
  667. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  668. // Any object on the timeline that can have a transition put on it
  669. // implements this interface
  670. // explained methods:
  671. // TransAdd - add a transition on this object. Multiple trans's on
  672. // the same object cannot overlap in time. Transitions' times
  673. // must lie within the bounds of their parent.
  674. // TransGetCount - get how many transitions are applied to this
  675. // object.
  676. // GetNextTrans - given a time, get the next transition that happens
  677. // on this object after that time. On exit, the input time is
  678. // set to the start time of the transition.
  679. // GetTransAtTime - find a transition forwards or backwards from
  680. // a given spot. See DEXTERF_TRACK_SEARCH_FLAGS enum.
  681. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  682. [
  683. object,
  684. uuid(378FA386-622E-11d2-8CAD-00A024580902),
  685. odl,
  686. helpstring("IAMTimelineTransable Interface"),
  687. pointer_default(unique)
  688. ]
  689. interface IAMTimelineTransable : IUnknown
  690. {
  691. [helpstring("method TransAdd")]
  692. HRESULT TransAdd(IAMTimelineObj * pTrans);
  693. [helpstring("method TransGetCount")]
  694. HRESULT TransGetCount(long * pCount);
  695. [helpstring("method GetNextTrans")]
  696. HRESULT GetNextTrans([out] IAMTimelineObj ** ppTrans, REFERENCE_TIME * pInOut);
  697. [helpstring("method GetNextTrans2")]
  698. HRESULT GetNextTrans2([out] IAMTimelineObj ** ppTrans, REFTIME * pInOut);
  699. [helpstring("method GetTransAtTime")]
  700. HRESULT GetTransAtTime(
  701. [out] IAMTimelineObj ** ppObj,
  702. REFERENCE_TIME Time,
  703. long SearchDirection );
  704. [helpstring("method GetTransAtTime2")]
  705. HRESULT GetTransAtTime2([out] IAMTimelineObj ** ppObj, REFTIME Time, long SearchDirection );
  706. };
  707. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  708. // Any object on the timeline that can be split into two will
  709. // implement this interface. Namely, source, effects, and transitions
  710. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  711. [
  712. object,
  713. uuid(A0F840A0-D590-11d2-8D55-00A0C9441E20),
  714. odl,
  715. helpstring("IAMTimelineSplittable Interface"),
  716. pointer_default(unique)
  717. ]
  718. interface IAMTimelineSplittable : IUnknown
  719. {
  720. HRESULT SplitAt(REFERENCE_TIME Time);
  721. HRESULT SplitAt2(REFTIME Time);
  722. };
  723. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  724. // Any trans on the timeline will support at least this interface.
  725. // NOTE: The Start/Stop times on this object are RELATIVE to their
  726. // parent's, as are all start/stop times.
  727. // explained methods:
  728. // GetCutPoint - get where this transition should cut from A to B
  729. // if the transition were not applied.
  730. // GetA2B - get if this transition is to go from A->B or B->A.
  731. // GetBackwards - get if this transition should run backwards.
  732. // GetCutsOnly - force no transition, force doing a cut
  733. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  734. [
  735. object,
  736. uuid(BCE0C265-622D-11d2-8CAD-00A024580902),
  737. odl,
  738. helpstring("IAMTimelineTrans Interface"),
  739. pointer_default(unique)
  740. ]
  741. interface IAMTimelineTrans : IUnknown
  742. {
  743. [helpstring("method GetCutPoint")]
  744. HRESULT GetCutPoint(REFERENCE_TIME * pTLTime);
  745. [helpstring("method GetCutPoint2")]
  746. HRESULT GetCutPoint2(REFTIME * pTLTime);
  747. [helpstring("method SetCutPoint")]
  748. HRESULT SetCutPoint(REFERENCE_TIME TLTime);
  749. [helpstring("method SetCutPoint2")]
  750. HRESULT SetCutPoint2(REFTIME TLTime);
  751. [helpstring("method GetSwapInputs")]
  752. HRESULT GetSwapInputs( BOOL * pVal );
  753. [helpstring("method SetSwapInputs")]
  754. HRESULT SetSwapInputs( BOOL pVal );
  755. [helpstring("method GetCutsOnly")]
  756. HRESULT GetCutsOnly( BOOL * pVal );
  757. [helpstring("method SetCutsOnly")]
  758. HRESULT SetCutsOnly( BOOL pVal );
  759. };
  760. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  761. // Sources represent any source media object on the timeline.
  762. // They extend an IAMTimelineObj to include media start and stop
  763. // times, a media name (which could represent darned near anything),
  764. // and a StreamNumber, which defines which stream out of a potential
  765. // many this stream represents from a source clip.
  766. // explained methods:
  767. // ModifyStopTime - like calling SetStartStop, but this method just
  768. // adjusts the tail end of the clip.
  769. // FixMediaTimes - called by the render engine to round times to
  770. // this source clip's parent group's FPS.
  771. // SpliceWithNext - if the next clip after this is the same source
  772. // and this's stop time matches next's start time, the two
  773. // will be joined.
  774. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  775. [
  776. object,
  777. uuid(78530B79-61F9-11D2-8CAD-00A024580902),
  778. odl,
  779. helpstring("IAMTimelineSrc Interface"),
  780. pointer_default(unique)
  781. ]
  782. interface IAMTimelineSrc : IUnknown
  783. {
  784. [helpstring("method GetMediaTimes")]
  785. HRESULT GetMediaTimes(REFERENCE_TIME * pStart, REFERENCE_TIME * pStop);
  786. [helpstring("method GetMediaTimes2")]
  787. HRESULT GetMediaTimes2(REFTIME * pStart, REFTIME * pStop);
  788. [helpstring("method ModifyStopTime")]
  789. HRESULT ModifyStopTime(REFERENCE_TIME Stop);
  790. [helpstring("method ModifyStopTime2")]
  791. HRESULT ModifyStopTime2(REFTIME Stop);
  792. [helpstring("method FixMediaTimes")]
  793. HRESULT FixMediaTimes(REFERENCE_TIME * pStart, REFERENCE_TIME * pStop);
  794. [helpstring("method FixMediaTimes2")]
  795. HRESULT FixMediaTimes2(REFTIME * pStart, REFTIME * pStop);
  796. [helpstring("method SetMediaTimes")]
  797. HRESULT SetMediaTimes(REFERENCE_TIME Start, REFERENCE_TIME Stop);
  798. [helpstring("method SetMediaTimes2")]
  799. HRESULT SetMediaTimes2(REFTIME Start, REFTIME Stop);
  800. [helpstring("method SetMediaLength")]
  801. HRESULT SetMediaLength(REFERENCE_TIME Length);
  802. [helpstring("method SetMediaLength2")]
  803. HRESULT SetMediaLength2(REFTIME Length);
  804. [helpstring("method GetMediaLength")]
  805. HRESULT GetMediaLength(REFERENCE_TIME * pLength);
  806. [helpstring("method GetMediaLength2")]
  807. HRESULT GetMediaLength2(REFTIME * pLength);
  808. [helpstring("method GetMediaName")]
  809. HRESULT GetMediaName([out,retval] BSTR * pVal);
  810. [helpstring("method SetMediaName")]
  811. HRESULT SetMediaName(BSTR newVal);
  812. [helpstring("method SpliceWithNext")]
  813. HRESULT SpliceWithNext(IAMTimelineObj * pNext);
  814. [helpstring("method GetStreamNumber")]
  815. HRESULT GetStreamNumber(long * pVal);
  816. [helpstring("method SetStreamNumber")]
  817. HRESULT SetStreamNumber(long Val);
  818. HRESULT IsNormalRate( BOOL * pVal );
  819. // If a source can't figure out its frames per second, this number
  820. // will be used (eg: Dib sequences). AVI, MPEG, etc. will not need this
  821. // Use 0 fps to prevent a filename like "ski4.jpg" from using a dib seq
  822. [helpstring("method GetDefaultFPS")]
  823. HRESULT GetDefaultFPS(double * pFPS);
  824. [helpstring("method SetDefaultFPS")]
  825. HRESULT SetDefaultFPS(double FPS);
  826. // !!! This is video specific.. new interface?
  827. // what kind of stretching? Stretch, crop, or preserve aspect ratio?
  828. [helpstring("method GetStretchMode")]
  829. HRESULT GetStretchMode(int * pnStretchMode);
  830. [helpstring("method SetStretchMode")]
  831. HRESULT SetStretchMode(int nStretchMode);
  832. };
  833. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  834. // Tracks are things that can contain media in them. You can add
  835. // and remove sources, effects, and transitions from them. Sources
  836. // are added according to the current insert mode of the timeline.
  837. // If in OVERLAY mode, moving or adding a source to a time that's
  838. // already occupied by another source will wipe out any overlapping
  839. // portion of the underlying source. In InsertMode, everything at
  840. // the insert point is moved down in time to make room for the
  841. // new source.
  842. // explained methods:
  843. // SrcAdd - add the source to this track. The source's start/stop
  844. // times must be set up first.
  845. // GetNextSrc - pass a time in at which you wish to find a source
  846. // and it will return the first source which occurs after the
  847. // given time.
  848. // MoveEverythingBy - bump a bunch of objects a certain direction
  849. // on the track by a given time.
  850. // GetSourcesCount - how many sources are on this track?
  851. // AreYouBlank - do you contain anything at all?
  852. // GetSrcAtTime - find a source at a given time. SearchDirection
  853. // is which way to search. -1 = backwards, 1 = forwards
  854. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  855. [
  856. object,
  857. uuid(EAE58538-622E-11d2-8CAD-00A024580902),
  858. odl,
  859. helpstring("IAMTimelineTrack Interface"),
  860. pointer_default(unique)
  861. ]
  862. interface IAMTimelineTrack : IUnknown
  863. {
  864. [helpstring("method SrcAdd")]
  865. HRESULT SrcAdd(IAMTimelineObj * pSource);
  866. [helpstring("method GetNextSrc")]
  867. HRESULT GetNextSrc([out] IAMTimelineObj ** ppSrc, REFERENCE_TIME * pInOut);
  868. [helpstring("method GetNextSrc2")]
  869. HRESULT GetNextSrc2([out] IAMTimelineObj ** ppSrc, REFTIME * pInOut);
  870. [helpstring("method MoveEverythingBy")]
  871. HRESULT MoveEverythingBy( REFERENCE_TIME Start, REFERENCE_TIME MoveBy );
  872. [helpstring("method MoveEverythingBy2")]
  873. HRESULT MoveEverythingBy2( REFTIME Start, REFTIME MoveBy );
  874. [helpstring("method GetSourcesCount")]
  875. HRESULT GetSourcesCount( long * pVal );
  876. [helpstring("method AreYouBlank")]
  877. HRESULT AreYouBlank( long * pVal );
  878. [helpstring("method GetSrcAtTime")]
  879. HRESULT GetSrcAtTime(
  880. [out] IAMTimelineObj ** ppSrc,
  881. REFERENCE_TIME Time,
  882. long SearchDirection );
  883. [helpstring("method GetSrcAtTime2")]
  884. HRESULT GetSrcAtTime2([out] IAMTimelineObj ** ppSrc, REFTIME Time, long SearchDirection );
  885. HRESULT InsertSpace( REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd );
  886. HRESULT InsertSpace2( REFTIME rtStart, REFTIME rtEnd );
  887. HRESULT ZeroBetween( REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd );
  888. HRESULT ZeroBetween2( REFTIME rtStart, REFTIME rtEnd );
  889. HRESULT GetNextSrcEx(IAMTimelineObj * pLast, [out] IAMTimelineObj **ppNext);
  890. };
  891. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  892. // This virtual track interface is shared by both the compositions
  893. // and tracks (and groups).
  894. // explained methods:
  895. // TrackGetPriority - used by rendering objects which need to know this.
  896. // SetTrackDirty - !!! not sure if this is useful.
  897. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  898. [
  899. object,
  900. uuid(A8ED5F80-C2C7-11d2-8D39-00A0C9441E20),
  901. odl,
  902. helpstring("IAMTimelineVirtualTrack Interface"),
  903. pointer_default(unique)
  904. ]
  905. interface IAMTimelineVirtualTrack : IUnknown
  906. {
  907. [helpstring("method TrackGetPriority")]
  908. HRESULT TrackGetPriority(long * pPriority);
  909. [helpstring("method SetTrackDirty")]
  910. HRESULT SetTrackDirty( );
  911. };
  912. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  913. // Compositions are like tracks in the sense that they also
  914. // implement IAMVirtualTrack and you can put transitions and effects
  915. // on them, but they really are the SUM of those tracks that they
  916. // contain. They are "embedded" compositions. They should only contain
  917. // media of one particular type (like all video or all audio), but
  918. // this is not enforced. You can add a composition to another
  919. // composition with VTrackInsBefore, just like you can add a track.
  920. // The very top composition to which all other comps and tracks belong
  921. // is a Group, which supports I-AMTimelineGroup as well as I-AMTimelineComp.
  922. // explained methods:
  923. // VTrackInsBefore - does NOT mean VideoTrack. Means Virtual Track.
  924. // Adds a virtual track to a composition at a given priority.
  925. // use -1 to mean "at the end"
  926. // VTrackSwapPriorities - switch two vtracks around.
  927. // VTrackGetCount - get how many vtracks this comp contains.
  928. // GetVTrack - you get the idea
  929. // GetCountOfType - Get the total number of these objects this comp
  930. // and all it's vtracks (recursively) contains. !!! this may be dead.
  931. // GetRecursiveLayerOfType - given a number, returns a given track. This
  932. // is done recursively. You need to pass in a pointer to the number,
  933. // and it will be modified upon exit to an unknown value. DO NOT
  934. // CALL THE VERSION WITH THE POINTER!
  935. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  936. [
  937. object,
  938. uuid(EAE58536-622E-11d2-8CAD-00A024580902),
  939. odl,
  940. helpstring("IAMTimelineComp Interface"),
  941. pointer_default(unique)
  942. ]
  943. interface IAMTimelineComp : IUnknown
  944. {
  945. [helpstring("method VTrackInsBefore")]
  946. HRESULT VTrackInsBefore(IAMTimelineObj * pVirtualTrack, long Priority);
  947. [helpstring("method VTrackSwapPriorities")]
  948. HRESULT VTrackSwapPriorities(long VirtualTrackA, long VirtualTrackB);
  949. [helpstring("method VTrackGetCount")]
  950. HRESULT VTrackGetCount(long * pVal);
  951. [helpstring("method GetVTrack")]
  952. HRESULT GetVTrack([out] IAMTimelineObj ** ppVirtualTrack, long Which);
  953. [helpstring("method GetCountOfType")]
  954. HRESULT GetCountOfType(long * pVal, long * pValWithComps, TIMELINE_MAJOR_TYPE MajorType );
  955. [helpstring("method GetRecursiveLayerOfType")]
  956. HRESULT GetRecursiveLayerOfType(
  957. [out] IAMTimelineObj ** ppVirtualTrack,
  958. long WhichLayer,
  959. TIMELINE_MAJOR_TYPE Type);
  960. [helpstring("method GetRecursiveLayerOfTypeI (do not call)")]
  961. HRESULT GetRecursiveLayerOfTypeI(
  962. [out] IAMTimelineObj ** ppVirtualTrack,
  963. [in,out] long * pWhichLayer,
  964. TIMELINE_MAJOR_TYPE Type);
  965. HRESULT GetNextVTrack(IAMTimelineObj *pVirtualTrack, [out] IAMTimelineObj **ppNextVirtualTrack);
  966. };
  967. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  968. // Groups represent the topmost composition in a timeline. Every
  969. // group should contain media of only one major type (like all video).
  970. // The timeline can contain multiple groups, see it's interface for
  971. // this. Each group has a particular "media type" that you can get/set
  972. // which help identify it. Each group has an associated FPS which
  973. // is used by the render engine in setting up the big switch. All
  974. // cuts on the timeline will happen rounded to this nearest FPS for
  975. // this particular group. Each group has a priority which enables
  976. // writing out multiple-stream files with 1 or more streams of the
  977. // same type. (Like a 2 video stream AVI file).
  978. // explained methods:
  979. // SetTimeline - this is called internally when the group is added.
  980. // Do not call this.
  981. // GetTimeline - get the timeline this group belongs to.
  982. // GetPriority - get this group's priority
  983. // Get/SetOutputFPS - explained above
  984. // SetMediaTypeForVB - method for VB. Pass in 0 for video, 1 for audio
  985. // SetRecompFormatFromSource - set the recompress format based on the
  986. // source that's loaded or set in the IAMTimelineSrc
  987. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  988. [
  989. object,
  990. uuid(9EED4F00-B8A6-11d2-8023-00C0DF10D434),
  991. odl,
  992. helpstring("IAMTimelineGroup Interface"),
  993. pointer_default(unique)
  994. ]
  995. interface IAMTimelineGroup : IUnknown
  996. {
  997. [helpstring("method SetTimeline")]
  998. HRESULT SetTimeline( IAMTimeline * pTimeline );
  999. [helpstring("method GetTimeline")]
  1000. HRESULT GetTimeline( [out] IAMTimeline ** ppTimeline );
  1001. [helpstring("method GetPriority")]
  1002. HRESULT GetPriority( long * pPriority );
  1003. [helpstring("method GetMediaType")]
  1004. HRESULT GetMediaType([out] AM_MEDIA_TYPE *);
  1005. [helpstring("method SetMediaType")]
  1006. HRESULT SetMediaType([in] AM_MEDIA_TYPE *);
  1007. [helpstring("method SetOutputFPS")]
  1008. HRESULT SetOutputFPS(double FPS);
  1009. [helpstring("method GetOutputFPS")]
  1010. HRESULT GetOutputFPS(double * pFPS);
  1011. [helpstring("method SetGroupName")]
  1012. HRESULT SetGroupName( BSTR pGroupName );
  1013. [helpstring("method GetGroupName")]
  1014. HRESULT GetGroupName( [out,retval] BSTR * pGroupName );
  1015. // in preview mode, skip frames. In authoring mode, don't
  1016. [helpstring("method SetPreviewMode")]
  1017. HRESULT SetPreviewMode( BOOL fPreview );
  1018. [helpstring("method GetPreviewMode")]
  1019. HRESULT GetPreviewMode( BOOL *pfPreview );
  1020. [helpstring("method SetMediaTypeForVB")]
  1021. HRESULT SetMediaTypeForVB([in] long Val );
  1022. // how many frames ahead switch can run
  1023. [helpstring("method GetOutputBuffering")]
  1024. HRESULT GetOutputBuffering([out] int *pnBuffer );
  1025. [helpstring("method SetOutputBuffering")]
  1026. HRESULT SetOutputBuffering([in] int nBuffer );
  1027. HRESULT SetSmartRecompressFormat( long * pFormat );
  1028. HRESULT GetSmartRecompressFormat( long ** ppFormat );
  1029. HRESULT IsSmartRecompressFormatSet( BOOL * pVal );
  1030. HRESULT IsRecompressFormatDirty( BOOL * pVal );
  1031. HRESULT ClearRecompressFormatDirty( );
  1032. HRESULT SetRecompFormatFromSource( IAMTimelineSrc * pSource );
  1033. };
  1034. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1035. // The main timeline. This is the base object you use to set
  1036. // properties of the timeline as a whole, and to create blank
  1037. // objects for use within the timeline. You cannot create the
  1038. // objects using COM methods, you must go through the timeline to
  1039. // create this. That's because certain information is set before
  1040. // handing the object back to you. Every object created by the
  1041. // timeline will support at LEAST IAMTimelineObj. For any timeline,
  1042. // it can have one or more "groups" that it knows about. Each group
  1043. // has the capability to hold a complete sub-tree containing media
  1044. // that is all of one type. This logical seperation is used for the
  1045. // rendering engine, but is not strictly enforced.
  1046. // explained methods:
  1047. // CreateEmptyNode - pass in a mid type and it will pass back
  1048. // an object of the type you requested.
  1049. // AddGroup - add a created group to the tree
  1050. // RemGroupFromList - make sure timeline no longer knows about this group.
  1051. // does NOT do anything to the group itself. Normally the user
  1052. // does not want to call this, it's called from the Group's Remove( ) method.
  1053. // GetGroup - get a certain group
  1054. // GetGroupCount - get how many groups
  1055. // ClearAllGroups - clear everything
  1056. // GetInsertMode - ask what the insert mode is, overlay or insert
  1057. // SetInsertMode - set whether to insert or overlay
  1058. // EnableTransitions - turn transitions on or off as a whole
  1059. // EnableEffects - same deal.
  1060. // SetIntererstRange - discard sub-objects outside of a given
  1061. // time range, to save memory/resources
  1062. // Get/SetDefaultFPS - set the 'default' FPS for this timeline,
  1063. // the RenderEngine reads this information for setting itself up
  1064. // by default.
  1065. // GetCountOfType - ask for how many of a given thing are in a given
  1066. // group. !!! this may be a useless function.
  1067. // !!! not implemented
  1068. // IsDirty - asks if anything in the timeline needs to be redrawn
  1069. // GetDirtyRange - same deal
  1070. // ValidateSourceNames - make sure the filenames in the sources
  1071. // really exist. Use the same enum flags as the render engine
  1072. // uses for SetSourceNameValidation. Source's filenames will be
  1073. // changed to those of the found ones in the timeline.
  1074. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1075. [
  1076. object,
  1077. uuid(78530B74-61F9-11D2-8CAD-00A024580902),
  1078. odl,
  1079. helpstring("IAMTimeline Interface"),
  1080. pointer_default(unique)
  1081. ]
  1082. interface IAMTimeline : IUnknown
  1083. {
  1084. [helpstring("method CreateEmptyNode")]
  1085. HRESULT CreateEmptyNode([out] IAMTimelineObj ** ppObj, TIMELINE_MAJOR_TYPE Type );
  1086. HRESULT AddGroup( IAMTimelineObj * pGroup );
  1087. HRESULT RemGroupFromList( IAMTimelineObj * pGroup );
  1088. HRESULT GetGroup( [out] IAMTimelineObj ** ppGroup, long WhichGroup );
  1089. HRESULT GetGroupCount( long * pCount );
  1090. HRESULT ClearAllGroups( );
  1091. HRESULT GetInsertMode( long * pMode );
  1092. [helpstring("method SetInsertMode")]
  1093. HRESULT SetInsertMode(long Mode);
  1094. [helpstring("method EnableTransitions")]
  1095. HRESULT EnableTransitions(BOOL fEnabled);
  1096. [helpstring("method TransitionsEnabled")]
  1097. HRESULT TransitionsEnabled(BOOL * pfEnabled);
  1098. [helpstring("method EnableEffects")]
  1099. HRESULT EnableEffects(BOOL fEnabled);
  1100. [helpstring("method EffectsEnabled")]
  1101. HRESULT EffectsEnabled(BOOL * pfEnabled);
  1102. [helpstring("method SetInterestRange")]
  1103. HRESULT SetInterestRange(REFERENCE_TIME Start, REFERENCE_TIME Stop);
  1104. [helpstring("method GetDuration")]
  1105. HRESULT GetDuration(REFERENCE_TIME * pDuration);
  1106. [helpstring("method GetDuration2")]
  1107. HRESULT GetDuration2(double * pDuration);
  1108. [helpstring("method SetDefaultFPS")]
  1109. HRESULT SetDefaultFPS(double FPS);
  1110. [helpstring("method GetDefaultFPS")]
  1111. HRESULT GetDefaultFPS(double * pFPS);
  1112. [helpstring("method IsDirty")]
  1113. HRESULT IsDirty(BOOL * pDirty);
  1114. [helpstring("method GetDirtyRange")]
  1115. HRESULT GetDirtyRange(REFERENCE_TIME * pStart, REFERENCE_TIME * pStop);
  1116. [helpstring("method GetCountOfType")]
  1117. HRESULT GetCountOfType(long Group, long * pVal, long * pValWithComps, TIMELINE_MAJOR_TYPE MajorType );
  1118. HRESULT ValidateSourceNames( long ValidateFlags, IMediaLocator * pOverride, LONG_PTR NotifyEventHandle );
  1119. HRESULT SetDefaultTransition( GUID * pGuid );
  1120. HRESULT GetDefaultTransition( GUID * pGuid );
  1121. HRESULT SetDefaultEffect( GUID * pGuid );
  1122. HRESULT GetDefaultEffect( GUID * pGuid );
  1123. HRESULT SetDefaultTransitionB( BSTR pGuid );
  1124. HRESULT GetDefaultTransitionB( [out,retval] BSTR * pGuid );
  1125. HRESULT SetDefaultEffectB( BSTR pGuid );
  1126. HRESULT GetDefaultEffectB( [out,retval] BSTR * pGuid );
  1127. };
  1128. ////////////////////////////////////////////////////////////////
  1129. ////////////////////////////////////////////////////////////////
  1130. // XML STUFF --- XML STUFF --- XML STUFF --- XML STUFF --- XML
  1131. ////////////////////////////////////////////////////////////////
  1132. ////////////////////////////////////////////////////////////////
  1133. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1134. // Xml2Dex - converts back and forth between XML and a dexter project
  1135. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1136. [
  1137. object,
  1138. uuid(18C628ED-962A-11D2-8D08-00A0C9441E20),
  1139. odl,
  1140. helpstring("IXml2Dex Interface"),
  1141. pointer_default(unique)
  1142. ]
  1143. interface IXml2Dex : IDispatch
  1144. {
  1145. [id(1), helpstring("method CreateGraphFromFile")]
  1146. HRESULT CreateGraphFromFile([out] IUnknown ** ppGraph, IUnknown * pTimeline, BSTR Filename);
  1147. [id(2), helpstring("method WriteGrfFile")]
  1148. HRESULT WriteGrfFile(IUnknown * pGraph, BSTR FileName);
  1149. [id(3), helpstring("method WriteXMLFile")]
  1150. HRESULT WriteXMLFile(IUnknown * pTimeline, BSTR FileName);
  1151. [id(5), helpstring("method ReadXMLFile")]
  1152. HRESULT ReadXMLFile(IUnknown *pTimeline, BSTR XMLName);
  1153. [id(6), helpstring("method Delete")]
  1154. HRESULT Delete(IUnknown *pTimeline, double dStart, double dEnd);
  1155. [id(7), helpstring("method WriteXMLPart")]
  1156. HRESULT WriteXMLPart(IUnknown * pTimeline, double dStart, double dEnd, BSTR FileName);
  1157. [id(8), helpstring("method PasteXMLFile")]
  1158. HRESULT PasteXMLFile(IUnknown * pTimeline, double dStart, BSTR FileName);
  1159. [id(9), helpstring("method CopyXML")]
  1160. HRESULT CopyXML(IUnknown * pTimeline, double dStart, double dEnd);
  1161. [id(10), helpstring("method PasteXML")]
  1162. HRESULT PasteXML(IUnknown * pTimeline, double dStart);
  1163. [id(11), helpstring("method Reset")]
  1164. HRESULT Reset( );
  1165. [id(12), helpstring("method ReadXML")]
  1166. HRESULT ReadXML(IUnknown *pTimeline, IUnknown *pXML);
  1167. [id(13), helpstring("method WriteXML")]
  1168. HRESULT WriteXML(IUnknown *pTimeline, BSTR *pbstrXML);
  1169. };
  1170. ////////////////////////////////////////////////////////////////
  1171. ////////////////////////////////////////////////////////////////
  1172. // USEFUL HELPER INTERFACES
  1173. ////////////////////////////////////////////////////////////////
  1174. ////////////////////////////////////////////////////////////////
  1175. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1176. // IAMErrorLog - an interface that receives error information from
  1177. // a timeline or a render engine.
  1178. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1179. [
  1180. object,
  1181. uuid(E43E73A2-0EFA-11d3-9601-00A0C9441E20),
  1182. odl,
  1183. helpstring("IAMErrorLog Interface"),
  1184. pointer_default(unique)
  1185. ]
  1186. interface IAMErrorLog : IUnknown
  1187. {
  1188. [helpstring("method LogError")] HRESULT LogError(long Severity, BSTR pErrorString, long ErrorCode, long hresult, [in] VARIANT * pExtraInfo );
  1189. };
  1190. [
  1191. object,
  1192. uuid(963566DA-BE21-4eaf-88E9-35704F8F52A1),
  1193. odl,
  1194. helpstring("IAMSetErrorLog Interface"),
  1195. pointer_default(unique)
  1196. ]
  1197. interface IAMSetErrorLog : IUnknown
  1198. {
  1199. [propget, helpstring("property ErrorLog")] HRESULT ErrorLog([out, retval] IAMErrorLog * *pVal);
  1200. [propput, helpstring("property ErrorLog")] HRESULT ErrorLog([in] IAMErrorLog * newVal);
  1201. };
  1202. [
  1203. object,
  1204. uuid(0579154A-2B53-4994-B0D0-E773148EFF85),
  1205. local,
  1206. helpstring("ISampleGrabberCB Interface"),
  1207. pointer_default(unique)
  1208. ]
  1209. interface ISampleGrabberCB : IUnknown
  1210. {
  1211. HRESULT SampleCB( double SampleTime, IMediaSample * pSample );
  1212. HRESULT BufferCB( double SampleTime, BYTE * pBuffer, long BufferLen );
  1213. }
  1214. [
  1215. object,
  1216. uuid(6B652FFF-11FE-4fce-92AD-0266B5D7C78F),
  1217. local,
  1218. helpstring("ISampleGrabber Interface"),
  1219. pointer_default(unique)
  1220. ]
  1221. interface ISampleGrabber: IUnknown
  1222. {
  1223. // set this to have the filter immediate stop after
  1224. // garnishing a sample
  1225. //
  1226. HRESULT SetOneShot( BOOL OneShot );
  1227. // set what media type we connect to. It can be partially
  1228. // specified by setting only the major type, OR the major and
  1229. // subtype, OR major, subtype, and the formattype.
  1230. //
  1231. HRESULT SetMediaType( const AM_MEDIA_TYPE * pType );
  1232. // after something's connected to this filter, find out
  1233. // what it is
  1234. //
  1235. HRESULT GetConnectedMediaType( AM_MEDIA_TYPE * pType );
  1236. // call this to buffer incoming samples, so the next two methods will work
  1237. // If this is not called, the next two methods will return
  1238. // E_INVALIDARG
  1239. //
  1240. HRESULT SetBufferSamples( BOOL BufferThem );
  1241. // pass in NULL for pBuffer to get out the buffer size you need to
  1242. // allocate. This will NOT return a pointer to a compressed dib
  1243. // any longer! It will return the IMediaSample's GetPointer buffer.
  1244. //
  1245. HRESULT GetCurrentBuffer( [in,out] long * pBufferSize, [out] long * pBuffer );
  1246. // return the currently buffered sample
  1247. //
  1248. HRESULT GetCurrentSample( [out,retval] IMediaSample ** ppSample );
  1249. // if this callback is set, then it will be called for
  1250. // every sample passing through the filter. Do not take a long time
  1251. // in the callback for smooth playback (obviously!)
  1252. //
  1253. HRESULT SetCallback( ISampleGrabberCB * pCallback, long WhichMethodToCallback );
  1254. };
  1255. ////////////////////////////////////////////////////////////////
  1256. ////////////////////////////////////////////////////////////////
  1257. // THE LIBRARY ITSELF
  1258. ////////////////////////////////////////////////////////////////
  1259. ////////////////////////////////////////////////////////////////
  1260. [
  1261. uuid(78530B68-61F9-11D2-8CAD-00A024580902),
  1262. version(1.0),
  1263. helpstring("Dexter 1.0 Type Library")
  1264. ]
  1265. library DexterLib
  1266. {
  1267. importlib("stdole2.tlb");
  1268. [
  1269. uuid(78530B75-61F9-11D2-8CAD-00A024580902),
  1270. helpstring("AMTimeline Class")
  1271. ]
  1272. coclass AMTimeline
  1273. {
  1274. [default] interface IAMTimeline;
  1275. interface IPersistStream;
  1276. interface IAMSetErrorLog;
  1277. };
  1278. [
  1279. uuid(78530B78-61F9-11D2-8CAD-00A024580902),
  1280. helpstring("IAMTimelineObj Class")
  1281. ]
  1282. coclass AMTimelineObj
  1283. {
  1284. [default] interface IAMTimelineObj;
  1285. };
  1286. [
  1287. uuid(78530B7A-61F9-11D2-8CAD-00A024580902),
  1288. helpstring("IAMTimelineSrc Class")
  1289. ]
  1290. coclass AMTimelineSrc
  1291. {
  1292. [default] interface IAMTimelineSrc;
  1293. interface IAMTimelineObj;
  1294. interface IAMTimelineEffectable;
  1295. interface IAMTimelineSplittable;
  1296. };
  1297. [
  1298. uuid(8F6C3C50-897B-11d2-8CFB-00A0C9441E20),
  1299. ]
  1300. coclass AMTimelineTrack
  1301. {
  1302. [default] interface IAMTimelineTrack;
  1303. interface IAMTimelineObj;
  1304. interface IAMTimelineEffectable;
  1305. interface IAMTimelineTransable;
  1306. interface IAMTimelineVirtualTrack;
  1307. interface IAMTimelineSplittable;
  1308. };
  1309. [
  1310. uuid(74D2EC80-6233-11d2-8CAD-00A024580902),
  1311. ]
  1312. coclass AMTimelineComp
  1313. {
  1314. [default] interface IAMTimelineComp;
  1315. interface IAMTimelineObj;
  1316. interface IAMTimelineEffectable;
  1317. interface IAMTimelineTransable;
  1318. interface IAMTimelineVirtualTrack;
  1319. };
  1320. [
  1321. uuid(F6D371E1-B8A6-11d2-8023-00C0DF10D434),
  1322. ]
  1323. coclass AMTimelineGroup
  1324. {
  1325. [default] interface IAMTimelineGroup;
  1326. interface IAMTimelineComp;
  1327. interface IAMTimelineObj;
  1328. };
  1329. [
  1330. uuid(74D2EC81-6233-11d2-8CAD-00A024580902),
  1331. ]
  1332. coclass AMTimelineTrans
  1333. {
  1334. [default] interface IAMTimelineTrans;
  1335. interface IAMTimelineObj;
  1336. interface IAMTimelineSplittable;
  1337. };
  1338. [
  1339. uuid(74D2EC82-6233-11d2-8CAD-00A024580902),
  1340. ]
  1341. coclass AMTimelineEffect
  1342. {
  1343. [default] interface IAMTimelineEffect;
  1344. interface IAMTimelineObj;
  1345. interface IAMTimelineSplittable;
  1346. interface IPropertyBag;
  1347. };
  1348. [
  1349. uuid(64D8A8E0-80A2-11d2-8CF3-00A0C9441E20),
  1350. ]
  1351. coclass RenderEngine
  1352. {
  1353. [default] interface IRenderEngine;
  1354. interface IAMSetErrorLog;
  1355. };
  1356. [
  1357. uuid(498B0949-BBE9-4072-98BE-6CCAEB79DC6F),
  1358. ]
  1359. coclass SmartRenderEngine
  1360. {
  1361. [default] interface IRenderEngine;
  1362. interface ISmartRenderEngine;
  1363. interface IAMSetErrorLog;
  1364. };
  1365. [
  1366. uuid(036A9790-C153-11d2-9EF7-006008039E37),
  1367. ]
  1368. coclass AudMixer
  1369. {
  1370. [default] interface IBaseFilter;
  1371. };
  1372. [
  1373. uuid(18C628EE-962A-11D2-8D08-00A0C9441E20),
  1374. helpstring("Xml2Dex Class")
  1375. ]
  1376. coclass Xml2Dex
  1377. {
  1378. [default] interface IXml2Dex;
  1379. };
  1380. [
  1381. uuid(CC1101F2-79DC-11D2-8CE6-00A0C9441E20),
  1382. helpstring("MediaLocator Class")
  1383. ]
  1384. coclass MediaLocator
  1385. {
  1386. [default] interface IMediaLocator;
  1387. };
  1388. [
  1389. uuid(ADF95821-DED7-11d2-ACBE-0080C75E246E),
  1390. helpstring("Varying Property Holder")
  1391. ]
  1392. coclass PropertySetter
  1393. {
  1394. [default] interface IPropertySetter;
  1395. interface IAMSetErrorLog;
  1396. };
  1397. [
  1398. uuid(65BD0711-24D2-4ff7-9324-ED2E5D3ABAFA),
  1399. helpstring("MediaDet Class")
  1400. ]
  1401. coclass MediaDet
  1402. {
  1403. [default] interface IMediaDet;
  1404. };
  1405. [
  1406. uuid(C1F400A0-3F08-11d3-9F0B-006008039E37),
  1407. helpstring("MsGrab Class")
  1408. ]
  1409. coclass SampleGrabber
  1410. {
  1411. [default] interface ISampleGrabber;
  1412. };
  1413. // useful for movie maker and other people
  1414. [
  1415. uuid(C1F400A4-3F08-11d3-9F0B-006008039E37),
  1416. helpstring("NullRenderer Class")
  1417. ]
  1418. coclass NullRenderer
  1419. {
  1420. [default] interface IBaseFilter;
  1421. };
  1422. [
  1423. uuid(BB44391D-6ABD-422f-9E2E-385C9DFF51FC),
  1424. helpstring("DxtCompositor Class")
  1425. ]
  1426. coclass DxtCompositor
  1427. {
  1428. [default] interface IDxtCompositor;
  1429. };
  1430. [
  1431. uuid(506D89AE-909A-44f7-9444-ABD575896E35),
  1432. helpstring("DxtAlphaSetter Class")
  1433. ]
  1434. coclass DxtAlphaSetter
  1435. {
  1436. [default] interface IDxtAlphaSetter;
  1437. };
  1438. [
  1439. uuid(DE75D012-7A65-11D2-8CEA-00A0C9441E20),
  1440. helpstring("SMPTE wipe DXT")
  1441. ]
  1442. coclass DxtJpeg
  1443. {
  1444. [default] interface IDxtJpeg;
  1445. };
  1446. [
  1447. uuid(0cfdd070-581a-11d2-9ee6-006008039e37),
  1448. ]
  1449. coclass ColorSource
  1450. {
  1451. [default] interface IBaseFilter;
  1452. };
  1453. [
  1454. uuid(C5B19592-145E-11d3-9F04-006008039E37),
  1455. helpstring("DxtKey Class")
  1456. ]
  1457. coclass DxtKey
  1458. {
  1459. [default] interface IDxtKey;
  1460. };
  1461. };
  1462. // these are some error codes that we can/will return
  1463. enum
  1464. {
  1465. E_NOTINTREE = 0x80040400,
  1466. E_RENDER_ENGINE_IS_BROKEN = 0x80040401,
  1467. E_MUST_INIT_RENDERER = 0x80040402,
  1468. E_NOTDETERMINED = 0x80040403,
  1469. E_NO_TIMELINE = 0x80040404,
  1470. S_WARN_OUTPUTRESET = 40404
  1471. };
  1472. // These codes are given to the app in IAMErrorLog to help identify what went wrong
  1473. // Filename doesn't exist, or DShow doesn't recognize the filetype
  1474. // EXTRA - filename
  1475. cpp_quote("#define DEX_IDS_BAD_SOURCE_NAME 1400")
  1476. // Filename doesn't exist or contains unknown data
  1477. // EXTRA - filename (maybe no codec?)
  1478. cpp_quote("#define DEX_IDS_BAD_SOURCE_NAME2 1401")
  1479. // filename was required, but wasn't given
  1480. cpp_quote("#define DEX_IDS_MISSING_SOURCE_NAME 1402")
  1481. // cannot parse data provided by this source
  1482. // !!! what source?
  1483. cpp_quote("#define DEX_IDS_UNKNOWN_SOURCE 1403")
  1484. // unexpected error - some DShow component not installed correctly
  1485. cpp_quote("#define DEX_IDS_INSTALL_PROBLEM 1404")
  1486. // Source filter does not accept filenames
  1487. // !!! What source?
  1488. cpp_quote("#define DEX_IDS_NO_SOURCE_NAMES 1405")
  1489. // The group's mediatype is not supported
  1490. // EXTRA - gives you an integer group number
  1491. cpp_quote("#define DEX_IDS_BAD_MEDIATYPE 1406")
  1492. // Invalid stream number for a source
  1493. // EXTRA - gives the stream number !!! should identify which source!
  1494. cpp_quote("#define DEX_IDS_STREAM_NUMBER 1407")
  1495. // You ran out of memory
  1496. cpp_quote("#define DEX_IDS_OUTOFMEMORY 1408")
  1497. // One bitmap in a sequence was not the same type as the others
  1498. // EXTRA - gives the bitmap name
  1499. cpp_quote("#define DEX_IDS_DIBSEQ_NOTALLSAME 1409")
  1500. // Clip's mediatimes are invalid, or DibSeq too short, or a previous error caused this
  1501. // !!! Needs to give the clip name
  1502. cpp_quote("#define DEX_IDS_CLIPTOOSHORT 1410")
  1503. // Clsid of FX/Transition is not a DirectX Transform
  1504. // EXTRA - gives the CLSID
  1505. cpp_quote("#define DEX_IDS_INVALID_DXT 1411")
  1506. // Default FX/Transition Clsid is not a DirectX Transform"
  1507. // EXTRA - gives the CLSID
  1508. cpp_quote("#define DEX_IDS_INVALID_DEFAULT_DXT 1412")
  1509. // Your version of DX doesn't support 3D transforms"
  1510. // EXTRA - gives the CLSID of the 3D transform you tried to use
  1511. cpp_quote("#define DEX_IDS_NO_3D 1413")
  1512. // This DirectX Transform is not the right kind, or is broken
  1513. // EXTRA - gives the CLSID of the broken transform
  1514. cpp_quote("#define DEX_IDS_BROKEN_DXT 1414")
  1515. // No such property exists on an object
  1516. // EXTRA - gives the name of the property (if given as a string)
  1517. cpp_quote("#define DEX_IDS_NO_SUCH_PROPERTY 1415")
  1518. // Illegal value for a property
  1519. // EXTRA - gives the VARIANT value that was illegal
  1520. cpp_quote("#define DEX_IDS_ILLEGAL_PROPERTY_VAL 1416")
  1521. // Syntax error in XML file at line:
  1522. // EXTRA - gives I4 line number, if available
  1523. cpp_quote("#define DEX_IDS_INVALID_XML 1417")
  1524. // Can't find filter specified in XML by Category and Instance
  1525. // EXTRA - gives friendly name (instance)
  1526. cpp_quote("#define DEX_IDS_CANT_FIND_FILTER 1418")
  1527. // Disk error writing XML file
  1528. cpp_quote("#define DEX_IDS_DISK_WRITE_ERROR 1419")
  1529. // Clsid not a valid DShow audio effect filter
  1530. // EXTRA - gives the CLSID
  1531. cpp_quote("#define DEX_IDS_INVALID_AUDIO_FX 1420")
  1532. // Cannot find compressor for smart recompression type
  1533. cpp_quote("#define DEX_IDS_CANT_FIND_COMPRESSOR 1421")
  1534. // !!! Here go problems hooking up sources or finding codecs
  1535. // THE FOLLOWING SHOULD NEVER HAPPEN - please call me if they do
  1536. // Unexpected error in parsing the timeline
  1537. cpp_quote("#define DEX_IDS_TIMELINE_PARSE 1426")
  1538. // Unexpected error building the filtergraph
  1539. cpp_quote("#define DEX_IDS_GRAPH_ERROR 1427")
  1540. // Unexpected error with the internal grid
  1541. cpp_quote("#define DEX_IDS_GRID_ERROR 1428")
  1542. // Unexpected error getting an interface
  1543. cpp_quote("#define DEX_IDS_INTERFACE_ERROR 1429")
  1544. // these are the enumeration categories for effects
  1545. //
  1546. cpp_quote("EXTERN_GUID(CLSID_VideoEffects1Category, 0xcc7bfb42, 0xf175, 0x11d1, 0xa3, 0x92, 0x0, 0xe0, 0x29, 0x1f, 0x39, 0x59);")
  1547. cpp_quote("EXTERN_GUID(CLSID_VideoEffects2Category, 0xcc7bfb43, 0xf175, 0x11d1, 0xa3, 0x92, 0x0, 0xe0, 0x29, 0x1f, 0x39, 0x59);")
  1548. cpp_quote("EXTERN_GUID(CLSID_AudioEffects1Category, 0xcc7bfb44, 0xf175, 0x11d1, 0xa3, 0x92, 0x0, 0xe0, 0x29, 0x1f, 0x39, 0x59);")
  1549. cpp_quote("EXTERN_GUID(CLSID_AudioEffects2Category, 0xcc7bfb45, 0xf175, 0x11d1, 0xa3, 0x92, 0x0, 0xe0, 0x29, 0x1f, 0x39, 0x59);")