[PATCH 2/7] winegstreamer: Only seek if it was requested by the caller.

Giovanni Mascellani gmascellani at codeweavers.com
Fri Sep 17 09:48:51 CDT 2021


Hi,

when a Start command is issued to a media source, the caller can 
optionally specify a timestamp to seek to just before starting playback. 
This is expressed by mean of a PROPVARIANT, which can be empty if no 
seek is desired, or can be set to 64 bit int, which is interpreted at 
the timestamp to seek to. When no seek is requested, the playback will 
restart from the beginning if it was previously stopped, or from where 
it was if it was previously paused.

The current version doesn't check the type of the PROPVARIANT before 
using it. This is a bug, both because the content of an empty 
PROPVARIANT is not specified and should therefore not be used, and 
because supplying an empty PROPVARIANT explicitly has the meaning of not 
requesting any seek.

This patch fixes this bug by simply gating the seek with the check that 
the PROPVARIANT has the right type.

Again, you can use patches 4/7 through 7/7 to test this one. See my 
explanation for 1/7.

Giovanni.


Il 06/09/21 17:11, Giovanni Mascellani ha scritto:
> 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 cd8957db7b1..51ef84bf88f 100644
> --- a/dlls/winegstreamer/media_source.c
> +++ b/dlls/winegstreamer/media_source.c
> @@ -329,8 +329,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);
>   }
>   
> 



More information about the wine-devel mailing list