From 5012c07336eff0e928afb57c6d38271e316c0a6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reimar=20D=C3=B6ffinger?= Date: Sat, 7 Apr 2012 02:18:17 +0200 Subject: [PATCH] Support detecting and demuxing EIA-608 subtitles in mov. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The format is slightly proprietary. DVDs use a format of code byte (0x00, 0x01, 0xfe or 0xff), two data bytes MOV uses instead cdat/cdt2 atom, two data bytes Auto-detecting and supporting both in one decoder is trivial, so a single codec ID is used. Signed-off-by: Reimar Döffinger --- libavcodec/avcodec.h | 1 + libavcodec/version.h | 2 +- libavformat/isom.c | 1 + libavformat/mov.c | 4 +++- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index ea833d0e94..a53f2c62b0 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -414,6 +414,7 @@ enum CodecID { CODEC_ID_DVB_TELETEXT, CODEC_ID_SRT, CODEC_ID_MICRODVD = MKBETAG('m','D','V','D'), + CODEC_ID_EIA_608 = MKBETAG('c','6','0','8'), /* other specific kind of codecs (generally used for attachments) */ CODEC_ID_FIRST_UNKNOWN = 0x18000, ///< A dummy ID pointing at the start of various fake codecs. diff --git a/libavcodec/version.h b/libavcodec/version.h index 9dfc5d387d..47591fde76 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -21,7 +21,7 @@ #define AVCODEC_VERSION_H #define LIBAVCODEC_VERSION_MAJOR 54 -#define LIBAVCODEC_VERSION_MINOR 13 +#define LIBAVCODEC_VERSION_MINOR 14 #define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ diff --git a/libavformat/isom.c b/libavformat/isom.c index 9182008376..34daeaeeeb 100644 --- a/libavformat/isom.c +++ b/libavformat/isom.c @@ -287,6 +287,7 @@ const AVCodecTag ff_codec_movaudio_tags[] = { const AVCodecTag ff_codec_movsubtitle_tags[] = { { CODEC_ID_MOV_TEXT, MKTAG('t', 'e', 'x', 't') }, { CODEC_ID_MOV_TEXT, MKTAG('t', 'x', '3', 'g') }, + { CODEC_ID_EIA_608, MKTAG('c', '6', '0', '8') }, { CODEC_ID_NONE, 0 }, }; diff --git a/libavformat/mov.c b/libavformat/mov.c index c32d22ea8c..b4ff1df2eb 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -1222,7 +1222,9 @@ int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries) id = ff_codec_get_id(ff_codec_bmp_tags, format); if (id > 0) st->codec->codec_type = AVMEDIA_TYPE_VIDEO; - else if (st->codec->codec_type == AVMEDIA_TYPE_DATA){ + else if (st->codec->codec_type == AVMEDIA_TYPE_DATA || + (st->codec->codec_type == AVMEDIA_TYPE_SUBTITLE && + st->codec->codec_id == CODEC_ID_NONE)){ id = ff_codec_get_id(ff_codec_movsubtitle_tags, format); if (id > 0) st->codec->codec_type = AVMEDIA_TYPE_SUBTITLE;