/[cvs]/api/include/DShowIDL/qedit.idl
ViewVC logotype

Annotation of /api/include/DShowIDL/qedit.idl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (hide annotations) (vendor branch)
Sun Jul 1 20:47:59 2001 UTC (23 years, 5 months ago) by bearsoft
Branch: lazy, MAIN
CVS Tags: start, HEAD
Changes since 1.1: +0 -0 lines
First import

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

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26