[Mesa-dev] [PATCH] radeon/uvd: use bitstream coded number for symbols of Huffman tables

Boyuan Zhang boyzhang at amd.com
Thu Sep 20 17:39:08 UTC 2018


Patch is

Reviewed-by: Boyuan Zhang <boyuan.zhang at amd.com>


On 2018-09-19 09:40 AM, Leo Liu wrote:
> Signed-off-by: Leo Liu <leo.liu at amd.com>
> Fixes: 130d1f456(radeon/uvd: reconstruct MJPEG bitstream)
> Cc: "18.2" <mesa-stable at lists.freedesktop.org>
> ---
>   src/gallium/drivers/radeon/radeon_uvd.c | 18 ++++++++++++++----
>   1 file changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/src/gallium/drivers/radeon/radeon_uvd.c b/src/gallium/drivers/radeon/radeon_uvd.c
> index 923216d77f1..a7ef4252ee0 100644
> --- a/src/gallium/drivers/radeon/radeon_uvd.c
> +++ b/src/gallium/drivers/radeon/radeon_uvd.c
> @@ -1003,25 +1003,35 @@ static void get_mjpeg_slice_header(struct ruvd_decoder *dec, struct pipe_mjpeg_p
>   	size++;
>   
>   	for (i = 0; i < 2; ++i) {
> +		int num = 0, j;
> +
>   		if (pic->huffman_table.load_huffman_table[i] == 0)
>   			continue;
>   
>   		buf[size++] = 0x00 | i;
>   		memcpy((buf + size), &pic->huffman_table.table[i].num_dc_codes, 16);
>   		size += 16;
> -		memcpy((buf + size), &pic->huffman_table.table[i].dc_values, 12);
> -		size += 12;
> +		for (j = 0; j < 16; ++j)
> +			num += pic->huffman_table.table[i].num_dc_codes[j];
> +		assert(num <= 12);
> +		memcpy((buf + size), &pic->huffman_table.table[i].dc_values, num);
> +		size += num;
>   	}
>   
>   	for (i = 0; i < 2; ++i) {
> +		int num = 0, j;
> +
>   		if (pic->huffman_table.load_huffman_table[i] == 0)
>   			continue;
>   
>   		buf[size++] = 0x10 | i;
>   		memcpy((buf + size), &pic->huffman_table.table[i].num_ac_codes, 16);
>   		size += 16;
> -		memcpy((buf + size), &pic->huffman_table.table[i].ac_values, 162);
> -		size += 162;
> +		for (j = 0; j < 16; ++j)
> +			num += pic->huffman_table.table[i].num_ac_codes[j];
> +		assert(num <= 162);
> +		memcpy((buf + size), &pic->huffman_table.table[i].ac_values, num);
> +		size += num;
>   	}
>   
>   	bs = (uint16_t*)&buf[len_pos];



More information about the mesa-dev mailing list