From 33449e80f58892c0cea3c82954c4c1d95b0f7423 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 21 Oct 2014 14:54:57 +0200 Subject: [PATCH] muxer libav: fix another memory leaks caused by wrong ffmpeg code --- src/muxer/muxer_libav.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/muxer/muxer_libav.c b/src/muxer/muxer_libav.c index c4eb554d..8868a958 100644 --- a/src/muxer/muxer_libav.c +++ b/src/muxer/muxer_libav.c @@ -49,11 +49,15 @@ lav_muxer_write(void *opaque, uint8_t *buf, int buf_size) { int r; lav_muxer_t *lm = (lav_muxer_t*)opaque; - + r = write(lm->lm_fd, buf, buf_size); - lm->m_errors += (r != buf_size); + if (r != buf_size) + lm->m_errors++; - return r; + /* No room to notify about errors here. */ + /* We need to complete av_write_trailer() to free */ + /* all associated structures. */ + return buf_size; } @@ -388,6 +392,9 @@ lav_muxer_write_pkt(muxer_t *m, streaming_message_type_t smt, void *data) av_init_packet(&packet); if(lm->lm_h264_filter && st->codec->codec_id == AV_CODEC_ID_H264) { + free_data = 1; + packet.data = NULL; + packet.size = 0; if(av_bitstream_filter_filter(lm->lm_h264_filter, st->codec, NULL, @@ -399,7 +406,6 @@ 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;