[vlc-devel] [PATCH] picture: split the plane definition from the picture creation

Rémi Denis-Courmont remi at remlab.net
Mon Jan 30 18:01:09 CET 2017


Le maanantaina 30. tammikuuta 2017, 10.49.54 EET Steve Lhomme a écrit :
> This way we can tell plane dimensions from a video format anywhere.

That seems pretty useless. The plane dimensions only represent how VLC would 
allocate a picture in RAM. It says nothing of the actual format allocated by 
the video output plugin nor the alignment requirements of the decoder and 
filters .

> ---
>  include/vlc_picture.h |  4 ++++
>  src/libvlccore.sym    |  1 +
>  src/misc/picture.c    | 46 +++++++++++++++++++++++++++-------------------
>  3 files changed, 32 insertions(+), 19 deletions(-)
> 
> diff --git a/include/vlc_picture.h b/include/vlc_picture.h
> index b8d4a5a..4fd88a7 100644
> --- a/include/vlc_picture.h
> +++ b/include/vlc_picture.h
> @@ -222,6 +222,10 @@ VLC_API int picture_Export( vlc_object_t *p_obj,
> block_t **pp_image, video_forma */
>  VLC_API int picture_Setup( picture_t *, const video_format_t * );
> 
> +VLC_API int picture_SetupPlanes(vlc_fourcc_t, const video_format_t *,
> plane_t *, +                                int *plane_count);
> +
> +
> 
>  /**************************************************************************
> *** * Shortcuts to access image components
> diff --git a/src/libvlccore.sym b/src/libvlccore.sym
> index 7b9657a..cedfd0b 100644
> --- a/src/libvlccore.sym
> +++ b/src/libvlccore.sym
> @@ -327,6 +327,7 @@ picture_pool_Reserve
>  picture_pool_Wait
>  picture_Reset
>  picture_Setup
> +picture_SetupPlanes
>  plane_CopyPixels
>  playlist_Add
>  playlist_AddExt
> diff --git a/src/misc/picture.c b/src/misc/picture.c
> index 0a2dc8f..90c6151 100644
> --- a/src/misc/picture.c
> +++ b/src/misc/picture.c
> @@ -137,25 +137,11 @@ static int LCM( int a, int b )
>      return a * b / GCD( a, b );
>  }
> 
> -int picture_Setup( picture_t *p_picture, const video_format_t *restrict fmt
> ) +int picture_SetupPlanes( vlc_fourcc_t i_chroma, const video_format_t
> *restrict fmt, +                         plane_t *planes, int *plane_count
> )
>  {
> -    /* Store default values */
> -    p_picture->i_planes = 0;
> -    for( unsigned i = 0; i < VOUT_MAX_PLANES; i++ )
> -    {
> -        plane_t *p = &p_picture->p[i];
> -        p->p_pixels = NULL;
> -        p->i_pixel_pitch = 0;
> -    }
> -
> -    p_picture->i_nb_fields = 2;
> -
> -    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 );
> -
>      const vlc_chroma_description_t *p_dsc =
> -        vlc_fourcc_GetChromaDescription( p_picture->format.i_chroma );
> +            vlc_fourcc_GetChromaDescription( i_chroma );
>      if( !p_dsc )
>          return VLC_EGENERIC;
> 
> @@ -182,7 +168,7 @@ int picture_Setup( picture_t *p_picture, const
> video_format_t *restrict fmt ) const int i_height_extra   = 2 * i_ratio_h;
> /* This one is a hack for some ASM functions */ for( unsigned i = 0; i <
> p_dsc->plane_count; i++ )
>      {
> -        plane_t *p = &p_picture->p[i];
> +        plane_t *p = &planes[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; @@ -192,11
> +178,33 @@ int picture_Setup( picture_t *p_picture, const video_format_t
> *restrict fmt )
> 
>          assert( (p->i_pitch % 16) == 0 );
>      }
> -    p_picture->i_planes  = p_dsc->plane_count;
> +
> +    *plane_count = p_dsc->plane_count;
> 
>      return VLC_SUCCESS;
>  }
> 
> +int picture_Setup( picture_t *p_picture, const video_format_t *restrict fmt
> ) +{
> +    /* Store default values */
> +    p_picture->i_planes = 0;
> +    for( unsigned i = 0; i < VOUT_MAX_PLANES; i++ )
> +    {
> +        plane_t *p = &p_picture->p[i];
> +        p->p_pixels = NULL;
> +        p->i_pixel_pitch = 0;
> +    }
> +
> +    p_picture->i_nb_fields = 2;
> +
> +    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 );
> +
> +    return picture_SetupPlanes( p_picture->format.i_chroma, fmt,
> p_picture->p, +                                &p_picture->i_planes );
> +}
> +
>  /**************************************************************************
> *** *
>  
> ***************************************************************************
> **/


-- 
雷米‧德尼-库尔蒙
https://www.remlab.net/



More information about the vlc-devel mailing list