diff options
author | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2005-06-20 14:16:59 +0000 |
---|---|---|
committer | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2005-06-20 14:16:59 +0000 |
commit | a3e5eab301b877ca7aaaeeb70e5fd7454f20d0bd (patch) | |
tree | 4aae295a1a91773b3ad62b546e29eb22aee7f1e1 /libmpdemux | |
parent | ef1e11d2cbc8eb0f6d9059cd688197f3660cf9fe (diff) | |
download | mpv-a3e5eab301b877ca7aaaeeb70e5fd7454f20d0bd.tar.bz2 mpv-a3e5eab301b877ca7aaaeeb70e5fd7454f20d0bd.tar.xz |
fix memleak when playing mov files
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@15781 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux')
-rw-r--r-- | libmpdemux/demux_mov.c | 24 | ||||
-rw-r--r-- | libmpdemux/demuxer.c | 3 |
2 files changed, 27 insertions, 0 deletions
diff --git a/libmpdemux/demux_mov.c b/libmpdemux/demux_mov.c index e1ce553bd1..43f3f0b61c 100644 --- a/libmpdemux/demux_mov.c +++ b/libmpdemux/demux_mov.c @@ -500,6 +500,30 @@ skip_chunk: return 0; } +void demux_close_mov(demuxer_t *demuxer) { + mov_priv_t* priv = demuxer->priv; + int i; + if (!priv) + return; + for (i = 0; i < MOV_MAX_TRACKS; i++) { + mov_track_t *track = priv->tracks[i]; + if (track) { + free(track->tkdata); + free(track->stdata); + free(track->stream_header); + free(track->samples); + free(track->chunks); + free(track->chunkmap); + free(track->durmap); + free(track->keyframes); + free(track->editlist); + free(track->desc); + free(track); + } + } + free(priv); +} + static void lschunks(demuxer_t* demuxer,int level,off_t endpos,mov_track_t* trak){ mov_priv_t* priv=demuxer->priv; // printf("lschunks (level=%d,endpos=%x)\n", level, endpos); diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c index 9df04214d5..7007949e90 100644 --- a/libmpdemux/demuxer.c +++ b/libmpdemux/demuxer.c @@ -161,6 +161,7 @@ extern void demux_close_aac(demuxer_t* demuxer); #ifdef USE_WIN32DLL extern void demux_close_avs(demuxer_t* demuxer); #endif +extern void demux_close_mov(demuxer_t* demuxer); #ifdef USE_TV @@ -258,6 +259,8 @@ void free_demuxer(demuxer_t *demuxer){ case DEMUXER_TYPE_AVS: demux_close_avs(demuxer); break; #endif + case DEMUXER_TYPE_MOV: + demux_close_mov(demuxer); break; } // free streams: for(i = 0; i < MAX_A_STREAMS; i++) |