[vlc-devel] [PATCH] [RFC] picture: use the offset to increase the visible lines/pitch

Rémi Denis-Courmont remi at remlab.net
Thu Sep 10 17:55:09 CEST 2015


Le 2015-09-10 18:50, Steve Lhomme a écrit :
> Since we don't use the x/y offset when copying planes (plane_t is 
> missing
> these fields), we may miss some pixels.

So?

>
> This is the case with offset_test.ogv when the deinterlacer is 
> involved.
> ---
>  src/misc/picture.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/src/misc/picture.c b/src/misc/picture.c
> index 0cdbd0e..d550b94 100644
> --- a/src/misc/picture.c
> +++ b/src/misc/picture.c
> @@ -153,6 +153,7 @@ int picture_Setup( picture_t *p_picture, const
> video_format_t *restrict fmt )
>      video_format_Setup( &p_picture->format, fmt->i_chroma,
> fmt->i_width, fmt->i_height,
>                          fmt->i_visible_width, fmt->i_visible_height,
>                          fmt->i_sar_num, fmt->i_sar_den );
> +    video_format_CopyCrop( &p_picture->format, fmt );
>
>      const vlc_chroma_description_t *p_dsc =
>          vlc_fourcc_GetChromaDescription( p_picture->format.i_chroma 
> );
> @@ -185,9 +186,9 @@ int picture_Setup( picture_t *p_picture, const
> video_format_t *restrict fmt )
>          plane_t *p = &p_picture->p[i];
>
>          p->i_lines         = (i_height_aligned + i_height_extra ) *
> p_dsc->p[i].h.num / p_dsc->p[i].h.den;
> -        p->i_visible_lines = fmt->i_visible_height *
> p_dsc->p[i].h.num / p_dsc->p[i].h.den;
> +        p->i_visible_lines = (fmt->i_y_offset +
> fmt->i_visible_height) * p_dsc->p[i].h.num / p_dsc->p[i].h.den;
>          p->i_pitch         = i_width_aligned * p_dsc->p[i].w.num /
> p_dsc->p[i].w.den * p_dsc->pixel_size;
> -        p->i_visible_pitch = fmt->i_visible_width *
> p_dsc->p[i].w.num / p_dsc->p[i].w.den * p_dsc->pixel_size;
> +        p->i_visible_pitch = (fmt->i_x_offset +
> fmt->i_visible_width) * p_dsc->p[i].w.num / p_dsc->p[i].w.den *
> p_dsc->pixel_size;
>          p->i_pixel_pitch   = p_dsc->pixel_size;

Looks to me that this corrupts the picture cropping.

>
>          assert( (p->i_pitch % 16) == 0 );

-- 
Rémi Denis-Courmont
http://www.remlab.net/


More information about the vlc-devel mailing list