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)
av_log(NULL, AV_LOG_WARNING, "The bitrate parameter is set too low."
" It takes bits/s as argument, not kbits/s\n");
} else {
- av_opt_set_dict(ost->enc_ctx, &ost->encoder_opts);
+ if (av_opt_set_dict(ost->enc_ctx, &ost->encoder_opts) < 0) {
+ av_log(NULL, AV_LOG_FATAL,
+ "Error setting up codec context options.\n");
+ exit_program(1);
+ }
}
ret = avcodec_copy_context(ost->st->codec, ost->enc_ctx);
if (ret < 0)
return ret;
- if ((ret = pthread_create(&f->thread, NULL, input_thread, f)))
+ if ((ret = pthread_create(&f->thread, NULL, input_thread, f))) {
+ av_log(NULL, AV_LOG_ERROR, "pthread_create failed: %s. Try to increase `ulimit -v` or decrease `ulimit -s`.\n", strerror(ret));
+ av_thread_message_queue_free(&f->in_thread_queue);
return AVERROR(ret);
+ }
}
return 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);
}