Changeset 6952 for trunk/src/quartz/seekpass.c
- Timestamp:
- Oct 6, 2001, 10:56:18 AM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/quartz/seekpass.c
r6710 r6952 1 1 /* 2 * Implementation of CLSID_SeekingPassThru. 2 * Implementation of CLSID_SeekingPassThru 3 * 4 * FIXME - not tested yet. 3 5 * 4 6 * hidenori@a2.ctktv.ne.jp … … 10 12 #include "winbase.h" 11 13 #include "wingdi.h" 14 #include "winuser.h" 12 15 #include "winerror.h" 13 16 #include "wine/obj_base.h" 14 17 #include "strmif.h" 18 #include "control.h" 15 19 #include "uuids.h" 16 20 … … 22 26 23 27 28 /*************************************************************************** 29 * 30 * CSeekingPassThru::ISeekingPassThru 31 * 32 */ 24 33 25 34 static HRESULT WINAPI … … 58 67 CSeekingPassThru_THIS(iface,seekpass); 59 68 60 FIXME("(%p)->(%d,%p) stub!\n",This,bRendering,pPin); 61 62 return E_NOTIMPL; 69 FIXME("(%p)->(%d,%p) not tested!\n",This,bRendering,pPin); 70 71 if ( pPin == NULL ) 72 return E_POINTER; 73 74 /* Why is 'bRendering' given as an argument?? */ 75 EnterCriticalSection( &This->cs ); 76 77 if ( This->passthru.pPin != NULL ) 78 IPin_Release( This->passthru.pPin ); 79 This->passthru.pPin = pPin; IPin_AddRef( pPin ); 80 81 LeaveCriticalSection( &This->cs ); 82 83 return NOERROR; 63 84 } 64 85 … … 80 101 TRACE("(%p)\n",This); 81 102 ICOM_VTBL(&This->seekpass) = &iseekingpassthru; 103 This->passthru.punk = This->unk.punkControl; 104 This->passthru.pPin = NULL; 105 InitializeCriticalSection( &This->cs ); 82 106 83 107 return NOERROR; … … 88 112 { 89 113 TRACE("(%p)\n",This); 90 } 91 114 if ( This->passthru.pPin != NULL ) 115 { 116 IPin_Release( This->passthru.pPin ); 117 This->passthru.pPin = NULL; 118 } 119 DeleteCriticalSection( &This->cs ); 120 } 121 122 /*************************************************************************** 123 * 124 * new/delete for CLSID_SeekingPassThru. 125 * 126 */ 92 127 93 128 /* can I use offsetof safely? - FIXME? */ … … 95 130 { 96 131 { &IID_ISeekingPassThru, offsetof(CSeekingPassThru,seekpass)-offsetof(CSeekingPassThru,unk) }, 132 { &IID_IMediaPosition, offsetof(CSeekingPassThru,passthru.mpos)-offsetof(CSeekingPassThru,unk) }, 133 { &IID_IMediaSeeking, offsetof(CSeekingPassThru,passthru.mseek)-offsetof(CSeekingPassThru,unk) }, 97 134 }; 98 135 … … 133 170 } 134 171 172 173 174 175 /*************************************************************************** 176 * 177 * CPassThruImpl Helper methods. 178 * 179 */ 180 181 static 182 HRESULT CPassThruImpl_GetConnected( CPassThruImpl* pImpl, IPin** ppPin ) 183 { 184 return IPin_ConnectedTo( pImpl->pPin, ppPin ); 185 } 186 187 HRESULT CPassThruImpl_QueryPosPass( 188 CPassThruImpl* pImpl, IMediaPosition** ppPosition ) 189 { 190 IPin* pPin; 191 HRESULT hr; 192 193 hr = CPassThruImpl_GetConnected( pImpl, &pPin ); 194 if ( FAILED(hr) ) 195 return hr; 196 hr = IPin_QueryInterface(pPin,&IID_IMediaPosition,(void**)ppPosition); 197 IPin_Release(pPin); 198 199 return hr; 200 } 201 202 HRESULT CPassThruImpl_QuerySeekPass( 203 CPassThruImpl* pImpl, IMediaSeeking** ppSeeking ) 204 { 205 IPin* pPin; 206 HRESULT hr; 207 208 hr = CPassThruImpl_GetConnected( pImpl, &pPin ); 209 if ( FAILED(hr) ) 210 return hr; 211 hr = IPin_QueryInterface(pPin,&IID_IMediaSeeking,(void**)ppSeeking); 212 IPin_Release(pPin); 213 214 return hr; 215 } 216 217 /*************************************************************************** 218 * 219 * An implementation for CPassThruImpl::IMediaPosition. 220 * 221 */ 222 223 224 #define QUERYPOSPASS \ 225 IMediaPosition* pPos = NULL; \ 226 HRESULT hr; \ 227 hr = CPassThruImpl_QueryPosPass( This, &pPos ); \ 228 if ( FAILED(hr) ) return hr; 229 230 static HRESULT WINAPI 231 IMediaPosition_fnQueryInterface(IMediaPosition* iface,REFIID riid,void** ppobj) 232 { 233 CPassThruImpl_THIS(iface,mpos); 234 235 TRACE("(%p)->()\n",This); 236 237 return IUnknown_QueryInterface(This->punk,riid,ppobj); 238 } 239 240 static ULONG WINAPI 241 IMediaPosition_fnAddRef(IMediaPosition* iface) 242 { 243 CPassThruImpl_THIS(iface,mpos); 244 245 TRACE("(%p)->()\n",This); 246 247 return IUnknown_AddRef(This->punk); 248 } 249 250 static ULONG WINAPI 251 IMediaPosition_fnRelease(IMediaPosition* iface) 252 { 253 CPassThruImpl_THIS(iface,mpos); 254 255 TRACE("(%p)->()\n",This); 256 257 return IUnknown_Release(This->punk); 258 } 259 260 static HRESULT WINAPI 261 IMediaPosition_fnGetTypeInfoCount(IMediaPosition* iface,UINT* pcTypeInfo) 262 { 263 CPassThruImpl_THIS(iface,mpos); 264 265 FIXME("(%p)->() stub!\n",This); 266 267 return E_NOTIMPL; 268 } 269 270 static HRESULT WINAPI 271 IMediaPosition_fnGetTypeInfo(IMediaPosition* iface,UINT iTypeInfo, LCID lcid, ITypeInfo** ppobj) 272 { 273 CPassThruImpl_THIS(iface,mpos); 274 275 FIXME("(%p)->() stub!\n",This); 276 277 return E_NOTIMPL; 278 } 279 280 static HRESULT WINAPI 281 IMediaPosition_fnGetIDsOfNames(IMediaPosition* iface,REFIID riid, LPOLESTR* ppwszName, UINT cNames, LCID lcid, DISPID* pDispId) 282 { 283 CPassThruImpl_THIS(iface,mpos); 284 285 FIXME("(%p)->() stub!\n",This); 286 287 return E_NOTIMPL; 288 } 289 290 static HRESULT WINAPI 291 IMediaPosition_fnInvoke(IMediaPosition* iface,DISPID DispId, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarRes, EXCEPINFO* pExcepInfo, UINT* puArgErr) 292 { 293 CPassThruImpl_THIS(iface,mpos); 294 295 FIXME("(%p)->() stub!\n",This); 296 297 return E_NOTIMPL; 298 } 299 300 301 static HRESULT WINAPI 302 IMediaPosition_fnget_Duration(IMediaPosition* iface,REFTIME* prefTime) 303 { 304 CPassThruImpl_THIS(iface,mpos); 305 QUERYPOSPASS 306 307 TRACE("(%p)->()\n",This); 308 309 return IMediaPosition_get_Duration(pPos,prefTime); 310 } 311 312 static HRESULT WINAPI 313 IMediaPosition_fnput_CurrentPosition(IMediaPosition* iface,REFTIME refTime) 314 { 315 CPassThruImpl_THIS(iface,mpos); 316 QUERYPOSPASS 317 318 TRACE("(%p)->()\n",This); 319 320 return IMediaPosition_put_CurrentPosition(pPos,refTime); 321 } 322 323 static HRESULT WINAPI 324 IMediaPosition_fnget_CurrentPosition(IMediaPosition* iface,REFTIME* prefTime) 325 { 326 CPassThruImpl_THIS(iface,mpos); 327 QUERYPOSPASS 328 329 TRACE("(%p)->()\n",This); 330 331 return IMediaPosition_get_CurrentPosition(pPos,prefTime); 332 } 333 334 static HRESULT WINAPI 335 IMediaPosition_fnget_StopTime(IMediaPosition* iface,REFTIME* prefTime) 336 { 337 CPassThruImpl_THIS(iface,mpos); 338 QUERYPOSPASS 339 340 TRACE("(%p)->()\n",This); 341 342 return IMediaPosition_get_StopTime(pPos,prefTime); 343 } 344 345 static HRESULT WINAPI 346 IMediaPosition_fnput_StopTime(IMediaPosition* iface,REFTIME refTime) 347 { 348 CPassThruImpl_THIS(iface,mpos); 349 QUERYPOSPASS 350 351 TRACE("(%p)->()\n",This); 352 353 return IMediaPosition_put_StopTime(pPos,refTime); 354 } 355 356 static HRESULT WINAPI 357 IMediaPosition_fnget_PrerollTime(IMediaPosition* iface,REFTIME* prefTime) 358 { 359 CPassThruImpl_THIS(iface,mpos); 360 QUERYPOSPASS 361 362 TRACE("(%p)->()\n",This); 363 364 return IMediaPosition_get_PrerollTime(pPos,prefTime); 365 } 366 367 static HRESULT WINAPI 368 IMediaPosition_fnput_PrerollTime(IMediaPosition* iface,REFTIME refTime) 369 { 370 CPassThruImpl_THIS(iface,mpos); 371 QUERYPOSPASS 372 373 TRACE("(%p)->()\n",This); 374 375 return IMediaPosition_put_PrerollTime(pPos,refTime); 376 } 377 378 static HRESULT WINAPI 379 IMediaPosition_fnput_Rate(IMediaPosition* iface,double dblRate) 380 { 381 CPassThruImpl_THIS(iface,mpos); 382 QUERYPOSPASS 383 384 TRACE("(%p)->()\n",This); 385 386 return IMediaPosition_put_Rate(pPos,dblRate); 387 } 388 389 static HRESULT WINAPI 390 IMediaPosition_fnget_Rate(IMediaPosition* iface,double* pdblRate) 391 { 392 CPassThruImpl_THIS(iface,mpos); 393 QUERYPOSPASS 394 395 TRACE("(%p)->()\n",This); 396 397 return IMediaPosition_get_Rate(pPos,pdblRate); 398 } 399 400 static HRESULT WINAPI 401 IMediaPosition_fnCanSeekForward(IMediaPosition* iface,LONG* pCanSeek) 402 { 403 CPassThruImpl_THIS(iface,mpos); 404 QUERYPOSPASS 405 406 TRACE("(%p)->()\n",This); 407 408 return IMediaPosition_CanSeekForward(pPos,pCanSeek); 409 } 410 411 static HRESULT WINAPI 412 IMediaPosition_fnCanSeekBackward(IMediaPosition* iface,LONG* pCanSeek) 413 { 414 CPassThruImpl_THIS(iface,mpos); 415 QUERYPOSPASS 416 417 TRACE("(%p)->()\n",This); 418 419 return IMediaPosition_CanSeekBackward(pPos,pCanSeek); 420 } 421 422 423 static ICOM_VTABLE(IMediaPosition) impos = 424 { 425 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE 426 /* IUnknown fields */ 427 IMediaPosition_fnQueryInterface, 428 IMediaPosition_fnAddRef, 429 IMediaPosition_fnRelease, 430 /* IDispatch fields */ 431 IMediaPosition_fnGetTypeInfoCount, 432 IMediaPosition_fnGetTypeInfo, 433 IMediaPosition_fnGetIDsOfNames, 434 IMediaPosition_fnInvoke, 435 /* IMediaPosition fields */ 436 IMediaPosition_fnget_Duration, 437 IMediaPosition_fnput_CurrentPosition, 438 IMediaPosition_fnget_CurrentPosition, 439 IMediaPosition_fnget_StopTime, 440 IMediaPosition_fnput_StopTime, 441 IMediaPosition_fnget_PrerollTime, 442 IMediaPosition_fnput_PrerollTime, 443 IMediaPosition_fnput_Rate, 444 IMediaPosition_fnget_Rate, 445 IMediaPosition_fnCanSeekForward, 446 IMediaPosition_fnCanSeekBackward, 447 }; 448 449 450 HRESULT CPassThruImpl_InitIMediaPosition( CPassThruImpl* pImpl ) 451 { 452 TRACE("(%p)\n",pImpl); 453 ICOM_VTBL(&pImpl->mpos) = &impos; 454 455 return NOERROR; 456 } 457 458 void CPassThruImpl_UninitIMediaPosition( CPassThruImpl* pImpl ) 459 { 460 TRACE("(%p)\n",pImpl); 461 } 462 463 #undef QUERYPOSPASS 464 465 466 /*************************************************************************** 467 * 468 * An implementation for CPassThruImpl::IMediaSeeking. 469 * 470 */ 471 472 #define QUERYSEEKPASS \ 473 IMediaSeeking* pSeek = NULL; \ 474 HRESULT hr; \ 475 hr = CPassThruImpl_QuerySeekPass( This, &pSeek ); \ 476 if ( FAILED(hr) ) return hr; 477 478 479 static HRESULT WINAPI 480 IMediaSeeking_fnQueryInterface(IMediaSeeking* iface,REFIID riid,void** ppobj) 481 { 482 CPassThruImpl_THIS(iface,mseek); 483 484 TRACE("(%p)->()\n",This); 485 486 return IUnknown_QueryInterface(This->punk,riid,ppobj); 487 } 488 489 static ULONG WINAPI 490 IMediaSeeking_fnAddRef(IMediaSeeking* iface) 491 { 492 CPassThruImpl_THIS(iface,mseek); 493 494 TRACE("(%p)->()\n",This); 495 496 return IUnknown_AddRef(This->punk); 497 } 498 499 static ULONG WINAPI 500 IMediaSeeking_fnRelease(IMediaSeeking* iface) 501 { 502 CPassThruImpl_THIS(iface,mseek); 503 504 TRACE("(%p)->()\n",This); 505 506 return IUnknown_Release(This->punk); 507 } 508 509 510 static HRESULT WINAPI 511 IMediaSeeking_fnGetCapabilities(IMediaSeeking* iface,DWORD* pdwCaps) 512 { 513 CPassThruImpl_THIS(iface,mseek); 514 QUERYSEEKPASS 515 516 TRACE("(%p)->()\n",This); 517 518 return IMediaSeeking_GetCapabilities(pSeek,pdwCaps); 519 } 520 521 static HRESULT WINAPI 522 IMediaSeeking_fnCheckCapabilities(IMediaSeeking* iface,DWORD* pdwCaps) 523 { 524 CPassThruImpl_THIS(iface,mseek); 525 QUERYSEEKPASS 526 527 TRACE("(%p)->()\n",This); 528 529 return IMediaSeeking_CheckCapabilities(pSeek,pdwCaps); 530 } 531 532 static HRESULT WINAPI 533 IMediaSeeking_fnIsFormatSupported(IMediaSeeking* iface,const GUID* pidFormat) 534 { 535 CPassThruImpl_THIS(iface,mseek); 536 QUERYSEEKPASS 537 538 TRACE("(%p)->()\n",This); 539 540 return IMediaSeeking_IsFormatSupported(pSeek,pidFormat); 541 } 542 543 static HRESULT WINAPI 544 IMediaSeeking_fnQueryPreferredFormat(IMediaSeeking* iface,GUID* pidFormat) 545 { 546 CPassThruImpl_THIS(iface,mseek); 547 QUERYSEEKPASS 548 549 TRACE("(%p)->()\n",This); 550 551 return IMediaSeeking_QueryPreferredFormat(pSeek,pidFormat); 552 } 553 554 static HRESULT WINAPI 555 IMediaSeeking_fnGetTimeFormat(IMediaSeeking* iface,GUID* pidFormat) 556 { 557 CPassThruImpl_THIS(iface,mseek); 558 QUERYSEEKPASS 559 560 TRACE("(%p)->()\n",This); 561 562 return IMediaSeeking_GetTimeFormat(pSeek,pidFormat); 563 } 564 565 static HRESULT WINAPI 566 IMediaSeeking_fnIsUsingTimeFormat(IMediaSeeking* iface,const GUID* pidFormat) 567 { 568 CPassThruImpl_THIS(iface,mseek); 569 QUERYSEEKPASS 570 571 TRACE("(%p)->()\n",This); 572 573 return IMediaSeeking_IsUsingTimeFormat(pSeek,pidFormat); 574 } 575 576 static HRESULT WINAPI 577 IMediaSeeking_fnSetTimeFormat(IMediaSeeking* iface,const GUID* pidFormat) 578 { 579 CPassThruImpl_THIS(iface,mseek); 580 QUERYSEEKPASS 581 582 TRACE("(%p)->()\n",This); 583 584 return IMediaSeeking_SetTimeFormat(pSeek,pidFormat); 585 } 586 587 static HRESULT WINAPI 588 IMediaSeeking_fnGetDuration(IMediaSeeking* iface,LONGLONG* pllDuration) 589 { 590 CPassThruImpl_THIS(iface,mseek); 591 QUERYSEEKPASS 592 593 TRACE("(%p)->()\n",This); 594 595 return IMediaSeeking_GetDuration(pSeek,pllDuration); 596 } 597 598 static HRESULT WINAPI 599 IMediaSeeking_fnGetStopPosition(IMediaSeeking* iface,LONGLONG* pllPos) 600 { 601 CPassThruImpl_THIS(iface,mseek); 602 QUERYSEEKPASS 603 604 TRACE("(%p)->()\n",This); 605 606 return IMediaSeeking_GetStopPosition(pSeek,pllPos); 607 } 608 609 static HRESULT WINAPI 610 IMediaSeeking_fnGetCurrentPosition(IMediaSeeking* iface,LONGLONG* pllPos) 611 { 612 CPassThruImpl_THIS(iface,mseek); 613 QUERYSEEKPASS 614 615 TRACE("(%p)->()\n",This); 616 617 return IMediaSeeking_GetCurrentPosition(pSeek,pllPos); 618 } 619 620 static HRESULT WINAPI 621 IMediaSeeking_fnConvertTimeFormat(IMediaSeeking* iface,LONGLONG* pllOut,const GUID* pidFmtOut,LONGLONG llIn,const GUID* pidFmtIn) 622 { 623 CPassThruImpl_THIS(iface,mseek); 624 QUERYSEEKPASS 625 626 TRACE("(%p)->()\n",This); 627 628 return IMediaSeeking_ConvertTimeFormat(pSeek,pllOut,pidFmtOut,llIn,pidFmtIn); 629 } 630 631 static HRESULT WINAPI 632 IMediaSeeking_fnSetPositions(IMediaSeeking* iface,LONGLONG* pllCur,DWORD dwCurFlags,LONGLONG* pllStop,DWORD dwStopFlags) 633 { 634 CPassThruImpl_THIS(iface,mseek); 635 QUERYSEEKPASS 636 637 TRACE("(%p)->()\n",This); 638 639 return IMediaSeeking_SetPositions(pSeek,pllCur,dwCurFlags,pllStop,dwStopFlags); 640 } 641 642 static HRESULT WINAPI 643 IMediaSeeking_fnGetPositions(IMediaSeeking* iface,LONGLONG* pllCur,LONGLONG* pllStop) 644 { 645 CPassThruImpl_THIS(iface,mseek); 646 QUERYSEEKPASS 647 648 TRACE("(%p)->()\n",This); 649 650 return IMediaSeeking_GetPositions(pSeek,pllCur,pllStop); 651 } 652 653 static HRESULT WINAPI 654 IMediaSeeking_fnGetAvailable(IMediaSeeking* iface,LONGLONG* pllFirst,LONGLONG* pllLast) 655 { 656 CPassThruImpl_THIS(iface,mseek); 657 QUERYSEEKPASS 658 659 TRACE("(%p)->()\n",This); 660 661 return IMediaSeeking_GetAvailable(pSeek,pllFirst,pllLast); 662 } 663 664 static HRESULT WINAPI 665 IMediaSeeking_fnSetRate(IMediaSeeking* iface,double dblRate) 666 { 667 CPassThruImpl_THIS(iface,mseek); 668 QUERYSEEKPASS 669 670 TRACE("(%p)->()\n",This); 671 672 return IMediaSeeking_SetRate(pSeek,dblRate); 673 } 674 675 static HRESULT WINAPI 676 IMediaSeeking_fnGetRate(IMediaSeeking* iface,double* pdblRate) 677 { 678 CPassThruImpl_THIS(iface,mseek); 679 QUERYSEEKPASS 680 681 TRACE("(%p)->()\n",This); 682 683 return IMediaSeeking_GetRate(pSeek,pdblRate); 684 } 685 686 static HRESULT WINAPI 687 IMediaSeeking_fnGetPreroll(IMediaSeeking* iface,LONGLONG* pllPreroll) 688 { 689 CPassThruImpl_THIS(iface,mseek); 690 QUERYSEEKPASS 691 692 TRACE("(%p)->()\n",This); 693 694 return IMediaSeeking_GetPreroll(pSeek,pllPreroll); 695 } 696 697 698 699 700 static ICOM_VTABLE(IMediaSeeking) imseek = 701 { 702 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE 703 /* IUnknown fields */ 704 IMediaSeeking_fnQueryInterface, 705 IMediaSeeking_fnAddRef, 706 IMediaSeeking_fnRelease, 707 /* IMediaSeeking fields */ 708 IMediaSeeking_fnGetCapabilities, 709 IMediaSeeking_fnCheckCapabilities, 710 IMediaSeeking_fnIsFormatSupported, 711 IMediaSeeking_fnQueryPreferredFormat, 712 IMediaSeeking_fnGetTimeFormat, 713 IMediaSeeking_fnIsUsingTimeFormat, 714 IMediaSeeking_fnSetTimeFormat, 715 IMediaSeeking_fnGetDuration, 716 IMediaSeeking_fnGetStopPosition, 717 IMediaSeeking_fnGetCurrentPosition, 718 IMediaSeeking_fnConvertTimeFormat, 719 IMediaSeeking_fnSetPositions, 720 IMediaSeeking_fnGetPositions, 721 IMediaSeeking_fnGetAvailable, 722 IMediaSeeking_fnSetRate, 723 IMediaSeeking_fnGetRate, 724 IMediaSeeking_fnGetPreroll, 725 }; 726 727 728 729 HRESULT CPassThruImpl_InitIMediaSeeking( CPassThruImpl* pImpl ) 730 { 731 TRACE("(%p)\n",pImpl); 732 ICOM_VTBL(&pImpl->mseek) = &imseek; 733 734 return NOERROR; 735 } 736 737 void CPassThruImpl_UninitIMediaSeeking( CPassThruImpl* pImpl ) 738 { 739 TRACE("(%p)\n",pImpl); 740 } 741 742 #undef QUERYSEEKPASS
Note:
See TracChangeset
for help on using the changeset viewer.