[vlc-devel] [PATCH] vlc_es: use union in es_format_t
Jean-Baptiste Kempf
jb at videolan.org
Sun May 21 20:30:25 CEST 2017
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
More information about the vlc-devel
mailing list