[FFmpeg-cvslog] mov: Refactor subtitle specific parsing in mov_parse_stsd_subtitle

Luca Barbato git at videolan.org
Mon Aug 26 13:25:14 CEST 2013


ffmpeg | branch: master | Luca Barbato <lu_zero at gentoo.org> | Thu Aug 22 15:05:27 2013 +0200| [dc518a3ae21e7b6420131b813cfc6bcdcad26b7e] | committer: Luca Barbato

mov: Refactor subtitle specific parsing in mov_parse_stsd_subtitle

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

 libavformat/mov.c |   25 +++++++++++++++++--------
 1 file changed, 17 insertions(+), 8 deletions(-)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index 4100f33..9086ba8 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -1292,6 +1292,20 @@ static void mov_parse_stsd_audio(MOVContext *c, AVIOContext *pb,
     }
 }
 
+static void mov_parse_stsd_subtitle(MOVContext *c, AVIOContext *pb,
+                                    AVStream *st, MOVStreamContext *sc,
+                                    int size)
+{
+    // 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->codec->codec_tag != AV_RL32("mp4s"))
+        mov_read_glbl(c, pb, fake_atom);
+    st->codec->width  = sc->width;
+    st->codec->height = sc->height;
+}
+
 int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries)
 {
     AVStream *st;
@@ -1355,14 +1369,9 @@ int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries)
             st->codec->codec_id = id;
             mov_parse_stsd_audio(c, pb, st, sc);
         } else if (st->codec->codec_type==AVMEDIA_TYPE_SUBTITLE){
-            // ttxt stsd contains display flags, justification, background
-            // color, fonts, and default styles, so fake an atom to read it
-            MOVAtom fake_atom = { .size = size - (avio_tell(pb) - start_pos) };
-            if (format != AV_RL32("mp4s")) // mp4s contains a regular esds atom
-                mov_read_glbl(c, pb, fake_atom);
-            st->codec->codec_id= id;
-            st->codec->width = sc->width;
-            st->codec->height = sc->height;
+            st->codec->codec_id = id;
+            mov_parse_stsd_subtitle(c, pb, st, sc,
+                                    size - (avio_tell(pb) - start_pos));
         } else {
             /* other codec type, just skip (rtp, mp4s, tmcd ...) */
             avio_skip(pb, size - (avio_tell(pb) - start_pos));



More information about the ffmpeg-cvslog mailing list