[FFmpeg-devel] [PATCH]Support linebreaks in onCaption subtitles

Carl Eugen Hoyos cehoyos at ag.or.at
Fri May 1 01:48:34 CEST 2015


Hi!

Attached patch improves the samples from ticket #2933.

Please comment, Carl Eugen
-------------- next part --------------
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index 2552962..9bd69c5 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -500,6 +500,7 @@ void avcodec_register_all(void)
     REGISTER_DECODER(MICRODVD,          microdvd);
     REGISTER_ENCDEC (MOVTEXT,           movtext);
     REGISTER_DECODER(MPL2,              mpl2);
+    REGISTER_DECODER(ONCAPTION,         oncaption);
     REGISTER_DECODER(PGSSUB,            pgssub);
     REGISTER_DECODER(PJS,               pjs);
     REGISTER_DECODER(REALTEXT,          realtext);
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 8c7c420..be91dcb 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -525,6 +525,7 @@ enum AVCodecID {
     AV_CODEC_ID_VPLAYER    = MKBETAG('V','P','l','r'),
     AV_CODEC_ID_PJS        = MKBETAG('P','h','J','S'),
     AV_CODEC_ID_ASS        = MKBETAG('A','S','S',' '),  ///< ASS as defined in Matroska
+    AV_CODEC_ID_ONCAPTION  = MKBETAG('o','n','C','a'),
 
     /* other specific kind of codecs (generally used for attachments) */
     AV_CODEC_ID_FIRST_UNKNOWN = 0x18000,           ///< A dummy ID pointing at the start of various fake codecs.
diff --git a/libavcodec/codec_desc.c b/libavcodec/codec_desc.c
index c1694f3..c286a01 100644
--- a/libavcodec/codec_desc.c
+++ b/libavcodec/codec_desc.c
@@ -2705,6 +2705,13 @@ static const AVCodecDescriptor codec_descriptors[] = {
         .long_name = NULL_IF_CONFIG_SMALL("WebVTT subtitle"),
         .props     = AV_CODEC_PROP_TEXT_SUB,
     },
+    {
+        .id        = AV_CODEC_ID_ONCAPTION,
+        .type      = AVMEDIA_TYPE_SUBTITLE,
+        .name      = "oncaption",
+        .long_name = NULL_IF_CONFIG_SMALL("OnCaption FLV subtitle"),
+        .props     = AV_CODEC_PROP_TEXT_SUB,
+    },
 
     /* other kind of codecs and pseudo-codecs */
     {
diff --git a/libavcodec/textdec.c b/libavcodec/textdec.c
index c9f02a2..6b46938 100644
--- a/libavcodec/textdec.c
+++ b/libavcodec/textdec.c
@@ -88,6 +88,29 @@ AVCodec ff_text_decoder = {
 };
 #endif
 
+#if CONFIG_ONCAPTION_DECODER
+#define oncaption_options options
+DECLARE_CLASS(oncaption);
+
+static int oncaption_linebreak_init(AVCodecContext *avctx)
+{
+    TextContext *text = avctx->priv_data;
+    text->linebreaks = "<br/>";
+    return ff_ass_subtitle_header_default(avctx);
+}
+
+AVCodec ff_oncaption_decoder = {
+    .name           = "oncaption",
+    .long_name      = NULL_IF_CONFIG_SMALL("OnCaption FLV subtitle"),
+    .priv_data_size = sizeof(TextContext),
+    .type           = AVMEDIA_TYPE_SUBTITLE,
+    .id             = AV_CODEC_ID_ONCAPTION,
+    .decode         = text_decode_frame,
+    .init           = oncaption_linebreak_init,
+    .priv_class     = &oncaption_decoder_class,
+};
+#endif
+
 #if CONFIG_VPLAYER_DECODER || CONFIG_PJS_DECODER || CONFIG_SUBVIEWER1_DECODER || CONFIG_STL_DECODER
 
 static int linebreak_init(AVCodecContext *avctx)
diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c
index 07f7b68..bce94ea 100644
--- a/libavformat/flvdec.c
+++ b/libavformat/flvdec.c
@@ -965,7 +965,7 @@ retry_duration:
     } else if (stream_type == FLV_STREAM_TYPE_VIDEO) {
         size -= flv_set_video_codec(s, st, flags & FLV_VIDEO_CODECID_MASK, 1);
     } else if (stream_type == FLV_STREAM_TYPE_DATA) {
-        st->codec->codec_id = AV_CODEC_ID_TEXT;
+        st->codec->codec_id = AV_CODEC_ID_ONCAPTION;
     }
 
     if (st->codec->codec_id == AV_CODEC_ID_AAC ||


More information about the ffmpeg-devel mailing list