diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 6430e853777..5ed44f0d50b 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -199,7 +199,6 @@ HRESULT wm_reader_get_stream_sample(struct wm_reader *reader, IWMReaderCallbackA INSSBuffer **ret_sample, QWORD *pts, QWORD *duration, DWORD *flags, WORD *ret_stream_number); HRESULT wm_reader_get_stream_selection(struct wm_reader *reader, WORD stream_number, WMT_STREAM_SELECTION *selection); -void wm_reader_seek(struct wm_reader *reader, QWORD start, LONGLONG duration); HRESULT wm_reader_set_allocate_for_output(struct wm_reader *reader, DWORD output, BOOL allocate); HRESULT wm_reader_set_allocate_for_stream(struct wm_reader *reader, WORD stream_number, BOOL allocate); HRESULT wm_reader_set_output_props(struct wm_reader *reader, DWORD output, diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c index 4546a9c3309..60cffba2553 100644 --- a/dlls/winegstreamer/wm_asyncreader.c +++ b/dlls/winegstreamer/wm_asyncreader.c @@ -244,10 +244,9 @@ static DWORD WINAPI async_reader_callback_thread(void *arg) { reader->context = op->u.start.context; if (SUCCEEDED(hr)) - { - wm_reader_seek(reader->wm_reader, op->u.start.start, op->u.start.duration); + hr = IWMSyncReader2_SetRange(reader->reader, op->u.start.start, op->u.start.duration); + if (SUCCEEDED(hr)) reader->clock_start = get_current_time(reader); - } LeaveCriticalSection(&reader->callback_cs); IWMReaderCallback_OnStatus(reader->callback, WMT_STARTED, hr, diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index d3e71efeac6..09af7457b27 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -1886,23 +1886,6 @@ HRESULT wm_reader_get_stream_sample(struct wm_reader *reader, IWMReaderCallbackA } } -void wm_reader_seek(struct wm_reader *reader, QWORD start, LONGLONG duration) -{ - WORD i; - - EnterCriticalSection(&reader->cs); - - reader->start_time = start; - - wg_parser_stream_seek(reader->streams[0].wg_stream, 1.0, start, start + duration, - AM_SEEKING_AbsolutePositioning, duration ? AM_SEEKING_AbsolutePositioning : AM_SEEKING_NoPositioning); - - for (i = 0; i < reader->stream_count; ++i) - reader->streams[i].eos = false; - - LeaveCriticalSection(&reader->cs); -} - HRESULT wm_reader_set_streams_selected(struct wm_reader *reader, WORD count, const WORD *stream_numbers, const WMT_STREAM_SELECTION *selections) { @@ -2415,10 +2398,21 @@ static HRESULT WINAPI reader_SetOutputSetting(IWMSyncReader2 *iface, DWORD outpu static HRESULT WINAPI reader_SetRange(IWMSyncReader2 *iface, QWORD start, LONGLONG duration) { struct wm_reader *reader = impl_from_IWMSyncReader2(iface); + WORD i; TRACE("reader %p, start %I64u, duration %I64d.\n", reader, start, duration); - wm_reader_seek(reader, start, duration); + EnterCriticalSection(&reader->cs); + + reader->start_time = start; + + wg_parser_stream_seek(reader->streams[0].wg_stream, 1.0, start, start + duration, + AM_SEEKING_AbsolutePositioning, duration ? AM_SEEKING_AbsolutePositioning : AM_SEEKING_NoPositioning); + + for (i = 0; i < reader->stream_count; ++i) + reader->streams[i].eos = false; + + LeaveCriticalSection(&reader->cs); return S_OK; }