fftools/ffmpeg_mux: avoid leaking pkt on errors

pull/388/head
Anton Khirnov 2 years ago
parent 5d499d3250
commit ee2092ddec
  1. 18
      fftools/ffmpeg_mux.c

@ -97,8 +97,10 @@ static int write_packet(OutputFile *of, OutputStream *ost, AVPacket *pkt)
fs = filesize(s->pb); fs = filesize(s->pb);
atomic_store(&of->mux->last_filesize, fs); atomic_store(&of->mux->last_filesize, fs);
if (fs >= of->mux->limit_filesize) if (fs >= of->mux->limit_filesize) {
return AVERROR_EOF; ret = AVERROR_EOF;
goto fail;
}
if ((st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && ost->vsync_method == VSYNC_DROP) || if ((st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && ost->vsync_method == VSYNC_DROP) ||
(st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && audio_sync_method < 0)) (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && audio_sync_method < 0))
@ -138,8 +140,11 @@ static int write_packet(OutputFile *of, OutputStream *ost, AVPacket *pkt)
av_log(s, loglevel, "Non-monotonous DTS in output stream " av_log(s, loglevel, "Non-monotonous DTS in output stream "
"%d:%d; previous: %"PRId64", current: %"PRId64"; ", "%d:%d; previous: %"PRId64", current: %"PRId64"; ",
ost->file_index, ost->st->index, ms->last_mux_dts, pkt->dts); ost->file_index, ost->st->index, ms->last_mux_dts, pkt->dts);
if (exit_on_error) if (exit_on_error) {
return AVERROR(EINVAL); ret = AVERROR(EINVAL);
goto fail;
}
av_log(s, loglevel, "changing to %"PRId64". This may result " av_log(s, loglevel, "changing to %"PRId64". This may result "
"in incorrect timestamps in the output file.\n", "in incorrect timestamps in the output file.\n",
max); max);
@ -170,10 +175,13 @@ static int write_packet(OutputFile *of, OutputStream *ost, AVPacket *pkt)
ret = av_interleaved_write_frame(s, pkt); ret = av_interleaved_write_frame(s, pkt);
if (ret < 0) { if (ret < 0) {
print_error("av_interleaved_write_frame()", ret); print_error("av_interleaved_write_frame()", ret);
return ret; goto fail;
} }
return 0; return 0;
fail:
av_packet_unref(pkt);
return ret;
} }
static int sync_queue_process(OutputFile *of, OutputStream *ost, AVPacket *pkt) static int sync_queue_process(OutputFile *of, OutputStream *ost, AVPacket *pkt)

Loading…
Cancel
Save