[FFmpeg-cvslog] srtenc: Add timing-less "subrip" encoder.
Philip Langdale
git at videolan.org
Thu Aug 16 07:03:31 CEST 2012
ffmpeg | branch: master | Philip Langdale <philipl at overt.org> | Sun Aug 12 14:18:35 2012 -0700| [6057de19b5e0075fea55a3a0cb9d225ba3a6f9a4] | committer: Philip Langdale
srtenc: Add timing-less "subrip" encoder.
Unsurprisingly, if a timing-less subrip decoder is desireable, an
encoder is as well. With this in place, we can move on to remove
the use of the old encoder/decoder with embedded timing and move
all timing handling the (de)muxer where they belong.
Signed-off-by: Philip Langdale <philipl at overt.org>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6057de19b5e0075fea55a3a0cb9d225ba3a6f9a4
---
Changelog | 1 +
libavcodec/Makefile | 1 +
libavcodec/allcodecs.c | 2 +-
libavcodec/srtenc.c | 39 ++++++++++++++++++++++++++++-----------
libavcodec/version.h | 2 +-
libavformat/srtenc.c | 1 +
tests/fate/subtitles.mak | 3 +++
tests/ref/fate/sub-subripenc | 1 +
8 files changed, 37 insertions(+), 13 deletions(-)
diff --git a/Changelog b/Changelog
index 1bbe690..5a08d8f 100644
--- a/Changelog
+++ b/Changelog
@@ -46,6 +46,7 @@ version next:
- asetpts filter
- hue filter
- ICO muxer
+- SubRip encoder and decoder without embedded timing
version 0.11:
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index bab97e4..ed861ae 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -409,6 +409,7 @@ OBJS-$(CONFIG_SP5X_DECODER) += sp5xdec.o mjpegdec.o mjpeg.o
OBJS-$(CONFIG_SRT_DECODER) += srtdec.o ass.o
OBJS-$(CONFIG_SRT_ENCODER) += srtenc.o ass_split.o
OBJS-$(CONFIG_SUBRIP_DECODER) += srtdec.o ass.o
+OBJS-$(CONFIG_SUBRIP_ENCODER) += srtenc.o ass_split.o
OBJS-$(CONFIG_SUBVIEWER_DECODER) += subviewerdec.o ass.o
OBJS-$(CONFIG_SUNRAST_DECODER) += sunrast.o
OBJS-$(CONFIG_SUNRAST_ENCODER) += sunrastenc.o
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index f7ae449..9814773 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -415,7 +415,7 @@ void avcodec_register_all(void)
REGISTER_DECODER (REALTEXT, realtext);
REGISTER_DECODER (SAMI, sami);
REGISTER_ENCDEC (SRT, srt);
- REGISTER_DECODER (SUBRIP, subrip);
+ REGISTER_ENCDEC (SUBRIP, subrip);
REGISTER_DECODER (SUBVIEWER, subviewer);
REGISTER_ENCDEC (XSUB, xsub);
diff --git a/libavcodec/srtenc.c b/libavcodec/srtenc.c
index 9e152c7..dfc4e6c 100644
--- a/libavcodec/srtenc.c
+++ b/libavcodec/srtenc.c
@@ -252,16 +252,18 @@ static int srt_encode_frame(AVCodecContext *avctx,
dialog = ff_ass_split_dialog(s->ass_ctx, sub->rects[i]->ass, 0, &num);
for (; dialog && num--; dialog++) {
- int sh, sm, ss, sc = 10 * dialog->start;
- int eh, em, es, ec = 10 * dialog->end;
- sh = sc/3600000; sc -= 3600000*sh;
- sm = sc/ 60000; sc -= 60000*sm;
- ss = sc/ 1000; sc -= 1000*ss;
- eh = ec/3600000; ec -= 3600000*eh;
- em = ec/ 60000; ec -= 60000*em;
- es = ec/ 1000; ec -= 1000*es;
- srt_print(s,"%d\r\n%02d:%02d:%02d,%03d --> %02d:%02d:%02d,%03d\r\n",
- ++s->count, sh, sm, ss, sc, eh, em, es, ec);
+ if (avctx->codec->id == CODEC_ID_SRT) {
+ int sh, sm, ss, sc = 10 * dialog->start;
+ int eh, em, es, ec = 10 * dialog->end;
+ sh = sc/3600000; sc -= 3600000*sh;
+ sm = sc/ 60000; sc -= 60000*sm;
+ ss = sc/ 1000; sc -= 1000*ss;
+ eh = ec/3600000; ec -= 3600000*eh;
+ em = ec/ 60000; ec -= 60000*em;
+ es = ec/ 1000; ec -= 1000*es;
+ srt_print(s,"%d\r\n%02d:%02d:%02d,%03d --> %02d:%02d:%02d,%03d\r\n",
+ ++s->count, sh, sm, ss, sc, eh, em, es, ec);
+ }
s->alignment_applied = 0;
s->dialog_start = s->ptr - 2;
srt_style_apply(s, dialog->style);
@@ -289,9 +291,10 @@ static int srt_encode_close(AVCodecContext *avctx)
return 0;
}
+#if CONFIG_SRT_ENCODER
AVCodec ff_srt_encoder = {
.name = "srt",
- .long_name = NULL_IF_CONFIG_SMALL("SubRip subtitle"),
+ .long_name = NULL_IF_CONFIG_SMALL("SubRip subtitle with embedded timing"),
.type = AVMEDIA_TYPE_SUBTITLE,
.id = AV_CODEC_ID_SRT,
.priv_data_size = sizeof(SRTContext),
@@ -299,3 +302,17 @@ AVCodec ff_srt_encoder = {
.encode = srt_encode_frame,
.close = srt_encode_close,
};
+#endif
+
+#if CONFIG_SUBRIP_ENCODER
+AVCodec ff_subrip_encoder = {
+ .name = "subrip",
+ .long_name = NULL_IF_CONFIG_SMALL("SubRip subtitle"),
+ .type = AVMEDIA_TYPE_SUBTITLE,
+ .id = AV_CODEC_ID_SUBRIP,
+ .priv_data_size = sizeof(SRTContext),
+ .init = srt_encode_init,
+ .encode = srt_encode_frame,
+ .close = srt_encode_close,
+};
+#endif
diff --git a/libavcodec/version.h b/libavcodec/version.h
index f2c5151..7f4db0b 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -27,7 +27,7 @@
*/
#define LIBAVCODEC_VERSION_MAJOR 54
-#define LIBAVCODEC_VERSION_MINOR 52
+#define LIBAVCODEC_VERSION_MINOR 53
#define LIBAVCODEC_VERSION_MICRO 100
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
diff --git a/libavformat/srtenc.c b/libavformat/srtenc.c
index 7fe559f..6b8278f 100644
--- a/libavformat/srtenc.c
+++ b/libavformat/srtenc.c
@@ -42,6 +42,7 @@ static int srt_write_header(AVFormatContext *avf)
return AVERROR(EINVAL);
}
if (avf->streams[0]->codec->codec_id != AV_CODEC_ID_TEXT &&
+ avf->streams[0]->codec->codec_id != AV_CODEC_ID_SUBRIP &&
avf->streams[0]->codec->codec_id != AV_CODEC_ID_SRT) {
av_log(avf, AV_LOG_ERROR,
"Unsupported subtitles codec: %s\n",
diff --git a/tests/fate/subtitles.mak b/tests/fate/subtitles.mak
index 59c55a5..aa0b50d 100644
--- a/tests/fate/subtitles.mak
+++ b/tests/fate/subtitles.mak
@@ -19,6 +19,9 @@ fate-sub-sami: CMD = md5 -i $(SAMPLES)/sub/SAMI_capability_tester.smi -f ass
FATE_SUBTITLES += fate-sub-srt
fate-sub-srt: CMD = md5 -i $(SAMPLES)/sub/SubRip_capability_tester.srt -f ass
+FATE_SUBTITLES += fate-sub-subripenc
+fate-sub-subripenc: CMD = md5 -i $(SAMPLES)/sub/MovText_capability_tester.mp4 -scodec subrip -f srt
+
FATE_SUBTITLES += fate-sub-subviewer
fate-sub-subviewer: CMD = md5 -i $(SAMPLES)/sub/SubViewer_capability_tester.sub -f ass
diff --git a/tests/ref/fate/sub-subripenc b/tests/ref/fate/sub-subripenc
new file mode 100644
index 0000000..7daa4f5
--- /dev/null
+++ b/tests/ref/fate/sub-subripenc
@@ -0,0 +1 @@
+bd520f85238abf9df292374aed54681a
More information about the ffmpeg-cvslog
mailing list