d3d8/tests: Make the window client rect match the d3d swapchain size.
[wine.git] / dlls / qedit / timeline.c
blob906efd5fd7a26e5c8d800922e10d58b3f9a6e870
1 /* DirectShow Timeline object (QEDIT.DLL)
3 * Copyright 2016 Alex Henrie
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.
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.
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
20 #include <assert.h>
21 #include <stdarg.h>
23 #define COBJMACROS
25 #include "windef.h"
26 #include "winbase.h"
27 #include "winuser.h"
28 #include "ole2.h"
30 #include "qedit_private.h"
31 #include "wine/debug.h"
33 WINE_DEFAULT_DEBUG_CHANNEL(qedit);
35 typedef struct {
36 IUnknown IUnknown_inner;
37 IAMTimeline IAMTimeline_iface;
38 IUnknown *outer_unk;
39 LONG ref;
40 } TimelineImpl;
42 static inline TimelineImpl *impl_from_IUnknown(IUnknown *iface)
44 return CONTAINING_RECORD(iface, TimelineImpl, IUnknown_inner);
47 static inline TimelineImpl *impl_from_IAMTimeline(IAMTimeline *iface)
49 return CONTAINING_RECORD(iface, TimelineImpl, IAMTimeline_iface);
52 typedef struct {
53 IAMTimelineObj IAMTimelineObj_iface;
54 LONG ref;
55 TIMELINE_MAJOR_TYPE timeline_type;
56 } TimelineObjImpl;
58 static inline TimelineObjImpl *impl_from_IAMTimelineObj(IAMTimelineObj *iface)
60 return CONTAINING_RECORD(iface, TimelineObjImpl, IAMTimelineObj_iface);
63 static const IAMTimelineObjVtbl IAMTimelineObj_VTable;
65 /* Timeline inner IUnknown */
67 static HRESULT WINAPI Timeline_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
69 TimelineImpl *This = impl_from_IUnknown(iface);
71 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
73 if (!ppv)
74 return E_POINTER;
76 *ppv = NULL;
77 if (IsEqualIID(riid, &IID_IUnknown))
78 *ppv = &This->IUnknown_inner;
79 else if (IsEqualIID(riid, &IID_IAMTimeline))
80 *ppv = &This->IAMTimeline_iface;
81 else
82 WARN("(%p, %s,%p): not found\n", This, debugstr_guid(riid), ppv);
84 if (!*ppv)
85 return E_NOINTERFACE;
87 IUnknown_AddRef((IUnknown*)*ppv);
88 return S_OK;
91 static ULONG WINAPI Timeline_AddRef(IUnknown *iface)
93 TimelineImpl *This = impl_from_IUnknown(iface);
94 ULONG ref = InterlockedIncrement(&This->ref);
96 TRACE("(%p) new ref = %u\n", This, ref);
98 return ref;
101 static ULONG WINAPI Timeline_Release(IUnknown *iface)
103 TimelineImpl *This = impl_from_IUnknown(iface);
104 ULONG ref = InterlockedDecrement(&This->ref);
106 TRACE("(%p) new ref = %u\n", This, ref);
108 if (ref == 0)
109 CoTaskMemFree(This);
111 return ref;
114 static const IUnknownVtbl timeline_vtbl =
116 Timeline_QueryInterface,
117 Timeline_AddRef,
118 Timeline_Release,
121 /* IAMTimeline implementation */
123 static HRESULT WINAPI Timeline_IAMTimeline_QueryInterface(IAMTimeline *iface, REFIID riid, void **ppv)
125 TimelineImpl *This = impl_from_IAMTimeline(iface);
126 return IUnknown_QueryInterface(This->outer_unk, riid, ppv);
129 static ULONG WINAPI Timeline_IAMTimeline_AddRef(IAMTimeline *iface)
131 TimelineImpl *This = impl_from_IAMTimeline(iface);
132 return IUnknown_AddRef(This->outer_unk);
135 static ULONG WINAPI Timeline_IAMTimeline_Release(IAMTimeline *iface)
137 TimelineImpl *This = impl_from_IAMTimeline(iface);
138 return IUnknown_Release(This->outer_unk);
141 static HRESULT WINAPI Timeline_IAMTimeline_CreateEmptyNode(IAMTimeline *iface, IAMTimelineObj **obj,
142 TIMELINE_MAJOR_TYPE type)
144 TimelineImpl *This = impl_from_IAMTimeline(iface);
145 TimelineObjImpl* obj_impl;
147 TRACE("(%p)->(%p,%d)\n", This, obj, type);
149 if (!obj)
150 return E_POINTER;
152 switch (type)
154 case TIMELINE_MAJOR_TYPE_COMPOSITE:
155 case TIMELINE_MAJOR_TYPE_TRACK:
156 case TIMELINE_MAJOR_TYPE_SOURCE:
157 case TIMELINE_MAJOR_TYPE_TRANSITION:
158 case TIMELINE_MAJOR_TYPE_EFFECT:
159 case TIMELINE_MAJOR_TYPE_GROUP:
160 break;
161 default:
162 return E_INVALIDARG;
165 obj_impl = CoTaskMemAlloc(sizeof(TimelineObjImpl));
166 if (!obj_impl) {
167 *obj = NULL;
168 return E_OUTOFMEMORY;
171 obj_impl->ref = 1;
172 obj_impl->IAMTimelineObj_iface.lpVtbl = &IAMTimelineObj_VTable;
173 obj_impl->timeline_type = type;
175 *obj = &obj_impl->IAMTimelineObj_iface;
176 return S_OK;
179 static HRESULT WINAPI Timeline_IAMTimeline_AddGroup(IAMTimeline *iface, IAMTimelineObj *group)
181 TimelineImpl *This = impl_from_IAMTimeline(iface);
182 FIXME("(%p)->(%p): not implemented!\n", This, group);
183 return E_NOTIMPL;
186 static HRESULT WINAPI Timeline_IAMTimeline_RemGroupFromList(IAMTimeline *iface, IAMTimelineObj *group)
188 TimelineImpl *This = impl_from_IAMTimeline(iface);
189 FIXME("(%p)->(%p): not implemented!\n", This, group);
190 return E_NOTIMPL;
193 static HRESULT WINAPI Timeline_IAMTimeline_GetGroup(IAMTimeline *iface, IAMTimelineObj **group, LONG index)
195 TimelineImpl *This = impl_from_IAMTimeline(iface);
196 FIXME("(%p)->(%p,%d): not implemented!\n", This, group, index);
197 return E_NOTIMPL;
200 static HRESULT WINAPI Timeline_IAMTimeline_GetGroupCount(IAMTimeline *iface, LONG *count)
202 TimelineImpl *This = impl_from_IAMTimeline(iface);
203 FIXME("(%p)->(%p): not implemented!\n", This, count);
204 return E_NOTIMPL;
207 static HRESULT WINAPI Timeline_IAMTimeline_ClearAllGroups(IAMTimeline *iface)
209 TimelineImpl *This = impl_from_IAMTimeline(iface);
210 FIXME("(%p): not implemented!\n", This);
211 return E_NOTIMPL;
214 static HRESULT WINAPI Timeline_IAMTimeline_GetInsertMode(IAMTimeline *iface, LONG *mode)
216 TimelineImpl *This = impl_from_IAMTimeline(iface);
217 FIXME("(%p)->(%p): not implemented!\n", This, mode);
218 return E_NOTIMPL;
221 static HRESULT WINAPI Timeline_IAMTimeline_SetInsertMode(IAMTimeline *iface, LONG mode)
223 TimelineImpl *This = impl_from_IAMTimeline(iface);
224 FIXME("(%p)->(%d): not implemented!\n", This, mode);
225 return E_NOTIMPL;
228 static HRESULT WINAPI Timeline_IAMTimeline_EnableTransitions(IAMTimeline *iface, BOOL enabled)
230 TimelineImpl *This = impl_from_IAMTimeline(iface);
231 FIXME("(%p)->(%d): not implemented!\n", This, enabled);
232 return E_NOTIMPL;
235 static HRESULT WINAPI Timeline_IAMTimeline_TransitionsEnabled(IAMTimeline *iface, BOOL *enabled)
237 TimelineImpl *This = impl_from_IAMTimeline(iface);
238 FIXME("(%p)->(%p): not implemented!\n", This, enabled);
239 return E_NOTIMPL;
242 static HRESULT WINAPI Timeline_IAMTimeline_EnableEffects(IAMTimeline *iface, BOOL enabled)
244 TimelineImpl *This = impl_from_IAMTimeline(iface);
245 FIXME("(%p)->(%d): not implemented!\n", This, enabled);
246 return E_NOTIMPL;
249 static HRESULT WINAPI Timeline_IAMTimeline_EffectsEnabled(IAMTimeline *iface, BOOL *enabled)
251 TimelineImpl *This = impl_from_IAMTimeline(iface);
252 FIXME("(%p)->(%p): not implemented!\n", This, enabled);
253 return E_NOTIMPL;
256 static HRESULT WINAPI Timeline_IAMTimeline_SetInterestRange(IAMTimeline *iface, REFERENCE_TIME start,
257 REFERENCE_TIME stop)
259 TimelineImpl *This = impl_from_IAMTimeline(iface);
260 FIXME("(%p)->(%s,%s): not implemented!\n", This, wine_dbgstr_longlong(start),
261 wine_dbgstr_longlong(stop));
262 return E_NOTIMPL;
265 static HRESULT WINAPI Timeline_IAMTimeline_GetDuration(IAMTimeline *iface, REFERENCE_TIME *duration)
267 TimelineImpl *This = impl_from_IAMTimeline(iface);
268 FIXME("(%p)->(%p): not implemented!\n", This, duration);
269 return E_NOTIMPL;
272 static HRESULT WINAPI Timeline_IAMTimeline_GetDuration2(IAMTimeline *iface, double *duration)
274 TimelineImpl *This = impl_from_IAMTimeline(iface);
275 FIXME("(%p)->(%p): not implemented!\n", This, duration);
276 return E_NOTIMPL;
279 static HRESULT WINAPI Timeline_IAMTimeline_SetDefaultFPS(IAMTimeline *iface, double fps)
281 TimelineImpl *This = impl_from_IAMTimeline(iface);
282 FIXME("(%p)->(%f): not implemented!\n", This, fps);
283 return E_NOTIMPL;
286 static HRESULT WINAPI Timeline_IAMTimeline_GetDefaultFPS(IAMTimeline *iface, double *fps)
288 TimelineImpl *This = impl_from_IAMTimeline(iface);
289 FIXME("(%p)->(%p): not implemented!\n", This, fps);
290 return E_NOTIMPL;
293 static HRESULT WINAPI Timeline_IAMTimeline_IsDirty(IAMTimeline *iface, BOOL *dirty)
295 TimelineImpl *This = impl_from_IAMTimeline(iface);
296 FIXME("(%p)->(%p): not implemented!\n", This, dirty);
297 return E_NOTIMPL;
300 static HRESULT WINAPI Timeline_IAMTimeline_GetDirtyRange(IAMTimeline *iface, REFERENCE_TIME *start,
301 REFERENCE_TIME *stop)
303 TimelineImpl *This = impl_from_IAMTimeline(iface);
304 FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
305 return E_NOTIMPL;
308 static HRESULT WINAPI Timeline_IAMTimeline_GetCountOfType(IAMTimeline *iface, LONG group, LONG *value,
309 LONG *value_with_comps, TIMELINE_MAJOR_TYPE type)
311 TimelineImpl *This = impl_from_IAMTimeline(iface);
312 FIXME("(%p)->(%d,%p,%p,%04x): not implemented!\n", This, group, value, value_with_comps, type);
313 return E_NOTIMPL;
316 static HRESULT WINAPI Timeline_IAMTimeline_ValidateSourceNames(IAMTimeline *iface, LONG flags, IMediaLocator *override,
317 LONG_PTR notify_event)
319 TimelineImpl *This = impl_from_IAMTimeline(iface);
320 FIXME("(%p)->(%d,%p,%lx): not implemented!\n", This, flags, override, notify_event);
321 return E_NOTIMPL;
324 static HRESULT WINAPI Timeline_IAMTimeline_SetDefaultTransition(IAMTimeline *iface, GUID *guid)
326 TimelineImpl *This = impl_from_IAMTimeline(iface);
327 FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_guid(guid));
328 return E_NOTIMPL;
331 static HRESULT WINAPI Timeline_IAMTimeline_GetDefaultTransition(IAMTimeline *iface, GUID *guid)
333 TimelineImpl *This = impl_from_IAMTimeline(iface);
334 FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_guid(guid));
335 return E_NOTIMPL;
338 static HRESULT WINAPI Timeline_IAMTimeline_SetDefaultEffect(IAMTimeline *iface, GUID *guid)
340 TimelineImpl *This = impl_from_IAMTimeline(iface);
341 FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_guid(guid));
342 return E_NOTIMPL;
345 static HRESULT WINAPI Timeline_IAMTimeline_GetDefaultEffect(IAMTimeline *iface, GUID *guid)
347 TimelineImpl *This = impl_from_IAMTimeline(iface);
348 FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_guid(guid));
349 return E_NOTIMPL;
352 static HRESULT WINAPI Timeline_IAMTimeline_SetDefaultTransitionB(IAMTimeline *iface, BSTR guidb)
354 TimelineImpl *This = impl_from_IAMTimeline(iface);
355 FIXME("(%p)->(%p): not implemented!\n", This, guidb);
356 return E_NOTIMPL;
359 static HRESULT WINAPI Timeline_IAMTimeline_GetDefaultTransitionB(IAMTimeline *iface, BSTR *guidb)
361 TimelineImpl *This = impl_from_IAMTimeline(iface);
362 FIXME("(%p)->(%p): not implemented!\n", This, guidb);
363 return E_NOTIMPL;
366 static HRESULT WINAPI Timeline_IAMTimeline_SetDefaultEffectB(IAMTimeline *iface, BSTR guidb)
368 TimelineImpl *This = impl_from_IAMTimeline(iface);
369 FIXME("(%p)->(%p): not implemented!\n", This, guidb);
370 return E_NOTIMPL;
373 static HRESULT WINAPI Timeline_IAMTimeline_GetDefaultEffectB(IAMTimeline *iface, BSTR *guidb)
375 TimelineImpl *This = impl_from_IAMTimeline(iface);
376 FIXME("(%p)->(%p): not implemented!\n", This, guidb);
377 return E_NOTIMPL;
380 static const IAMTimelineVtbl IAMTimeline_VTable =
382 Timeline_IAMTimeline_QueryInterface,
383 Timeline_IAMTimeline_AddRef,
384 Timeline_IAMTimeline_Release,
385 Timeline_IAMTimeline_CreateEmptyNode,
386 Timeline_IAMTimeline_AddGroup,
387 Timeline_IAMTimeline_RemGroupFromList,
388 Timeline_IAMTimeline_GetGroup,
389 Timeline_IAMTimeline_GetGroupCount,
390 Timeline_IAMTimeline_ClearAllGroups,
391 Timeline_IAMTimeline_GetInsertMode,
392 Timeline_IAMTimeline_SetInsertMode,
393 Timeline_IAMTimeline_EnableTransitions,
394 Timeline_IAMTimeline_TransitionsEnabled,
395 Timeline_IAMTimeline_EnableEffects,
396 Timeline_IAMTimeline_EffectsEnabled,
397 Timeline_IAMTimeline_SetInterestRange,
398 Timeline_IAMTimeline_GetDuration,
399 Timeline_IAMTimeline_GetDuration2,
400 Timeline_IAMTimeline_SetDefaultFPS,
401 Timeline_IAMTimeline_GetDefaultFPS,
402 Timeline_IAMTimeline_IsDirty,
403 Timeline_IAMTimeline_GetDirtyRange,
404 Timeline_IAMTimeline_GetCountOfType,
405 Timeline_IAMTimeline_ValidateSourceNames,
406 Timeline_IAMTimeline_SetDefaultTransition,
407 Timeline_IAMTimeline_GetDefaultTransition,
408 Timeline_IAMTimeline_SetDefaultEffect,
409 Timeline_IAMTimeline_GetDefaultEffect,
410 Timeline_IAMTimeline_SetDefaultTransitionB,
411 Timeline_IAMTimeline_GetDefaultTransitionB,
412 Timeline_IAMTimeline_SetDefaultEffectB,
413 Timeline_IAMTimeline_GetDefaultEffectB,
416 HRESULT AMTimeline_create(IUnknown *pUnkOuter, LPVOID *ppv)
418 TimelineImpl* obj = NULL;
420 TRACE("(%p,%p)\n", pUnkOuter, ppv);
422 obj = CoTaskMemAlloc(sizeof(TimelineImpl));
423 if (NULL == obj) {
424 *ppv = NULL;
425 return E_OUTOFMEMORY;
427 ZeroMemory(obj, sizeof(TimelineImpl));
429 obj->ref = 1;
430 obj->IUnknown_inner.lpVtbl = &timeline_vtbl;
431 obj->IAMTimeline_iface.lpVtbl = &IAMTimeline_VTable;
433 if (pUnkOuter)
434 obj->outer_unk = pUnkOuter;
435 else
436 obj->outer_unk = &obj->IUnknown_inner;
438 *ppv = &obj->IUnknown_inner;
439 return S_OK;
442 /* IAMTimelineObj implementation */
444 static HRESULT WINAPI TimelineObj_QueryInterface(IAMTimelineObj *iface, REFIID riid, void **ppv)
446 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
448 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
450 if (!ppv)
451 return E_POINTER;
453 *ppv = NULL;
454 if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IAMTimelineObj))
455 *ppv = &This->IAMTimelineObj_iface;
456 else
457 WARN("(%p, %s,%p): not found\n", This, debugstr_guid(riid), ppv);
459 if (!*ppv)
460 return E_NOINTERFACE;
462 IUnknown_AddRef((IUnknown*)*ppv);
463 return S_OK;
466 static ULONG WINAPI TimelineObj_AddRef(IAMTimelineObj *iface)
468 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
469 ULONG ref = InterlockedIncrement(&This->ref);
471 TRACE("(%p) new ref = %u\n", This, ref);
473 return ref;
476 static ULONG WINAPI TimelineObj_Release(IAMTimelineObj *iface)
478 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
479 ULONG ref = InterlockedDecrement(&This->ref);
481 TRACE("(%p) new ref = %u\n", This, ref);
483 if (!ref)
484 CoTaskMemFree(This);
486 return ref;
489 static HRESULT WINAPI TimelineObj_GetStartStop(IAMTimelineObj *iface, REFERENCE_TIME *start, REFERENCE_TIME *stop)
491 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
492 FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
493 return E_NOTIMPL;
496 static HRESULT WINAPI TimelineObj_GetStartStop2(IAMTimelineObj *iface, REFTIME *start, REFTIME *stop)
498 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
499 FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
500 return E_NOTIMPL;
503 static HRESULT WINAPI TimelineObj_FixTimes(IAMTimelineObj *iface, REFERENCE_TIME *start, REFERENCE_TIME *stop)
505 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
506 FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
507 return E_NOTIMPL;
510 static HRESULT WINAPI TimelineObj_FixTimes2(IAMTimelineObj *iface, REFTIME *start, REFTIME *stop)
512 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
513 FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
514 return E_NOTIMPL;
517 static HRESULT WINAPI TimelineObj_SetStartStop(IAMTimelineObj *iface, REFERENCE_TIME start, REFERENCE_TIME stop)
519 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
520 FIXME("(%p)->(%s,%s): not implemented!\n", This, wine_dbgstr_longlong(start), wine_dbgstr_longlong(stop));
521 return E_NOTIMPL;
524 static HRESULT WINAPI TimelineObj_SetStartStop2(IAMTimelineObj *iface, REFTIME start, REFTIME stop)
526 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
527 FIXME("(%p)->(%f,%f): not implemented!\n", This, start, stop);
528 return E_NOTIMPL;
531 static HRESULT WINAPI TimelineObj_GetPropertySetter(IAMTimelineObj *iface, IPropertySetter **setter)
533 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
534 FIXME("(%p)->(%p): not implemented!\n", This, setter);
535 return E_NOTIMPL;
538 static HRESULT WINAPI TimelineObj_SetPropertySetter(IAMTimelineObj *iface, IPropertySetter *setter)
540 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
541 FIXME("(%p)->(%p): not implemented!\n", This, setter);
542 return E_NOTIMPL;
545 static HRESULT WINAPI TimelineObj_GetSubObject(IAMTimelineObj *iface, IUnknown **obj)
547 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
548 FIXME("(%p)->(%p): not implemented!\n", This, obj);
549 return E_NOTIMPL;
552 static HRESULT WINAPI TimelineObj_SetSubObject(IAMTimelineObj *iface, IUnknown *obj)
554 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
555 FIXME("(%p)->(%p): not implemented!\n", This, obj);
556 return E_NOTIMPL;
559 static HRESULT WINAPI TimelineObj_SetSubObjectGUID(IAMTimelineObj *iface, GUID guid)
561 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
562 FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_guid(&guid));
563 return E_NOTIMPL;
566 static HRESULT WINAPI TimelineObj_SetSubObjectGUIDB(IAMTimelineObj *iface, BSTR guidb)
568 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
569 FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_w(guidb));
570 return E_NOTIMPL;
573 static HRESULT WINAPI TimelineObj_GetSubObjectGUID(IAMTimelineObj *iface, GUID *guid)
575 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
576 FIXME("(%p)->(%p): not implemented!\n", This, guid);
577 return E_NOTIMPL;
580 static HRESULT WINAPI TimelineObj_GetSubObjectGUIDB(IAMTimelineObj *iface, BSTR *guidb)
582 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
583 FIXME("(%p)->(%p): not implemented!\n", This, guidb);
584 return E_NOTIMPL;
587 static HRESULT WINAPI TimelineObj_GetSubObjectLoaded(IAMTimelineObj *iface, BOOL *loaded)
589 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
590 FIXME("(%p)->(%p): not implemented!\n", This, loaded);
591 return E_NOTIMPL;
594 static HRESULT WINAPI TimelineObj_GetTimelineType(IAMTimelineObj *iface, TIMELINE_MAJOR_TYPE *type)
596 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
597 TRACE("(%p)->(%p)\n", This, type);
598 if (!type) return E_POINTER;
599 *type = This->timeline_type;
600 return S_OK;
603 static HRESULT WINAPI TimelineObj_SetTimelineType(IAMTimelineObj *iface, TIMELINE_MAJOR_TYPE type)
605 /* MSDN says that this function is "not supported" */
606 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
607 TRACE("(%p)->(%d)\n", This, type);
608 if (type != This->timeline_type) return E_INVALIDARG;
609 return S_OK;
612 static HRESULT WINAPI TimelineObj_GetUserID(IAMTimelineObj *iface, LONG *id)
614 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
615 FIXME("(%p)->(%p): not implemented!\n", This, id);
616 return E_NOTIMPL;
619 static HRESULT WINAPI TimelineObj_SetUserID(IAMTimelineObj *iface, LONG id)
621 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
622 FIXME("(%p)->(%d): not implemented!\n", This, id);
623 return E_NOTIMPL;
626 static HRESULT WINAPI TimelineObj_GetGenID(IAMTimelineObj *iface, LONG *id)
628 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
629 FIXME("(%p)->(%p): not implemented!\n", This, id);
630 return E_NOTIMPL;
633 static HRESULT WINAPI TimelineObj_GetUserName(IAMTimelineObj *iface, BSTR *name)
635 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
636 FIXME("(%p)->(%p): not implemented!\n", This, name);
637 return E_NOTIMPL;
640 static HRESULT WINAPI TimelineObj_SetUserName(IAMTimelineObj *iface, BSTR name)
642 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
643 FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_w(name));
644 return E_NOTIMPL;
647 static HRESULT WINAPI TimelineObj_GetUserData(IAMTimelineObj *iface, BYTE *data, LONG *size)
649 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
650 FIXME("(%p)->(%p,%p): not implemented!\n", This, data, size);
651 return E_NOTIMPL;
654 static HRESULT WINAPI TimelineObj_SetUserData(IAMTimelineObj *iface, BYTE *data, LONG size)
656 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
657 FIXME("(%p)->(%p,%d): not implemented!\n", This, data, size);
658 return E_NOTIMPL;
661 static HRESULT WINAPI TimelineObj_GetMuted(IAMTimelineObj *iface, BOOL *muted)
663 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
664 FIXME("(%p)->(%p): not implemented!\n", This, muted);
665 return E_NOTIMPL;
668 static HRESULT WINAPI TimelineObj_SetMuted(IAMTimelineObj *iface, BOOL muted)
670 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
671 FIXME("(%p)->(%d): not implemented!\n", This, muted);
672 return E_NOTIMPL;
675 static HRESULT WINAPI TimelineObj_GetLocked(IAMTimelineObj *iface, BOOL *locked)
677 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
678 FIXME("(%p)->(%p): not implemented!\n", This, locked);
679 return E_NOTIMPL;
682 static HRESULT WINAPI TimelineObj_SetLocked(IAMTimelineObj *iface, BOOL locked)
684 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
685 FIXME("(%p)->(%d): not implemented!\n", This, locked);
686 return E_NOTIMPL;
689 static HRESULT WINAPI TimelineObj_GetDirtyRange(IAMTimelineObj *iface, REFERENCE_TIME *start, REFERENCE_TIME *stop)
691 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
692 FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
693 return E_NOTIMPL;
696 static HRESULT WINAPI TimelineObj_GetDirtyRange2(IAMTimelineObj *iface, REFTIME *start, REFTIME *stop)
698 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
699 FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
700 return E_NOTIMPL;
703 static HRESULT WINAPI TimelineObj_SetDirtyRange(IAMTimelineObj *iface, REFERENCE_TIME start, REFERENCE_TIME stop)
705 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
706 FIXME("(%p)->(%s,%s): not implemented!\n", This, wine_dbgstr_longlong(start), wine_dbgstr_longlong(stop));
707 return E_NOTIMPL;
710 static HRESULT WINAPI TimelineObj_SetDirtyRange2(IAMTimelineObj *iface, REFTIME start, REFTIME stop)
712 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
713 FIXME("(%p)->(%f,%f): not implemented!\n", This, start, stop);
714 return E_NOTIMPL;
717 static HRESULT WINAPI TimelineObj_ClearDirty(IAMTimelineObj *iface)
719 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
720 FIXME("(%p): not implemented!\n", This);
721 return E_NOTIMPL;
724 static HRESULT WINAPI TimelineObj_Remove(IAMTimelineObj *iface)
726 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
727 FIXME("(%p): not implemented!\n", This);
728 return E_NOTIMPL;
731 static HRESULT WINAPI TimelineObj_RemoveAll(IAMTimelineObj *iface)
733 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
734 FIXME("(%p): not implemented!\n", This);
735 return E_NOTIMPL;
738 static HRESULT WINAPI TimelineObj_GetTimelineNoRef(IAMTimelineObj *iface, IAMTimeline **timeline)
740 /* MSDN says that this function is "not supported" */
741 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
742 TRACE("(%p)->(%p)\n", This, timeline);
743 if (!timeline) return E_POINTER;
744 *timeline = NULL;
745 return E_NOINTERFACE;
748 static HRESULT WINAPI TimelineObj_GetGroupIBelongTo(IAMTimelineObj *iface, IAMTimelineGroup **group)
750 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
751 FIXME("(%p)->(%p): not implemented!\n", This, group);
752 return E_NOTIMPL;
755 static HRESULT WINAPI TimelineObj_GetEmbedDepth(IAMTimelineObj *iface, LONG *depth)
757 TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
758 FIXME("(%p)->(%p): not implemented!\n", This, depth);
759 return E_NOTIMPL;
762 static const IAMTimelineObjVtbl IAMTimelineObj_VTable =
764 TimelineObj_QueryInterface,
765 TimelineObj_AddRef,
766 TimelineObj_Release,
767 TimelineObj_GetStartStop,
768 TimelineObj_GetStartStop2,
769 TimelineObj_FixTimes,
770 TimelineObj_FixTimes2,
771 TimelineObj_SetStartStop,
772 TimelineObj_SetStartStop2,
773 TimelineObj_GetPropertySetter,
774 TimelineObj_SetPropertySetter,
775 TimelineObj_GetSubObject,
776 TimelineObj_SetSubObject,
777 TimelineObj_SetSubObjectGUID,
778 TimelineObj_SetSubObjectGUIDB,
779 TimelineObj_GetSubObjectGUID,
780 TimelineObj_GetSubObjectGUIDB,
781 TimelineObj_GetSubObjectLoaded,
782 TimelineObj_GetTimelineType,
783 TimelineObj_SetTimelineType,
784 TimelineObj_GetUserID,
785 TimelineObj_SetUserID,
786 TimelineObj_GetGenID,
787 TimelineObj_GetUserName,
788 TimelineObj_SetUserName,
789 TimelineObj_GetUserData,
790 TimelineObj_SetUserData,
791 TimelineObj_GetMuted,
792 TimelineObj_SetMuted,
793 TimelineObj_GetLocked,
794 TimelineObj_SetLocked,
795 TimelineObj_GetDirtyRange,
796 TimelineObj_GetDirtyRange2,
797 TimelineObj_SetDirtyRange,
798 TimelineObj_SetDirtyRange2,
799 TimelineObj_ClearDirty,
800 TimelineObj_Remove,
801 TimelineObj_RemoveAll,
802 TimelineObj_GetTimelineNoRef,
803 TimelineObj_GetGroupIBelongTo,
804 TimelineObj_GetEmbedDepth,