diff options
author | Philip Langdale <philipl@overt.org> | 2012-08-12 14:18:35 -0700 |
---|---|---|
committer | Philip Langdale <philipl@overt.org> | 2012-08-15 20:46:54 -0700 |
commit | 6057de19b5e0075fea55a3a0cb9d225ba3a6f9a4 (patch) | |
tree | 0240e9ba5e109ca680013d6c4b221f4c95b7d8f6 /libavcodec/srtenc.c | |
parent | 6af680fa070ebc5081045e4b24ceaa4fccfa89b4 (diff) | |
download | ffmpeg-6057de19b5e0075fea55a3a0cb9d225ba3a6f9a4.tar.gz |
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@overt.org>
Diffstat (limited to 'libavcodec/srtenc.c')
-rw-r--r-- | libavcodec/srtenc.c | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/libavcodec/srtenc.c b/libavcodec/srtenc.c index 9e152c70c7..dfc4e6c47c 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 |