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:
		| @@ -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; | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Reimar Döffinger
					Reimar Döffinger