aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2023-06-15 21:54:21 -0300
committerJames Almer <jamrial@gmail.com>2023-06-19 12:57:31 -0300
commit96fc1927330b03a7674f9376f19565609678f48a (patch)
tree623eeaa5eff8800621dff1dd7c25ac3c4a62cdc8 /libavcodec
parent1617d1a752d5e97d5e74f6c384609c027c884553 (diff)
downloadffmpeg-96fc1927330b03a7674f9376f19565609678f48a.tar.gz
avcodec/evc_frame_merge: use av_fast_realloc()
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/evc_frame_merge_bsf.c24
1 files 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;
}