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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

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