[FFmpeg-devel] [PATCH] avformat/mpegtsenc: Preserve disposition in the absence of language

Marton Balint cus at passwd.hu
Sun Apr 4 16:20:49 EEST 2021



On Sat, 3 Apr 2021, Andreas Rheinhardt wrote:

> Implements ticket #9113.
>
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
> ---
> libavformat/mpegtsenc.c | 18 +++++++++---------
> 1 file changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c
> index 35c835c484..dbd3bb148a 100644
> --- a/libavformat/mpegtsenc.c
> +++ b/libavformat/mpegtsenc.c
> @@ -459,6 +459,8 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
>         AVStream *st = s->streams[i];
>         MpegTSWriteStream *ts_st = st->priv_data;
>         AVDictionaryEntry *lang = av_dict_get(st->metadata, "language", NULL, 0);
> +        const char default_language[] = "und";
> +        const char *language = lang && strlen(lang->value) >= 3 ? lang->value : default_language;
>         enum AVCodecID codec_id = st->codecpar->codec_id;
>
>         if (s->nb_programs) {
> @@ -598,16 +600,19 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
>                 }
>             }
> 
> -            if (lang) {
> -                char *p;
> -                char *next = lang->value;
> +            if (language != default_language ||
> +                st->disposition & (AV_DISPOSITION_CLEAN_EFFECTS    |
> +                                   AV_DISPOSITION_HEARING_IMPAIRED |
> +                                   AV_DISPOSITION_VISUAL_IMPAIRED)) {
> +                const char *p;
> +                const char *next = language;
>                 uint8_t *len_ptr;
>
>                 *q++     = ISO_639_LANGUAGE_DESCRIPTOR;
>                 len_ptr  = q++;
>                 *len_ptr = 0;
> 
> -                for (p = lang->value; next && *len_ptr < 255 / 4 * 4; p = next + 1) {
> +                for (p = next; next && *len_ptr < 255 / 4 * 4; p = next + 1) {

Maybe it would make the code more readable to do both initializations in 
the for() statement, e.g.: for (p = next = language; ...)

LGTM otherwise.

Thanks,
Marton

>                     if (q - data > SECTION_LENGTH - 4) {
>                         err = 1;
>                         break;
> @@ -637,10 +642,6 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
>             }
>             break;
>         case AVMEDIA_TYPE_SUBTITLE:
> -        {
> -           const char default_language[] = "und";
> -           const char *language = lang && strlen(lang->value) >= 3 ? lang->value : default_language;
> -
>            if (codec_id == AV_CODEC_ID_DVB_SUBTITLE) {
>                uint8_t *len_ptr;
>                int extradata_copied = 0;
> @@ -715,7 +716,6 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
>
>                *len_ptr = q - len_ptr - 1;
>             }
> -        }
>         break;
>         case AVMEDIA_TYPE_VIDEO:
>             if (stream_type == STREAM_TYPE_VIDEO_DIRAC) {
> -- 
> 2.27.0
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".


More information about the ffmpeg-devel mailing list