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 }; 793