xref: /reactos/dll/directx/wine/qedit/timeline.c (revision d3e7f8dd)
1 /*              DirectShow Timeline object (QEDIT.DLL)
2  *
3  * Copyright 2016 Alex Henrie
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18  */
19 
20 #include <assert.h>
21 #include <stdarg.h>
22 
23 #define COBJMACROS
24 
25 #include "windef.h"
26 #include "winbase.h"
27 #include "winuser.h"
28 #include "ole2.h"
29 
30 #include "qedit_private.h"
31 #include "wine/debug.h"
32 
33 WINE_DEFAULT_DEBUG_CHANNEL(qedit);
34 
35 typedef struct {
36     IUnknown IUnknown_inner;
37     IAMTimeline IAMTimeline_iface;
38     IUnknown *outer_unk;
39     LONG ref;
40 } TimelineImpl;
41 
impl_from_IUnknown(IUnknown * iface)42 static inline TimelineImpl *impl_from_IUnknown(IUnknown *iface)
43 {
44     return CONTAINING_RECORD(iface, TimelineImpl, IUnknown_inner);
45 }
46 
impl_from_IAMTimeline(IAMTimeline * iface)47 static inline TimelineImpl *impl_from_IAMTimeline(IAMTimeline *iface)
48 {
49     return CONTAINING_RECORD(iface, TimelineImpl, IAMTimeline_iface);
50 }
51 
52 typedef struct {
53     IAMTimelineObj IAMTimelineObj_iface;
54     IAMTimelineGroup IAMTimelineGroup_iface;
55     LONG ref;
56     TIMELINE_MAJOR_TYPE timeline_type;
57 } TimelineObjImpl;
58 
impl_from_IAMTimelineObj(IAMTimelineObj * iface)59 static inline TimelineObjImpl *impl_from_IAMTimelineObj(IAMTimelineObj *iface)
60 {
61     return CONTAINING_RECORD(iface, TimelineObjImpl, IAMTimelineObj_iface);
62 }
63 
impl_from_IAMTimelineGroup(IAMTimelineGroup * iface)64 static inline TimelineObjImpl *impl_from_IAMTimelineGroup(IAMTimelineGroup *iface)
65 {
66     return CONTAINING_RECORD(iface, TimelineObjImpl, IAMTimelineGroup_iface);
67 }
68 
69 static const IAMTimelineObjVtbl IAMTimelineObj_VTable;
70 static const IAMTimelineGroupVtbl IAMTimelineGroup_VTable;
71 
72 /* Timeline inner IUnknown */
73 
Timeline_QueryInterface(IUnknown * iface,REFIID riid,void ** ppv)74 static HRESULT WINAPI Timeline_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
75 {
76     TimelineImpl *This = impl_from_IUnknown(iface);
77 
78     TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
79 
80     if (!ppv)
81         return E_POINTER;
82 
83     *ppv = NULL;
84     if (IsEqualIID(riid, &IID_IUnknown))
85         *ppv = &This->IUnknown_inner;
86     else if (IsEqualIID(riid, &IID_IAMTimeline))
87         *ppv = &This->IAMTimeline_iface;
88     else
89         WARN("(%p, %s,%p): not found\n", This, debugstr_guid(riid), ppv);
90 
91     if (!*ppv)
92         return E_NOINTERFACE;
93 
94     IUnknown_AddRef((IUnknown*)*ppv);
95     return S_OK;
96 }
97 
Timeline_AddRef(IUnknown * iface)98 static ULONG WINAPI Timeline_AddRef(IUnknown *iface)
99 {
100     TimelineImpl *This = impl_from_IUnknown(iface);
101     ULONG ref = InterlockedIncrement(&This->ref);
102 
103     TRACE("(%p) new ref = %u\n", This, ref);
104 
105     return ref;
106 }
107 
Timeline_Release(IUnknown * iface)108 static ULONG WINAPI Timeline_Release(IUnknown *iface)
109 {
110     TimelineImpl *This = impl_from_IUnknown(iface);
111     ULONG ref = InterlockedDecrement(&This->ref);
112 
113     TRACE("(%p) new ref = %u\n", This, ref);
114 
115     if (ref == 0)
116         CoTaskMemFree(This);
117 
118     return ref;
119 }
120 
121 static const IUnknownVtbl timeline_vtbl =
122 {
123     Timeline_QueryInterface,
124     Timeline_AddRef,
125     Timeline_Release,
126 };
127 
128 /* IAMTimeline implementation */
129 
Timeline_IAMTimeline_QueryInterface(IAMTimeline * iface,REFIID riid,void ** ppv)130 static HRESULT WINAPI Timeline_IAMTimeline_QueryInterface(IAMTimeline *iface, REFIID riid, void **ppv)
131 {
132     TimelineImpl *This = impl_from_IAMTimeline(iface);
133     return IUnknown_QueryInterface(This->outer_unk, riid, ppv);
134 }
135 
Timeline_IAMTimeline_AddRef(IAMTimeline * iface)136 static ULONG WINAPI Timeline_IAMTimeline_AddRef(IAMTimeline *iface)
137 {
138     TimelineImpl *This = impl_from_IAMTimeline(iface);
139     return IUnknown_AddRef(This->outer_unk);
140 }
141 
Timeline_IAMTimeline_Release(IAMTimeline * iface)142 static ULONG WINAPI Timeline_IAMTimeline_Release(IAMTimeline *iface)
143 {
144     TimelineImpl *This = impl_from_IAMTimeline(iface);
145     return IUnknown_Release(This->outer_unk);
146 }
147 
Timeline_IAMTimeline_CreateEmptyNode(IAMTimeline * iface,IAMTimelineObj ** obj,TIMELINE_MAJOR_TYPE type)148 static HRESULT WINAPI Timeline_IAMTimeline_CreateEmptyNode(IAMTimeline *iface, IAMTimelineObj **obj,
149                                                            TIMELINE_MAJOR_TYPE type)
150 {
151     TimelineImpl *This = impl_from_IAMTimeline(iface);
152     TimelineObjImpl* obj_impl;
153 
154     TRACE("(%p)->(%p,%d)\n", This, obj, type);
155 
156     if (!obj)
157         return E_POINTER;
158 
159     switch (type)
160     {
161         case TIMELINE_MAJOR_TYPE_COMPOSITE:
162         case TIMELINE_MAJOR_TYPE_TRACK:
163         case TIMELINE_MAJOR_TYPE_SOURCE:
164         case TIMELINE_MAJOR_TYPE_TRANSITION:
165         case TIMELINE_MAJOR_TYPE_EFFECT:
166         case TIMELINE_MAJOR_TYPE_GROUP:
167             break;
168         default:
169             return E_INVALIDARG;
170     }
171 
172     obj_impl = CoTaskMemAlloc(sizeof(TimelineObjImpl));
173     if (!obj_impl) {
174         *obj = NULL;
175         return E_OUTOFMEMORY;
176     }
177 
178     obj_impl->ref = 1;
179     obj_impl->IAMTimelineObj_iface.lpVtbl = &IAMTimelineObj_VTable;
180     obj_impl->IAMTimelineGroup_iface.lpVtbl = &IAMTimelineGroup_VTable;
181     obj_impl->timeline_type = type;
182 
183     *obj = &obj_impl->IAMTimelineObj_iface;
184     return S_OK;
185 }
186 
Timeline_IAMTimeline_AddGroup(IAMTimeline * iface,IAMTimelineObj * group)187 static HRESULT WINAPI Timeline_IAMTimeline_AddGroup(IAMTimeline *iface, IAMTimelineObj *group)
188 {
189     TimelineImpl *This = impl_from_IAMTimeline(iface);
190     FIXME("(%p)->(%p): not implemented!\n", This, group);
191     return E_NOTIMPL;
192 }
193 
Timeline_IAMTimeline_RemGroupFromList(IAMTimeline * iface,IAMTimelineObj * group)194 static HRESULT WINAPI Timeline_IAMTimeline_RemGroupFromList(IAMTimeline *iface, IAMTimelineObj *group)
195 {
196     TimelineImpl *This = impl_from_IAMTimeline(iface);
197     FIXME("(%p)->(%p): not implemented!\n", This, group);
198     return E_NOTIMPL;
199 }
200 
Timeline_IAMTimeline_GetGroup(IAMTimeline * iface,IAMTimelineObj ** group,LONG index)201 static HRESULT WINAPI Timeline_IAMTimeline_GetGroup(IAMTimeline *iface, IAMTimelineObj **group, LONG index)
202 {
203     TimelineImpl *This = impl_from_IAMTimeline(iface);
204     FIXME("(%p)->(%p,%d): not implemented!\n", This, group, index);
205     return E_NOTIMPL;
206 }
207 
Timeline_IAMTimeline_GetGroupCount(IAMTimeline * iface,LONG * count)208 static HRESULT WINAPI Timeline_IAMTimeline_GetGroupCount(IAMTimeline *iface, LONG *count)
209 {
210     TimelineImpl *This = impl_from_IAMTimeline(iface);
211     FIXME("(%p)->(%p): not implemented!\n", This, count);
212     return E_NOTIMPL;
213 }
214 
Timeline_IAMTimeline_ClearAllGroups(IAMTimeline * iface)215 static HRESULT WINAPI Timeline_IAMTimeline_ClearAllGroups(IAMTimeline *iface)
216 {
217     TimelineImpl *This = impl_from_IAMTimeline(iface);
218     FIXME("(%p): not implemented!\n", This);
219     return E_NOTIMPL;
220 }
221 
Timeline_IAMTimeline_GetInsertMode(IAMTimeline * iface,LONG * mode)222 static HRESULT WINAPI Timeline_IAMTimeline_GetInsertMode(IAMTimeline *iface, LONG *mode)
223 {
224     TimelineImpl *This = impl_from_IAMTimeline(iface);
225     FIXME("(%p)->(%p): not implemented!\n", This, mode);
226     return E_NOTIMPL;
227 }
228 
Timeline_IAMTimeline_SetInsertMode(IAMTimeline * iface,LONG mode)229 static HRESULT WINAPI Timeline_IAMTimeline_SetInsertMode(IAMTimeline *iface, LONG mode)
230 {
231     TimelineImpl *This = impl_from_IAMTimeline(iface);
232     FIXME("(%p)->(%d): not implemented!\n", This, mode);
233     return E_NOTIMPL;
234 }
235 
Timeline_IAMTimeline_EnableTransitions(IAMTimeline * iface,BOOL enabled)236 static HRESULT WINAPI Timeline_IAMTimeline_EnableTransitions(IAMTimeline *iface, BOOL enabled)
237 {
238     TimelineImpl *This = impl_from_IAMTimeline(iface);
239     FIXME("(%p)->(%d): not implemented!\n", This, enabled);
240     return E_NOTIMPL;
241 }
242 
Timeline_IAMTimeline_TransitionsEnabled(IAMTimeline * iface,BOOL * enabled)243 static HRESULT WINAPI Timeline_IAMTimeline_TransitionsEnabled(IAMTimeline *iface, BOOL *enabled)
244 {
245     TimelineImpl *This = impl_from_IAMTimeline(iface);
246     FIXME("(%p)->(%p): not implemented!\n", This, enabled);
247     return E_NOTIMPL;
248 }
249 
Timeline_IAMTimeline_EnableEffects(IAMTimeline * iface,BOOL enabled)250 static HRESULT WINAPI Timeline_IAMTimeline_EnableEffects(IAMTimeline *iface, BOOL enabled)
251 {
252     TimelineImpl *This = impl_from_IAMTimeline(iface);
253     FIXME("(%p)->(%d): not implemented!\n", This, enabled);
254     return E_NOTIMPL;
255 }
256 
Timeline_IAMTimeline_EffectsEnabled(IAMTimeline * iface,BOOL * enabled)257 static HRESULT WINAPI Timeline_IAMTimeline_EffectsEnabled(IAMTimeline *iface, BOOL *enabled)
258 {
259     TimelineImpl *This = impl_from_IAMTimeline(iface);
260     FIXME("(%p)->(%p): not implemented!\n", This, enabled);
261     return E_NOTIMPL;
262 }
263 
Timeline_IAMTimeline_SetInterestRange(IAMTimeline * iface,REFERENCE_TIME start,REFERENCE_TIME stop)264 static HRESULT WINAPI Timeline_IAMTimeline_SetInterestRange(IAMTimeline *iface, REFERENCE_TIME start,
265                                                             REFERENCE_TIME stop)
266 {
267     TimelineImpl *This = impl_from_IAMTimeline(iface);
268     FIXME("(%p)->(%s,%s): not implemented!\n", This, wine_dbgstr_longlong(start),
269           wine_dbgstr_longlong(stop));
270     return E_NOTIMPL;
271 }
272 
Timeline_IAMTimeline_GetDuration(IAMTimeline * iface,REFERENCE_TIME * duration)273 static HRESULT WINAPI Timeline_IAMTimeline_GetDuration(IAMTimeline *iface, REFERENCE_TIME *duration)
274 {
275     TimelineImpl *This = impl_from_IAMTimeline(iface);
276     FIXME("(%p)->(%p): not implemented!\n", This, duration);
277     return E_NOTIMPL;
278 }
279 
Timeline_IAMTimeline_GetDuration2(IAMTimeline * iface,double * duration)280 static HRESULT WINAPI Timeline_IAMTimeline_GetDuration2(IAMTimeline *iface, double *duration)
281 {
282     TimelineImpl *This = impl_from_IAMTimeline(iface);
283     FIXME("(%p)->(%p): not implemented!\n", This, duration);
284     return E_NOTIMPL;
285 }
286 
Timeline_IAMTimeline_SetDefaultFPS(IAMTimeline * iface,double fps)287 static HRESULT WINAPI Timeline_IAMTimeline_SetDefaultFPS(IAMTimeline *iface, double fps)
288 {
289     TimelineImpl *This = impl_from_IAMTimeline(iface);
290     FIXME("(%p)->(%f): not implemented!\n", This, fps);
291     return E_NOTIMPL;
292 }
293 
Timeline_IAMTimeline_GetDefaultFPS(IAMTimeline * iface,double * fps)294 static HRESULT WINAPI Timeline_IAMTimeline_GetDefaultFPS(IAMTimeline *iface, double *fps)
295 {
296     TimelineImpl *This = impl_from_IAMTimeline(iface);
297     FIXME("(%p)->(%p): not implemented!\n", This, fps);
298     return E_NOTIMPL;
299 }
300 
Timeline_IAMTimeline_IsDirty(IAMTimeline * iface,BOOL * dirty)301 static HRESULT WINAPI Timeline_IAMTimeline_IsDirty(IAMTimeline *iface, BOOL *dirty)
302 {
303     TimelineImpl *This = impl_from_IAMTimeline(iface);
304     FIXME("(%p)->(%p): not implemented!\n", This, dirty);
305     return E_NOTIMPL;
306 }
307 
Timeline_IAMTimeline_GetDirtyRange(IAMTimeline * iface,REFERENCE_TIME * start,REFERENCE_TIME * stop)308 static HRESULT WINAPI Timeline_IAMTimeline_GetDirtyRange(IAMTimeline *iface, REFERENCE_TIME *start,
309                                                          REFERENCE_TIME *stop)
310 {
311     TimelineImpl *This = impl_from_IAMTimeline(iface);
312     FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
313     return E_NOTIMPL;
314 }
315 
Timeline_IAMTimeline_GetCountOfType(IAMTimeline * iface,LONG group,LONG * value,LONG * value_with_comps,TIMELINE_MAJOR_TYPE type)316 static HRESULT WINAPI Timeline_IAMTimeline_GetCountOfType(IAMTimeline *iface, LONG group, LONG *value,
317                                                           LONG *value_with_comps, TIMELINE_MAJOR_TYPE type)
318 {
319     TimelineImpl *This = impl_from_IAMTimeline(iface);
320     FIXME("(%p)->(%d,%p,%p,%04x): not implemented!\n", This, group, value, value_with_comps, type);
321     return E_NOTIMPL;
322 }
323 
Timeline_IAMTimeline_ValidateSourceNames(IAMTimeline * iface,LONG flags,IMediaLocator * override,LONG_PTR notify_event)324 static HRESULT WINAPI Timeline_IAMTimeline_ValidateSourceNames(IAMTimeline *iface, LONG flags, IMediaLocator *override,
325                                                                LONG_PTR notify_event)
326 {
327     TimelineImpl *This = impl_from_IAMTimeline(iface);
328     FIXME("(%p)->(%d,%p,%lx): not implemented!\n", This, flags, override, notify_event);
329     return E_NOTIMPL;
330 }
331 
Timeline_IAMTimeline_SetDefaultTransition(IAMTimeline * iface,GUID * guid)332 static HRESULT WINAPI Timeline_IAMTimeline_SetDefaultTransition(IAMTimeline *iface, GUID *guid)
333 {
334     TimelineImpl *This = impl_from_IAMTimeline(iface);
335     FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_guid(guid));
336     return E_NOTIMPL;
337 }
338 
Timeline_IAMTimeline_GetDefaultTransition(IAMTimeline * iface,GUID * guid)339 static HRESULT WINAPI Timeline_IAMTimeline_GetDefaultTransition(IAMTimeline *iface, GUID *guid)
340 {
341     TimelineImpl *This = impl_from_IAMTimeline(iface);
342     FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_guid(guid));
343     return E_NOTIMPL;
344 }
345 
Timeline_IAMTimeline_SetDefaultEffect(IAMTimeline * iface,GUID * guid)346 static HRESULT WINAPI Timeline_IAMTimeline_SetDefaultEffect(IAMTimeline *iface, GUID *guid)
347 {
348     TimelineImpl *This = impl_from_IAMTimeline(iface);
349     FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_guid(guid));
350     return E_NOTIMPL;
351 }
352 
Timeline_IAMTimeline_GetDefaultEffect(IAMTimeline * iface,GUID * guid)353 static HRESULT WINAPI Timeline_IAMTimeline_GetDefaultEffect(IAMTimeline *iface, GUID *guid)
354 {
355     TimelineImpl *This = impl_from_IAMTimeline(iface);
356     FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_guid(guid));
357     return E_NOTIMPL;
358 }
359 
Timeline_IAMTimeline_SetDefaultTransitionB(IAMTimeline * iface,BSTR guidb)360 static HRESULT WINAPI Timeline_IAMTimeline_SetDefaultTransitionB(IAMTimeline *iface, BSTR guidb)
361 {
362     TimelineImpl *This = impl_from_IAMTimeline(iface);
363     FIXME("(%p)->(%p): not implemented!\n", This, guidb);
364     return E_NOTIMPL;
365 }
366 
Timeline_IAMTimeline_GetDefaultTransitionB(IAMTimeline * iface,BSTR * guidb)367 static HRESULT WINAPI Timeline_IAMTimeline_GetDefaultTransitionB(IAMTimeline *iface, BSTR *guidb)
368 {
369     TimelineImpl *This = impl_from_IAMTimeline(iface);
370     FIXME("(%p)->(%p): not implemented!\n", This, guidb);
371     return E_NOTIMPL;
372 }
373 
Timeline_IAMTimeline_SetDefaultEffectB(IAMTimeline * iface,BSTR guidb)374 static HRESULT WINAPI Timeline_IAMTimeline_SetDefaultEffectB(IAMTimeline *iface, BSTR guidb)
375 {
376     TimelineImpl *This = impl_from_IAMTimeline(iface);
377     FIXME("(%p)->(%p): not implemented!\n", This, guidb);
378     return E_NOTIMPL;
379 }
380 
Timeline_IAMTimeline_GetDefaultEffectB(IAMTimeline * iface,BSTR * guidb)381 static HRESULT WINAPI Timeline_IAMTimeline_GetDefaultEffectB(IAMTimeline *iface, BSTR *guidb)
382 {
383     TimelineImpl *This = impl_from_IAMTimeline(iface);
384     FIXME("(%p)->(%p): not implemented!\n", This, guidb);
385     return E_NOTIMPL;
386 }
387 
388 static const IAMTimelineVtbl IAMTimeline_VTable =
389 {
390     Timeline_IAMTimeline_QueryInterface,
391     Timeline_IAMTimeline_AddRef,
392     Timeline_IAMTimeline_Release,
393     Timeline_IAMTimeline_CreateEmptyNode,
394     Timeline_IAMTimeline_AddGroup,
395     Timeline_IAMTimeline_RemGroupFromList,
396     Timeline_IAMTimeline_GetGroup,
397     Timeline_IAMTimeline_GetGroupCount,
398     Timeline_IAMTimeline_ClearAllGroups,
399     Timeline_IAMTimeline_GetInsertMode,
400     Timeline_IAMTimeline_SetInsertMode,
401     Timeline_IAMTimeline_EnableTransitions,
402     Timeline_IAMTimeline_TransitionsEnabled,
403     Timeline_IAMTimeline_EnableEffects,
404     Timeline_IAMTimeline_EffectsEnabled,
405     Timeline_IAMTimeline_SetInterestRange,
406     Timeline_IAMTimeline_GetDuration,
407     Timeline_IAMTimeline_GetDuration2,
408     Timeline_IAMTimeline_SetDefaultFPS,
409     Timeline_IAMTimeline_GetDefaultFPS,
410     Timeline_IAMTimeline_IsDirty,
411     Timeline_IAMTimeline_GetDirtyRange,
412     Timeline_IAMTimeline_GetCountOfType,
413     Timeline_IAMTimeline_ValidateSourceNames,
414     Timeline_IAMTimeline_SetDefaultTransition,
415     Timeline_IAMTimeline_GetDefaultTransition,
416     Timeline_IAMTimeline_SetDefaultEffect,
417     Timeline_IAMTimeline_GetDefaultEffect,
418     Timeline_IAMTimeline_SetDefaultTransitionB,
419     Timeline_IAMTimeline_GetDefaultTransitionB,
420     Timeline_IAMTimeline_SetDefaultEffectB,
421     Timeline_IAMTimeline_GetDefaultEffectB,
422 };
423 
AMTimeline_create(IUnknown * pUnkOuter,LPVOID * ppv)424 HRESULT AMTimeline_create(IUnknown *pUnkOuter, LPVOID *ppv)
425 {
426     TimelineImpl* obj = NULL;
427 
428     TRACE("(%p,%p)\n", pUnkOuter, ppv);
429 
430     obj = CoTaskMemAlloc(sizeof(TimelineImpl));
431     if (NULL == obj) {
432         *ppv = NULL;
433         return E_OUTOFMEMORY;
434     }
435     ZeroMemory(obj, sizeof(TimelineImpl));
436 
437     obj->ref = 1;
438     obj->IUnknown_inner.lpVtbl = &timeline_vtbl;
439     obj->IAMTimeline_iface.lpVtbl = &IAMTimeline_VTable;
440 
441     if (pUnkOuter)
442         obj->outer_unk = pUnkOuter;
443     else
444         obj->outer_unk = &obj->IUnknown_inner;
445 
446     *ppv = &obj->IUnknown_inner;
447     return S_OK;
448 }
449 
450 /* IAMTimelineObj implementation */
451 
TimelineObj_QueryInterface(IAMTimelineObj * iface,REFIID riid,void ** ppv)452 static HRESULT WINAPI TimelineObj_QueryInterface(IAMTimelineObj *iface, REFIID riid, void **ppv)
453 {
454     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
455 
456     TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
457 
458     if (!ppv)
459         return E_POINTER;
460 
461     *ppv = NULL;
462     if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IAMTimelineObj))
463         *ppv = &This->IAMTimelineObj_iface;
464     else if (IsEqualIID(riid, &IID_IAMTimelineGroup))
465         *ppv = &This->IAMTimelineGroup_iface;
466     else
467         WARN("(%p, %s,%p): not found\n", This, debugstr_guid(riid), ppv);
468 
469     if (!*ppv)
470         return E_NOINTERFACE;
471 
472     IUnknown_AddRef((IUnknown*)*ppv);
473     return S_OK;
474 }
475 
TimelineObj_AddRef(IAMTimelineObj * iface)476 static ULONG WINAPI TimelineObj_AddRef(IAMTimelineObj *iface)
477 {
478     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
479     ULONG ref = InterlockedIncrement(&This->ref);
480 
481     TRACE("(%p) new ref = %u\n", This, ref);
482 
483     return ref;
484 }
485 
TimelineObj_Release(IAMTimelineObj * iface)486 static ULONG WINAPI TimelineObj_Release(IAMTimelineObj *iface)
487 {
488     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
489     ULONG ref = InterlockedDecrement(&This->ref);
490 
491     TRACE("(%p) new ref = %u\n", This, ref);
492 
493     if (!ref)
494         CoTaskMemFree(This);
495 
496     return ref;
497 }
498 
TimelineObj_GetStartStop(IAMTimelineObj * iface,REFERENCE_TIME * start,REFERENCE_TIME * stop)499 static HRESULT WINAPI TimelineObj_GetStartStop(IAMTimelineObj *iface, REFERENCE_TIME *start, REFERENCE_TIME *stop)
500 {
501     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
502     FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
503     return E_NOTIMPL;
504 }
505 
TimelineObj_GetStartStop2(IAMTimelineObj * iface,REFTIME * start,REFTIME * stop)506 static HRESULT WINAPI TimelineObj_GetStartStop2(IAMTimelineObj *iface, REFTIME *start, REFTIME *stop)
507 {
508     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
509     FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
510     return E_NOTIMPL;
511 }
512 
TimelineObj_FixTimes(IAMTimelineObj * iface,REFERENCE_TIME * start,REFERENCE_TIME * stop)513 static HRESULT WINAPI TimelineObj_FixTimes(IAMTimelineObj *iface, REFERENCE_TIME *start, REFERENCE_TIME *stop)
514 {
515     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
516     FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
517     return E_NOTIMPL;
518 }
519 
TimelineObj_FixTimes2(IAMTimelineObj * iface,REFTIME * start,REFTIME * stop)520 static HRESULT WINAPI TimelineObj_FixTimes2(IAMTimelineObj *iface, REFTIME *start, REFTIME *stop)
521 {
522     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
523     FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
524     return E_NOTIMPL;
525 }
526 
TimelineObj_SetStartStop(IAMTimelineObj * iface,REFERENCE_TIME start,REFERENCE_TIME stop)527 static HRESULT WINAPI TimelineObj_SetStartStop(IAMTimelineObj *iface, REFERENCE_TIME start, REFERENCE_TIME stop)
528 {
529     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
530     FIXME("(%p)->(%s,%s): not implemented!\n", This, wine_dbgstr_longlong(start), wine_dbgstr_longlong(stop));
531     return E_NOTIMPL;
532 }
533 
TimelineObj_SetStartStop2(IAMTimelineObj * iface,REFTIME start,REFTIME stop)534 static HRESULT WINAPI TimelineObj_SetStartStop2(IAMTimelineObj *iface, REFTIME start, REFTIME stop)
535 {
536     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
537     FIXME("(%p)->(%f,%f): not implemented!\n", This, start, stop);
538     return E_NOTIMPL;
539 }
540 
TimelineObj_GetPropertySetter(IAMTimelineObj * iface,IPropertySetter ** setter)541 static HRESULT WINAPI TimelineObj_GetPropertySetter(IAMTimelineObj *iface, IPropertySetter **setter)
542 {
543     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
544     FIXME("(%p)->(%p): not implemented!\n", This, setter);
545     return E_NOTIMPL;
546 }
547 
TimelineObj_SetPropertySetter(IAMTimelineObj * iface,IPropertySetter * setter)548 static HRESULT WINAPI TimelineObj_SetPropertySetter(IAMTimelineObj *iface, IPropertySetter *setter)
549 {
550     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
551     FIXME("(%p)->(%p): not implemented!\n", This, setter);
552     return E_NOTIMPL;
553 }
554 
TimelineObj_GetSubObject(IAMTimelineObj * iface,IUnknown ** obj)555 static HRESULT WINAPI TimelineObj_GetSubObject(IAMTimelineObj *iface, IUnknown **obj)
556 {
557     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
558     FIXME("(%p)->(%p): not implemented!\n", This, obj);
559     return E_NOTIMPL;
560 }
561 
TimelineObj_SetSubObject(IAMTimelineObj * iface,IUnknown * obj)562 static HRESULT WINAPI TimelineObj_SetSubObject(IAMTimelineObj *iface, IUnknown *obj)
563 {
564     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
565     FIXME("(%p)->(%p): not implemented!\n", This, obj);
566     return E_NOTIMPL;
567 }
568 
TimelineObj_SetSubObjectGUID(IAMTimelineObj * iface,GUID guid)569 static HRESULT WINAPI TimelineObj_SetSubObjectGUID(IAMTimelineObj *iface, GUID guid)
570 {
571     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
572     FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_guid(&guid));
573     return E_NOTIMPL;
574 }
575 
TimelineObj_SetSubObjectGUIDB(IAMTimelineObj * iface,BSTR guidb)576 static HRESULT WINAPI TimelineObj_SetSubObjectGUIDB(IAMTimelineObj *iface, BSTR guidb)
577 {
578     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
579     FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_w(guidb));
580     return E_NOTIMPL;
581 }
582 
TimelineObj_GetSubObjectGUID(IAMTimelineObj * iface,GUID * guid)583 static HRESULT WINAPI TimelineObj_GetSubObjectGUID(IAMTimelineObj *iface, GUID *guid)
584 {
585     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
586     FIXME("(%p)->(%p): not implemented!\n", This, guid);
587     return E_NOTIMPL;
588 }
589 
TimelineObj_GetSubObjectGUIDB(IAMTimelineObj * iface,BSTR * guidb)590 static HRESULT WINAPI TimelineObj_GetSubObjectGUIDB(IAMTimelineObj *iface, BSTR *guidb)
591 {
592     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
593     FIXME("(%p)->(%p): not implemented!\n", This, guidb);
594     return E_NOTIMPL;
595 }
596 
TimelineObj_GetSubObjectLoaded(IAMTimelineObj * iface,BOOL * loaded)597 static HRESULT WINAPI TimelineObj_GetSubObjectLoaded(IAMTimelineObj *iface, BOOL *loaded)
598 {
599     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
600     FIXME("(%p)->(%p): not implemented!\n", This, loaded);
601     return E_NOTIMPL;
602 }
603 
TimelineObj_GetTimelineType(IAMTimelineObj * iface,TIMELINE_MAJOR_TYPE * type)604 static HRESULT WINAPI TimelineObj_GetTimelineType(IAMTimelineObj *iface, TIMELINE_MAJOR_TYPE *type)
605 {
606     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
607     TRACE("(%p)->(%p)\n", This, type);
608     if (!type) return E_POINTER;
609     *type = This->timeline_type;
610     return S_OK;
611 }
612 
TimelineObj_SetTimelineType(IAMTimelineObj * iface,TIMELINE_MAJOR_TYPE type)613 static HRESULT WINAPI TimelineObj_SetTimelineType(IAMTimelineObj *iface, TIMELINE_MAJOR_TYPE type)
614 {
615     /* MSDN says that this function is "not supported" */
616     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
617     TRACE("(%p)->(%d)\n", This, type);
618     if (type != This->timeline_type) return E_INVALIDARG;
619     return S_OK;
620 }
621 
TimelineObj_GetUserID(IAMTimelineObj * iface,LONG * id)622 static HRESULT WINAPI TimelineObj_GetUserID(IAMTimelineObj *iface, LONG *id)
623 {
624     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
625     FIXME("(%p)->(%p): not implemented!\n", This, id);
626     return E_NOTIMPL;
627 }
628 
TimelineObj_SetUserID(IAMTimelineObj * iface,LONG id)629 static HRESULT WINAPI TimelineObj_SetUserID(IAMTimelineObj *iface, LONG id)
630 {
631     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
632     FIXME("(%p)->(%d): not implemented!\n", This, id);
633     return E_NOTIMPL;
634 }
635 
TimelineObj_GetGenID(IAMTimelineObj * iface,LONG * id)636 static HRESULT WINAPI TimelineObj_GetGenID(IAMTimelineObj *iface, LONG *id)
637 {
638     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
639     FIXME("(%p)->(%p): not implemented!\n", This, id);
640     return E_NOTIMPL;
641 }
642 
TimelineObj_GetUserName(IAMTimelineObj * iface,BSTR * name)643 static HRESULT WINAPI TimelineObj_GetUserName(IAMTimelineObj *iface, BSTR *name)
644 {
645     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
646     FIXME("(%p)->(%p): not implemented!\n", This, name);
647     return E_NOTIMPL;
648 }
649 
TimelineObj_SetUserName(IAMTimelineObj * iface,BSTR name)650 static HRESULT WINAPI TimelineObj_SetUserName(IAMTimelineObj *iface, BSTR name)
651 {
652     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
653     FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_w(name));
654     return E_NOTIMPL;
655 }
656 
TimelineObj_GetUserData(IAMTimelineObj * iface,BYTE * data,LONG * size)657 static HRESULT WINAPI TimelineObj_GetUserData(IAMTimelineObj *iface, BYTE *data, LONG *size)
658 {
659     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
660     FIXME("(%p)->(%p,%p): not implemented!\n", This, data, size);
661     return E_NOTIMPL;
662 }
663 
TimelineObj_SetUserData(IAMTimelineObj * iface,BYTE * data,LONG size)664 static HRESULT WINAPI TimelineObj_SetUserData(IAMTimelineObj *iface, BYTE *data, LONG size)
665 {
666     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
667     FIXME("(%p)->(%p,%d): not implemented!\n", This, data, size);
668     return E_NOTIMPL;
669 }
670 
TimelineObj_GetMuted(IAMTimelineObj * iface,BOOL * muted)671 static HRESULT WINAPI TimelineObj_GetMuted(IAMTimelineObj *iface, BOOL *muted)
672 {
673     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
674     FIXME("(%p)->(%p): not implemented!\n", This, muted);
675     return E_NOTIMPL;
676 }
677 
TimelineObj_SetMuted(IAMTimelineObj * iface,BOOL muted)678 static HRESULT WINAPI TimelineObj_SetMuted(IAMTimelineObj *iface, BOOL muted)
679 {
680     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
681     FIXME("(%p)->(%d): not implemented!\n", This, muted);
682     return E_NOTIMPL;
683 }
684 
TimelineObj_GetLocked(IAMTimelineObj * iface,BOOL * locked)685 static HRESULT WINAPI TimelineObj_GetLocked(IAMTimelineObj *iface, BOOL *locked)
686 {
687     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
688     FIXME("(%p)->(%p): not implemented!\n", This, locked);
689     return E_NOTIMPL;
690 }
691 
TimelineObj_SetLocked(IAMTimelineObj * iface,BOOL locked)692 static HRESULT WINAPI TimelineObj_SetLocked(IAMTimelineObj *iface, BOOL locked)
693 {
694     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
695     FIXME("(%p)->(%d): not implemented!\n", This, locked);
696     return E_NOTIMPL;
697 }
698 
TimelineObj_GetDirtyRange(IAMTimelineObj * iface,REFERENCE_TIME * start,REFERENCE_TIME * stop)699 static HRESULT WINAPI TimelineObj_GetDirtyRange(IAMTimelineObj *iface, REFERENCE_TIME *start, REFERENCE_TIME *stop)
700 {
701     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
702     FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
703     return E_NOTIMPL;
704 }
705 
TimelineObj_GetDirtyRange2(IAMTimelineObj * iface,REFTIME * start,REFTIME * stop)706 static HRESULT WINAPI TimelineObj_GetDirtyRange2(IAMTimelineObj *iface, REFTIME *start, REFTIME *stop)
707 {
708     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
709     FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
710     return E_NOTIMPL;
711 }
712 
TimelineObj_SetDirtyRange(IAMTimelineObj * iface,REFERENCE_TIME start,REFERENCE_TIME stop)713 static HRESULT WINAPI TimelineObj_SetDirtyRange(IAMTimelineObj *iface, REFERENCE_TIME start, REFERENCE_TIME stop)
714 {
715     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
716     FIXME("(%p)->(%s,%s): not implemented!\n", This, wine_dbgstr_longlong(start), wine_dbgstr_longlong(stop));
717     return E_NOTIMPL;
718 }
719 
TimelineObj_SetDirtyRange2(IAMTimelineObj * iface,REFTIME start,REFTIME stop)720 static HRESULT WINAPI TimelineObj_SetDirtyRange2(IAMTimelineObj *iface, REFTIME start, REFTIME stop)
721 {
722     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
723     FIXME("(%p)->(%f,%f): not implemented!\n", This, start, stop);
724     return E_NOTIMPL;
725 }
726 
TimelineObj_ClearDirty(IAMTimelineObj * iface)727 static HRESULT WINAPI TimelineObj_ClearDirty(IAMTimelineObj *iface)
728 {
729     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
730     FIXME("(%p): not implemented!\n", This);
731     return E_NOTIMPL;
732 }
733 
TimelineObj_Remove(IAMTimelineObj * iface)734 static HRESULT WINAPI TimelineObj_Remove(IAMTimelineObj *iface)
735 {
736     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
737     FIXME("(%p): not implemented!\n", This);
738     return E_NOTIMPL;
739 }
740 
TimelineObj_RemoveAll(IAMTimelineObj * iface)741 static HRESULT WINAPI TimelineObj_RemoveAll(IAMTimelineObj *iface)
742 {
743     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
744     FIXME("(%p): not implemented!\n", This);
745     return E_NOTIMPL;
746 }
747 
TimelineObj_GetTimelineNoRef(IAMTimelineObj * iface,IAMTimeline ** timeline)748 static HRESULT WINAPI TimelineObj_GetTimelineNoRef(IAMTimelineObj *iface, IAMTimeline **timeline)
749 {
750     /* MSDN says that this function is "not supported" */
751     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
752     TRACE("(%p)->(%p)\n", This, timeline);
753     if (!timeline) return E_POINTER;
754     *timeline = NULL;
755     return E_NOINTERFACE;
756 }
757 
TimelineObj_GetGroupIBelongTo(IAMTimelineObj * iface,IAMTimelineGroup ** group)758 static HRESULT WINAPI TimelineObj_GetGroupIBelongTo(IAMTimelineObj *iface, IAMTimelineGroup **group)
759 {
760     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
761     FIXME("(%p)->(%p): not implemented!\n", This, group);
762     return E_NOTIMPL;
763 }
764 
TimelineObj_GetEmbedDepth(IAMTimelineObj * iface,LONG * depth)765 static HRESULT WINAPI TimelineObj_GetEmbedDepth(IAMTimelineObj *iface, LONG *depth)
766 {
767     TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
768     FIXME("(%p)->(%p): not implemented!\n", This, depth);
769     return E_NOTIMPL;
770 }
771 
772 static const IAMTimelineObjVtbl IAMTimelineObj_VTable =
773 {
774     TimelineObj_QueryInterface,
775     TimelineObj_AddRef,
776     TimelineObj_Release,
777     TimelineObj_GetStartStop,
778     TimelineObj_GetStartStop2,
779     TimelineObj_FixTimes,
780     TimelineObj_FixTimes2,
781     TimelineObj_SetStartStop,
782     TimelineObj_SetStartStop2,
783     TimelineObj_GetPropertySetter,
784     TimelineObj_SetPropertySetter,
785     TimelineObj_GetSubObject,
786     TimelineObj_SetSubObject,
787     TimelineObj_SetSubObjectGUID,
788     TimelineObj_SetSubObjectGUIDB,
789     TimelineObj_GetSubObjectGUID,
790     TimelineObj_GetSubObjectGUIDB,
791     TimelineObj_GetSubObjectLoaded,
792     TimelineObj_GetTimelineType,
793     TimelineObj_SetTimelineType,
794     TimelineObj_GetUserID,
795     TimelineObj_SetUserID,
796     TimelineObj_GetGenID,
797     TimelineObj_GetUserName,
798     TimelineObj_SetUserName,
799     TimelineObj_GetUserData,
800     TimelineObj_SetUserData,
801     TimelineObj_GetMuted,
802     TimelineObj_SetMuted,
803     TimelineObj_GetLocked,
804     TimelineObj_SetLocked,
805     TimelineObj_GetDirtyRange,
806     TimelineObj_GetDirtyRange2,
807     TimelineObj_SetDirtyRange,
808     TimelineObj_SetDirtyRange2,
809     TimelineObj_ClearDirty,
810     TimelineObj_Remove,
811     TimelineObj_RemoveAll,
812     TimelineObj_GetTimelineNoRef,
813     TimelineObj_GetGroupIBelongTo,
814     TimelineObj_GetEmbedDepth,
815 };
816 
timelinegrp_QueryInterface(IAMTimelineGroup * iface,REFIID riid,void ** object)817 static HRESULT WINAPI timelinegrp_QueryInterface(IAMTimelineGroup *iface, REFIID riid, void **object)
818 {
819     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
820     return IAMTimelineObj_QueryInterface(&This->IAMTimelineObj_iface, riid, object);
821 }
822 
timelinegrp_AddRef(IAMTimelineGroup * iface)823 static ULONG WINAPI timelinegrp_AddRef(IAMTimelineGroup *iface)
824 {
825     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
826     return IAMTimelineObj_AddRef(&This->IAMTimelineObj_iface);
827 }
828 
timelinegrp_Release(IAMTimelineGroup * iface)829 static ULONG WINAPI timelinegrp_Release(IAMTimelineGroup *iface)
830 {
831     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
832     return IAMTimelineObj_Release(&This->IAMTimelineObj_iface);
833 }
834 
timelinegrp_SetTimeline(IAMTimelineGroup * iface,IAMTimeline * timeline)835 static HRESULT WINAPI timelinegrp_SetTimeline(IAMTimelineGroup *iface, IAMTimeline *timeline)
836 {
837     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
838     FIXME("(%p)->(%p)\n", This, timeline);
839     return E_NOTIMPL;
840 }
841 
timelinegrp_GetTimeline(IAMTimelineGroup * iface,IAMTimeline ** timeline)842 static HRESULT WINAPI timelinegrp_GetTimeline(IAMTimelineGroup *iface, IAMTimeline **timeline)
843 {
844     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
845     FIXME("(%p)->(%p)\n", This, timeline);
846     return E_NOTIMPL;
847 }
848 
timelinegrp_GetPriority(IAMTimelineGroup * iface,LONG * priority)849 static HRESULT WINAPI timelinegrp_GetPriority(IAMTimelineGroup *iface, LONG *priority)
850 {
851     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
852     FIXME("(%p)->(%p)\n", This, priority);
853     return E_NOTIMPL;
854 }
855 
timelinegrp_GetMediaType(IAMTimelineGroup * iface,AM_MEDIA_TYPE * mediatype)856 static HRESULT WINAPI timelinegrp_GetMediaType(IAMTimelineGroup *iface, AM_MEDIA_TYPE *mediatype)
857 {
858     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
859     FIXME("(%p)->(%p)\n", This, mediatype);
860     return E_NOTIMPL;
861 }
862 
timelinegrp_SetMediaType(IAMTimelineGroup * iface,AM_MEDIA_TYPE * mediatype)863 static HRESULT WINAPI timelinegrp_SetMediaType(IAMTimelineGroup *iface, AM_MEDIA_TYPE *mediatype)
864 {
865     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
866     FIXME("(%p)->(%p)\n", This, mediatype);
867     return E_NOTIMPL;
868 }
869 
timelinegrp_SetOutputFPS(IAMTimelineGroup * iface,double fps)870 static HRESULT WINAPI timelinegrp_SetOutputFPS(IAMTimelineGroup *iface, double fps)
871 {
872     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
873     FIXME("(%p)->(%f)\n", This, fps);
874     return E_NOTIMPL;
875 }
876 
timelinegrp_GetOutputFPS(IAMTimelineGroup * iface,double * fps)877 static HRESULT WINAPI timelinegrp_GetOutputFPS(IAMTimelineGroup *iface, double *fps)
878 {
879     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
880     FIXME("(%p)->(%p)\n", This, fps);
881     return E_NOTIMPL;
882 }
883 
timelinegrp_SetGroupName(IAMTimelineGroup * iface,BSTR name)884 static HRESULT WINAPI timelinegrp_SetGroupName(IAMTimelineGroup *iface, BSTR name)
885 {
886     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
887     FIXME("(%p)->(%s)\n", This, debugstr_w(name));
888     return E_NOTIMPL;
889 }
890 
timelinegrp_GetGroupName(IAMTimelineGroup * iface,BSTR * name)891 static HRESULT WINAPI timelinegrp_GetGroupName(IAMTimelineGroup *iface, BSTR *name)
892 {
893     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
894     FIXME("(%p)->(%p)\n", This, name);
895     return E_NOTIMPL;
896 }
897 
timelinegrp_SetPreviewMode(IAMTimelineGroup * iface,BOOL preview)898 static HRESULT WINAPI timelinegrp_SetPreviewMode(IAMTimelineGroup *iface, BOOL preview)
899 {
900     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
901     FIXME("(%p)->(%d)\n", This, preview);
902     return E_NOTIMPL;
903 }
904 
timelinegrp_GetPreviewMode(IAMTimelineGroup * iface,BOOL * preview)905 static HRESULT WINAPI timelinegrp_GetPreviewMode(IAMTimelineGroup *iface, BOOL *preview)
906 {
907     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
908     FIXME("(%p)->(%p)\n", This, preview);
909     return E_NOTIMPL;
910 }
911 
timelinegrp_SetMediaTypeForVB(IAMTimelineGroup * iface,LONG type)912 static HRESULT WINAPI timelinegrp_SetMediaTypeForVB(IAMTimelineGroup *iface, LONG type)
913 {
914     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
915     FIXME("(%p)->(%d)\n", This, type);
916     return E_NOTIMPL;
917 }
918 
timelinegrp_GetOutputBuffering(IAMTimelineGroup * iface,int * buffer)919 static HRESULT WINAPI timelinegrp_GetOutputBuffering(IAMTimelineGroup *iface, int *buffer)
920 {
921     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
922     FIXME("(%p)->(%p)\n", This, buffer);
923     return E_NOTIMPL;
924 }
925 
timelinegrp_SetOutputBuffering(IAMTimelineGroup * iface,int buffer)926 static HRESULT WINAPI timelinegrp_SetOutputBuffering(IAMTimelineGroup *iface, int buffer)
927 {
928     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
929     FIXME("(%p)->(%d)\n", This, buffer);
930     return E_NOTIMPL;
931 }
932 
timelinegrp_SetSmartRecompressFormat(IAMTimelineGroup * iface,LONG * format)933 static HRESULT WINAPI timelinegrp_SetSmartRecompressFormat(IAMTimelineGroup *iface, LONG *format)
934 {
935     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
936     FIXME("(%p)->(%p)\n", This, format);
937     return E_NOTIMPL;
938 }
939 
timelinegrp_GetSmartRecompressFormat(IAMTimelineGroup * iface,LONG ** format)940 static HRESULT WINAPI timelinegrp_GetSmartRecompressFormat(IAMTimelineGroup *iface, LONG **format)
941 {
942     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
943     FIXME("(%p)->(%p)\n", This, format);
944     return E_NOTIMPL;
945 }
946 
timelinegrp_IsSmartRecompressFormatSet(IAMTimelineGroup * iface,BOOL * set)947 static HRESULT WINAPI timelinegrp_IsSmartRecompressFormatSet(IAMTimelineGroup *iface, BOOL *set)
948 {
949     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
950     FIXME("(%p)->(%p)\n", This, set);
951     return E_NOTIMPL;
952 }
953 
timelinegrp_IsRecompressFormatDirty(IAMTimelineGroup * iface,BOOL * dirty)954 static HRESULT WINAPI timelinegrp_IsRecompressFormatDirty(IAMTimelineGroup *iface, BOOL *dirty)
955 {
956     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
957     FIXME("(%p)->(%p)\n", This, dirty);
958     return E_NOTIMPL;
959 }
960 
timelinegrp_ClearRecompressFormatDirty(IAMTimelineGroup * iface)961 static HRESULT WINAPI timelinegrp_ClearRecompressFormatDirty(IAMTimelineGroup *iface)
962 {
963     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
964     FIXME("(%p)->()\n", This);
965     return E_NOTIMPL;
966 }
967 
timelinegrp_SetRecompFormatFromSource(IAMTimelineGroup * iface,IAMTimelineSrc * source)968 static HRESULT WINAPI timelinegrp_SetRecompFormatFromSource(IAMTimelineGroup *iface, IAMTimelineSrc *source)
969 {
970     TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
971     FIXME("(%p)->(%p)\n", This, source);
972     return E_NOTIMPL;
973 }
974 
975 static const IAMTimelineGroupVtbl IAMTimelineGroup_VTable =
976 {
977     timelinegrp_QueryInterface,
978     timelinegrp_AddRef,
979     timelinegrp_Release,
980     timelinegrp_SetTimeline,
981     timelinegrp_GetTimeline,
982     timelinegrp_GetPriority,
983     timelinegrp_GetMediaType,
984     timelinegrp_SetMediaType,
985     timelinegrp_SetOutputFPS,
986     timelinegrp_GetOutputFPS,
987     timelinegrp_SetGroupName,
988     timelinegrp_GetGroupName,
989     timelinegrp_SetPreviewMode,
990     timelinegrp_GetPreviewMode,
991     timelinegrp_SetMediaTypeForVB,
992     timelinegrp_GetOutputBuffering,
993     timelinegrp_SetOutputBuffering,
994     timelinegrp_SetSmartRecompressFormat,
995     timelinegrp_GetSmartRecompressFormat,
996     timelinegrp_IsSmartRecompressFormatSet,
997     timelinegrp_IsRecompressFormatDirty,
998     timelinegrp_ClearRecompressFormatDirty,
999     timelinegrp_SetRecompFormatFromSource
1000 };
1001