[FFmpeg-cvslog] avcodec/evc_frame_merge: use av_fast_realloc()
James Almer
git at videolan.org
Mon Jun 19 21:51:26 EEST 2023
ffmpeg | branch: master | James Almer <jamrial at gmail.com> | Thu Jun 15 21:54:21 2023 -0300| [96fc1927330b03a7674f9376f19565609678f48a] | committer: James Almer
avcodec/evc_frame_merge: use av_fast_realloc()
Signed-off-by: James Almer <jamrial at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=96fc1927330b03a7674f9376f19565609678f48a
---
libavcodec/evc_frame_merge_bsf.c | 24 ++++++++----------------
1 file changed, 8 insertions(+), 16 deletions(-)
diff --git a/libavcodec/evc_frame_merge_bsf.c b/libavcodec/evc_frame_merge_bsf.c
index 7cc701f5c5..827f114f0b 100644
--- a/libavcodec/evc_frame_merge_bsf.c
+++ b/libavcodec/evc_frame_merge_bsf.c
@@ -26,13 +26,11 @@
#include "evc.h"
#include "evc_parse.h"
-#define INIT_AU_BUF_CAPACITY 1024
-
// Access unit data
typedef struct AccessUnitBuffer {
uint8_t *data; // the data buffer
size_t data_size; // size of data in bytes
- size_t capacity; // buffer capacity
+ unsigned capacity; // buffer capacity
} AccessUnitBuffer;
typedef struct EVCFMergeContext {
@@ -72,9 +70,8 @@ static int evc_frame_merge_filter(AVBSFContext *bsf, AVPacket *out)
AVPacket *in = ctx->in;
- int free_space = 0;
size_t nalu_size = 0;
- uint8_t *nalu = NULL;
+ uint8_t *buffer, *nalu = NULL;
int au_end_found = 0;
int err;
@@ -102,15 +99,14 @@ static int evc_frame_merge_filter(AVBSFContext *bsf, AVPacket *out)
au_end_found = end_of_access_unit_found(parser_ctx);
- free_space = ctx->au_buffer.capacity - ctx->au_buffer.data_size;
- while (free_space < in->size) {
- ctx->au_buffer.capacity *= 2;
- free_space = ctx->au_buffer.capacity - ctx->au_buffer.data_size;
-
- if (free_space >= in->size)
- ctx->au_buffer.data = av_realloc(ctx->au_buffer.data, ctx->au_buffer.capacity);
+ buffer = av_fast_realloc(ctx->au_buffer.data, &ctx->au_buffer.capacity,
+ ctx->au_buffer.data_size + in->size);
+ if (!buffer) {
+ av_freep(&ctx->au_buffer.data);
+ return AVERROR(ENOMEM);
}
+ ctx->au_buffer.data = buffer;
memcpy(ctx->au_buffer.data + ctx->au_buffer.data_size, in->data, in->size);
ctx->au_buffer.data_size += in->size;
@@ -143,10 +139,6 @@ static int evc_frame_merge_init(AVBSFContext *bsf)
if (!ctx->in)
return AVERROR(ENOMEM);
- ctx->au_buffer.capacity = INIT_AU_BUF_CAPACITY;
- ctx->au_buffer.data = av_malloc(INIT_AU_BUF_CAPACITY);
- ctx->au_buffer.data_size = 0;
-
return 0;
}
More information about the ffmpeg-cvslog
mailing list