[Mplayerxp-cvslog] SF.net SVN: mplayerxp:[496] mplayerxp
Brought to you by:
olov
From: <nic...@us...> - 2012-12-01 17:06:25
|
Revision: 496 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=496&view=rev Author: nickols_k Date: 2012-12-01 17:06:18 +0000 (Sat, 01 Dec 2012) Log Message: ----------- memory leaks--: new class LocalPtr ananlogue of auto deleter like auto_ptr Modified Paths: -------------- mplayerxp/libvo/video_out.cpp mplayerxp/mplayerxp.cpp mplayerxp/mplayerxp.h mplayerxp/osdep/mplib.h mplayerxp/postproc/libmenu/menu.cpp mplayerxp/xmpcore/xmp_adecoder.cpp mplayerxp/xmpcore/xmp_aplayer.cpp mplayerxp/xmpcore/xmp_vdecoder.cpp Modified: mplayerxp/libvo/video_out.cpp =================================================================== --- mplayerxp/libvo/video_out.cpp 2012-12-01 15:51:26 UTC (rev 495) +++ mplayerxp/libvo/video_out.cpp 2012-12-01 17:06:18 UTC (rev 496) @@ -120,7 +120,7 @@ dri_priv_t dri; const vo_info_t* video_out; class VO_Interface* vo_iface; - const OSD_Render* draw_alpha; + const OSD_Render* draw_alpha; }; vo_priv_t::vo_priv_t() { Modified: mplayerxp/mplayerxp.cpp =================================================================== --- mplayerxp/mplayerxp.cpp 2012-12-01 15:51:26 UTC (rev 495) +++ mplayerxp/mplayerxp.cpp 2012-12-01 17:06:18 UTC (rev 496) @@ -237,8 +237,8 @@ MPXPContext::MPXPContext() :MPXPSys(*new(zeromem)MPXPSystem), - audio(*new(zeromem) audio_processing_t), - video(*new(zeromem) video_processing_t) + _audio(new(zeromem) audio_processing_t), + _video(new(zeromem) video_processing_t) { seek_time=-1; bench=new(zeromem) time_usage_t; @@ -246,10 +246,14 @@ rtc_fd=-1; } -MPXPContext::~MPXPContext() { delete bench; } +MPXPContext::~MPXPContext() +{ + delete &MPXPSys; + delete bench; +} static volatile char antiviral_hole2[__VM_PAGE_SIZE__] __PAGE_ALIGNED__; -static MPXPContext* MPXPCtx(new(zeromem) MPXPContext); +static LocalPtr<MPXPContext> MPXPCtx(new(zeromem) MPXPContext); xp_core_t* xp_core=NULL; static volatile char antiviral_hole3[__VM_PAGE_SIZE__] __PAGE_ALIGNED__; volatile MPXPSecureKeys* secure_keys; @@ -370,7 +374,7 @@ if(mask&INITED_VCODEC){ inited_flags&=~INITED_VCODEC; MP_UNIT("uninit_vcodec"); - mpcv_uninit(mpxp_context().video.decoder); + mpcv_uninit(mpxp_context().video().decoder); sh_video=NULL; } @@ -384,7 +388,7 @@ if(mask&INITED_ACODEC){ inited_flags&=~INITED_ACODEC; MP_UNIT("uninit_acodec"); - mpca_uninit(mpxp_context().audio.decoder); + mpca_uninit(mpxp_context().audio().decoder); sh_audio=NULL; } @@ -732,14 +736,14 @@ if(sh_video){ MP_UNIT("seek_video_reset"); - mpcv_resync_stream(mpxp_context().video.decoder); + mpcv_resync_stream(mpxp_context().video().decoder); vo_data->reset(); sh_video->chapter_change=-1; } if(sh_audio){ MP_UNIT("seek_audio_reset"); - mpca_resync_stream(mpxp_context().audio.decoder); + mpca_resync_stream(mpxp_context().audio().decoder); ao_reset(ao_data); // stop audio, throwing away buffered data } @@ -786,7 +790,7 @@ void mpxp_resync_audio_stream(void) { - mpca_resync_stream(mpxp_context().audio.decoder); + mpca_resync_stream(mpxp_context().audio().decoder); } static void __FASTCALL__ mpxp_stream_event_handler(stream_t *s,const stream_packet_t *sp) @@ -1129,7 +1133,7 @@ Demuxer_Stream *d_audio=_demuxer->audio; sh_audio->codec=NULL; mpca=mpca_init(sh_audio); // try auto-probe first - if(mpca) { mpxp_context().audio.decoder=mpca; found=1; } + if(mpca) { mpxp_context().audio().decoder=mpca; found=1; } #ifdef ENABLE_WIN32LOADER if(!found) { // Go through the codec.conf and find the best codec... @@ -1197,7 +1201,7 @@ if(vo_conf.softzoom) vo_data->ZOOM_SET(); if(vo_conf.flip>0) vo_data->FLIP_SET(); if(vo_conf.vidmode) vo_data->VM_SET(); - if((mpxp_context().video.decoder=mpcv_init(sh_video,mp_conf.video_codec,mp_conf.video_family,-1,_libinput))) sh_video->inited=1; + if((mpxp_context().video().decoder=mpcv_init(sh_video,mp_conf.video_codec,mp_conf.video_family,-1,_libinput))) sh_video->inited=1; #ifdef ENABLE_WIN32LOADER if(!sh_video->inited) { /* Go through the codec.conf and find the best codec...*/ @@ -1524,7 +1528,7 @@ else v_cont+=v; if(v_cont > 100) v_cont=100; if(v_cont < -100) v_cont = -100; - if(mpcv_set_colors(mpxp_context().video.decoder,VO_EC_CONTRAST,v_cont)==MPXP_Ok) { + if(mpcv_set_colors(mpxp_context().video().decoder,VO_EC_CONTRAST,v_cont)==MPXP_Ok) { #ifdef USE_OSD if(mp_conf.osd_level){ osd->visible=sh_video->fps; // 1 sec @@ -1542,7 +1546,7 @@ else v_bright+=v; if(v_bright > 100) v_bright = 100; if(v_bright < -100) v_bright = -100; - if(mpcv_set_colors(mpxp_context().video.decoder,VO_EC_BRIGHTNESS,v_bright)==MPXP_Ok) { + if(mpcv_set_colors(mpxp_context().video().decoder,VO_EC_BRIGHTNESS,v_bright)==MPXP_Ok) { #ifdef USE_OSD if(mp_conf.osd_level){ osd->visible=sh_video->fps; // 1 sec @@ -1560,7 +1564,7 @@ else v_hue+=v; if(v_hue > 100) v_hue = 100; if(v_hue < -100) v_hue = -100; - if(mpcv_set_colors(mpxp_context().video.decoder,VO_EC_HUE,v_hue)==MPXP_Ok) { + if(mpcv_set_colors(mpxp_context().video().decoder,VO_EC_HUE,v_hue)==MPXP_Ok) { #ifdef USE_OSD if(mp_conf.osd_level){ osd->visible=sh_video->fps; // 1 sec @@ -1578,7 +1582,7 @@ else v_saturation+=v; if(v_saturation > 100) v_saturation = 100; if(v_saturation < -100) v_saturation = -100; - if(mpcv_set_colors(mpxp_context().video.decoder,VO_EC_SATURATION,v_saturation)==MPXP_Ok) { + if(mpcv_set_colors(mpxp_context().video().decoder,VO_EC_SATURATION,v_saturation)==MPXP_Ok) { #ifdef USE_OSD if(mp_conf.osd_level){ osd->visible=sh_video->fps; // 1 sec @@ -1889,8 +1893,8 @@ /* is it non duplicate block fro find_acodec() ??? */ if(sh_audio){ MSG_V("Initializing audio codec...\n"); - if(!mpxp_context().audio.decoder) { - if((mpxp_context().audio.decoder=mpca_init(sh_audio))==NULL){ + if(!mpxp_context().audio().decoder) { + if((mpxp_context().audio().decoder=mpca_init(sh_audio))==NULL){ MSG_ERR(MSGTR_CouldntInitAudioCodec); d_audio->sh=NULL; sh_audio=reinterpret_cast<sh_audio_t*>(d_audio->sh); @@ -1930,12 +1934,12 @@ /* Auto quality option enabled*/ MPXP_Rc rc; unsigned quality; - rc=mpcv_get_quality_max(mpxp_context().video.decoder,&quality); + rc=mpcv_get_quality_max(mpxp_context().video().decoder,&quality); if(rc==MPXP_Ok) mpxp_context().output_quality=quality; if(mp_conf.autoq>mpxp_context().output_quality) mp_conf.autoq=mpxp_context().output_quality; else mpxp_context().output_quality=mp_conf.autoq; MSG_V("AutoQ: setting quality to %d\n",mpxp_context().output_quality); - mpcv_set_quality(mpxp_context().video.decoder,mpxp_context().output_quality); + mpcv_set_quality(mpxp_context().video().decoder,mpxp_context().output_quality); } vf_showlist(reinterpret_cast<vf_instance_t*>(sh_video->vfilter)); Modified: mplayerxp/mplayerxp.h =================================================================== --- mplayerxp/mplayerxp.h 2012-12-01 15:51:26 UTC (rev 495) +++ mplayerxp/mplayerxp.h 2012-12-01 17:06:18 UTC (rev 496) @@ -132,22 +132,27 @@ struct MPXPSystem; /* non-configurable through command line stuff */ struct MPXPContext :public Opaque { - MPXPContext(); - virtual ~MPXPContext(); + public: + MPXPContext(); + virtual ~MPXPContext(); - int rtc_fd; - int seek_time; - int output_quality; - unsigned mpxp_after_seek; - int use_pts_fix2; - unsigned mplayer_accel; - subtitle* subtitles; - m_config_t* mconfig; - time_usage_t* bench; - MPXPSystem& MPXPSys; - any_t* msg_priv; - audio_processing_t& audio; - video_processing_t& video; + audio_processing_t& audio() const { return *_audio; } + video_processing_t& video() const { return *_video; } + + int rtc_fd; + int seek_time; + int output_quality; + unsigned mpxp_after_seek; + int use_pts_fix2; + unsigned mplayer_accel; + subtitle* subtitles; + m_config_t* mconfig; + time_usage_t* bench; + MPXPSystem& MPXPSys; + any_t* msg_priv; + private: + LocalPtr<audio_processing_t> _audio; + LocalPtr<video_processing_t> _video; }; MPXPContext& mpxp_context(); Modified: mplayerxp/osdep/mplib.h =================================================================== --- mplayerxp/osdep/mplib.h 2012-12-01 15:51:26 UTC (rev 495) +++ mplayerxp/osdep/mplib.h 2012-12-01 17:06:18 UTC (rev 496) @@ -73,6 +73,20 @@ any_t* __FASTCALL__ rnd_fill(any_t* buffer,size_t size); any_t* get_caller_address(unsigned num_caller=0); + template <typename T> class LocalPtr { + public: + LocalPtr(T* value):ptr(value) {} + virtual ~LocalPtr() { delete ptr; } + + T& operator*() const { return *ptr; } + T* operator->() const { return ptr; } + private: + LocalPtr<T>& operator=(LocalPtr<T> a) { return this; } + LocalPtr<T>& operator=(LocalPtr<T>& a) { return this; } + LocalPtr<T>& operator=(LocalPtr<T>* a) { return this; } + T* ptr; + }; + class Opaque { public: Opaque() {} Modified: mplayerxp/postproc/libmenu/menu.cpp =================================================================== --- mplayerxp/postproc/libmenu/menu.cpp 2012-12-01 15:51:26 UTC (rev 495) +++ mplayerxp/postproc/libmenu/menu.cpp 2012-12-01 17:06:18 UTC (rev 496) @@ -333,7 +333,7 @@ #endif void menu_draw_text(mp_image_t* mpi,const char* txt, int x, int y) { - const OSD_Render& draw_alpha = *new(zeromem) OSD_Render(mpi->imgfmt); + const LocalPtr<OSD_Render> draw_alpha(new(zeromem) OSD_Render(mpi->imgfmt)); int font; int finalize=vo_data->is_final(); @@ -345,7 +345,7 @@ while (*txt) { int c=utf8_get_char((const char**)&txt); if ((font=vo_data->font->font[c])>=0 && (x + vo_data->font->width[c] <= mpi->w) && (y + vo_data->font->pic_a[font]->h <= mpi->h)) - draw_alpha.render(vo_data->font->width[c], vo_data->font->pic_a[font]->h, + draw_alpha->render(vo_data->font->width[c], vo_data->font->pic_a[font]->h, vo_data->font->pic_b[font]->bmp+vo_data->font->start[c], vo_data->font->pic_a[font]->bmp+vo_data->font->start[c], vo_data->font->pic_a[font]->w, @@ -365,7 +365,7 @@ int ll = 0; int font; int finalize=vo_data->is_final(); - const OSD_Render& draw_alpha = *new(zeromem) OSD_Render(mpi->imgfmt); + const LocalPtr<OSD_Render> draw_alpha(new(zeromem) OSD_Render(mpi->imgfmt)); #ifdef USE_FRIBIDI txt = menu_fribidi(txt); @@ -511,7 +511,7 @@ if(font >= 0) { int cs = (vo_data->font->pic_a[font]->h - vo_data->font->height) / 2; if ((sx + vo_data->font->width[c] < xmax) && (sy + vo_data->font->height < ymax) ) - draw_alpha.render(vo_data->font->width[c], vo_data->font->height, + draw_alpha->render(vo_data->font->width[c], vo_data->font->height, vo_data->font->pic_b[font]->bmp+vo_data->font->start[c] + cs * vo_data->font->pic_a[font]->w, vo_data->font->pic_a[font]->bmp+vo_data->font->start[c] + @@ -596,7 +596,7 @@ void menu_draw_box(const mp_image_t* mpi,unsigned char grey,unsigned char alpha, int x, int y, int w, int h) { - const OSD_Render& draw_alpha = *new(zeromem) OSD_Render(mpi->imgfmt); + const LocalPtr<OSD_Render> draw_alpha(new(zeromem) OSD_Render(mpi->imgfmt)); int g; if(x > mpi->w || y > mpi->h) return; @@ -615,7 +615,7 @@ unsigned char pic[stride*h],pic_alpha[stride*h]; memset(pic,g,stride*h); memset(pic_alpha,alpha,stride*h); - draw_alpha.render(w,h,pic,pic_alpha,stride, + draw_alpha->render(w,h,pic,pic_alpha,stride, mpi->planes[0] + y * mpi->stride[0] + x * (mpi->bpp>>3), mpi->stride[0],finalize); } Modified: mplayerxp/xmpcore/xmp_adecoder.cpp =================================================================== --- mplayerxp/xmpcore/xmp_adecoder.cpp 2012-12-01 15:51:26 UTC (rev 495) +++ mplayerxp/xmpcore/xmp_adecoder.cpp 2012-12-01 17:06:18 UTC (rev 496) @@ -276,7 +276,7 @@ for( l = 0, l2 = len, ret = 0; l < len && l2 >= audio_buffer.sh_audio->audio_out_minsize; ) { float pts; - ret = mpca_decode(mpxp_context().audio.decoder, &audio_buffer.buffer[audio_buffer.head], audio_buffer.min_len, l2,blen,&pts); + ret = mpca_decode(mpxp_context().audio().decoder, &audio_buffer.buffer[audio_buffer.head], audio_buffer.min_len, l2,blen,&pts); if( ret <= 0 ) break; Modified: mplayerxp/xmpcore/xmp_aplayer.cpp =================================================================== --- mplayerxp/xmpcore/xmp_aplayer.cpp 2012-12-01 15:51:26 UTC (rev 495) +++ mplayerxp/xmpcore/xmp_aplayer.cpp 2012-12-01 17:06:18 UTC (rev 496) @@ -65,7 +65,7 @@ ret=read_audio_buffer(sh_audio,(unsigned char *)&sh_audio->a_buffer[sh_audio->a_buffer_len], playsize-sh_audio->a_buffer_len,sh_audio->a_buffer_size-sh_audio->a_buffer_len,&pts); } else { - ret=mpca_decode(mpxp_context().audio.decoder,(unsigned char *)&sh_audio->a_buffer[sh_audio->a_buffer_len], + ret=mpca_decode(mpxp_context().audio().decoder,(unsigned char *)&sh_audio->a_buffer[sh_audio->a_buffer_len], playsize-sh_audio->a_buffer_len,sh_audio->a_buffer_size-sh_audio->a_buffer_len,sh_audio->a_buffer_size-sh_audio->a_buffer_len,&pts); } if(ret>0) sh_audio->a_buffer_len+=ret; Modified: mplayerxp/xmpcore/xmp_vdecoder.cpp =================================================================== --- mplayerxp/xmpcore/xmp_vdecoder.cpp 2012-12-01 15:51:26 UTC (rev 495) +++ mplayerxp/xmpcore/xmp_vdecoder.cpp 2012-12-01 17:06:18 UTC (rev 496) @@ -214,15 +214,15 @@ unsigned distance = dae_get_decoder_outrun(xp_core->video); int our_quality; our_quality = mpxp_context().output_quality*distance/total; - if(drop_param) mpcv_set_quality(mpxp_context().video.decoder,0); + if(drop_param) mpcv_set_quality(mpxp_context().video().decoder,0); else - if(mp_conf.autoq) mpcv_set_quality(mpxp_context().video.decoder,our_quality>0?our_quality:0); + if(mp_conf.autoq) mpcv_set_quality(mpxp_context().video().decoder,our_quality>0?our_quality:0); } frame->flags=drop_param; - blit_frame=mpcv_decode(mpxp_context().video.decoder,frame); + blit_frame=mpcv_decode(mpxp_context().video().decoder,frame); MSG_DBG2("DECODER: %i[%i] %f\n",dae_curr_vdecoded(xp_core),frame->len,frame->pts); if(mpxp_context().output_quality) { - if(drop_param) mpcv_set_quality(mpxp_context().video.decoder,mpxp_context().output_quality); + if(drop_param) mpcv_set_quality(mpxp_context().video().decoder,mpxp_context().output_quality); } if(!blit_frame && drop_param) priv->dae->num_dropped_frames++; if(blit_frame) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |