diff options
author | Clément Bœsch <ubitux@gmail.com> | 2012-05-27 00:36:31 +0400 |
---|---|---|
committer | Clément Bœsch <ubitux@gmail.com> | 2012-05-29 23:33:28 +0400 |
commit | d51e08bb89f7a93f471bc14ad00c14ac986cfcf0 (patch) | |
tree | 8675f875aad6e370b73ef62e0abcb02bd5d989d9 /libavcodec/microdvddec.c | |
parent | e7cb161515fc9fb6d30d1681d64d9ba7ad737a4e (diff) |
lavc: switch from ts_end to duration in ff_ass_add_rect.
Make possible a end-to-presentation duration.
Diffstat (limited to 'libavcodec/microdvddec.c')
-rw-r--r-- | libavcodec/microdvddec.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/libavcodec/microdvddec.c b/libavcodec/microdvddec.c index 083efdb94f..33a75c4f9e 100644 --- a/libavcodec/microdvddec.c +++ b/libavcodec/microdvddec.c @@ -261,10 +261,6 @@ static int microdvd_decode_frame(AVCodecContext *avctx, char *decoded_sub; char *line = avpkt->data; char *end = avpkt->data + avpkt->size; - int64_t frame_start = avpkt->pts; - int64_t frame_end = avpkt->pts + avpkt->duration; - int ts_start = av_rescale_q(frame_start, avctx->time_base, (AVRational){1,100}); - int ts_end = av_rescale_q(frame_end, avctx->time_base, (AVRational){1,100}); struct microdvd_tag tags[sizeof(MICRODVD_TAGS) - 1] = {{0}}; if (avpkt->size <= 0) @@ -299,8 +295,14 @@ static int microdvd_decode_frame(AVCodecContext *avctx, end: av_bprint_finalize(&new_line, &decoded_sub); - if (*decoded_sub) - ff_ass_add_rect(sub, decoded_sub, ts_start, ts_end, 0); + if (*decoded_sub) { + int64_t start = avpkt->pts; + int64_t duration = avpkt->duration; + int ts_start = av_rescale_q(start, avctx->time_base, (AVRational){1,100}); + int ts_duration = duration != -1 ? + av_rescale_q(duration, avctx->time_base, (AVRational){1,100}) : -1; + ff_ass_add_rect(sub, decoded_sub, ts_start, ts_duration, 0); + } av_free(decoded_sub); *got_sub_ptr = sub->num_rects > 0; |