# HG changeset patch # User arpi # Date 1019341459 0 # Node ID de47aebf654ce04584568a1e70af841d96577888 # Parent 0ddd0a5d8907063f75569c75a4c6b94d5aa9621a filters uninit diff -r 0ddd0a5d8907 -r de47aebf654c libmpcodecs/dec_video.c --- a/libmpcodecs/dec_video.c Sat Apr 20 21:06:09 2002 +0000 +++ b/libmpcodecs/dec_video.c Sat Apr 20 22:24:19 2002 +0000 @@ -131,6 +131,7 @@ if(!sh_video->inited) return; mp_msg(MSGT_DECVIDEO,MSGL_V,"uninit video: %d \n",sh_video->codec->driver); mpvdec->uninit(sh_video); + vf_uninit_filter_chain(sh_video->vfilter); sh_video->inited=0; } diff -r 0ddd0a5d8907 -r de47aebf654c libmpcodecs/mp_image.h --- a/libmpcodecs/mp_image.h Sat Apr 20 21:06:09 2002 +0000 +++ b/libmpcodecs/mp_image.h Sat Apr 20 22:24:19 2002 +0000 @@ -97,4 +97,12 @@ return mpi; } +static inline void free_mp_image(mp_image_t* mpi){ + if(!mpi) return; + if(mpi->flags&MP_IMGFLAG_ALLOCATED){ + if(mpi->planes[0]) free(mpi->planes[0]); + } + free(mpi); +} + #endif diff -r 0ddd0a5d8907 -r de47aebf654c libmpcodecs/vf.c --- a/libmpcodecs/vf.c Sat Apr 20 21:06:09 2002 +0000 +++ b/libmpcodecs/vf.c Sat Apr 20 22:24:19 2002 +0000 @@ -299,3 +299,19 @@ //============================================================================ +void vf_uninit_filter(vf_instance_t* vf){ + if(vf->uninit) vf->uninit(vf); + free_mp_image(vf->imgctx.static_images[0]); + free_mp_image(vf->imgctx.static_images[1]); + free_mp_image(vf->imgctx.temp_images[0]); + free_mp_image(vf->imgctx.export_images[0]); + free(vf); +} + +void vf_uninit_filter_chain(vf_instance_t* vf){ + while(vf){ + vf_instance_t* next=vf->next; + vf_uninit_filter(vf); + vf=next; + } +} diff -r 0ddd0a5d8907 -r de47aebf654c libmpcodecs/vf.h --- a/libmpcodecs/vf.h Sat Apr 20 21:06:09 2002 +0000 +++ b/libmpcodecs/vf.h Sat Apr 20 22:24:19 2002 +0000 @@ -74,3 +74,6 @@ vf_instance_t* append_filters(vf_instance_t* last); +void vf_uninit_filter(vf_instance_t* vf); +void vf_uninit_filter_chain(vf_instance_t* vf); +