[FFmpeg-cvslog] avformat/mov: enable identifying TTML subtitle streams as such

Jan Ekström git at videolan.org
Fri Jul 28 16:25:14 EEST 2023


ffmpeg | branch: master | Jan Ekström <jan.ekstrom at 24i.com> | Fri Apr 21 16:07:08 2023 +0300| [b300552dfb525990e28eeef14edb67ef5ceacb65] | committer: Jan Ekström

avformat/mov: enable identifying TTML subtitle streams as such

The contents are full TTML XML documents. TTML writing tests'
results are updated as the streams are now properly identified
as TTML ones.

Signed-off-by: Jan Ekström <jan.ekstrom at 24i.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b300552dfb525990e28eeef14edb67ef5ceacb65
---

 libavformat/mov.c                | 11 +++++++++--
 tests/ref/fate/mov-mp4-ttml-dfxp |  9 +++++----
 tests/ref/fate/mov-mp4-ttml-stpp | 10 ++++++----
 3 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index ac19b3157a..be9975f297 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -2263,6 +2263,11 @@ static int mov_codec_id(AVStream *st, uint32_t format)
                     (st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE &&
                     st->codecpar->codec_id == AV_CODEC_ID_NONE)) {
             id = ff_codec_get_id(ff_codec_movsubtitle_tags, format);
+            if (id <= 0) {
+                id = (format == MOV_MP4_TTML_TAG || format == MOV_ISMV_TTML_TAG) ?
+                     AV_CODEC_ID_TTML : id;
+            }
+
             if (id > 0)
                 st->codecpar->codec_type = AVMEDIA_TYPE_SUBTITLE;
             else
@@ -2457,8 +2462,10 @@ static void mov_parse_stsd_subtitle(MOVContext *c, AVIOContext *pb,
     // ttxt stsd contains display flags, justification, background
     // color, fonts, and default styles, so fake an atom to read it
     MOVAtom fake_atom = { .size = size };
-    // mp4s contains a regular esds atom
-    if (st->codecpar->codec_tag != AV_RL32("mp4s"))
+    // mp4s contains a regular esds atom, dfxp ISMV TTML has no content
+    // in extradata unlike stpp MP4 TTML.
+    if (st->codecpar->codec_tag != AV_RL32("mp4s") &&
+        st->codecpar->codec_tag != MOV_ISMV_TTML_TAG)
         mov_read_glbl(c, pb, fake_atom);
     st->codecpar->width  = sc->width;
     st->codecpar->height = sc->height;
diff --git a/tests/ref/fate/mov-mp4-ttml-dfxp b/tests/ref/fate/mov-mp4-ttml-dfxp
index 15f4f9b69b..2d60f3d964 100644
--- a/tests/ref/fate/mov-mp4-ttml-dfxp
+++ b/tests/ref/fate/mov-mp4-ttml-dfxp
@@ -1,13 +1,13 @@
 2e7e01c821c111466e7a2844826b7f6d *tests/data/fate/mov-mp4-ttml-dfxp.mp4
 8519 tests/data/fate/mov-mp4-ttml-dfxp.mp4
 #tb 0: 1/1000
-#media_type 0: data
-#codec_id 0: none
+#media_type 0: subtitle
+#codec_id 0: ttml
 0,          0,          0,    68500,     7866, 0x456c36b7
 {
     "packets": [
         {
-            "codec_type": "data",
+            "codec_type": "subtitle",
             "stream_index": 0,
             "pts": 0,
             "pts_time": "0.000000",
@@ -26,7 +26,8 @@
     "streams": [
         {
             "index": 0,
-            "codec_type": "data",
+            "codec_name": "ttml",
+            "codec_type": "subtitle",
             "codec_tag_string": "dfxp",
             "codec_tag": "0x70786664",
             "time_base": "1/1000",
diff --git a/tests/ref/fate/mov-mp4-ttml-stpp b/tests/ref/fate/mov-mp4-ttml-stpp
index 7726cd332e..0a8e423449 100644
--- a/tests/ref/fate/mov-mp4-ttml-stpp
+++ b/tests/ref/fate/mov-mp4-ttml-stpp
@@ -1,13 +1,14 @@
 cbd2c7ff864a663b0d893deac5a0caec *tests/data/fate/mov-mp4-ttml-stpp.mp4
 8547 tests/data/fate/mov-mp4-ttml-stpp.mp4
+#extradata 0:       48, 0x62100c0d
 #tb 0: 1/1000
-#media_type 0: data
-#codec_id 0: none
+#media_type 0: subtitle
+#codec_id 0: ttml
 0,          0,          0,    68500,     7866, 0x456c36b7
 {
     "packets": [
         {
-            "codec_type": "data",
+            "codec_type": "subtitle",
             "stream_index": 0,
             "pts": 0,
             "pts_time": "0.000000",
@@ -26,7 +27,8 @@ cbd2c7ff864a663b0d893deac5a0caec *tests/data/fate/mov-mp4-ttml-stpp.mp4
     "streams": [
         {
             "index": 0,
-            "codec_type": "data",
+            "codec_name": "ttml",
+            "codec_type": "subtitle",
             "codec_tag_string": "stpp",
             "codec_tag": "0x70707473",
             "time_base": "1/1000",



More information about the ffmpeg-cvslog mailing list