[Mesa-dev] [PATCH 17/20] radeon/uvd: add yuyv format support for target buffer

Christian K├Ânig deathsimple at vodafone.de
Wed Aug 16 07:28:31 UTC 2017


Am 15.08.2017 um 22:08 schrieb Leo Liu:
> YUYV is a packed YUV format, and there is no chorma plane
>
> Signed-off-by: Leo Liu <leo.liu at amd.com>
> ---
>   src/gallium/drivers/radeon/radeon_uvd.c | 8 ++++++--
>   src/gallium/drivers/radeonsi/si_uvd.c   | 2 +-
>   2 files changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/src/gallium/drivers/radeon/radeon_uvd.c b/src/gallium/drivers/radeon/radeon_uvd.c
> index 59d1f199e9..5e5638d565 100644
> --- a/src/gallium/drivers/radeon/radeon_uvd.c
> +++ b/src/gallium/drivers/radeon/radeon_uvd.c
> @@ -1543,6 +1543,8 @@ void ruvd_set_dt_surfaces(struct ruvd_msg *msg, struct radeon_surf *luma,
>   	default:
>   	case RUVD_SURFACE_TYPE_LEGACY:
>   		msg->body.decode.dt_pitch = luma->u.legacy.level[0].nblk_x;
> +		if (!chroma)
> +			msg->body.decode.dt_pitch *= 2;

Patch looks good to me, except for this hunk.

Can we get the pitch somehow else instead of making it depending if 
chroma is present or not?

Cause that is clearly not correct in all cases.

Christian.

>   		switch (luma->u.legacy.level[0].mode) {
>   		case RADEON_SURF_MODE_LINEAR_ALIGNED:
>   			msg->body.decode.dt_tiling_mode = RUVD_TILE_LINEAR;
> @@ -1562,10 +1564,12 @@ void ruvd_set_dt_surfaces(struct ruvd_msg *msg, struct radeon_surf *luma,
>   		}
>   
>   		msg->body.decode.dt_luma_top_offset = texture_offset(luma, 0, type);
> -		msg->body.decode.dt_chroma_top_offset = texture_offset(chroma, 0, type);
> +		if (chroma)
> +			msg->body.decode.dt_chroma_top_offset = texture_offset(chroma, 0, type);
>   		if (msg->body.decode.dt_field_mode) {
>   			msg->body.decode.dt_luma_bottom_offset = texture_offset(luma, 1, type);
> -			msg->body.decode.dt_chroma_bottom_offset = texture_offset(chroma, 1, type);
> +			if (chroma)
> +				msg->body.decode.dt_chroma_bottom_offset = texture_offset(chroma, 1, type);
>   		} else {
>   			msg->body.decode.dt_luma_bottom_offset = msg->body.decode.dt_luma_top_offset;
>   			msg->body.decode.dt_chroma_bottom_offset = msg->body.decode.dt_chroma_top_offset;
> diff --git a/src/gallium/drivers/radeonsi/si_uvd.c b/src/gallium/drivers/radeonsi/si_uvd.c
> index d17a6656a4..2441ad248c 100644
> --- a/src/gallium/drivers/radeonsi/si_uvd.c
> +++ b/src/gallium/drivers/radeonsi/si_uvd.c
> @@ -131,7 +131,7 @@ static struct pb_buffer* si_uvd_set_dtb(struct ruvd_msg *msg, struct vl_video_bu
>   
>   	msg->body.decode.dt_field_mode = buf->base.interlaced;
>   
> -	ruvd_set_dt_surfaces(msg, &luma->surface, &chroma->surface, type);
> +	ruvd_set_dt_surfaces(msg, &luma->surface, (chroma) ? &chroma->surface : NULL, type);
>   
>   	return luma->resource.buf;
>   }




More information about the mesa-dev mailing list