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

Steve Lhomme robux4 at gmail.com
Tue Jan 31 08:56:21 CET 2017


On Mon, Jan 30, 2017 at 6:01 PM, Rémi Denis-Courmont <remi at remlab.net> wrote:
> 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 .

For now I need this to decode to GPU memory rather than CPU memory.
What matters is what the CPU code needs to decode properly. As long as
the chroma format is respected the rest can be deduced.

>> ---
>>  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/
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list