aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat
diff options
context:
space:
mode:
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>2012-04-12 00:23:28 +0200
committerReimar Döffinger <Reimar.Doeffinger@gmx.de>2012-04-14 18:21:19 +0200
commitb44a5ec76e1ed87d7b31befa8c67b671ed94d0ce (patch)
treea102e0c81e5ababb1107008343bde89e57b5c1ac /libavformat
parentd05625bd04a59187a2c6d5cf775e2e167d9a54cc (diff)
downloadffmpeg-b44a5ec76e1ed87d7b31befa8c67b671ed94d0ce.tar.gz
latmenc: replace per-frame malloc/free by constant size buffer.
Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/latmenc.c14
1 files changed, 4 insertions, 10 deletions
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;
}