From 21914e7a4e802772cc9cdeec3eec8b30da4fa95a Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt Date: Fri, 8 Oct 2021 11:24:09 +0200 Subject: fftools/ffmpeg, ffmpeg_opt: Allocate (In|Out)putStream.pkt early Avoids checks lateron in the hot path. Reviewed-by: James Almer Signed-off-by: Andreas Rheinhardt --- fftools/ffmpeg.c | 16 +--------------- fftools/ffmpeg_opt.c | 8 ++++++++ 2 files changed, 9 insertions(+), 15 deletions(-) (limited to 'fftools') diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 14611480f1..9d4f9d7a2b 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -1533,9 +1533,6 @@ static int reap_filters(int flush) if (av_buffersink_get_type(filter) == AVMEDIA_TYPE_AUDIO) init_output_stream_wrapper(ost, NULL, 1); - if (!ost->pkt && !(ost->pkt = av_packet_alloc())) { - return AVERROR(ENOMEM); - } if (!ost->filtered_frame && !(ost->filtered_frame = av_frame_alloc())) { return AVERROR(ENOMEM); } @@ -1979,9 +1976,6 @@ static void flush_encoders(void) AVPacket *pkt = ost->pkt; int pkt_size; - if (!pkt) - break; - switch (enc->codec_type) { case AVMEDIA_TYPE_AUDIO: desc = "audio"; @@ -2597,8 +2591,6 @@ static int transcode_subtitles(InputStream *ist, AVPacket *pkt, int *got_output, for (i = 0; i < nb_output_streams; i++) { OutputStream *ost = output_streams[i]; - if (!ost->pkt && !(ost->pkt = av_packet_alloc())) - exit_program(1); if (!check_output_constraints(ist, ost) || !ost->encoding_needed || ost->enc->type != AVMEDIA_TYPE_SUBTITLE) continue; @@ -2634,11 +2626,7 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo int repeating = 0; int eof_reached = 0; - AVPacket *avpkt; - - if (!ist->pkt && !(ist->pkt = av_packet_alloc())) - return AVERROR(ENOMEM); - avpkt = ist->pkt; + AVPacket *avpkt = ist->pkt; if (!ist->saw_first_ts) { ist->first_dts = @@ -2809,8 +2797,6 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo for (i = 0; i < nb_output_streams; i++) { OutputStream *ost = output_streams[i]; - if (!ost->pkt && !(ost->pkt = av_packet_alloc())) - exit_program(1); if (!check_output_constraints(ist, ost) || ost->encoding_needed) continue; diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index c46a9343e1..7aff43d917 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -888,6 +888,10 @@ static void add_input_streams(OptionsContext *o, AVFormatContext *ic) exit_program(1); } + ist->pkt = av_packet_alloc(); + if (!ist->pkt) + exit_program(1); + if (o->bitexact) ist->dec_ctx->flags |= AV_CODEC_FLAG_BITEXACT; @@ -1516,6 +1520,10 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e exit_program(1); } + ost->pkt = av_packet_alloc(); + if (!ost->pkt) + exit_program(1); + if (ost->enc) { AVIOContext *s = NULL; char *buf = NULL, *arg = NULL, *preset = NULL; -- cgit v1.2.3