summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-06-20 14:16:59 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-06-20 14:16:59 +0000
commita3e5eab301b877ca7aaaeeb70e5fd7454f20d0bd (patch)
tree4aae295a1a91773b3ad62b546e29eb22aee7f1e1 /libmpdemux
parentef1e11d2cbc8eb0f6d9059cd688197f3660cf9fe (diff)
downloadmpv-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.c24
-rw-r--r--libmpdemux/demuxer.c3
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++)