summaryrefslogtreecommitdiff
path: root/fftools/ffmpeg_enc.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2023-03-27 07:37:29 +0200
committerAnton Khirnov <anton@khirnov.net>2023-04-13 15:11:56 +0200
commit87ae84e4afb2d137b1e229250b576226b1433a79 (patch)
tree9b149408c15a399c6853a76d4506e946f984f6d3 /fftools/ffmpeg_enc.c
parent710da200fc19d2e72723e0363b0d23ba8c8027a7 (diff)
downloadffmpeg-87ae84e4afb2d137b1e229250b576226b1433a79.tar.gz
fftools/ffmpeg: move OutputStream.sq_frame to Encoder
It is audio/video encoding-only and does not need to be visible outside of ffmpeg_enc.c
Diffstat (limited to 'fftools/ffmpeg_enc.c')
-rw-r--r--fftools/ffmpeg_enc.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c
index bb11cdf42a..5c56ad0325 100644
--- a/fftools/ffmpeg_enc.c
+++ b/fftools/ffmpeg_enc.c
@@ -50,6 +50,8 @@ struct Encoder {
AVFrame *last_frame;
/* number of frames emitted by the video-encoding sync code */
int64_t vsync_frame_number;
+
+ AVFrame *sq_frame;
};
static uint64_t dup_warning = 1000;
@@ -62,6 +64,7 @@ void enc_free(Encoder **penc)
return;
av_frame_free(&enc->last_frame);
+ av_frame_free(&enc->sq_frame);
av_freep(penc);
}
@@ -139,6 +142,7 @@ static void init_encoder_time_base(OutputStream *ost, AVRational default_time_ba
int enc_open(OutputStream *ost, AVFrame *frame)
{
InputStream *ist = ost->ist;
+ Encoder *e = ost->enc;
AVCodecContext *enc_ctx = ost->enc_ctx;
AVCodecContext *dec_ctx = NULL;
const AVCodec *enc = enc_ctx->codec;
@@ -328,6 +332,12 @@ int enc_open(OutputStream *ost, AVFrame *frame)
return ret;
}
+ if (ost->sq_idx_encode >= 0) {
+ e->sq_frame = av_frame_alloc();
+ if (!e->sq_frame)
+ return AVERROR(ENOMEM);
+ }
+
if (ost->enc_ctx->frame_size) {
av_assert0(ost->sq_idx_encode >= 0);
sq_frame_samples(output_files[ost->file_index]->sq_encode,
@@ -718,16 +728,17 @@ static int encode_frame(OutputFile *of, OutputStream *ost, AVFrame *frame)
static int submit_encode_frame(OutputFile *of, OutputStream *ost,
AVFrame *frame)
{
+ Encoder *e = ost->enc;
int ret;
if (ost->sq_idx_encode < 0)
return encode_frame(of, ost, frame);
if (frame) {
- ret = av_frame_ref(ost->sq_frame, frame);
+ ret = av_frame_ref(e->sq_frame, frame);
if (ret < 0)
return ret;
- frame = ost->sq_frame;
+ frame = e->sq_frame;
}
ret = sq_send(of->sq_encode, ost->sq_idx_encode,
@@ -740,7 +751,7 @@ static int submit_encode_frame(OutputFile *of, OutputStream *ost,
}
while (1) {
- AVFrame *enc_frame = ost->sq_frame;
+ AVFrame *enc_frame = e->sq_frame;
ret = sq_receive(of->sq_encode, ost->sq_idx_encode,
SQFRAME(enc_frame));