| @@ -261,7 +261,6 @@ static int microdvd_decode_frame(AVCodecContext *avctx, | |||||
| AVSubtitle *sub = data; | AVSubtitle *sub = data; | ||||
| AVBPrint new_line; | AVBPrint new_line; | ||||
| char c; | char c; | ||||
| char *decoded_sub; | |||||
| char *line = avpkt->data; | char *line = avpkt->data; | ||||
| char *end = avpkt->data + avpkt->size; | char *end = avpkt->data + avpkt->size; | ||||
| struct microdvd_tag tags[sizeof(MICRODVD_TAGS) - 1] = {{0}}; | struct microdvd_tag tags[sizeof(MICRODVD_TAGS) - 1] = {{0}}; | ||||
| @@ -301,18 +300,18 @@ static int microdvd_decode_frame(AVCodecContext *avctx, | |||||
| } | } | ||||
| } | } | ||||
| if (new_line.len) { | if (new_line.len) { | ||||
| av_bprintf(&new_line, "\r\n"); | |||||
| av_bprint_finalize(&new_line, &decoded_sub); | |||||
| if (*decoded_sub) { | |||||
| int ret; | |||||
| int64_t start = avpkt->pts; | int64_t start = avpkt->pts; | ||||
| int64_t duration = avpkt->duration; | int64_t duration = avpkt->duration; | ||||
| int ts_start = av_rescale_q(start, avctx->time_base, (AVRational){1,100}); | int ts_start = av_rescale_q(start, avctx->time_base, (AVRational){1,100}); | ||||
| int ts_duration = duration != -1 ? | int ts_duration = duration != -1 ? | ||||
| av_rescale_q(duration, avctx->time_base, (AVRational){1,100}) : -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); | |||||
| av_bprintf(&new_line, "\r\n"); | |||||
| ret = ff_ass_add_rect_bprint(sub, &new_line, ts_start, ts_duration, 0); | |||||
| av_bprint_finalize(&new_line, NULL); | |||||
| if (ret < 0) | |||||
| return ret; | |||||
| } | } | ||||
| *got_sub_ptr = sub->num_rects > 0; | *got_sub_ptr = sub->num_rects > 0; | ||||