[Mesa-dev] [PATCH] st/omx/dec: set dst rect to match src size
Christian König
deathsimple at vodafone.de
Sat Sep 3 08:14:59 UTC 2016
Am 02.09.2016 um 20:11 schrieb Leo Liu:
> When creating interlaced video buffer, hegith set to "template.height =
> align(tmpl->height/ array_size, VL_MACROBLOCK_HEIGHT);", and we use
> "template.height *= array_size;" for the buffer height, so it actually
> aligned with 32. With progressive video buffer it still aligned with 16,
> thus causing different height between interlaced buffer and progressive
> buffer for 4K (height=2160), and 720p (height=720).
>
> When transcode the video, This will cause the 16 lines corruption
> at the bottom of the encode video.
>
> Signed-off-by: Leo Liu <leo.liu at amd.com>
Reviewed-by: Christian König <christian.koenig at amd.com>.
> ---
> src/gallium/state_trackers/omx/vid_dec.c | 13 +++++++++++--
> 1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/state_trackers/omx/vid_dec.c b/src/gallium/state_trackers/omx/vid_dec.c
> index 069899a..90f435b 100644
> --- a/src/gallium/state_trackers/omx/vid_dec.c
> +++ b/src/gallium/state_trackers/omx/vid_dec.c
> @@ -590,16 +590,25 @@ static void vid_dec_deint(vid_dec_PrivateType *priv, struct pipe_video_buffer *s
> struct vl_compositor *compositor = &priv->compositor;
> struct vl_compositor_state *s = &priv->cstate;
> struct pipe_surface **dst_surface;
> + struct u_rect dst_rect;
>
> dst_surface = dst_buf->get_surfaces(dst_buf);
> vl_compositor_clear_layers(s);
>
> + dst_rect.x0 = 0;
> + dst_rect.x1 = src_buf->width;
> + dst_rect.y0 = 0;
> + dst_rect.y1 = src_buf->height;
> +
> vl_compositor_set_yuv_layer(s, compositor, 0, src_buf, NULL, NULL, true);
> - vl_compositor_set_layer_dst_area(s, 0, NULL);
> + vl_compositor_set_layer_dst_area(s, 0, &dst_rect);
> vl_compositor_render(s, compositor, dst_surface[0], NULL, false);
>
> + dst_rect.x1 /= 2;
> + dst_rect.y1 /= 2;
> +
> vl_compositor_set_yuv_layer(s, compositor, 0, src_buf, NULL, NULL, false);
> - vl_compositor_set_layer_dst_area(s, 0, NULL);
> + vl_compositor_set_layer_dst_area(s, 0, &dst_rect);
> vl_compositor_render(s, compositor, dst_surface[1], NULL, false);
> }
>
More information about the mesa-dev
mailing list