[PATCH] winegstreamer: Set specific large buffer sizes for decodebin
Zebediah Figura (she/her)
zfigura at codeweavers.com
Wed Mar 17 14:17:38 CDT 2021
On 3/17/21 1:49 PM, Andrew Eikum wrote:
> Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
> ---
>
> Setting them to 0 just means use the default:
>
> https://gstreamer.freedesktop.org/documentation/playback/decodebin.html?gi-language=c#decodebin:max-size-buffers
>
> dlls/winegstreamer/gst_private.h | 2 +-
> dlls/winegstreamer/media_source.c | 2 +-
> dlls/winegstreamer/wg_parser.c | 10 +++++-----
> 3 files changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h
> index 55a62361966..69833a40b62 100644
> --- a/dlls/winegstreamer/gst_private.h
> +++ b/dlls/winegstreamer/gst_private.h
> @@ -173,7 +173,7 @@ struct unix_funcs
> void **data, uint64_t *offset, uint32_t *size);
> void (CDECL *wg_parser_complete_read_request)(struct wg_parser *parser, bool ret);
>
> - void (CDECL *wg_parser_set_unlimited_buffering)(struct wg_parser *parser);
> + void (CDECL *wg_parser_set_large_buffering)(struct wg_parser *parser);
>
> uint32_t (CDECL *wg_parser_get_stream_count)(struct wg_parser *parser);
> struct wg_parser_stream *(CDECL *wg_parser_get_stream)(struct wg_parser *parser, uint32_t index);
> diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c
> index 3260175f45a..828d15f906e 100644
> --- a/dlls/winegstreamer/media_source.c
> +++ b/dlls/winegstreamer/media_source.c
> @@ -1125,7 +1125,7 @@ static HRESULT media_source_constructor(IMFByteStream *bytestream, struct media_
> * never deselects it). Remove buffering limits from decodebin in order to
> * account for this. Note that this does leak memory, but the same memory
> * leak occurs with native. */
> - unix_funcs->wg_parser_set_unlimited_buffering(parser);
> + unix_funcs->wg_parser_set_large_buffering(parser);
>
> object->stream_count = unix_funcs->wg_parser_get_stream_count(parser);
>
> diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c
> index f76ca903b80..de6396a5603 100644
> --- a/dlls/winegstreamer/wg_parser.c
> +++ b/dlls/winegstreamer/wg_parser.c
> @@ -543,11 +543,11 @@ static void CDECL wg_parser_complete_read_request(struct wg_parser *parser, bool
> pthread_cond_signal(&parser->read_done_cond);
> }
>
> -static void CDECL wg_parser_set_unlimited_buffering(struct wg_parser *parser)
> +static void CDECL wg_parser_set_large_buffering(struct wg_parser *parser)
> {
> - g_object_set(parser->decodebin, "max-size-buffers", 0, NULL);
> - g_object_set(parser->decodebin, "max-size-time", G_GUINT64_CONSTANT(0), NULL);
> - g_object_set(parser->decodebin, "max-size-bytes", 0, NULL);
> + g_object_set(parser->decodebin, "max-size-buffers", UINT_MAX, NULL);
> + g_object_set(parser->decodebin, "max-size-time", G_GUINT64_CONSTANT(1000000000), NULL);
> + g_object_set(parser->decodebin, "max-size-bytes", 8 * 1024 * 1024, NULL);
> }
>
Is 8 MB or 1 second really enough? Is there any reason not to just use
G_MAXUINT64/UINT_MAX here?
> static void CDECL wg_parser_stream_get_preferred_format(struct wg_parser_stream *stream, struct wg_format *format)
> @@ -1883,7 +1883,7 @@ static const struct unix_funcs funcs =
> wg_parser_get_read_request,
> wg_parser_complete_read_request,
>
> - wg_parser_set_unlimited_buffering,
> + wg_parser_set_large_buffering,
>
> wg_parser_get_stream_count,
> wg_parser_get_stream,
>
More information about the wine-devel
mailing list