[vlc-devel] [PATCH] vlc_es: use union in es_format_t

Steve Lhomme robux4 at gmail.com
Wed Jul 5 11:00:29 CEST 2017


This patch broke HDR and 360 metadata passing to the vout.

I'm investigating why.

On Sun, May 21, 2017 at 8:30 PM, Jean-Baptiste Kempf <jb at videolan.org> wrote:
> LGTM
>
> On Sun, 21 May 2017, at 20:19, RĂ©mi Denis-Courmont wrote:
>> This saves about 200 bytes per instance.
>> ---
>>  include/vlc_es.h     | 12 +++++++----
>>  src/misc/es_format.c | 60
>>  +++++++++++++++++++++++++++++++++-------------------
>>  2 files changed, 46 insertions(+), 26 deletions(-)
>>
>> diff --git a/include/vlc_es.h b/include/vlc_es.h
>> index 1d76dac3df..bff3562d4e 100644
>> --- a/include/vlc_es.h
>> +++ b/include/vlc_es.h
>> @@ -574,10 +574,14 @@ struct es_format_t
>>      unsigned        i_extra_languages;    /**< length in bytes of extra
>>      language data pointer */
>>      extra_languages_t *p_extra_languages; /**< extra language data
>>      needed by some decoders */
>>
>> -    audio_format_t  audio;    /**< description of audio format */
>> -    audio_replay_gain_t audio_replay_gain; /*< audio replay gain
>> information */
>> -    video_format_t video;     /**< description of video format */
>> -    subs_format_t  subs;      /**< description of subtitle format */
>> +    union {
>> +        struct {
>> +            audio_format_t  audio;    /**< description of audio format
>> */
>> +            audio_replay_gain_t audio_replay_gain; /*< audio replay gain
>> information */
>> +        };
>> +        video_format_t video;     /**< description of video format */
>> +        subs_format_t  subs;      /**< description of subtitle format */
>> +    };
>>
>>      unsigned int   i_bitrate; /**< bitrate of this ES */
>>      int      i_profile;       /**< codec specific information (like real
>>      audio flavor, mpeg audio layer, h264 profile ...) */
>> diff --git a/src/misc/es_format.c b/src/misc/es_format.c
>> index ab27a32ae8..80b4c914ab 100644
>> --- a/src/misc/es_format.c
>> +++ b/src/misc/es_format.c
>> @@ -449,10 +449,20 @@ void es_format_Init( es_format_t *fmt,
>>      fmt->i_extra_languages      = 0;
>>      fmt->p_extra_languages      = NULL;
>>
>> -    memset( &fmt->audio, 0, sizeof(audio_format_t) );
>> -    memset( &fmt->audio_replay_gain, 0, sizeof(audio_replay_gain_t) );
>> -    video_format_Init( &fmt->video, 0 );
>> -    memset( &fmt->subs, 0, sizeof(subs_format_t) );
>> +    switch (fmt->i_cat)
>> +    {
>> +        case AUDIO_ES:
>> +            memset(&fmt->audio, 0, sizeof (fmt->audio));
>> +            memset(&fmt->audio_replay_gain, 0,
>> +                   sizeof (fmt->audio_replay_gain));
>> +            break;
>> +        case VIDEO_ES:
>> +            video_format_Init(&fmt->video, 0);
>> +            break;
>> +        case SPU_ES:
>> +            memset(&fmt->subs, 0, sizeof (fmt->subs));
>> +            break;
>> +    }
>>
>>      fmt->b_packetized           = true;
>>      fmt->i_bitrate              = 0;
>> @@ -499,23 +509,25 @@ int es_format_Copy(es_format_t *restrict dst, const
>> es_format_t *src)
>>          }
>>      }
>>
>> -    if (src->subs.psz_encoding != NULL)
>> -    {
>> -        dst->subs.psz_encoding = strdup(src->subs.psz_encoding);
>> -        if (unlikely(dst->subs.psz_encoding == NULL))
>> -            ret = VLC_ENOMEM;
>> -    }
>> -    if (src->subs.p_style != NULL)
>> +    if (src->i_cat == VIDEO_ES)
>> +        ret = video_format_Copy( &dst->video, &src->video );
>> +
>> +    if (src->i_cat == SPU_ES)
>>      {
>> -        dst->subs.p_style = text_style_Duplicate(src->subs.p_style);
>> -        if (unlikely(dst->subs.p_style == NULL))
>> -            ret = VLC_ENOMEM;
>> +        if (src->subs.psz_encoding != NULL)
>> +        {
>> +            dst->subs.psz_encoding = strdup(src->subs.psz_encoding);
>> +            if (unlikely(dst->subs.psz_encoding == NULL))
>> +                ret = VLC_ENOMEM;
>> +        }
>> +        if (src->subs.p_style != NULL)
>> +        {
>> +            dst->subs.p_style = text_style_Duplicate(src->subs.p_style);
>> +            if (unlikely(dst->subs.p_style == NULL))
>> +                ret = VLC_ENOMEM;
>> +        }
>>      }
>>
>> -    int err = video_format_Copy( &dst->video, &src->video );
>> -    if ( err != VLC_SUCCESS )
>> -        return err;
>> -
>>      if (src->i_extra_languages > 0)
>>      {
>>          assert(src->p_extra_languages != NULL);
>> @@ -548,11 +560,15 @@ void es_format_Clean(es_format_t *fmt)
>>      assert(fmt->i_extra == 0 || fmt->p_extra != NULL);
>>      free(fmt->p_extra);
>>
>> -    video_format_Clean( &fmt->video );
>> -    free(fmt->subs.psz_encoding);
>> +    if (fmt->i_cat == VIDEO_ES)
>> +        video_format_Clean( &fmt->video );
>> +    if (fmt->i_cat == SPU_ES)
>> +    {
>> +        free(fmt->subs.psz_encoding);
>>
>> -    if (fmt->subs.p_style != NULL)
>> -        text_style_Delete(fmt->subs.p_style);
>> +        if (fmt->subs.p_style != NULL)
>> +            text_style_Delete(fmt->subs.p_style);
>> +    }
>>
>>      for (unsigned i = 0; i < fmt->i_extra_languages; i++)
>>      {
>> --
>> 2.11.0
>>
>> _______________________________________________
>> vlc-devel mailing list
>> To unsubscribe or modify your subscription options:
>> https://mailman.videolan.org/listinfo/vlc-devel
>
>
> --
> Jean-Baptiste Kempf -  President
> +33 672 704 734
> _______________________________________________
> 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