mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2025-02-14 00:43:20 +00:00
latmenc: replace per-frame malloc/free by constant size buffer.
Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>
This commit is contained in:
parent
d05625bd04
commit
b44a5ec76e
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user