[PATCH v2 3/4] winegstreamer: Only seek if it was requested by the caller.
Zebediah Figura (she/her)
zfigura at codeweavers.com
Fri Jun 11 16:10:46 CDT 2021
On 6/11/21 5:53 AM, Giovanni Mascellani wrote:
> Signed-off-by: Giovanni Mascellani <gmascellani at codeweavers.com>
> ---
> dlls/winegstreamer/media_source.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c
> index 3e1e3001dc7..9188a350305 100644
> --- a/dlls/winegstreamer/media_source.c
> +++ b/dlls/winegstreamer/media_source.c
> @@ -324,8 +324,9 @@ static void start_pipeline(struct media_source *source, struct source_async_comm
>
> source->state = SOURCE_RUNNING;
>
> - unix_funcs->wg_parser_stream_seek(source->streams[0]->wg_stream, 1.0,
> - position->hVal.QuadPart, 0, AM_SEEKING_AbsolutePositioning, AM_SEEKING_NoPositioning);
> + if (position->vt == VT_I8)
> + unix_funcs->wg_parser_stream_seek(source->streams[0]->wg_stream, 1.0,
> + position->hVal.QuadPart, 0, AM_SEEKING_AbsolutePositioning, AM_SEEKING_NoPositioning);
> unix_funcs->wg_parser_end_flush(source->wg_parser);
> }
>
>
I don't think this works reliably as-is. The API is a little awkward and
doesn't communicate this clearly (sorry), but if GStreamer gives us a
sample between wg_parser_stream_enable() and wg_parser_end_flush(),
we'll return GST_FLOW_FLUSHING, which will generally cause the upstream
element to stop sending data. The seek event is necessary to tell it to
start sending data again.
This situation is probably more than a little undesirable. We probably
need to modify the interface and backend to prevent any samples from
getting lost (and, ideally, to avoid seeking the GStreamer backend if we
don't need to).
What happens if you change which streams are selected without seeking?
Currently the WG backend discards any events/buffers on disabled
streams, which means that in general they won't be synchronized and we
may end up throwing away an entire stream. My guess is that this is
fine, because as far as I can tell mfplat doesn't actually make any
synchronization guarantees even among selected streams, but I'd like to
make sure...
More information about the wine-devel
mailing list