[FFmpeg-devel] [PATCH 10/16] avcodec/svq3: Avoid allocations for SVQ3Frames
Andreas Rheinhardt
andreas.rheinhardt at gmail.com
Sun Sep 13 05:57:47 EEST 2020
These frames can be made part of the SVQ3Context; notice that the pointers
to the frames have been retained in order to allow to just swap them as
the code already does.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
---
libavcodec/svq3.c | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/libavcodec/svq3.c b/libavcodec/svq3.c
index c8db08a32f..8a67836827 100644
--- a/libavcodec/svq3.c
+++ b/libavcodec/svq3.c
@@ -147,6 +147,7 @@ typedef struct SVQ3Context {
DECLARE_ALIGNED(8, uint8_t, non_zero_count_cache)[15 * 8];
uint32_t dequant4_coeff[QP_MAX_NUM + 1][16];
int block_offset[2 * (16 * 3)];
+ SVQ3Frame frames[3];
} SVQ3Context;
#define FULLPEL_MODE 1
@@ -1135,13 +1136,9 @@ static av_cold int svq3_decode_init(AVCodecContext *avctx)
int marker_found = 0;
int ret;
- s->cur_pic = av_mallocz(sizeof(*s->cur_pic));
- s->last_pic = av_mallocz(sizeof(*s->last_pic));
- s->next_pic = av_mallocz(sizeof(*s->next_pic));
- if (!s->next_pic || !s->last_pic || !s->cur_pic) {
- ret = AVERROR(ENOMEM);
- goto fail;
- }
+ s->cur_pic = &s->frames[0];
+ s->last_pic = &s->frames[1];
+ s->next_pic = &s->frames[2];
s->cur_pic->f = av_frame_alloc();
s->last_pic->f = av_frame_alloc();
@@ -1631,9 +1628,6 @@ static av_cold int svq3_decode_end(AVCodecContext *avctx)
av_frame_free(&s->cur_pic->f);
av_frame_free(&s->next_pic->f);
av_frame_free(&s->last_pic->f);
- av_freep(&s->cur_pic);
- av_freep(&s->next_pic);
- av_freep(&s->last_pic);
av_freep(&s->slice_buf);
av_freep(&s->intra4x4_pred_mode);
av_freep(&s->edge_emu_buffer);
--
2.25.1
More information about the ffmpeg-devel
mailing list