summaryrefslogtreecommitdiff
path: root/libavcodec/adpcmenc.c
diff options
context:
space:
mode:
authorZane van Iperen <zane@zanevaniperen.com>2021-04-01 10:29:19 +1000
committerZane van Iperen <zane@zanevaniperen.com>2021-04-10 14:42:12 +1000
commit9e89a23eac1d5ab6f20c5c281d224e9218312a0b (patch)
tree213a3c2ab8f08a6c7466c42d193981dfb41a59fb /libavcodec/adpcmenc.c
parent08c805f4ac767444ccc04a37ca6b99d719a6b58f (diff)
downloadffmpeg-9e89a23eac1d5ab6f20c5c281d224e9218312a0b.tar.gz
avcodec/adpcm_swf: remove memory allocation during trellis encoding
The block size is hardcoded, so the buffer size is always known. Statically allocate the buffer on the stack. Signed-off-by: Zane van Iperen <zane@zanevaniperen.com>
Diffstat (limited to 'libavcodec/adpcmenc.c')
-rw-r--r--libavcodec/adpcmenc.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/libavcodec/adpcmenc.c b/libavcodec/adpcmenc.c
index 58308dae47..9dc77d519a 100644
--- a/libavcodec/adpcmenc.c
+++ b/libavcodec/adpcmenc.c
@@ -722,6 +722,9 @@ static int adpcm_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
n = frame->nb_samples - 1;
+ /* NB: This is safe as we don't have AV_CODEC_CAP_SMALL_LAST_FRAME. */
+ av_assert0(n == 4095);
+
// store AdpcmCodeSize
put_bits(&pb, 2, 2); // set 4-bit flash adpcm format
@@ -735,8 +738,7 @@ static int adpcm_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
}
if (avctx->trellis > 0) {
- if (!(buf = av_malloc(2 * n)))
- return AVERROR(ENOMEM);
+ uint8_t buf[8190 /* = 2 * n */];
adpcm_compress_trellis(avctx, samples + avctx->channels, buf,
&c->status[0], n, avctx->channels);
if (avctx->channels == 2)
@@ -748,7 +750,6 @@ static int adpcm_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
if (avctx->channels == 2)
put_bits(&pb, 4, buf[n + i]);
}
- av_free(buf);
} else {
for (i = 1; i < frame->nb_samples; i++) {
put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[0],