Ignore:
Timestamp:
Oct 6, 2001, 10:56:18 AM (24 years ago)
Author:
sandervl
Message:

Wine 20011004 resync

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/quartz/seekpass.c

    r6710 r6952  
    11/*
    2  * Implementation of CLSID_SeekingPassThru.
     2 *      Implementation of CLSID_SeekingPassThru
     3 *
     4 *      FIXME - not tested yet.
    35 *
    46 * hidenori@a2.ctktv.ne.jp
     
    1012#include "winbase.h"
    1113#include "wingdi.h"
     14#include "winuser.h"
    1215#include "winerror.h"
    1316#include "wine/obj_base.h"
    1417#include "strmif.h"
     18#include "control.h"
    1519#include "uuids.h"
    1620
     
    2226
    2327
     28/***************************************************************************
     29 *
     30 *      CSeekingPassThru::ISeekingPassThru
     31 *
     32 */
    2433
    2534static HRESULT WINAPI
     
    5867        CSeekingPassThru_THIS(iface,seekpass);
    5968
    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;
    6384}
    6485
     
    80101        TRACE("(%p)\n",This);
    81102        ICOM_VTBL(&This->seekpass) = &iseekingpassthru;
     103        This->passthru.punk = This->unk.punkControl;
     104        This->passthru.pPin = NULL;
     105        InitializeCriticalSection( &This->cs );
    82106
    83107        return NOERROR;
     
    88112{
    89113        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 */
    92127
    93128/* can I use offsetof safely? - FIXME? */
     
    95130{
    96131  { &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) },
    97134};
    98135
     
    133170}
    134171
     172
     173
     174
     175/***************************************************************************
     176 *
     177 *      CPassThruImpl Helper methods.
     178 *
     179 */
     180
     181static
     182HRESULT CPassThruImpl_GetConnected( CPassThruImpl* pImpl, IPin** ppPin )
     183{
     184        return IPin_ConnectedTo( pImpl->pPin, ppPin );
     185}
     186
     187HRESULT 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
     202HRESULT 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
     230static HRESULT WINAPI
     231IMediaPosition_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
     240static ULONG WINAPI
     241IMediaPosition_fnAddRef(IMediaPosition* iface)
     242{
     243        CPassThruImpl_THIS(iface,mpos);
     244
     245        TRACE("(%p)->()\n",This);
     246
     247        return IUnknown_AddRef(This->punk);
     248}
     249
     250static ULONG WINAPI
     251IMediaPosition_fnRelease(IMediaPosition* iface)
     252{
     253        CPassThruImpl_THIS(iface,mpos);
     254
     255        TRACE("(%p)->()\n",This);
     256
     257        return IUnknown_Release(This->punk);
     258}
     259
     260static HRESULT WINAPI
     261IMediaPosition_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
     270static HRESULT WINAPI
     271IMediaPosition_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
     280static HRESULT WINAPI
     281IMediaPosition_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
     290static HRESULT WINAPI
     291IMediaPosition_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
     301static HRESULT WINAPI
     302IMediaPosition_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
     312static HRESULT WINAPI
     313IMediaPosition_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
     323static HRESULT WINAPI
     324IMediaPosition_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
     334static HRESULT WINAPI
     335IMediaPosition_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
     345static HRESULT WINAPI
     346IMediaPosition_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
     356static HRESULT WINAPI
     357IMediaPosition_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
     367static HRESULT WINAPI
     368IMediaPosition_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
     378static HRESULT WINAPI
     379IMediaPosition_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
     389static HRESULT WINAPI
     390IMediaPosition_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
     400static HRESULT WINAPI
     401IMediaPosition_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
     411static HRESULT WINAPI
     412IMediaPosition_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
     423static 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
     450HRESULT CPassThruImpl_InitIMediaPosition( CPassThruImpl* pImpl )
     451{
     452        TRACE("(%p)\n",pImpl);
     453        ICOM_VTBL(&pImpl->mpos) = &impos;
     454
     455        return NOERROR;
     456}
     457
     458void 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
     479static HRESULT WINAPI
     480IMediaSeeking_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
     489static ULONG WINAPI
     490IMediaSeeking_fnAddRef(IMediaSeeking* iface)
     491{
     492        CPassThruImpl_THIS(iface,mseek);
     493
     494        TRACE("(%p)->()\n",This);
     495
     496        return IUnknown_AddRef(This->punk);
     497}
     498
     499static ULONG WINAPI
     500IMediaSeeking_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
     510static HRESULT WINAPI
     511IMediaSeeking_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
     521static HRESULT WINAPI
     522IMediaSeeking_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
     532static HRESULT WINAPI
     533IMediaSeeking_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
     543static HRESULT WINAPI
     544IMediaSeeking_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
     554static HRESULT WINAPI
     555IMediaSeeking_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
     565static HRESULT WINAPI
     566IMediaSeeking_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
     576static HRESULT WINAPI
     577IMediaSeeking_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
     587static HRESULT WINAPI
     588IMediaSeeking_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
     598static HRESULT WINAPI
     599IMediaSeeking_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
     609static HRESULT WINAPI
     610IMediaSeeking_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
     620static HRESULT WINAPI
     621IMediaSeeking_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
     631static HRESULT WINAPI
     632IMediaSeeking_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
     642static HRESULT WINAPI
     643IMediaSeeking_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
     653static HRESULT WINAPI
     654IMediaSeeking_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
     664static HRESULT WINAPI
     665IMediaSeeking_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
     675static HRESULT WINAPI
     676IMediaSeeking_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
     686static HRESULT WINAPI
     687IMediaSeeking_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
     700static 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
     729HRESULT CPassThruImpl_InitIMediaSeeking( CPassThruImpl* pImpl )
     730{
     731        TRACE("(%p)\n",pImpl);
     732        ICOM_VTBL(&pImpl->mseek) = &imseek;
     733
     734        return NOERROR;
     735}
     736
     737void 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.