[Mplayerxp-cvslog] SF.net SVN: mplayerxp:[256] mplayerxp
Brought to you by:
olov
From: <nic...@us...> - 2012-10-30 07:35:35
|
Revision: 256 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=256&view=rev Author: nickols_k Date: 2012-10-30 07:35:22 +0000 (Tue, 30 Oct 2012) Log Message: ----------- combine some variables into structures Modified Paths: -------------- mplayerxp/libmpcodecs/dec_audio.c mplayerxp/libmpdemux/demuxer_r.c mplayerxp/mp_msg.c mplayerxp/mplayer.c mplayerxp/mplayer.h mplayerxp/osdep/mp_malloc.c mplayerxp/osdep/mplib.h mplayerxp/xmp_core.c mplayerxp/xmp_core.h Modified: mplayerxp/libmpcodecs/dec_audio.c =================================================================== --- mplayerxp/libmpcodecs/dec_audio.c 2012-10-29 17:30:41 UTC (rev 255) +++ mplayerxp/libmpcodecs/dec_audio.c 2012-10-30 07:35:22 UTC (rev 256) @@ -6,6 +6,7 @@ #include "help_mp.h" #include "mplayer.h" +#include "xmp_core.h" #include "libmpdemux/stream.h" #include "libmpdemux/demuxer.h" @@ -121,10 +122,10 @@ } } else - if(initial_audio_pts_corr.need_correction==1) + if(xp_core.initial_apts_corr.need_correction==1) { - initial_audio_pts += ((float)(initial_audio_pts_corr.pts_bytes-initial_audio_pts_corr.nbytes))/(float)sh_audio->i_bps; - initial_audio_pts_corr.need_correction=0; + xp_core.initial_apts += ((float)(xp_core.initial_apts_corr.pts_bytes-xp_core.initial_apts_corr.nbytes))/(float)sh_audio->i_bps; + xp_core.initial_apts_corr.need_correction=0; } MSG_OK("[AC] %s decoder: [%s] drv:%s.%s ratio %i->%i\n",mp_conf.audio_codec?"Forcing":"Selecting" ,sh_audio->codec->codec_name Modified: mplayerxp/libmpdemux/demuxer_r.c =================================================================== --- mplayerxp/libmpdemux/demuxer_r.c 2012-10-29 17:30:41 UTC (rev 255) +++ mplayerxp/libmpdemux/demuxer_r.c 2012-10-30 07:35:22 UTC (rev 256) @@ -21,7 +21,7 @@ { float retval; demuxer_t*demuxer=ds->demuxer; - initial_audio_pts_corr.need_correction=0; + xp_core.initial_apts_corr.need_correction=0; MSG_DBG2("initial_apts from: stream_pts=%f pts_bytes=%u got_bytes=%u i_bps=%u\n" ,ds->pts,ds_tell_pts(ds),nbytes,((sh_audio_t*)ds->demuxer->audio->sh)->i_bps); /* FIXUP AUDIO PTS*/ @@ -47,9 +47,9 @@ retval = ds->pts+ds->pts_corr+((float)(ds_tell_pts(ds)-nbytes))/(float)(((sh_audio_t*)ds->demuxer->audio->sh)->i_bps); else { - initial_audio_pts_corr.need_correction=1; - initial_audio_pts_corr.pts_bytes=ds_tell_pts(ds); - initial_audio_pts_corr.nbytes=nbytes; + xp_core.initial_apts_corr.need_correction=1; + xp_core.initial_apts_corr.pts_bytes=ds_tell_pts(ds); + xp_core.initial_apts_corr.nbytes=nbytes; retval = ds->pts; } MSG_DBG2("initial_apts is: %f\n",retval); @@ -66,7 +66,7 @@ if(mp_conf.benchmark) t=GetTimer(); retval = demux_getc(ds); *pts=get_ds_stream_pts(ds,1); - if(initial_audio_pts == HUGE) initial_audio_pts=*pts; + if(xp_core.initial_apts == HUGE) xp_core.initial_apts=*pts; if(mp_conf.benchmark) { t2=GetTimer();t=t2-t; @@ -111,7 +111,7 @@ if(mp_conf.benchmark) t=GetTimer(); retval = demux_read_data(ds,mem,len); *pts=get_ds_stream_pts(ds,retval); - if(initial_audio_pts == HUGE) initial_audio_pts=*pts; + if(xp_core.initial_apts == HUGE) xp_core.initial_apts=*pts; if(mp_conf.benchmark) { t2=GetTimer();t=t2-t; @@ -135,7 +135,7 @@ if(mp_conf.benchmark) t=GetTimer(); retval = ds_get_packet(ds,start); *pts=get_ds_stream_pts(ds,retval); - if(initial_audio_pts == HUGE) initial_audio_pts=*pts; + if(xp_core.initial_apts == HUGE) xp_core.initial_apts=*pts; if(mp_conf.benchmark) { t2=GetTimer();t=t2-t; Modified: mplayerxp/mp_msg.c =================================================================== --- mplayerxp/mp_msg.c 2012-10-29 17:30:41 UTC (rev 255) +++ mplayerxp/mp_msg.c 2012-10-30 07:35:22 UTC (rev 256) @@ -12,71 +12,96 @@ #define _bg(x) ((x) >> 4) #define _fg(x) ((x) & 0x0f) -static int _color[8] = {0,4,2,6,1,5,3,7}; -char vtmp[100]; +typedef struct priv_s { + int _color[8]; + char vtmp[100]; + char scol[9][20]; + pthread_mutex_t mp_msg_mutex; +}priv_t; uint32_t mp_msg_filter=0xFFFFFFFF; -static char scol[9][20]; const char hl[9] = { 0xC, 0x4, 0xE, 0xA, 0xB, 0x7, 0x9, 0x3, 0x7 }; -pthread_mutex_t mp_msg_mutex=PTHREAD_MUTEX_INITIALIZER; static char *_2ansi(unsigned char attr) { + priv_t*priv=mp_data->msg_priv; int bg = _bg(attr); - int bc = _color[bg & 7]; + int bc = priv->_color[bg & 7]; - sprintf(vtmp, + sprintf(priv->vtmp, "\033[%d;3%d;4%d%sm", _fg(attr) > 7, - _color[_fg(attr) & 7], + priv->_color[_fg(attr) & 7], bc, bg > 7 ? ";5" : "" ); - return vtmp; + return priv->vtmp; } void mp_msg_init(int verbose) { + pthread_mutexattr_t attr; unsigned i; - for(i=0;i<sizeof(hl)/sizeof(char);i++) memcpy(scol[i],_2ansi(hl[i]),sizeof(scol[0])); + int _color[8]={0,4,2,6,1,5,3,7}; + mp_data->msg_priv=mp_mallocz(sizeof(priv_t)); + priv_t*priv=mp_data->msg_priv; + memcpy(priv->_color,_color,sizeof(_color)); + pthread_mutexattr_init(&attr); + pthread_mutex_init(&priv->mp_msg_mutex,&attr); + pthread_mutexattr_destroy(&attr); + for(i=0;i<sizeof(hl)/sizeof(char);i++) + memcpy(priv->scol[i],_2ansi(hl[i]),sizeof(priv->scol[0])); } -const char * msg_prefix[] = +void mp_msg_uninit(void) { -"GLOBAL", -"PLAYER", -"LIBVO", -"LIBAO", -"DEMUX", -"CFGPRS", -"DECAUD", -"DECVID", -"VOBSUB", -"OSDEP", -"SPUDEC", -"PLAYTR", -"INPUT", -"OSD", -"CPUDTC", -"CODCFG", -"SWS", -"FINDSB", -"SUBRDR", -"POSTPR" + priv_t*priv=mp_data->msg_priv; + if(isatty(fileno(stderr))) fprintf(stderr,priv->scol[8]); + mp_msg_flush(); + pthread_mutex_destroy(&priv->mp_msg_mutex); + mp_free(priv); +} + +const char * msg_prefix[] = +{ + "GLOBAL", + "PLAYER", + "LIBVO", + "LIBAO", + "DEMUX", + "CFGPRS", + "DECAUD", + "DECVID", + "VOBSUB", + "OSDEP", + "SPUDEC", + "PLAYTR", + "INPUT", + "OSD", + "CPUDTC", + "CODCFG", + "SWS", + "FINDSB", + "SUBRDR", + "POSTPR" }; void mp_msg_c( unsigned x, const char *srcfile,unsigned linenum,const char *format, ... ){ /* TODO: more useful usage of module_id */ + priv_t*priv=NULL; va_list va; char sbuf[0xFFFFF]; unsigned ssize; unsigned level=(x>>28)&0xF; unsigned mod=x&0x0FFFFFFF; static int was_eol=1; + if(mp_data) priv=mp_data->msg_priv; if(level>mp_conf.verbose+MSGL_V-1) return; /* do not display */ if((mod&mp_msg_filter)==0) return; /* do not display */ - pthread_mutex_lock(&mp_msg_mutex); - if(isatty(fileno(stderr))) - fprintf(stderr,scol[level<9?level:8]); + if(priv) { + pthread_mutex_lock(&priv->mp_msg_mutex); + if(isatty(fileno(stderr))) + fprintf(stderr,priv->scol[level<9?level:8]); + } if(mp_conf.verbose>1 && was_eol) { unsigned mod_name; @@ -100,13 +125,7 @@ if(format[strlen(format)-1]=='\n') was_eol=1; else was_eol=0; fflush(stderr); - pthread_mutex_unlock(&mp_msg_mutex); + if(priv) pthread_mutex_unlock(&priv->mp_msg_mutex); } void mp_msg_flush(void) { fflush(stderr); } - -void mp_msg_uninit(void) -{ - if(isatty(fileno(stderr))) fprintf(stderr,scol[8]); - mp_msg_flush(); -} Modified: mplayerxp/mplayer.c =================================================================== --- mplayerxp/mplayer.c 2012-10-29 17:30:41 UTC (rev 255) +++ mplayerxp/mplayer.c 2012-10-30 07:35:22 UTC (rev 256) @@ -139,15 +139,6 @@ ao_data_t* ao_data=NULL; vo_data_t* vo_data=NULL; -/************************************************************************ - Special case: inital audio PTS: - example: some movies has a_pts = v_pts = XX sec - but mplayerxp always starts audio playback at 0 sec -************************************************************************/ -static pthread_mutex_t audio_timer_mutex=PTHREAD_MUTEX_INITIALIZER; -float initial_audio_pts=HUGE; -initial_audio_pts_correction_t initial_audio_pts_corr; - /************************************************************************** Config file **************************************************************************/ @@ -176,7 +167,6 @@ #include "fifo.h" /**************************************************************************/ - static void mpxp_init_structs(void) { mp_data=mp_malloc(sizeof(mp_data_t)); memset(mp_data,0,sizeof(mp_data_t)); @@ -221,7 +211,11 @@ mp_uninit_malloc(1); } +/************************************************************************ + AUDIO XP-CORE! ToDo: rewrite it in packet-mode +************************************************************************/ /* XP audio buffer */ +static pthread_mutex_t audio_timer_mutex=PTHREAD_MUTEX_INITIALIZER; typedef struct audio_buffer_index_s { float pts; int index; @@ -1265,8 +1259,8 @@ if(xp_core.video->eof) can_blit=1; /* force blitting until end of stream will be reached */ vplayer_check_chapter_change(&shva_prev,v_pts); #if 0 -MSG_INFO("initial_audio_pts=%f a_eof=%i a_pts=%f sh_audio->timer=%f v_pts=%f stream_pts=%f duration=%f\n" -,initial_audio_pts +MSG_INFO("xp_core.initial_apts=%f a_eof=%i a_pts=%f sh_audio->timer=%f v_pts=%f stream_pts=%f duration=%f\n" +,xp_core.initial_apts ,xp_core.audio->eof ,sh_audio && !xp_core.audio->eof?d_audio->pts+(ds_tell_pts_r(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps:0 ,sh_audio && !xp_core.audio->eof?sh_audio->timer-ao_get_delay(ao_data):0 @@ -1276,7 +1270,7 @@ #endif /*--------- add OSD to the next frame contents ---------*/ if(can_blit) { - screen_pts=v_pts-(mp_conf.av_sync_pts?0:initial_audio_pts); + screen_pts=v_pts-(mp_conf.av_sync_pts?0:xp_core.initial_apts); #ifdef USE_OSD MSG_D("dec_ahead_main: draw_osd to %u\n",player_idx); MP_UNIT("draw_osd"); @@ -2508,7 +2502,7 @@ //============ Open priv->demuxerS --- DETECT file type ======================= if(mp_conf.playbackspeed_factor!=1.0) mp_conf.has_audio=0; - initial_audio_pts=HUGE; + xp_core.initial_apts=HUGE; if(!mp_conf.has_audio) mp_conf.audio_id=-2; // do NOT read audio packets... if(!mp_conf.has_video) mp_conf.video_id=-2; // do NOT read video packets... if(!mp_conf.has_dvdsub) mp_conf.dvdsub_id=-2;// do NOT read subtitle packets... @@ -2788,7 +2782,7 @@ if(seek_args.secs && sh_video) { frame_attr_t shvap = dae_played_fra(xp_core.video); frame_attr_t shvad = xp_core.video->fra[dae_prev_decoded(xp_core.video)]; - seek_args.secs -= (xp_is_bad_pts?shvad.v_pts:d_video->pts)-shvap.v_pts; + seek_args.secs -= (xp_core.bad_pts?shvad.v_pts:d_video->pts)-shvap.v_pts; } mpxp_seek(&osd,&seek_args); Modified: mplayerxp/mplayer.h =================================================================== --- mplayerxp/mplayer.h 2012-10-29 17:30:41 UTC (rev 255) +++ mplayerxp/mplayer.h 2012-10-30 07:35:22 UTC (rev 256) @@ -4,16 +4,6 @@ #include <pthread.h> #include "mp_config.h" -typedef struct initial_audio_pts_correction_s -{ - int need_correction; - int pts_bytes; - int nbytes; -}initial_audio_pts_correction_t; - -extern initial_audio_pts_correction_t initial_audio_pts_corr; -extern float initial_audio_pts; - typedef struct mp_conf_s { int has_video; int has_audio; @@ -106,6 +96,7 @@ any_t* mconfig; time_usage_t*bench; any_t* priv; + any_t* msg_priv; }mp_data_t; extern mp_data_t* mp_data; Modified: mplayerxp/osdep/mp_malloc.c =================================================================== --- mplayerxp/osdep/mp_malloc.c 2012-10-29 17:30:41 UTC (rev 255) +++ mplayerxp/osdep/mp_malloc.c 2012-10-30 07:35:22 UTC (rev 256) @@ -162,7 +162,6 @@ } any_t* mp_realloc(any_t*__ptr, size_t __size) { return realloc(__ptr,__size); } -any_t* mp_calloc (size_t __nelem, size_t __size) { return mp_mallocz(__nelem*__size); } any_t* mp_mallocz (size_t __size) { any_t* rp; Modified: mplayerxp/osdep/mplib.h =================================================================== --- mplayerxp/osdep/mplib.h 2012-10-29 17:30:41 UTC (rev 255) +++ mplayerxp/osdep/mplib.h 2012-10-30 07:35:22 UTC (rev 256) @@ -44,7 +44,7 @@ extern any_t* __FASTCALL__ mp_malloc(size_t __size); extern any_t* __FASTCALL__ mp_mallocz(size_t __size); extern any_t* __FASTCALL__ mp_realloc(any_t*__ptr, size_t __size); -extern any_t* __FASTCALL__ mp_calloc (size_t __nelem, size_t __size); +static inline any_t* mp_calloc (size_t __nelem, size_t __size) { return mp_mallocz(__nelem*__size); } extern any_t* __FASTCALL__ mp_memalign (size_t boundary, size_t __size); extern void __FASTCALL__ mp_free(any_t*__ptr); extern char * __FASTCALL__ mp_strdup(const char *src); Modified: mplayerxp/xmp_core.c =================================================================== --- mplayerxp/xmp_core.c 2012-10-29 17:30:41 UTC (rev 255) +++ mplayerxp/xmp_core.c 2012-10-30 07:35:22 UTC (rev 256) @@ -37,6 +37,7 @@ void xmp_init(void) { memset(&xp_core,0,sizeof(xp_core_t)); + xp_core.initial_apts=HUGE; } void xmp_uninit(void) {} @@ -195,8 +196,6 @@ any_t* audio_play_routine( any_t* arg ); -int xp_is_bad_pts=0; - /* Audio stuff */ volatile float dec_ahead_audio_delay; static int xp_thread_decode_audio(void) @@ -257,7 +256,7 @@ static unsigned compute_frame_dropping(sh_video_t* sh_video,float v_pts,float drop_barrier) { unsigned rc=0; - float screen_pts=dae_played_fra(xp_core.video).v_pts-(mp_conf.av_sync_pts?0:initial_audio_pts); + float screen_pts=dae_played_fra(xp_core.video).v_pts-(mp_conf.av_sync_pts?0:xp_core.initial_apts); static float prev_delta=64; float delta,max_frame_delay;/* delay for decoding of top slow frame */ max_frame_delay = mp_data->bench->max_video+mp_data->bench->max_vout; @@ -354,13 +353,13 @@ priv->name = "video decoder+vf"; drop_barrier=(float)(xp_core.num_v_buffs/2)*(1/sh_video->fps); if(mp_conf.av_sync_pts == -1 && !mp_data->use_pts_fix2) - xp_is_bad_pts = d_video->demuxer->file_format == DEMUXER_TYPE_MPEG_ES || + xp_core.bad_pts = d_video->demuxer->file_format == DEMUXER_TYPE_MPEG_ES || d_video->demuxer->file_format == DEMUXER_TYPE_MPEG4_ES || d_video->demuxer->file_format == DEMUXER_TYPE_H264_ES || d_video->demuxer->file_format == DEMUXER_TYPE_MPEG_PS || d_video->demuxer->file_format == DEMUXER_TYPE_MPEG_TS; else - xp_is_bad_pts = mp_conf.av_sync_pts?0:1; + xp_core.bad_pts = mp_conf.av_sync_pts?0:1; while(!priv->dae->eof){ unsigned char* start=NULL; int in_size; @@ -369,7 +368,7 @@ pt_sleep: priv->state=Pth_ASleep; while(priv->state==Pth_ASleep) usleep(0); - if(xp_is_bad_pts) mpeg_timer=HUGE; + if(xp_core.bad_pts) mpeg_timer=HUGE; continue; } __MP_UNIT(priv->p_idx,"dec_ahead 1"); @@ -394,7 +393,7 @@ /* in_size==0: it's or broken stream or demuxer's bug */ if(in_size==0 && priv->state!=Pth_Canceling) continue; /* frame was decoded into current decoder_idx */ - if(xp_is_bad_pts) { + if(xp_core.bad_pts) { if(mpeg_timer==HUGE) mpeg_timer=v_pts; else if( mpeg_timer-duration<v_pts ) { mpeg_timer=v_pts; @@ -442,14 +441,14 @@ if(!blit_frame && drop_param) priv->dae->num_dropped_frames++; if(blit_frame) { unsigned idx=dae_curr_vdecoded(); - if(xp_is_bad_pts) + if(xp_core.bad_pts) xp_core.video->fra[idx].v_pts=mpeg_timer; else xp_core.video->fra[idx].v_pts = v_pts; xp_core.video->fra[idx].stream_pts = v_pts; xp_core.video->fra[idx].duration=duration; xp_core.video->fra[idx].eof=0; - if(!xp_is_bad_pts) { + if(!xp_core.bad_pts) { int _idx = dae_prev_vdecoded(); xp_core.video->fra[_idx].duration=v_pts-xp_core.video->fra[_idx].v_pts; } @@ -715,7 +714,7 @@ reset_audio_buffer(); /* Ugly hack: but we should read audio packet before video after seeking. Else we'll get picture destortion on the screen */ - initial_audio_pts=HUGE; + xp_core.initial_apts=HUGE; unsigned i; for(i=1;i<xp_core.num_threads;i++) { Modified: mplayerxp/xmp_core.h =================================================================== --- mplayerxp/xmp_core.h 2012-10-29 17:30:41 UTC (rev 255) +++ mplayerxp/xmp_core.h 2012-10-30 07:35:22 UTC (rev 256) @@ -59,6 +59,13 @@ volatile enum mpxp_thread_state state; }mpxp_thread_t; +typedef struct initial_audio_pts_correction_s +{ + int need_correction; + int pts_bytes; + int nbytes; +}initial_audio_pts_correction_t; + #define main_id 0 typedef struct xp_core_s { int has_video; @@ -74,6 +81,9 @@ /* doubtful stuff */ unsigned num_a_buffs; // number of audio buffers unsigned num_v_buffs; // number of video buffers + int bad_pts; // for MPEGxx codecs + float initial_apts; + initial_audio_pts_correction_t initial_apts_corr; }xp_core_t; extern xp_core_t xp_core; @@ -153,8 +163,6 @@ #define __MP_ATOMIC(OP) { static pthread_mutex_t loc_mutex; pthread_mutex_lock(&loc_mutex); OP; pthread_mutex_unlock(&loc_mutex); } #define __MP_SYNCHRONIZE(mtx,OP) { pthread_mutex_lock(&mtx); OP; pthread_mutex_unlock(&mtx); } -extern int xp_is_bad_pts; - extern volatile int dec_ahead_can_aseek; /* stream - pointer to openned stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |