winegstreamer: Return the seeking start time from IMediaSeeking::GetCurrentPosition().

Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zebediah Figura 2020-11-21 15:24:59 -06:00 committed by Alexandre Julliard
parent b04c0a56e3
commit 1bb7ef1c1a
3 changed files with 7 additions and 36 deletions

View File

@ -931,7 +931,6 @@ static HRESULT WINAPI testsink_Receive(struct strmbase_sink *iface, IMediaSample
IPin_QueryInterface(iface->pin.peer, &IID_IMediaSeeking, (void **)&seeking);
hr = IMediaSeeking_GetPositions(seeking, &start, &end);
ok(hr == S_OK, "Got hr %#x.\n", hr);
todo_wine_if (start != filter->seek_start)
ok(start == filter->seek_start, "Expected start position %I64u, got %I64u.\n", filter->seek_start, start);
ok(end == filter->seek_end, "Expected end position %I64u, got %I64u.\n", filter->seek_end, end);
IMediaSeeking_Release(seeking);
@ -1696,7 +1695,7 @@ static void test_streaming(void)
start = end = 0xdeadbeef;
hr = IMediaSeeking_GetPositions(seeking, &start, &end);
ok(hr == S_OK, "Got hr %#x.\n", hr);
todo_wine ok(start == testsink.seek_start, "Expected start position %I64u, got %I64u.\n", testsink.seek_start, start);
ok(start == testsink.seek_start, "Expected start position %I64u, got %I64u.\n", testsink.seek_start, start);
ok(end == testsink.seek_end, "Expected end position %I64u, got %I64u.\n", testsink.seek_end, end);
testsink.sample_count = testsink.eos_count = 0;
@ -1712,7 +1711,7 @@ static void test_streaming(void)
start = end = 0xdeadbeef;
hr = IMediaSeeking_GetPositions(seeking, &start, &end);
ok(hr == S_OK, "Got hr %#x.\n", hr);
todo_wine ok(start == testsink.seek_start, "Expected start position %I64u, got %I64u.\n", testsink.seek_start, start);
ok(start == testsink.seek_start, "Expected start position %I64u, got %I64u.\n", testsink.seek_start, start);
ok(end == testsink.seek_end, "Expected end position %I64u, got %I64u.\n", testsink.seek_end, end);
IMediaSeeking_Release(seeking);

View File

@ -1220,7 +1220,6 @@ static HRESULT WINAPI testsink_Receive(struct strmbase_sink *iface, IMediaSample
IPin_QueryInterface(iface->pin.peer, &IID_IMediaSeeking, (void **)&seeking);
hr = IMediaSeeking_GetPositions(seeking, &start, &end);
ok(hr == S_OK, "Got hr %#x.\n", hr);
todo_wine_if (start != filter->seek_start)
ok(start == filter->seek_start, "Expected start position %I64u, got %I64u.\n", filter->seek_start, start);
ok(end == filter->seek_end, "Expected end position %I64u, got %I64u.\n", filter->seek_end, end);
IMediaSeeking_Release(seeking);
@ -1863,7 +1862,7 @@ static void test_streaming(void)
start = end = 0xdeadbeef;
hr = IMediaSeeking_GetPositions(seeking, &start, &end);
ok(hr == S_OK, "Got hr %#x.\n", hr);
todo_wine ok(start == testsink.seek_start, "Expected start position %I64u, got %I64u.\n", testsink.seek_start, start);
ok(start == testsink.seek_start, "Expected start position %I64u, got %I64u.\n", testsink.seek_start, start);
ok(end == testsink.seek_end, "Expected end position %I64u, got %I64u.\n", testsink.seek_end, end);
testsink.sample_count = testsink.eos_count = 0;
@ -1879,7 +1878,7 @@ static void test_streaming(void)
start = end = 0xdeadbeef;
hr = IMediaSeeking_GetPositions(seeking, &start, &end);
ok(hr == S_OK, "Got hr %#x.\n", hr);
todo_wine ok(start == testsink.seek_start, "Expected start position %I64u, got %I64u.\n", testsink.seek_start, start);
ok(start == testsink.seek_start, "Expected start position %I64u, got %I64u.\n", testsink.seek_start, start);
ok(end == testsink.seek_end, "Expected end position %I64u, got %I64u.\n", testsink.seek_end, end);
IMediaSeeking_Release(seeking);

View File

@ -1897,33 +1897,6 @@ static ULONG WINAPI GST_Seeking_Release(IMediaSeeking *iface)
return IPin_Release(&This->pin.pin.IPin_iface);
}
static HRESULT WINAPI GST_Seeking_GetCurrentPosition(IMediaSeeking *iface, REFERENCE_TIME *pos)
{
struct gstdemux_source *This = impl_from_IMediaSeeking(iface);
TRACE("(%p)->(%p)\n", This, pos);
if (!pos)
return E_POINTER;
mark_wine_thread();
if (This->pin.pin.filter->state == State_Stopped)
{
*pos = This->seek.llCurrent;
TRACE("Cached value\n");
return S_OK;
}
if (!gst_pad_query_position(This->their_src, GST_FORMAT_TIME, pos)) {
WARN("Could not query position\n");
return E_NOTIMPL;
}
*pos /= 100;
This->seek.llCurrent = *pos;
return S_OK;
}
static GstSeekType type_from_flags(DWORD flags)
{
switch (flags & AM_SEEKING_PositioningBitsMask) {
@ -1997,7 +1970,7 @@ static const IMediaSeekingVtbl GST_Seeking_Vtbl =
SourceSeekingImpl_SetTimeFormat,
SourceSeekingImpl_GetDuration,
SourceSeekingImpl_GetStopPosition,
GST_Seeking_GetCurrentPosition,
SourceSeekingImpl_GetCurrentPosition,
SourceSeekingImpl_ConvertTimeFormat,
GST_Seeking_SetPositions,
SourceSeekingImpl_GetPositions,