diff --git a/doc/APIchanges b/doc/APIchanges index 65571329ab..91736fef5d 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,6 +15,9 @@ libavutil: 2012-10-22 API changes, most recent first: +2013-04-19 - xxxxxxx - lavc 55.4.100 + Add AV_CODEC_PROP_TEXT_SUB property for text based subtitles codec. + 2013-04-18 - xxxxxxx - lavf 55.3.100 The matroska demuxer can now output proper verbatim ASS packets. It will become the default starting lavf 56.0.100. diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 0251b6cd13..6aebb4800d 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -541,8 +541,14 @@ typedef struct AVCodecDescriptor { #define AV_CODEC_PROP_LOSSLESS (1 << 2) /** * Subtitle codec is bitmap based + * Decoded AVSubtitle data can be read from the AVSubtitleRect->pict field. */ #define AV_CODEC_PROP_BITMAP_SUB (1 << 16) +/** + * Subtitle codec is text based. + * Decoded AVSubtitle data can be read from the AVSubtitleRect->ass field. + */ +#define AV_CODEC_PROP_TEXT_SUB (1 << 17) /** * @ingroup lavc_decoding diff --git a/libavcodec/codec_desc.c b/libavcodec/codec_desc.c index c8a5d113d4..c973025daa 100644 --- a/libavcodec/codec_desc.c +++ b/libavcodec/codec_desc.c @@ -2394,6 +2394,7 @@ static const AVCodecDescriptor codec_descriptors[] = { .type = AVMEDIA_TYPE_SUBTITLE, .name = "text", .long_name = NULL_IF_CONFIG_SMALL("raw UTF-8 text"), + .props = AV_CODEC_PROP_TEXT_SUB, }, { .id = AV_CODEC_ID_XSUB, @@ -2407,18 +2408,21 @@ static const AVCodecDescriptor codec_descriptors[] = { .type = AVMEDIA_TYPE_SUBTITLE, .name = "ass", .long_name = NULL_IF_CONFIG_SMALL("ASS (Advanced SSA) subtitle"), + .props = AV_CODEC_PROP_TEXT_SUB, }, { .id = AV_CODEC_ID_SSA, .type = AVMEDIA_TYPE_SUBTITLE, .name = "ssa", .long_name = NULL_IF_CONFIG_SMALL("SSA (SubStation Alpha) subtitle"), + .props = AV_CODEC_PROP_TEXT_SUB, }, { .id = AV_CODEC_ID_MOV_TEXT, .type = AVMEDIA_TYPE_SUBTITLE, .name = "mov_text", .long_name = NULL_IF_CONFIG_SMALL("MOV text"), + .props = AV_CODEC_PROP_TEXT_SUB, }, { .id = AV_CODEC_ID_HDMV_PGS_SUBTITLE, @@ -2438,24 +2442,28 @@ static const AVCodecDescriptor codec_descriptors[] = { .type = AVMEDIA_TYPE_SUBTITLE, .name = "srt", .long_name = NULL_IF_CONFIG_SMALL("SubRip subtitle with embedded timing"), + .props = AV_CODEC_PROP_TEXT_SUB, }, { .id = AV_CODEC_ID_SUBRIP, .type = AVMEDIA_TYPE_SUBTITLE, .name = "subrip", .long_name = NULL_IF_CONFIG_SMALL("SubRip subtitle"), + .props = AV_CODEC_PROP_TEXT_SUB, }, { .id = AV_CODEC_ID_MICRODVD, .type = AVMEDIA_TYPE_SUBTITLE, .name = "microdvd", .long_name = NULL_IF_CONFIG_SMALL("MicroDVD subtitle"), + .props = AV_CODEC_PROP_TEXT_SUB, }, { .id = AV_CODEC_ID_MPL2, .type = AVMEDIA_TYPE_SUBTITLE, .name = "mpl2", .long_name = NULL_IF_CONFIG_SMALL("MPL2 subtitle"), + .props = AV_CODEC_PROP_TEXT_SUB, }, { .id = AV_CODEC_ID_EIA_608, @@ -2468,48 +2476,56 @@ static const AVCodecDescriptor codec_descriptors[] = { .type = AVMEDIA_TYPE_SUBTITLE, .name = "jacosub", .long_name = NULL_IF_CONFIG_SMALL("JACOsub subtitle"), + .props = AV_CODEC_PROP_TEXT_SUB, }, { .id = AV_CODEC_ID_PJS, .type = AVMEDIA_TYPE_SUBTITLE, .name = "pjs", .long_name = NULL_IF_CONFIG_SMALL("PJS (Phoenix Japanimation Society) subtitle"), + .props = AV_CODEC_PROP_TEXT_SUB, }, { .id = AV_CODEC_ID_SAMI, .type = AVMEDIA_TYPE_SUBTITLE, .name = "sami", .long_name = NULL_IF_CONFIG_SMALL("SAMI subtitle"), + .props = AV_CODEC_PROP_TEXT_SUB, }, { .id = AV_CODEC_ID_REALTEXT, .type = AVMEDIA_TYPE_SUBTITLE, .name = "realtext", .long_name = NULL_IF_CONFIG_SMALL("RealText subtitle"), + .props = AV_CODEC_PROP_TEXT_SUB, }, { .id = AV_CODEC_ID_SUBVIEWER1, .type = AVMEDIA_TYPE_SUBTITLE, .name = "subviewer1", .long_name = NULL_IF_CONFIG_SMALL("SubViewer v1 subtitle"), + .props = AV_CODEC_PROP_TEXT_SUB, }, { .id = AV_CODEC_ID_SUBVIEWER, .type = AVMEDIA_TYPE_SUBTITLE, .name = "subviewer", .long_name = NULL_IF_CONFIG_SMALL("SubViewer subtitle"), + .props = AV_CODEC_PROP_TEXT_SUB, }, { .id = AV_CODEC_ID_VPLAYER, .type = AVMEDIA_TYPE_SUBTITLE, .name = "vplayer", .long_name = NULL_IF_CONFIG_SMALL("VPlayer subtitle"), + .props = AV_CODEC_PROP_TEXT_SUB, }, { .id = AV_CODEC_ID_WEBVTT, .type = AVMEDIA_TYPE_SUBTITLE, .name = "webvtt", .long_name = NULL_IF_CONFIG_SMALL("WebVTT subtitle"), + .props = AV_CODEC_PROP_TEXT_SUB, }, { .id = AV_CODEC_ID_BINTEXT, diff --git a/libavcodec/version.h b/libavcodec/version.h index 1e24d839c5..12c9a838e6 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #include "libavutil/avutil.h" #define LIBAVCODEC_VERSION_MAJOR 55 -#define LIBAVCODEC_VERSION_MINOR 3 +#define LIBAVCODEC_VERSION_MINOR 4 #define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ diff --git a/libavfilter/vf_subtitles.c b/libavfilter/vf_subtitles.c index aaa8942615..10f07a48a5 100644 --- a/libavfilter/vf_subtitles.c +++ b/libavfilter/vf_subtitles.c @@ -302,7 +302,7 @@ static av_cold int init_subtitles(AVFilterContext *ctx) return AVERROR(EINVAL); } dec_desc = avcodec_descriptor_get(dec_ctx->codec_id); - if (dec_desc && (dec_desc->props & AV_CODEC_PROP_BITMAP_SUB)) { + if (dec_desc && !(dec_desc->props & AV_CODEC_PROP_TEXT_SUB)) { av_log(ctx, AV_LOG_ERROR, "Only text based subtitles are currently supported\n"); return AVERROR_PATCHWELCOME;