aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClément Bœsch <ubitux@gmail.com>2013-01-03 07:45:29 +0100
committerClément Bœsch <ubitux@gmail.com>2013-01-03 07:46:30 +0100
commitdc8b36746a9d5101ef6ce146473c65a8827c51b1 (patch)
tree5bffc588d5fe7fe7d91cbc53abb75c7bc1ba03a1
parent3fa642d60f428a36413498a191eb2ee319fe4445 (diff)
downloadffmpeg-dc8b36746a9d5101ef6ce146473c65a8827c51b1.tar.gz
lavf/webvtt: use ff_subtitles_read_chunk().
The FATE test is updated because the line breaks in the dialogue rectangles are now proper CRLF.
-rw-r--r--libavformat/version.h2
-rw-r--r--libavformat/webvttdec.c40
-rw-r--r--tests/ref/fate/sub-webvtt2
3 files changed, 12 insertions, 32 deletions
diff --git a/libavformat/version.h b/libavformat/version.h
index f20354b580..890d8ef7e4 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 26c2a1ad4e..694a020b19 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 2e32e55196..45cccde4f5 100644
--- a/tests/ref/fate/sub-webvtt
+++ b/tests/ref/fate/sub-webvtt
@@ -1 +1 @@
-5384a70c89ddca4b007fb7ffba95cffb
+2cf38e2c99f8717f78a91a3f31197fb4