[Mplayerxp-cvslog] SF.net SVN: mplayerxp:[179] mplayerxp
Brought to you by:
olov
From: <nic...@us...> - 2012-10-20 07:53:43
|
Revision: 179 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=179&view=rev Author: nickols_k Date: 2012-10-20 07:53:37 +0000 (Sat, 20 Oct 2012) Log Message: ----------- mplayerxp needs only one demuxer per all threads Modified Paths: -------------- mplayerxp/dec_ahead.c mplayerxp/dec_ahead.h mplayerxp/libmpdemux/demuxer_r.c mplayerxp/libmpdemux/demuxer_r.h mplayerxp/mplayer.c Modified: mplayerxp/dec_ahead.c =================================================================== --- mplayerxp/dec_ahead.c 2012-10-20 07:45:14 UTC (rev 178) +++ mplayerxp/dec_ahead.c 2012-10-20 07:53:37 UTC (rev 179) @@ -37,18 +37,12 @@ xp_core_t xp_core; void xp_core_init(void) { - pthread_mutexattr_t attr; memset(&xp_core,0,sizeof(xp_core_t)); xp_core.in_lseek=NoSeek; - pthread_mutexattr_init(&attr); - pthread_mutex_init(&xp_core.seek_mutex, &attr); } void xp_core_uninit(void) {} -void xp_core_lock_seeking(void) { pthread_mutex_lock(&xp_core.seek_mutex); } -void xp_core_unlock_seeking(void) { pthread_mutex_unlock(&xp_core.seek_mutex); } - void dae_reset(dec_ahead_engine_t* it) { it->player_idx=0; it->decoder_idx=0; @@ -318,7 +312,6 @@ sh_video->num_frames_decoded = dec_ahead_seek_num_frames_decoded; } /* get it! */ - xp_core_lock_seeking(); #if 0 /* prevent reent access to non-reent demuxer */ //if(sh_video->num_frames>200) *((char*)0x100) = 1; // Testing crash @@ -330,7 +323,6 @@ #endif /*-------------------- Decode a frame: -----------------------*/ in_size=video_read_frame_r(sh_video,&duration,&v_pts,&start,vo.fps); - xp_core_unlock_seeking(); if(xp_core.in_lseek==Seek) { pinfo[_xp_id].current_module = "Post seek"; /* reset counters */ @@ -947,8 +939,6 @@ Unlock all mutex ( man page says it may deadlock, but what is worse deadlock here or later? ) */ - xp_core_unlock_seeking(); - pthread_is_living=0; xp_core.in_lseek=NoSeek; killall_threads(pthread_self()); Modified: mplayerxp/dec_ahead.h =================================================================== --- mplayerxp/dec_ahead.h 2012-10-20 07:45:14 UTC (rev 178) +++ mplayerxp/dec_ahead.h 2012-10-20 07:53:37 UTC (rev 179) @@ -48,7 +48,6 @@ int has_video; int has_audio; dec_ahead_engine_t* video; - pthread_mutex_t seek_mutex; volatile enum seek_states in_lseek; volatile int in_pause; volatile int in_resize; @@ -58,9 +57,6 @@ extern void xp_core_init(void); extern void xp_core_uninit(void); -extern void xp_core_lock_seeking(void); -extern void xp_core_unlock_seeking(void); - extern void dae_init(dec_ahead_engine_t* it,unsigned nframes); extern void dae_uninit(dec_ahead_engine_t* it); extern void dae_reset(dec_ahead_engine_t* it); /* after mpxp_seek */ Modified: mplayerxp/libmpdemux/demuxer_r.c =================================================================== --- mplayerxp/libmpdemux/demuxer_r.c 2012-10-20 07:45:14 UTC (rev 178) +++ mplayerxp/libmpdemux/demuxer_r.c 2012-10-20 07:53:37 UTC (rev 179) @@ -7,6 +7,7 @@ #include "demuxer.h" #include "stheader.h" #include "demuxer_r.h" +#include "vobsub.h" #include "../osdep/timer.h" #include "../mplayer.h" #include "../dec_ahead.h" @@ -155,7 +156,7 @@ unsigned int t=0; unsigned int t2=0; double tt; -// LOCK_DEMUXER(); + LOCK_DEMUXER(); if(benchmark) t=GetTimer(); retval = demux_seek(demuxer,seeka); if(benchmark) @@ -166,10 +167,16 @@ if(tt > max_demux_time_usage) max_demux_time_usage=tt; if(tt < min_demux_time_usage) min_demux_time_usage=tt; } -// UNLOCK_DEMUXER(); + UNLOCK_DEMUXER(); return retval; } +void vobsub_seek_r(any_t* vobhandle, float pts) { + LOCK_DEMUXER(); + vobsub_seek(vobhandle,pts); + UNLOCK_DEMUXER(); +} + int demuxer_switch_audio_r(demuxer_t *d, int id) { int retval; Modified: mplayerxp/libmpdemux/demuxer_r.h =================================================================== --- mplayerxp/libmpdemux/demuxer_r.h 2012-10-20 07:45:14 UTC (rev 178) +++ mplayerxp/libmpdemux/demuxer_r.h 2012-10-20 07:53:37 UTC (rev 179) @@ -19,6 +19,7 @@ extern int ds_get_packet_r(demux_stream_t *ds,unsigned char **start,float *pts); extern int demux_seek_r(demuxer_t *demuxer,const seek_args_t* seeka); +extern void vobsub_seek_r(any_t* vobhandle, float pts); extern int demuxer_switch_audio_r(demuxer_t *, int id); extern int demuxer_switch_video_r(demuxer_t *, int id); Modified: mplayerxp/mplayer.c =================================================================== --- mplayerxp/mplayer.c 2012-10-20 07:45:14 UTC (rev 178) +++ mplayerxp/mplayer.c 2012-10-20 07:53:37 UTC (rev 179) @@ -1452,7 +1452,6 @@ void mpxp_seek( int _xp_id, video_stat_t *vstat, osd_args_t *osd,float v_pts,const seek_args_t* seek) { int seek_rval=1; - xp_core_lock_seeking(); xp_core.in_lseek=Seek; audio_eof=0; if(seek->secs || seek->flags&DEMUX_SEEK_SET) { @@ -1501,7 +1500,7 @@ if (vo.vobsub) { pinfo[_xp_id].current_module = "seek_vobsub_reset"; - vobsub_seek(vo.vobsub, v_pts); + vobsub_seek_r(vo.vobsub, v_pts); } #ifdef USE_OSD @@ -1533,7 +1532,6 @@ } } } - xp_core_unlock_seeking(); } void mpxp_reset_vcache(void) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |