diff options
author | Clément Bœsch <ubitux@gmail.com> | 2012-12-27 22:36:47 +0100 |
---|---|---|
committer | Clément Bœsch <ubitux@gmail.com> | 2012-12-30 22:46:42 +0100 |
commit | 5c68aae90883497d59a2a49cf75816cf5906e14a (patch) | |
tree | 83ede8ebe1751d4d3af4946ff8b8a1bd27a41c54 /libavcodec/textdec.c | |
parent | 5f02844c8d4fc93972932a84f0a5cbb02fe12a00 (diff) | |
download | ffmpeg-5c68aae90883497d59a2a49cf75816cf5906e14a.tar.gz |
Add VPlayer subtitles demuxer and decoder.
Note that the linebreaks text codec option (but not the feature) has
been removed; its main goal was to allow demuxers to configure the text
decoder (and not meant to be used by users), but the AVOption are not a
viable solution. This is solved differently in this commit.
Diffstat (limited to 'libavcodec/textdec.c')
-rw-r--r-- | libavcodec/textdec.c | 45 |
1 files changed, 36 insertions, 9 deletions
diff --git a/libavcodec/textdec.c b/libavcodec/textdec.c index 4b3a4ada3c..9e19b37dd9 100644 --- a/libavcodec/textdec.c +++ b/libavcodec/textdec.c @@ -30,25 +30,17 @@ typedef struct { AVClass *class; - char *linebreaks; + const char *linebreaks; int keep_ass_markup; } TextContext; #define OFFSET(x) offsetof(TextContext, x) #define SD AV_OPT_FLAG_SUBTITLE_PARAM | AV_OPT_FLAG_DECODING_PARAM static const AVOption options[] = { - { "linebreaks", "Extra line breaks characters", OFFSET(linebreaks), AV_OPT_TYPE_STRING, {.str=NULL}, .flags=SD }, { "keep_ass_markup", "Set if ASS tags must be escaped", OFFSET(keep_ass_markup), AV_OPT_TYPE_INT, {.i64=0}, 0, 1, .flags=SD }, { NULL } }; -static const AVClass text_decoder_class = { - .class_name = "text decoder", - .item_name = av_default_item_name, - .option = options, - .version = LIBAVUTIL_VERSION_INT, -}; - static int text_event_to_ass(const AVCodecContext *avctx, AVBPrint *buf, const char *p, const char *p_end) { @@ -113,6 +105,17 @@ static int text_decode_frame(AVCodecContext *avctx, void *data, return avpkt->size; } +#define DECLARE_CLASS(decname) static const AVClass decname ## _decoder_class = { \ + .class_name = #decname " decoder", \ + .item_name = av_default_item_name, \ + .option = decname ## _options, \ + .version = LIBAVUTIL_VERSION_INT, \ +} + +#if CONFIG_TEXT_DECODER +#define text_options options +DECLARE_CLASS(text); + AVCodec ff_text_decoder = { .name = "text", .priv_data_size = sizeof(TextContext), @@ -123,3 +126,27 @@ AVCodec ff_text_decoder = { .init = ff_ass_subtitle_header_default, .priv_class = &text_decoder_class, }; +#endif + +#if CONFIG_VPLAYER_DECODER +#define vplayer_options options +DECLARE_CLASS(vplayer); + +static int vplayer_init(AVCodecContext *avctx) +{ + TextContext *text = avctx->priv_data; + text->linebreaks = "|"; + return ff_ass_subtitle_header_default(avctx); +} + +AVCodec ff_vplayer_decoder = { + .name = "vplayer", + .priv_data_size = sizeof(TextContext), + .long_name = NULL_IF_CONFIG_SMALL("VPlayer subtitle"), + .type = AVMEDIA_TYPE_SUBTITLE, + .id = AV_CODEC_ID_VPLAYER, + .decode = text_decode_frame, + .init = vplayer_init, + .priv_class = &vplayer_decoder_class, +}; +#endif |