[PATCH 2/5] winegstreamer: Allocate source media buffers in the PE components.

Zebediah Figura zfigura at codeweavers.com
Mon Sep 6 14:36:30 CDT 2021


On 9/1/21 4:05 PM, Derek Lesho wrote:
> diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c
> index 383afcfce75..abd9a220a7f 100644
> --- a/dlls/winegstreamer/media_source.c
> +++ b/dlls/winegstreamer/media_source.c
> @@ -541,14 +541,21 @@ static DWORD CALLBACK read_thread(void *arg)
>           HRESULT hr;
>           void *data;
>   
> -        if (!unix_funcs->wg_parser_get_read_request(source->wg_parser, &data, &offset, &size))
> +        if (!unix_funcs->wg_parser_get_next_read_offset(source->wg_parser, &offset, &size))
>               continue;
>   
> +        data = malloc(size);
> +        ret_size = 0;
> +

This buffer should probably be retained, and grown if necessary, rather 
than allocated on every iteration. Same with the quartz version.

>           if (SUCCEEDED(hr = IMFByteStream_SetCurrentPosition(byte_stream, offset)))
>               hr = IMFByteStream_Read(byte_stream, data, size, &ret_size);
> +        if (FAILED(hr))
> +            ERR("Failed to read source stream bytes %p+%u. hr=%#x\n", data, size, hr);
>           if (SUCCEEDED(hr) && ret_size != size)
>               ERR("Unexpected short read: requested %u bytes, got %u.\n", size, ret_size);
> -        unix_funcs->wg_parser_complete_read_request(source->wg_parser, SUCCEEDED(hr));
> +        unix_funcs->wg_parser_push_data(source->wg_parser, SUCCEEDED(hr) ? data : NULL, ret_size);
> +
> +        free(data);
>       }
>   
>       TRACE("Media source is shutting down; exiting.\n");



More information about the wine-devel mailing list