[FFmpeg-cvslog] lavf/webvtt: use ff_subtitles_read_chunk().

Clément Bœsch git at videolan.org
Thu Jan 3 07:48:39 CET 2013


ffmpeg | branch: master | Clément Bœsch <ubitux at gmail.com> | Thu Jan  3 07:45:29 2013 +0100| [dc8b36746a9d5101ef6ce146473c65a8827c51b1] | committer: Clément Bœsch

lavf/webvtt: use ff_subtitles_read_chunk().

The FATE test is updated because the line breaks in the dialogue
rectangles are now proper CRLF.

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

 libavformat/version.h     |    2 +-
 libavformat/webvttdec.c   |   40 ++++++++++------------------------------
 tests/ref/fate/sub-webvtt |    2 +-
 3 files changed, 12 insertions(+), 32 deletions(-)

diff --git a/libavformat/version.h b/libavformat/version.h
index f20354b..890d8ef 100644
--- a/libavformat/version.h
+++ b/libavformat/version.h
@@ -31,7 +31,7 @@
 
 #define LIBAVFORMAT_VERSION_MAJOR 54
 #define LIBAVFORMAT_VERSION_MINOR 59
-#define LIBAVFORMAT_VERSION_MICRO 101
+#define LIBAVFORMAT_VERSION_MICRO 102
 
 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
                                                LIBAVFORMAT_VERSION_MINOR, \
diff --git a/libavformat/webvttdec.c b/libavformat/webvttdec.c
index 26c2a1a..694a020 100644
--- a/libavformat/webvttdec.c
+++ b/libavformat/webvttdec.c
@@ -54,29 +54,6 @@ static int64_t read_ts(const char *s)
     return AV_NOPTS_VALUE;
 }
 
-static int64_t extract_cue(AVBPrint *buf, AVIOContext *pb)
-{
-    int prev_chr_is_eol = 0;
-    int64_t pos = avio_tell(pb);
-
-    av_bprint_clear(buf);
-    for (;;) {
-        char c = avio_r8(pb);
-        if (!c)
-            break;
-        if (c == '\r' || c == '\n') {
-            if (prev_chr_is_eol)
-                break;
-            prev_chr_is_eol = (c == '\n');
-        } else
-            prev_chr_is_eol = 0;
-        if (c != '\r')
-            av_bprint_chars(buf, c, 1);
-    }
-    av_bprint_chars(buf, '\0', 1);
-    return pos;
-}
-
 static int webvtt_read_header(AVFormatContext *s)
 {
     WebVTTContext *webvtt = s->priv_data;
@@ -94,17 +71,21 @@ static int webvtt_read_header(AVFormatContext *s)
     av_bprint_init(&cue,    0, AV_BPRINT_SIZE_UNLIMITED);
 
     for (;;) {
-        int i, len;
-        int64_t pos = extract_cue(&cue, s->pb);
+        int i;
+        int64_t pos;
         AVPacket *sub;
-        const char *p = cue.str;
-        const char *identifier = p;
+        const char *p, *identifier;
         //const char *settings = NULL;
         int64_t ts_start, ts_end;
 
-        if (!*p) // EOF
+        ff_subtitles_read_chunk(s->pb, &cue);
+
+        if (!cue.len)
             break;
 
+        p = identifier = cue.str;
+        pos = avio_tell(s->pb);
+
         /* ignore header chunk */
         if (!strncmp(p, "\xEF\xBB\xBFWEBVTT", 9) ||
             !strncmp(p, "WEBVTT", 6))
@@ -143,8 +124,7 @@ static int webvtt_read_header(AVFormatContext *s)
             p++;
 
         /* create packet */
-        len = cue.str + cue.len - p - 1;
-        sub = ff_subtitles_queue_insert(&webvtt->q, p, len, 0);
+        sub = ff_subtitles_queue_insert(&webvtt->q, p, strlen(p), 0);
         if (!sub) {
             res = AVERROR(ENOMEM);
             goto end;
diff --git a/tests/ref/fate/sub-webvtt b/tests/ref/fate/sub-webvtt
index 2e32e55..45cccde 100644
--- a/tests/ref/fate/sub-webvtt
+++ b/tests/ref/fate/sub-webvtt
@@ -1 +1 @@
-5384a70c89ddca4b007fb7ffba95cffb
+2cf38e2c99f8717f78a91a3f31197fb4



More information about the ffmpeg-cvslog mailing list