summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_avs.c
diff options
context:
space:
mode:
authorfaust3 <faust3@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-06-02 16:49:29 +0000
committerfaust3 <faust3@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-06-02 16:49:29 +0000
commit72ea92819489fae06e73b2cd2196440c90a91470 (patch)
tree0417c39182a474f266edc3ffbd77b2b8369385dd /libmpdemux/demux_avs.c
parentb39fbf374ddaba9959ec6a5ea7a9a16f495cb594 (diff)
downloadmpv-72ea92819489fae06e73b2cd2196440c90a91470.tar.bz2
mpv-72ea92819489fae06e73b2cd2196440c90a91470.tar.xz
memory leak fixes, patch by Gianluigi Tiesi <mplayer at netfarm.it>
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@15614 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/demux_avs.c')
-rw-r--r--libmpdemux/demux_avs.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/libmpdemux/demux_avs.c b/libmpdemux/demux_avs.c
index d9b7eb6bd7..f701499a16 100644
--- a/libmpdemux/demux_avs.c
+++ b/libmpdemux/demux_avs.c
@@ -67,6 +67,9 @@ typedef struct tagAVS
AVS_Value handler;
AVS_Clip *clip;
const AVS_VideoInfo *video_info;
+#ifdef WIN32_LOADER
+ ldt_fs_t* ldt_fs;
+#endif
HMODULE dll;
int frameno;
int init;
@@ -91,14 +94,14 @@ AVS_T *initAVS(const char *filename)
memset(AVS, 0, sizeof(AVS_T));
#ifdef WIN32_LOADER
- Setup_LDT_Keeper();
+ AVS->ldt_fs = Setup_LDT_Keeper();
#endif
AVS->dll = LoadLibraryA("avisynth.dll");
if(!AVS->dll)
{
mp_msg(MSGT_DEMUX ,MSGL_V, "AVS: failed to load avisynth.dll\n");
- return NULL;
+ goto avs_err;
}
/* Dynamic import of needed stuff from avisynth.dll */
@@ -116,7 +119,7 @@ AVS_T *initAVS(const char *filename)
if (!AVS->avs_env)
{
mp_msg(MSGT_DEMUX, MSGL_V, "AVS: avs_create_script_environment failed\n");
- return NULL;
+ goto avs_err;
}
@@ -125,16 +128,24 @@ AVS_T *initAVS(const char *filename)
if (avs_is_error(AVS->handler))
{
mp_msg(MSGT_DEMUX, MSGL_V, "AVS: Avisynth error: %s\n", avs_as_string(AVS->handler));
- return NULL;
+ goto avs_err;
}
if (!avs_is_clip(AVS->handler))
{
mp_msg(MSGT_DEMUX, MSGL_V, "AVS: Avisynth doesn't return a clip\n");
- return NULL;
+ goto avs_err;
}
return AVS;
+
+avs_err:
+ if (AVS->dll) FreeLibrary(AVS->dll);
+#ifdef WIN32_LOADER
+ Restore_LDT_Keeper(AVS->ldt_fs);
+#endif
+ free(AVS);
+ return NULL;
}
/* Implement RGB MODES ?? */
@@ -354,6 +365,9 @@ void demux_close_avs(demuxer_t* demuxer)
mp_msg(MSGT_DEMUX, MSGL_V, "AVS: Unloading avisynth.dll\n");
FreeLibrary(AVS->dll);
}
+#ifdef WIN32_LOADER
+ Restore_LDT_Keeper(AVS->ldt_fs);
+#endif
free(AVS);
}
}