35 assert(fnChangeStop && fnChangeStart && fnChangeRate);
50 pSeeking->
dRate = 1.0;
68 TRACE(
"(%p)\n", pCapabilities);
70 *pCapabilities =
This->dwCapabilities;
81 TRACE(
"(%p)\n", pCapabilities);
86 dwCommonCaps = *pCapabilities &
This->dwCapabilities;
92 *pCapabilities = dwCommonCaps;
107 *pFormat = TIME_FORMAT_MEDIA_TIME;
117 *pFormat =
This->timeformat;
150 TRACE(
"(%p)\n", pDuration);
153 *pDuration =
This->llDuration;
163 TRACE(
"(%p)\n", pStop);
166 *pStop =
This->llStop;
177 TRACE(
"(%p)\n", pCurrent);
180 *pCurrent =
This->llCurrent;
190 pTargetFormat = &
This->timeformat;
192 pSourceFormat = &
This->timeformat;
193 if (
IsEqualIID(pTargetFormat, &TIME_FORMAT_MEDIA_TIME) &&
IsEqualIID(pSourceFormat, &TIME_FORMAT_MEDIA_TIME))
212 return value + *pModifier;
225 TRACE(
"iface %p, current %s, current_flags %#lx, stop %s, stop_flags %#lx.\n", iface,
226 pCurrent ?
debugstr_time(*pCurrent) :
"<null>", dwCurrentFlags,
231 llNewCurrent =
Adjust(
This->llCurrent, pCurrent, dwCurrentFlags);
232 llNewStop =
Adjust(
This->llStop, pStop, dwStopFlags);
235 bChangeCurrent =
TRUE;
236 if (llNewStop !=
This->llStop)
241 This->llCurrent = llNewCurrent;
242 This->llStop = llNewStop;
245 *pCurrent = llNewCurrent;
251 This->fnChangeStart(iface);
253 This->fnChangeStop(iface);
262 TRACE(
"(%p, %p)\n", pCurrent, pStop);
265 IMediaSeeking_GetCurrentPosition(iface, pCurrent);
266 IMediaSeeking_GetStopPosition(iface, pStop);
276 TRACE(
"(%p, %p)\n", pEarliest, pLatest);
280 *pLatest =
This->llDuration;
289 BOOL bChangeRate = (dRate !=
This->dRate);
292 TRACE(
"(%e)\n", dRate);
294 if (dRate > 100 || dRate < .001)
296 FIXME(
"Excessive rate %e, ignoring\n", dRate);
303 hr =
This->fnChangeRate(iface);
313 TRACE(
"(%p)\n", dRate);
317 *dRate =
This->dRate;
325 TRACE(
"(%p)\n", pPreroll);
@ AM_SEEKING_CanGetDuration
@ AM_SEEKING_CanSeekBackwards
@ AM_SEEKING_CanSeekForwards
@ AM_SEEKING_CanSeekAbsolute
@ AM_SEEKING_CanGetStopPos
@ AM_SEEKING_RelativePositioning
@ AM_SEEKING_IncrementalPositioning
@ AM_SEEKING_NoPositioning
@ AM_SEEKING_PositioningBitsMask
@ AM_SEEKING_AbsolutePositioning
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
BOOL WINAPI InitializeCriticalSectionEx(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount, IN DWORD flags)
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
#define IsEqualIID(riid1, riid2)
HRESULT WINAPI SourceSeekingImpl_SetTimeFormat(IMediaSeeking *iface, const GUID *pFormat)
HRESULT WINAPI SourceSeekingImpl_SetPositions(IMediaSeeking *iface, LONGLONG *pCurrent, DWORD dwCurrentFlags, LONGLONG *pStop, DWORD dwStopFlags)
HRESULT WINAPI SourceSeekingImpl_IsUsingTimeFormat(IMediaSeeking *iface, const GUID *pFormat)
static LONGLONG Adjust(LONGLONG value, const LONGLONG *pModifier, DWORD dwFlags)
void strmbase_seeking_cleanup(SourceSeeking *seeking)
HRESULT WINAPI SourceSeekingImpl_GetRate(IMediaSeeking *iface, double *dRate)
HRESULT WINAPI SourceSeekingImpl_GetTimeFormat(IMediaSeeking *iface, GUID *pFormat)
HRESULT WINAPI SourceSeekingImpl_GetCapabilities(IMediaSeeking *iface, DWORD *pCapabilities)
HRESULT strmbase_seeking_init(SourceSeeking *pSeeking, const IMediaSeekingVtbl *Vtbl, SourceSeeking_ChangeStop fnChangeStop, SourceSeeking_ChangeStart fnChangeStart, SourceSeeking_ChangeRate fnChangeRate)
HRESULT WINAPI SourceSeekingImpl_GetCurrentPosition(IMediaSeeking *iface, LONGLONG *pCurrent)
HRESULT WINAPI SourceSeekingImpl_GetPreroll(IMediaSeeking *iface, LONGLONG *pPreroll)
HRESULT WINAPI SourceSeekingImpl_SetRate(IMediaSeeking *iface, double dRate)
HRESULT WINAPI SourceSeekingImpl_ConvertTimeFormat(IMediaSeeking *iface, LONGLONG *pTarget, const GUID *pTargetFormat, LONGLONG Source, const GUID *pSourceFormat)
HRESULT WINAPI SourceSeekingImpl_IsFormatSupported(IMediaSeeking *iface, const GUID *pFormat)
HRESULT WINAPI SourceSeekingImpl_GetStopPosition(IMediaSeeking *iface, LONGLONG *pStop)
HRESULT WINAPI SourceSeekingImpl_GetDuration(IMediaSeeking *iface, LONGLONG *pDuration)
HRESULT WINAPI SourceSeekingImpl_GetPositions(IMediaSeeking *iface, LONGLONG *pCurrent, LONGLONG *pStop)
HRESULT WINAPI SourceSeekingImpl_CheckCapabilities(IMediaSeeking *iface, DWORD *pCapabilities)
HRESULT WINAPI SourceSeekingImpl_QueryPreferredFormat(IMediaSeeking *iface, GUID *pFormat)
HRESULT WINAPI SourceSeekingImpl_GetAvailable(IMediaSeeking *iface, LONGLONG *pEarliest, LONGLONG *pLatest)
static SourceSeeking * impl_from_IMediaSeeking(IMediaSeeking *iface)
static const char * debugstr_time(REFERENCE_TIME time)
HRESULT(WINAPI * SourceSeeking_ChangeStop)(IMediaSeeking *iface)
HRESULT(WINAPI * SourceSeeking_ChangeRate)(IMediaSeeking *iface)
HRESULT(WINAPI * SourceSeeking_ChangeStart)(IMediaSeeking *iface)
SourceSeeking_ChangeRate fnChangeRate
SourceSeeking_ChangeStart fnChangeStart
SourceSeeking_ChangeStop fnChangeStop
IMediaSeeking IMediaSeeking_iface
PRTL_CRITICAL_SECTION_DEBUG DebugInfo
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
#define CONTAINING_RECORD(address, type, field)
#define VFW_E_UNSUPPORTED_AUDIO
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
#define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO