[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