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>tags/n1.0
| @@ -46,6 +46,7 @@ version next: | |||||
| - asetpts filter | - asetpts filter | ||||
| - hue filter | - hue filter | ||||
| - ICO muxer | - ICO muxer | ||||
| - SubRip encoder and decoder without embedded timing | |||||
| version 0.11: | version 0.11: | ||||
| @@ -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_DECODER) += srtdec.o ass.o | ||||
| OBJS-$(CONFIG_SRT_ENCODER) += srtenc.o ass_split.o | OBJS-$(CONFIG_SRT_ENCODER) += srtenc.o ass_split.o | ||||
| OBJS-$(CONFIG_SUBRIP_DECODER) += srtdec.o ass.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_SUBVIEWER_DECODER) += subviewerdec.o ass.o | ||||
| OBJS-$(CONFIG_SUNRAST_DECODER) += sunrast.o | OBJS-$(CONFIG_SUNRAST_DECODER) += sunrast.o | ||||
| OBJS-$(CONFIG_SUNRAST_ENCODER) += sunrastenc.o | OBJS-$(CONFIG_SUNRAST_ENCODER) += sunrastenc.o | ||||
| @@ -415,7 +415,7 @@ void avcodec_register_all(void) | |||||
| REGISTER_DECODER (REALTEXT, realtext); | REGISTER_DECODER (REALTEXT, realtext); | ||||
| REGISTER_DECODER (SAMI, sami); | REGISTER_DECODER (SAMI, sami); | ||||
| REGISTER_ENCDEC (SRT, srt); | REGISTER_ENCDEC (SRT, srt); | ||||
| REGISTER_DECODER (SUBRIP, subrip); | |||||
| REGISTER_ENCDEC (SUBRIP, subrip); | |||||
| REGISTER_DECODER (SUBVIEWER, subviewer); | REGISTER_DECODER (SUBVIEWER, subviewer); | ||||
| REGISTER_ENCDEC (XSUB, xsub); | REGISTER_ENCDEC (XSUB, xsub); | ||||
| @@ -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); | dialog = ff_ass_split_dialog(s->ass_ctx, sub->rects[i]->ass, 0, &num); | ||||
| for (; dialog && num--; dialog++) { | 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->alignment_applied = 0; | ||||
| s->dialog_start = s->ptr - 2; | s->dialog_start = s->ptr - 2; | ||||
| srt_style_apply(s, dialog->style); | srt_style_apply(s, dialog->style); | ||||
| @@ -289,9 +291,10 @@ static int srt_encode_close(AVCodecContext *avctx) | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| #if CONFIG_SRT_ENCODER | |||||
| AVCodec ff_srt_encoder = { | AVCodec ff_srt_encoder = { | ||||
| .name = "srt", | .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, | .type = AVMEDIA_TYPE_SUBTITLE, | ||||
| .id = AV_CODEC_ID_SRT, | .id = AV_CODEC_ID_SRT, | ||||
| .priv_data_size = sizeof(SRTContext), | .priv_data_size = sizeof(SRTContext), | ||||
| @@ -299,3 +302,17 @@ AVCodec ff_srt_encoder = { | |||||
| .encode = srt_encode_frame, | .encode = srt_encode_frame, | ||||
| .close = srt_encode_close, | .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 | |||||
| @@ -27,7 +27,7 @@ | |||||
| */ | */ | ||||
| #define LIBAVCODEC_VERSION_MAJOR 54 | #define LIBAVCODEC_VERSION_MAJOR 54 | ||||
| #define LIBAVCODEC_VERSION_MINOR 52 | |||||
| #define LIBAVCODEC_VERSION_MINOR 53 | |||||
| #define LIBAVCODEC_VERSION_MICRO 100 | #define LIBAVCODEC_VERSION_MICRO 100 | ||||
| #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | ||||
| @@ -42,6 +42,7 @@ static int srt_write_header(AVFormatContext *avf) | |||||
| return AVERROR(EINVAL); | return AVERROR(EINVAL); | ||||
| } | } | ||||
| if (avf->streams[0]->codec->codec_id != AV_CODEC_ID_TEXT && | 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) { | avf->streams[0]->codec->codec_id != AV_CODEC_ID_SRT) { | ||||
| av_log(avf, AV_LOG_ERROR, | av_log(avf, AV_LOG_ERROR, | ||||
| "Unsupported subtitles codec: %s\n", | "Unsupported subtitles codec: %s\n", | ||||
| @@ -19,6 +19,9 @@ fate-sub-sami: CMD = md5 -i $(SAMPLES)/sub/SAMI_capability_tester.smi -f ass | |||||
| FATE_SUBTITLES += fate-sub-srt | FATE_SUBTITLES += fate-sub-srt | ||||
| fate-sub-srt: CMD = md5 -i $(SAMPLES)/sub/SubRip_capability_tester.srt -f ass | 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_SUBTITLES += fate-sub-subviewer | ||||
| fate-sub-subviewer: CMD = md5 -i $(SAMPLES)/sub/SubViewer_capability_tester.sub -f ass | fate-sub-subviewer: CMD = md5 -i $(SAMPLES)/sub/SubViewer_capability_tester.sub -f ass | ||||
| @@ -0,0 +1 @@ | |||||
| bd520f85238abf9df292374aed54681a | |||||