if (output_files[ost->file_index]->start_time != AV_NOPTS_VALUE)
pts -= output_files[ost->file_index]->start_time;
for (i = 0; i < nb; i++) {
+ unsigned save_num_rects = sub->num_rects;
+
ost->sync_opts = av_rescale_q(pts, AV_TIME_BASE_Q, enc->time_base);
if (!check_recording_time(ost))
return;
subtitle_out_size = avcodec_encode_subtitle(enc, subtitle_out,
subtitle_out_max_size, sub);
+ if (i == 1)
+ sub->num_rects = save_num_rects;
if (subtitle_out_size < 0) {
av_log(NULL, AV_LOG_FATAL, "Subtitle encoding failed\n");
exit_program(1);
if (!got_output) {
continue;
}
+ if (got_output && !pkt)
+ break;
}
/* handle stream copy */
do_streamcopy(ist, ost, pkt);
}
- return 0;
+ return got_output;
}
static void print_sdp(void)
ist->dec_ctx->thread_safe_callbacks = 1;
av_opt_set_int(ist->dec_ctx, "refcounted_frames", 1, 0);
+ if(ist->dec_ctx->codec_id == AV_CODEC_ID_DVB_SUBTITLE)
+ av_dict_set(&ist->decoder_opts, "compute_edt", "1", 0);
if (!av_dict_get(ist->decoder_opts, "threads", NULL, 0))
av_dict_set(&ist->decoder_opts, "threads", "auto", 0);
if (exit_on_error)
exit_program(1);
}
- ifile->eof_reached = 1;
for (i = 0; i < ifile->nb_streams; i++) {
ist = input_streams[ifile->ist_index + i];
- if (ist->decoding_needed)
- output_packet(ist, NULL);
+ if (ist->decoding_needed) {
+ ret = output_packet(ist, NULL);
+ if (ret>0)
+ return 0;
+ }
/* mark all outputs that don't go through lavfi as finished */
for (j = 0; j < nb_output_streams; j++) {
}
}
+ ifile->eof_reached = 1;
return AVERROR(EAGAIN);
}