9735c3b8387c45bfe6de3a2c51e248e90dc92873
[reactos.git] / dll / directx / wine / qedit / timeline.c
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 "qedit_private.h"
21
22 typedef struct {
23 IUnknown IUnknown_inner;
24 IAMTimeline IAMTimeline_iface;
25 IUnknown *outer_unk;
26 LONG ref;
27 } TimelineImpl;
28
29 static inline TimelineImpl *impl_from_IUnknown(IUnknown *iface)
30 {
31 return CONTAINING_RECORD(iface, TimelineImpl, IUnknown_inner);
32 }
33
34 static inline TimelineImpl *impl_from_IAMTimeline(IAMTimeline *iface)
35 {
36 return CONTAINING_RECORD(iface, TimelineImpl, IAMTimeline_iface);
37 }
38
39 typedef struct {
40 IAMTimelineObj IAMTimelineObj_iface;
41 LONG ref;
42 TIMELINE_MAJOR_TYPE timeline_type;
43 } TimelineObjImpl;
44
45 static inline TimelineObjImpl *impl_from_IAMTimelineObj(IAMTimelineObj *iface)
46 {
47 return CONTAINING_RECORD(iface, TimelineObjImpl, IAMTimelineObj_iface);
48 }
49
50 static const IAMTimelineObjVtbl IAMTimelineObj_VTable;
51
52 /* Timeline inner IUnknown */
53
54 static HRESULT WINAPI Timeline_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
55 {
56 TimelineImpl *This = impl_from_IUnknown(iface);
57
58 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
59
60 if (!ppv)
61 return E_POINTER;
62
63 *ppv = NULL;
64 if (IsEqualIID(riid, &IID_IUnknown))
65 *ppv = &This->IUnknown_inner;
66 else if (IsEqualIID(riid, &IID_IAMTimeline))
67 *ppv = &This->IAMTimeline_iface;
68 else
69 WARN("(%p, %s,%p): not found\n", This, debugstr_guid(riid), ppv);
70
71 if (!*ppv)
72 return E_NOINTERFACE;
73
74 IUnknown_AddRef((IUnknown*)*ppv);
75 return S_OK;
76 }
77
78 static ULONG WINAPI Timeline_AddRef(IUnknown *iface)
79 {
80 TimelineImpl *This = impl_from_IUnknown(iface);
81 ULONG ref = InterlockedIncrement(&This->ref);
82
83 TRACE("(%p) new ref = %u\n", This, ref);
84
85 return ref;
86 }
87
88 static ULONG WINAPI Timeline_Release(IUnknown *iface)
89 {
90 TimelineImpl *This = impl_from_IUnknown(iface);
91 ULONG ref = InterlockedDecrement(&This->ref);
92
93 TRACE("(%p) new ref = %u\n", This, ref);
94
95 if (ref == 0)
96 CoTaskMemFree(This);
97
98 return ref;
99 }
100
101 static const IUnknownVtbl timeline_vtbl =
102 {
103 Timeline_QueryInterface,
104 Timeline_AddRef,
105 Timeline_Release,
106 };
107
108 /* IAMTimeline implementation */
109
110 static HRESULT WINAPI Timeline_IAMTimeline_QueryInterface(IAMTimeline *iface, REFIID riid, void **ppv)
111 {
112 TimelineImpl *This = impl_from_IAMTimeline(iface);
113 return IUnknown_QueryInterface(This->outer_unk, riid, ppv);
114 }
115
116 static ULONG WINAPI Timeline_IAMTimeline_AddRef(IAMTimeline *iface)
117 {
118 TimelineImpl *This = impl_from_IAMTimeline(iface);
119 return IUnknown_AddRef(This->outer_unk);
120 }
121
122 static ULONG WINAPI Timeline_IAMTimeline_Release(IAMTimeline *iface)
123 {
124 TimelineImpl *This = impl_from_IAMTimeline(iface);
125 return IUnknown_Release(This->outer_unk);
126 }
127
128 static HRESULT WINAPI Timeline_IAMTimeline_CreateEmptyNode(IAMTimeline *iface, IAMTimelineObj **obj,
129 TIMELINE_MAJOR_TYPE type)
130 {
131 TimelineImpl *This = impl_from_IAMTimeline(iface);
132 TimelineObjImpl* obj_impl;
133
134 TRACE("(%p)->(%p,%d)\n", This, obj, type);
135
136 if (!obj)
137 return E_POINTER;
138
139 switch (type)
140 {
141 case TIMELINE_MAJOR_TYPE_COMPOSITE:
142 case TIMELINE_MAJOR_TYPE_TRACK:
143 case TIMELINE_MAJOR_TYPE_SOURCE:
144 case TIMELINE_MAJOR_TYPE_TRANSITION:
145 case TIMELINE_MAJOR_TYPE_EFFECT:
146 case TIMELINE_MAJOR_TYPE_GROUP:
147 break;
148 default:
149 return E_INVALIDARG;
150 }
151
152 obj_impl = CoTaskMemAlloc(sizeof(TimelineObjImpl));
153 if (!obj_impl) {
154 *obj = NULL;
155 return E_OUTOFMEMORY;
156 }
157
158 obj_impl->ref = 1;
159 obj_impl->IAMTimelineObj_iface.lpVtbl = &IAMTimelineObj_VTable;
160 obj_impl->timeline_type = type;
161
162 *obj = &obj_impl->IAMTimelineObj_iface;
163 return S_OK;
164 }
165
166 static HRESULT WINAPI Timeline_IAMTimeline_AddGroup(IAMTimeline *iface, IAMTimelineObj *group)
167 {
168 TimelineImpl *This = impl_from_IAMTimeline(iface);
169 FIXME("(%p)->(%p): not implemented!\n", This, group);
170 return E_NOTIMPL;
171 }
172
173 static HRESULT WINAPI Timeline_IAMTimeline_RemGroupFromList(IAMTimeline *iface, IAMTimelineObj *group)
174 {
175 TimelineImpl *This = impl_from_IAMTimeline(iface);
176 FIXME("(%p)->(%p): not implemented!\n", This, group);
177 return E_NOTIMPL;
178 }
179
180 static HRESULT WINAPI Timeline_IAMTimeline_GetGroup(IAMTimeline *iface, IAMTimelineObj **group, LONG index)
181 {
182 TimelineImpl *This = impl_from_IAMTimeline(iface);
183 FIXME("(%p)->(%p,%d): not implemented!\n", This, group, index);
184 return E_NOTIMPL;
185 }
186
187 static HRESULT WINAPI Timeline_IAMTimeline_GetGroupCount(IAMTimeline *iface, LONG *count)
188 {
189 TimelineImpl *This = impl_from_IAMTimeline(iface);
190 FIXME("(%p)->(%p): not implemented!\n", This, count);
191 return E_NOTIMPL;
192 }
193
194 static HRESULT WINAPI Timeline_IAMTimeline_ClearAllGroups(IAMTimeline *iface)
195 {
196 TimelineImpl *This = impl_from_IAMTimeline(iface);
197 FIXME("(%p): not implemented!\n", This);
198 return E_NOTIMPL;
199 }
200
201 static HRESULT WINAPI Timeline_IAMTimeline_GetInsertMode(IAMTimeline *iface, LONG *mode)
202 {
203 TimelineImpl *This = impl_from_IAMTimeline(iface);
204 FIXME("(%p)->(%p): not implemented!\n", This, mode);
205 return E_NOTIMPL;
206 }
207
208 static HRESULT WINAPI Timeline_IAMTimeline_SetInsertMode(IAMTimeline *iface, LONG mode)
209 {
210 TimelineImpl *This = impl_from_IAMTimeline(iface);
211 FIXME("(%p)->(%d): not implemented!\n", This, mode);
212 return E_NOTIMPL;
213 }
214
215 static HRESULT WINAPI Timeline_IAMTimeline_EnableTransitions(IAMTimeline *iface, BOOL enabled)
216 {
217 TimelineImpl *This = impl_from_IAMTimeline(iface);
218 FIXME("(%p)->(%d): not implemented!\n", This, enabled);
219 return E_NOTIMPL;
220 }
221
222 static HRESULT WINAPI Timeline_IAMTimeline_TransitionsEnabled(IAMTimeline *iface, BOOL *enabled)
223 {
224 TimelineImpl *This = impl_from_IAMTimeline(iface);
225 FIXME("(%p)->(%p): not implemented!\n", This, enabled);
226 return E_NOTIMPL;
227 }
228
229 static HRESULT WINAPI Timeline_IAMTimeline_EnableEffects(IAMTimeline *iface, BOOL enabled)
230 {
231 TimelineImpl *This = impl_from_IAMTimeline(iface);
232 FIXME("(%p)->(%d): not implemented!\n", This, enabled);
233 return E_NOTIMPL;
234 }
235
236 static HRESULT WINAPI Timeline_IAMTimeline_EffectsEnabled(IAMTimeline *iface, BOOL *enabled)
237 {
238 TimelineImpl *This = impl_from_IAMTimeline(iface);
239 FIXME("(%p)->(%p): not implemented!\n", This, enabled);
240 return E_NOTIMPL;
241 }
242
243 static HRESULT WINAPI Timeline_IAMTimeline_SetInterestRange(IAMTimeline *iface, REFERENCE_TIME start,
244 REFERENCE_TIME stop)
245 {
246 TimelineImpl *This = impl_from_IAMTimeline(iface);
247 FIXME("(%p)->(%s,%s): not implemented!\n", This, wine_dbgstr_longlong(start),
248 wine_dbgstr_longlong(stop));
249 return E_NOTIMPL;
250 }
251
252 static HRESULT WINAPI Timeline_IAMTimeline_GetDuration(IAMTimeline *iface, REFERENCE_TIME *duration)
253 {
254 TimelineImpl *This = impl_from_IAMTimeline(iface);
255 FIXME("(%p)->(%p): not implemented!\n", This, duration);
256 return E_NOTIMPL;
257 }
258
259 static HRESULT WINAPI Timeline_IAMTimeline_GetDuration2(IAMTimeline *iface, double *duration)
260 {
261 TimelineImpl *This = impl_from_IAMTimeline(iface);
262 FIXME("(%p)->(%p): not implemented!\n", This, duration);
263 return E_NOTIMPL;
264 }
265
266 static HRESULT WINAPI Timeline_IAMTimeline_SetDefaultFPS(IAMTimeline *iface, double fps)
267 {
268 TimelineImpl *This = impl_from_IAMTimeline(iface);
269 FIXME("(%p)->(%f): not implemented!\n", This, fps);
270 return E_NOTIMPL;
271 }
272
273 static HRESULT WINAPI Timeline_IAMTimeline_GetDefaultFPS(IAMTimeline *iface, double *fps)
274 {
275 TimelineImpl *This = impl_from_IAMTimeline(iface);
276 FIXME("(%p)->(%p): not implemented!\n", This, fps);
277 return E_NOTIMPL;
278 }
279
280 static HRESULT WINAPI Timeline_IAMTimeline_IsDirty(IAMTimeline *iface, BOOL *dirty)
281 {
282 TimelineImpl *This = impl_from_IAMTimeline(iface);
283 FIXME("(%p)->(%p): not implemented!\n", This, dirty);
284 return E_NOTIMPL;
285 }
286
287 static HRESULT WINAPI Timeline_IAMTimeline_GetDirtyRange(IAMTimeline *iface, REFERENCE_TIME *start,
288 REFERENCE_TIME *stop)
289 {
290 TimelineImpl *This = impl_from_IAMTimeline(iface);
291 FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
292 return E_NOTIMPL;
293 }
294
295 static HRESULT WINAPI Timeline_IAMTimeline_GetCountOfType(IAMTimeline *iface, LONG group, LONG *value,
296 LONG *value_with_comps, TIMELINE_MAJOR_TYPE type)
297 {
298 TimelineImpl *This = impl_from_IAMTimeline(iface);
299 FIXME("(%p)->(%d,%p,%p,%04x): not implemented!\n", This, group, value, value_with_comps, type);
300 return E_NOTIMPL;
301 }
302
303 static HRESULT WINAPI Timeline_IAMTimeline_ValidateSourceNames(IAMTimeline *iface, LONG flags, IMediaLocator *override,
304 LONG_PTR notify_event)
305 {
306 TimelineImpl *This = impl_from_IAMTimeline(iface);
307 FIXME("(%p)->(%d,%p,%lx): not implemented!\n", This, flags, override, notify_event);
308 return E_NOTIMPL;
309 }
310
311 static HRESULT WINAPI Timeline_IAMTimeline_SetDefaultTransition(IAMTimeline *iface, GUID *guid)
312 {
313 TimelineImpl *This = impl_from_IAMTimeline(iface);
314 FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_guid(guid));
315 return E_NOTIMPL;
316 }
317
318 static HRESULT WINAPI Timeline_IAMTimeline_GetDefaultTransition(IAMTimeline *iface, GUID *guid)
319 {
320 TimelineImpl *This = impl_from_IAMTimeline(iface);
321 FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_guid(guid));
322 return E_NOTIMPL;
323 }
324
325 static HRESULT WINAPI Timeline_IAMTimeline_SetDefaultEffect(IAMTimeline *iface, GUID *guid)
326 {
327 TimelineImpl *This = impl_from_IAMTimeline(iface);
328 FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_guid(guid));
329 return E_NOTIMPL;
330 }
331
332 static HRESULT WINAPI Timeline_IAMTimeline_GetDefaultEffect(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
339 static HRESULT WINAPI Timeline_IAMTimeline_SetDefaultTransitionB(IAMTimeline *iface, BSTR guidb)
340 {
341 TimelineImpl *This = impl_from_IAMTimeline(iface);
342 FIXME("(%p)->(%p): not implemented!\n", This, guidb);
343 return E_NOTIMPL;
344 }
345
346 static HRESULT WINAPI Timeline_IAMTimeline_GetDefaultTransitionB(IAMTimeline *iface, BSTR *guidb)
347 {
348 TimelineImpl *This = impl_from_IAMTimeline(iface);
349 FIXME("(%p)->(%p): not implemented!\n", This, guidb);
350 return E_NOTIMPL;
351 }
352
353 static HRESULT WINAPI Timeline_IAMTimeline_SetDefaultEffectB(IAMTimeline *iface, BSTR guidb)
354 {
355 TimelineImpl *This = impl_from_IAMTimeline(iface);
356 FIXME("(%p)->(%p): not implemented!\n", This, guidb);
357 return E_NOTIMPL;
358 }
359
360 static HRESULT WINAPI Timeline_IAMTimeline_GetDefaultEffectB(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
367 static const IAMTimelineVtbl IAMTimeline_VTable =
368 {
369 Timeline_IAMTimeline_QueryInterface,
370 Timeline_IAMTimeline_AddRef,
371 Timeline_IAMTimeline_Release,
372 Timeline_IAMTimeline_CreateEmptyNode,
373 Timeline_IAMTimeline_AddGroup,
374 Timeline_IAMTimeline_RemGroupFromList,
375 Timeline_IAMTimeline_GetGroup,
376 Timeline_IAMTimeline_GetGroupCount,
377 Timeline_IAMTimeline_ClearAllGroups,
378 Timeline_IAMTimeline_GetInsertMode,
379 Timeline_IAMTimeline_SetInsertMode,
380 Timeline_IAMTimeline_EnableTransitions,
381 Timeline_IAMTimeline_TransitionsEnabled,
382 Timeline_IAMTimeline_EnableEffects,
383 Timeline_IAMTimeline_EffectsEnabled,
384 Timeline_IAMTimeline_SetInterestRange,
385 Timeline_IAMTimeline_GetDuration,
386 Timeline_IAMTimeline_GetDuration2,
387 Timeline_IAMTimeline_SetDefaultFPS,
388 Timeline_IAMTimeline_GetDefaultFPS,
389 Timeline_IAMTimeline_IsDirty,
390 Timeline_IAMTimeline_GetDirtyRange,
391 Timeline_IAMTimeline_GetCountOfType,
392 Timeline_IAMTimeline_ValidateSourceNames,
393 Timeline_IAMTimeline_SetDefaultTransition,
394 Timeline_IAMTimeline_GetDefaultTransition,
395 Timeline_IAMTimeline_SetDefaultEffect,
396 Timeline_IAMTimeline_GetDefaultEffect,
397 Timeline_IAMTimeline_SetDefaultTransitionB,
398 Timeline_IAMTimeline_GetDefaultTransitionB,
399 Timeline_IAMTimeline_SetDefaultEffectB,
400 Timeline_IAMTimeline_GetDefaultEffectB,
401 };
402
403 HRESULT AMTimeline_create(IUnknown *pUnkOuter, LPVOID *ppv)
404 {
405 TimelineImpl* obj = NULL;
406
407 TRACE("(%p,%p)\n", pUnkOuter, ppv);
408
409 obj = CoTaskMemAlloc(sizeof(TimelineImpl));
410 if (NULL == obj) {
411 *ppv = NULL;
412 return E_OUTOFMEMORY;
413 }
414 ZeroMemory(obj, sizeof(TimelineImpl));
415
416 obj->ref = 1;
417 obj->IUnknown_inner.lpVtbl = &timeline_vtbl;
418 obj->IAMTimeline_iface.lpVtbl = &IAMTimeline_VTable;
419
420 if (pUnkOuter)
421 obj->outer_unk = pUnkOuter;
422 else
423 obj->outer_unk = &obj->IUnknown_inner;
424
425 *ppv = &obj->IUnknown_inner;
426 return S_OK;
427 }
428
429 /* IAMTimelineObj implementation */
430
431 static HRESULT WINAPI TimelineObj_QueryInterface(IAMTimelineObj *iface, REFIID riid, void **ppv)
432 {
433 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
434
435 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
436
437 if (!ppv)
438 return E_POINTER;
439
440 *ppv = NULL;
441 if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IAMTimelineObj))
442 *ppv = &This->IAMTimelineObj_iface;
443 else
444 WARN("(%p, %s,%p): not found\n", This, debugstr_guid(riid), ppv);
445
446 if (!*ppv)
447 return E_NOINTERFACE;
448
449 IUnknown_AddRef((IUnknown*)*ppv);
450 return S_OK;
451 }
452
453 static ULONG WINAPI TimelineObj_AddRef(IAMTimelineObj *iface)
454 {
455 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
456 ULONG ref = InterlockedIncrement(&This->ref);
457
458 TRACE("(%p) new ref = %u\n", This, ref);
459
460 return ref;
461 }
462
463 static ULONG WINAPI TimelineObj_Release(IAMTimelineObj *iface)
464 {
465 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
466 ULONG ref = InterlockedDecrement(&This->ref);
467
468 TRACE("(%p) new ref = %u\n", This, ref);
469
470 if (!ref)
471 CoTaskMemFree(This);
472
473 return ref;
474 }
475
476 static HRESULT WINAPI TimelineObj_GetStartStop(IAMTimelineObj *iface, REFERENCE_TIME *start, REFERENCE_TIME *stop)
477 {
478 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
479 FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
480 return E_NOTIMPL;
481 }
482
483 static HRESULT WINAPI TimelineObj_GetStartStop2(IAMTimelineObj *iface, REFTIME *start, REFTIME *stop)
484 {
485 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
486 FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
487 return E_NOTIMPL;
488 }
489
490 static HRESULT WINAPI TimelineObj_FixTimes(IAMTimelineObj *iface, REFERENCE_TIME *start, REFERENCE_TIME *stop)
491 {
492 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
493 FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
494 return E_NOTIMPL;
495 }
496
497 static HRESULT WINAPI TimelineObj_FixTimes2(IAMTimelineObj *iface, REFTIME *start, REFTIME *stop)
498 {
499 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
500 FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
501 return E_NOTIMPL;
502 }
503
504 static HRESULT WINAPI TimelineObj_SetStartStop(IAMTimelineObj *iface, REFERENCE_TIME start, REFERENCE_TIME stop)
505 {
506 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
507 FIXME("(%p)->(%s,%s): not implemented!\n", This, wine_dbgstr_longlong(start), wine_dbgstr_longlong(stop));
508 return E_NOTIMPL;
509 }
510
511 static HRESULT WINAPI TimelineObj_SetStartStop2(IAMTimelineObj *iface, REFTIME start, REFTIME stop)
512 {
513 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
514 FIXME("(%p)->(%f,%f): not implemented!\n", This, start, stop);
515 return E_NOTIMPL;
516 }
517
518 static HRESULT WINAPI TimelineObj_GetPropertySetter(IAMTimelineObj *iface, IPropertySetter **setter)
519 {
520 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
521 FIXME("(%p)->(%p): not implemented!\n", This, setter);
522 return E_NOTIMPL;
523 }
524
525 static HRESULT WINAPI TimelineObj_SetPropertySetter(IAMTimelineObj *iface, IPropertySetter *setter)
526 {
527 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
528 FIXME("(%p)->(%p): not implemented!\n", This, setter);
529 return E_NOTIMPL;
530 }
531
532 static HRESULT WINAPI TimelineObj_GetSubObject(IAMTimelineObj *iface, IUnknown **obj)
533 {
534 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
535 FIXME("(%p)->(%p): not implemented!\n", This, obj);
536 return E_NOTIMPL;
537 }
538
539 static HRESULT WINAPI TimelineObj_SetSubObject(IAMTimelineObj *iface, IUnknown *obj)
540 {
541 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
542 FIXME("(%p)->(%p): not implemented!\n", This, obj);
543 return E_NOTIMPL;
544 }
545
546 static HRESULT WINAPI TimelineObj_SetSubObjectGUID(IAMTimelineObj *iface, GUID guid)
547 {
548 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
549 FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_guid(&guid));
550 return E_NOTIMPL;
551 }
552
553 static HRESULT WINAPI TimelineObj_SetSubObjectGUIDB(IAMTimelineObj *iface, BSTR guidb)
554 {
555 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
556 FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_w(guidb));
557 return E_NOTIMPL;
558 }
559
560 static HRESULT WINAPI TimelineObj_GetSubObjectGUID(IAMTimelineObj *iface, GUID *guid)
561 {
562 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
563 FIXME("(%p)->(%p): not implemented!\n", This, guid);
564 return E_NOTIMPL;
565 }
566
567 static HRESULT WINAPI TimelineObj_GetSubObjectGUIDB(IAMTimelineObj *iface, BSTR *guidb)
568 {
569 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
570 FIXME("(%p)->(%p): not implemented!\n", This, guidb);
571 return E_NOTIMPL;
572 }
573
574 static HRESULT WINAPI TimelineObj_GetSubObjectLoaded(IAMTimelineObj *iface, BOOL *loaded)
575 {
576 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
577 FIXME("(%p)->(%p): not implemented!\n", This, loaded);
578 return E_NOTIMPL;
579 }
580
581 static HRESULT WINAPI TimelineObj_GetTimelineType(IAMTimelineObj *iface, TIMELINE_MAJOR_TYPE *type)
582 {
583 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
584 TRACE("(%p)->(%p)\n", This, type);
585 if (!type) return E_POINTER;
586 *type = This->timeline_type;
587 return S_OK;
588 }
589
590 static HRESULT WINAPI TimelineObj_SetTimelineType(IAMTimelineObj *iface, TIMELINE_MAJOR_TYPE type)
591 {
592 /* MSDN says that this function is "not supported" */
593 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
594 TRACE("(%p)->(%d)\n", This, type);
595 if (type != This->timeline_type) return E_INVALIDARG;
596 return S_OK;
597 }
598
599 static HRESULT WINAPI TimelineObj_GetUserID(IAMTimelineObj *iface, LONG *id)
600 {
601 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
602 FIXME("(%p)->(%p): not implemented!\n", This, id);
603 return E_NOTIMPL;
604 }
605
606 static HRESULT WINAPI TimelineObj_SetUserID(IAMTimelineObj *iface, LONG id)
607 {
608 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
609 FIXME("(%p)->(%d): not implemented!\n", This, id);
610 return E_NOTIMPL;
611 }
612
613 static HRESULT WINAPI TimelineObj_GetGenID(IAMTimelineObj *iface, LONG *id)
614 {
615 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
616 FIXME("(%p)->(%p): not implemented!\n", This, id);
617 return E_NOTIMPL;
618 }
619
620 static HRESULT WINAPI TimelineObj_GetUserName(IAMTimelineObj *iface, BSTR *name)
621 {
622 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
623 FIXME("(%p)->(%p): not implemented!\n", This, name);
624 return E_NOTIMPL;
625 }
626
627 static HRESULT WINAPI TimelineObj_SetUserName(IAMTimelineObj *iface, BSTR name)
628 {
629 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
630 FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_w(name));
631 return E_NOTIMPL;
632 }
633
634 static HRESULT WINAPI TimelineObj_GetUserData(IAMTimelineObj *iface, BYTE *data, LONG *size)
635 {
636 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
637 FIXME("(%p)->(%p,%p): not implemented!\n", This, data, size);
638 return E_NOTIMPL;
639 }
640
641 static HRESULT WINAPI TimelineObj_SetUserData(IAMTimelineObj *iface, BYTE *data, LONG size)
642 {
643 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
644 FIXME("(%p)->(%p,%d): not implemented!\n", This, data, size);
645 return E_NOTIMPL;
646 }
647
648 static HRESULT WINAPI TimelineObj_GetMuted(IAMTimelineObj *iface, BOOL *muted)
649 {
650 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
651 FIXME("(%p)->(%p): not implemented!\n", This, muted);
652 return E_NOTIMPL;
653 }
654
655 static HRESULT WINAPI TimelineObj_SetMuted(IAMTimelineObj *iface, BOOL muted)
656 {
657 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
658 FIXME("(%p)->(%d): not implemented!\n", This, muted);
659 return E_NOTIMPL;
660 }
661
662 static HRESULT WINAPI TimelineObj_GetLocked(IAMTimelineObj *iface, BOOL *locked)
663 {
664 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
665 FIXME("(%p)->(%p): not implemented!\n", This, locked);
666 return E_NOTIMPL;
667 }
668
669 static HRESULT WINAPI TimelineObj_SetLocked(IAMTimelineObj *iface, BOOL locked)
670 {
671 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
672 FIXME("(%p)->(%d): not implemented!\n", This, locked);
673 return E_NOTIMPL;
674 }
675
676 static HRESULT WINAPI TimelineObj_GetDirtyRange(IAMTimelineObj *iface, REFERENCE_TIME *start, REFERENCE_TIME *stop)
677 {
678 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
679 FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
680 return E_NOTIMPL;
681 }
682
683 static HRESULT WINAPI TimelineObj_GetDirtyRange2(IAMTimelineObj *iface, REFTIME *start, REFTIME *stop)
684 {
685 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
686 FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
687 return E_NOTIMPL;
688 }
689
690 static HRESULT WINAPI TimelineObj_SetDirtyRange(IAMTimelineObj *iface, REFERENCE_TIME start, REFERENCE_TIME stop)
691 {
692 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
693 FIXME("(%p)->(%s,%s): not implemented!\n", This, wine_dbgstr_longlong(start), wine_dbgstr_longlong(stop));
694 return E_NOTIMPL;
695 }
696
697 static HRESULT WINAPI TimelineObj_SetDirtyRange2(IAMTimelineObj *iface, REFTIME start, REFTIME stop)
698 {
699 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
700 FIXME("(%p)->(%f,%f): not implemented!\n", This, start, stop);
701 return E_NOTIMPL;
702 }
703
704 static HRESULT WINAPI TimelineObj_ClearDirty(IAMTimelineObj *iface)
705 {
706 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
707 FIXME("(%p): not implemented!\n", This);
708 return E_NOTIMPL;
709 }
710
711 static HRESULT WINAPI TimelineObj_Remove(IAMTimelineObj *iface)
712 {
713 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
714 FIXME("(%p): not implemented!\n", This);
715 return E_NOTIMPL;
716 }
717
718 static HRESULT WINAPI TimelineObj_RemoveAll(IAMTimelineObj *iface)
719 {
720 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
721 FIXME("(%p): not implemented!\n", This);
722 return E_NOTIMPL;
723 }
724
725 static HRESULT WINAPI TimelineObj_GetTimelineNoRef(IAMTimelineObj *iface, IAMTimeline **timeline)
726 {
727 /* MSDN says that this function is "not supported" */
728 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
729 TRACE("(%p)->(%p)\n", This, timeline);
730 if (!timeline) return E_POINTER;
731 *timeline = NULL;
732 return E_NOINTERFACE;
733 }
734
735 static HRESULT WINAPI TimelineObj_GetGroupIBelongTo(IAMTimelineObj *iface, IAMTimelineGroup **group)
736 {
737 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
738 FIXME("(%p)->(%p): not implemented!\n", This, group);
739 return E_NOTIMPL;
740 }
741
742 static HRESULT WINAPI TimelineObj_GetEmbedDepth(IAMTimelineObj *iface, LONG *depth)
743 {
744 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
745 FIXME("(%p)->(%p): not implemented!\n", This, depth);
746 return E_NOTIMPL;
747 }
748
749 static const IAMTimelineObjVtbl IAMTimelineObj_VTable =
750 {
751 TimelineObj_QueryInterface,
752 TimelineObj_AddRef,
753 TimelineObj_Release,
754 TimelineObj_GetStartStop,
755 TimelineObj_GetStartStop2,
756 TimelineObj_FixTimes,
757 TimelineObj_FixTimes2,
758 TimelineObj_SetStartStop,
759 TimelineObj_SetStartStop2,
760 TimelineObj_GetPropertySetter,
761 TimelineObj_SetPropertySetter,
762 TimelineObj_GetSubObject,
763 TimelineObj_SetSubObject,
764 TimelineObj_SetSubObjectGUID,
765 TimelineObj_SetSubObjectGUIDB,
766 TimelineObj_GetSubObjectGUID,
767 TimelineObj_GetSubObjectGUIDB,
768 TimelineObj_GetSubObjectLoaded,
769 TimelineObj_GetTimelineType,
770 TimelineObj_SetTimelineType,
771 TimelineObj_GetUserID,
772 TimelineObj_SetUserID,
773 TimelineObj_GetGenID,
774 TimelineObj_GetUserName,
775 TimelineObj_SetUserName,
776 TimelineObj_GetUserData,
777 TimelineObj_SetUserData,
778 TimelineObj_GetMuted,
779 TimelineObj_SetMuted,
780 TimelineObj_GetLocked,
781 TimelineObj_SetLocked,
782 TimelineObj_GetDirtyRange,
783 TimelineObj_GetDirtyRange2,
784 TimelineObj_SetDirtyRange,
785 TimelineObj_SetDirtyRange2,
786 TimelineObj_ClearDirty,
787 TimelineObj_Remove,
788 TimelineObj_RemoveAll,
789 TimelineObj_GetTimelineNoRef,
790 TimelineObj_GetGroupIBelongTo,
791 TimelineObj_GetEmbedDepth,
792 };