Fix leaks in the AAC RTP depacketizer

Originally committed as revision 22804 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Martin Storsjö 2010-04-05 17:25:39 +00:00
parent 1da1e1933f
commit 0e4b185a8d
2 changed files with 7 additions and 0 deletions

View file

@ -400,7 +400,11 @@ static int rtp_parse_mp4_au(RTPDemuxContext *s, const uint8_t *buf)
return -1; return -1;
infos->nb_au_headers = au_headers_length / au_header_size; infos->nb_au_headers = au_headers_length / au_header_size;
if (!infos->au_headers || infos->au_headers_allocated < infos->nb_au_headers) {
av_free(infos->au_headers);
infos->au_headers = av_malloc(sizeof(struct AUHeaders) * infos->nb_au_headers); infos->au_headers = av_malloc(sizeof(struct AUHeaders) * infos->nb_au_headers);
infos->au_headers_allocated = infos->nb_au_headers;
}
/* XXX: We handle multiple AU Section as only one (need to fix this for interleaving) /* XXX: We handle multiple AU Section as only one (need to fix this for interleaving)
In my test, the FAAD decoder does not behave correctly when sending each AU one by one In my test, the FAAD decoder does not behave correctly when sending each AU one by one
@ -599,6 +603,8 @@ int rtp_parse_packet(RTPDemuxContext *s, AVPacket *pkt,
void rtp_parse_close(RTPDemuxContext *s) void rtp_parse_close(RTPDemuxContext *s)
{ {
// TODO: fold this into the protocol specific data fields. // TODO: fold this into the protocol specific data fields.
av_free(s->rtp_payload_data->mode);
av_free(s->rtp_payload_data->au_headers);
if (!strcmp(ff_rtp_enc_name(s->payload_type), "MP2T")) { if (!strcmp(ff_rtp_enc_name(s->payload_type), "MP2T")) {
ff_mpegts_parse_close(s->ts); ff_mpegts_parse_close(s->ts);
} }

View file

@ -48,6 +48,7 @@ typedef struct rtp_payload_data
int rap_flag; int rap_flag;
int streamstate; int streamstate;
} *au_headers; } *au_headers;
int au_headers_allocated;
int nb_au_headers; int nb_au_headers;
int au_headers_length_bytes; int au_headers_length_bytes;
int cur_au_index; int cur_au_index;