From b44a5ec76e1ed87d7b31befa8c67b671ed94d0ce Mon Sep 17 00:00:00 2001 From: Reimar Döffinger Date: Thu, 12 Apr 2012 00:23:28 +0200 Subject: latmenc: replace per-frame malloc/free by constant size buffer. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Reimar Döffinger --- libavformat/latmenc.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) (limited to 'libavformat/latmenc.c') diff --git a/libavformat/latmenc.c b/libavformat/latmenc.c index 914c63237d..ebd60c0191 100644 --- a/libavformat/latmenc.c +++ b/libavformat/latmenc.c @@ -36,6 +36,7 @@ typedef struct { int object_type; int counter; int mod; + uint8_t buffer[0x1fff + MAX_EXTRADATA_SIZE + 1024]; } LATMContext; static const AVOption options[] = { @@ -142,11 +143,11 @@ static void latm_write_frame_header(AVFormatContext *s, PutBitContext *bs) static int latm_write_packet(AVFormatContext *s, AVPacket *pkt) { + LATMContext *ctx = s->priv_data; AVIOContext *pb = s->pb; PutBitContext bs; int i, len; uint8_t loas_header[] = "\x56\xe0\x00"; - uint8_t *buf = NULL; if (s->streams[0]->codec->codec_id == CODEC_ID_AAC_LATM) return ff_raw_write_packet(s, pkt); @@ -158,11 +159,7 @@ static int latm_write_packet(AVFormatContext *s, AVPacket *pkt) if (pkt->size > 0x1fff) goto too_large; - buf = av_malloc(pkt->size+1024+MAX_EXTRADATA_SIZE); - if (!buf) - return AVERROR(ENOMEM); - - init_put_bits(&bs, buf, pkt->size+1024+MAX_EXTRADATA_SIZE); + init_put_bits(&bs, ctx->buffer, pkt->size+1024+MAX_EXTRADATA_SIZE); latm_write_frame_header(s, &bs); @@ -201,15 +198,12 @@ static int latm_write_packet(AVFormatContext *s, AVPacket *pkt) loas_header[2] |= len & 0xff; avio_write(pb, loas_header, 3); - avio_write(pb, buf, len); - - av_free(buf); + avio_write(pb, ctx->buffer, len); return 0; too_large: av_log(s, AV_LOG_ERROR, "LATM packet size larger than maximum size 0x1fff\n"); - av_free(buf); return AVERROR_INVALIDDATA; } -- cgit v1.2.3