[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