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 42 static inline TimelineImpl *impl_from_IUnknown(IUnknown *iface) 43 { 44 return CONTAINING_RECORD(iface, TimelineImpl, IUnknown_inner); 45 } 46 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 59 static inline TimelineObjImpl *impl_from_IAMTimelineObj(IAMTimelineObj *iface) 60 { 61 return CONTAINING_RECORD(iface, TimelineObjImpl, IAMTimelineObj_iface); 62 } 63 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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