Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
muxer_libav: fix memory leaks
  • Loading branch information
perexg committed Oct 20, 2014
1 parent 8715176 commit bd6e5ed
Showing 1 changed file with 18 additions and 18 deletions.
36 changes: 18 additions & 18 deletions src/muxer/muxer_libav.c
Expand Up @@ -361,7 +361,7 @@ lav_muxer_write_pkt(muxer_t *m, streaming_message_type_t smt, void *data)
AVPacket packet;
th_pkt_t *pkt = (th_pkt_t*)data;
lav_muxer_t *lm = (lav_muxer_t*)m;
int rc = 0;
int rc = 0, free_data = 0;

assert(smt == SMT_PACKET);

Expand Down Expand Up @@ -399,6 +399,7 @@ lav_muxer_write_pkt(muxer_t *m, streaming_message_type_t smt, void *data)
tvhlog(LOG_WARNING, "libav", "Failed to filter bitstream");
break;
}
free_data = 1;
} else if (st->codec->codec_id == AV_CODEC_ID_AAC) {
/* remove ADTS header */
packet.data = pktbuf_ptr(pkt->pkt_payload) + 7;
Expand All @@ -420,8 +421,7 @@ lav_muxer_write_pkt(muxer_t *m, streaming_message_type_t smt, void *data)
if((rc = av_interleaved_write_frame(oc, &packet)))
tvhlog(LOG_WARNING, "libav", "Failed to write frame");

// h264_mp4toannexb filter might allocate new data.
if(packet.data != pktbuf_ptr(pkt->pkt_payload))
if(free_data)
av_free(packet.data);

break;
Expand Down Expand Up @@ -461,7 +461,6 @@ lav_muxer_add_marker(muxer_t* m)
static int
lav_muxer_close(muxer_t *m)
{
int i;
int ret = 0;
lav_muxer_t *lm = (lav_muxer_t*)m;

Expand All @@ -471,15 +470,6 @@ lav_muxer_close(muxer_t *m)
lm->m_errors++;
ret = -1;
}

if(lm->lm_h264_filter)
av_bitstream_filter_close(lm->lm_h264_filter);

for(i=0; i<lm->lm_oc->nb_streams; i++)
av_freep(&lm->lm_oc->streams[i]->codec->extradata);

lm->lm_oc->nb_streams = 0;

return ret;
}

Expand All @@ -490,13 +480,24 @@ lav_muxer_close(muxer_t *m)
static void
lav_muxer_destroy(muxer_t *m)
{
int i;
lav_muxer_t *lm = (lav_muxer_t*)m;

if(lm->lm_oc && lm->lm_oc->pb)
av_free(lm->lm_oc->pb);
if(lm->lm_h264_filter)
av_bitstream_filter_close(lm->lm_h264_filter);

if(lm->lm_oc)
av_free(lm->lm_oc);
for(i=0; i<lm->lm_oc->nb_streams; i++)
av_freep(&lm->lm_oc->streams[i]->codec->extradata);

if(lm->lm_oc && lm->lm_oc->pb) {
av_freep(&lm->lm_oc->pb->buffer);
av_freep(&lm->lm_oc->pb);
}

if(lm->lm_oc) {
avformat_free_context(lm->lm_oc);
lm->lm_oc = NULL;
}

free(lm);
}
Expand Down Expand Up @@ -553,4 +554,3 @@ lav_muxer_create(const muxer_config_t *m_cfg)

return (muxer_t*)lm;
}

0 comments on commit bd6e5ed

Please sign in to comment.