[FFmpeg-devel] [PATCH] avformat/mpegtsenc: Preserve disposition in the absence of language
stephen douglas
chris_douglas_email at yahoo.com
Sat Apr 3 09:55:34 EEST 2021
ISO 639 language descriptors used by DVB are the 3 charecter variants hence
const char *language = lang && strlen(lang->value) >= 3 ? lang->value : default_language;should beconst char *language = lang && strlen(lang->value) > 3 ? lang->value : default_language;
On Saturday, 3 April 2021, 06:53:20 BST, Andreas Rheinhardt <andreas.rheinhardt at outlook.com> 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) {
          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