summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorMatthew Heaney <matthewjheaney@google.com>2013-06-24 11:20:32 -0700
committerClément Bœsch <ubitux@gmail.com>2013-06-25 00:13:47 +0200
commit1029822a91c2b04a863fe082951ac28f4c60f87c (patch)
treeee7be42a7f0a868fb0097ac09d36852390c91ba0 /libavformat
parentbc35df29c123f695abe60c13539dbf112b465d07 (diff)
lavf/webvttdec: use private option to specify WebVTT kind
WebVTT subtitle tracks have four kinds. Certain downstream muxers (such as for WebM) need to know which WebVTT kind this is, in order to specify the codec id of the output track. A new private input option, "-kind", has been added to the WebVTT demuxer. It accepts as a value any of "subtitles" (the default), "captions", "descriptions", and "metadata". The kind option value is used to assign a value to the stream disposition flag, to which four new values have been added, corresponding the four WebVTT kinds. Signed-off-by: Matthew Heaney <matthewjheaney@google.com> Signed-off-by: Clément Bœsch <ubitux@gmail.com>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/webvttdec.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/libavformat/webvttdec.c b/libavformat/webvttdec.c
index 7d9910bec5..065448532d 100644
--- a/libavformat/webvttdec.c
+++ b/libavformat/webvttdec.c
@@ -29,9 +29,12 @@
#include "subtitles.h"
#include "libavutil/bprint.h"
#include "libavutil/intreadwrite.h"
+#include "libavutil/opt.h"
typedef struct {
+ const AVClass *class;
FFDemuxSubtitlesQueue q;
+ int kind;
} WebVTTContext;
static int webvtt_probe(AVProbeData *p)
@@ -66,6 +69,7 @@ static int webvtt_read_header(AVFormatContext *s)
avpriv_set_pts_info(st, 64, 1, 1000);
st->codec->codec_type = AVMEDIA_TYPE_SUBTITLE;
st->codec->codec_id = AV_CODEC_ID_WEBVTT;
+ st->disposition |= webvtt->kind;
av_bprint_init(&header, 0, AV_BPRINT_SIZE_UNLIMITED);
av_bprint_init(&cue, 0, AV_BPRINT_SIZE_UNLIMITED);
@@ -186,6 +190,25 @@ static int webvtt_read_close(AVFormatContext *s)
return 0;
}
+#define OFFSET(x) offsetof(WebVTTContext, x)
+#define KIND_FLAGS AV_OPT_FLAG_SUBTITLE_PARAM
+
+static const AVOption options[] = {
+ { "kind", "Set kind of WebVTT track", OFFSET(kind), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, KIND_FLAGS, "webvtt_kind" },
+ { "subtitles", "WebVTT subtitles kind", 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, 0, "webvtt_kind" },
+ { "captions", "WebVTT captions kind", 0, AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_CAPTIONS }, INT_MIN, INT_MAX, 0, "webvtt_kind" },
+ { "descriptions", "WebVTT descriptions kind", 0, AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_DESCRIPTIONS }, INT_MIN, INT_MAX, 0, "webvtt_kind" },
+ { "metadata", "WebVTT metadata kind", 0, AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_METADATA }, INT_MIN, INT_MAX, 0, "webvtt_kind" },
+ { NULL }
+};
+
+static const AVClass webvtt_demuxer_class = {
+ .class_name = "WebVTT demuxer",
+ .item_name = av_default_item_name,
+ .option = options,
+ .version = LIBAVUTIL_VERSION_INT,
+};
+
AVInputFormat ff_webvtt_demuxer = {
.name = "webvtt",
.long_name = NULL_IF_CONFIG_SMALL("WebVTT subtitle"),
@@ -196,4 +219,5 @@ AVInputFormat ff_webvtt_demuxer = {
.read_seek2 = webvtt_read_seek,
.read_close = webvtt_read_close,
.extensions = "vtt",
+ .priv_class = &webvtt_demuxer_class,
};