summaryrefslogtreecommitdiffstats
path: root/mplayer.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-04-13 22:16:15 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-04-13 22:16:15 +0000
commitd69622363c35f5982cba02833020d338f7622423 (patch)
treec15e2b3d5a9284c46747a52ac955026842ea0fa6 /mplayer.c
parentd3c88e5e514d8c96f87181c7e26a5866dc24231a (diff)
downloadmpv-d69622363c35f5982cba02833020d338f7622423.tar.bz2
mpv-d69622363c35f5982cba02833020d338f7622423.tar.xz
cleanup. cosmetics only, no functional changes
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@5611 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'mplayer.c')
-rw-r--r--mplayer.c196
1 files changed, 69 insertions, 127 deletions
diff --git a/mplayer.c b/mplayer.c
index c99366a8e1..d8c0237b51 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -1338,7 +1338,6 @@ fflush(stdout);
//int frame_corr_num=0; //
//float v_frame=0; // Video
float time_frame=0; // Timer
-int force_redraw=0;
//float num_frames=0; // number of frames played
int grab_frames=0;
char osd_text_buffer[64];
@@ -1423,7 +1422,6 @@ if (dvd_nav && stream->type==STREAMTYPE_DVDNAV) {
total_time_usage_start=GetTimer();
audio_time_usage=0; video_time_usage=0; vout_time_usage=0;
while(!eof){
-// unsigned int aq_total_time=GetTimer();
float aq_sleep_time=0;
if(play_n_frames>=0){
@@ -1432,43 +1430,40 @@ while(!eof){
}
/*========================== PLAY AUDIO ============================*/
+
while(sh_audio){
unsigned int t;
double tt;
int playsize;
+
+ current_module="play_audio";
ao_data.pts=sh_audio->timer*90000.0;
playsize=audio_out->get_space();
- if(!playsize) {
- if(sh_video)
- break; // buffer is full, do not block here!!!
+ // handle audio-only case:
+ if(!playsize && !sh_video) { // buffer is full, do not block here!!!
usec_sleep(10000); // Wait a tick before retry
continue;
}
if(playsize>MAX_OUTBURST) playsize=MAX_OUTBURST; // we shouldn't exceed it!
- //if(playsize>outburst) playsize=outburst;
- // Update buffer if needed
+ // Fill buffer if needed:
current_module="decode_audio"; // Enter AUDIO decoder module
t=GetTimer();
while(sh_audio->a_buffer_len<playsize && !d_audio->eof){
int ret=decode_audio(sh_audio,&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);
- if(ret>0) sh_audio->a_buffer_len+=ret;
- else {
- if(!sh_video)
- eof = PT_NEXT_ENTRY;
- break;
- }
+ if(ret<=0) break; // EOF?
+ sh_audio->a_buffer_len+=ret;
}
- current_module=NULL; // Leave AUDIO decoder module
t=GetTimer()-t;
- tt = t*0.000001f;
- audio_time_usage+=tt;
+ tt = t*0.000001f; audio_time_usage+=tt;
if(playsize>sh_audio->a_buffer_len) playsize=sh_audio->a_buffer_len;
-
+
+ // play audio:
+ current_module="play_audio";
playsize=audio_out->play(sh_audio->a_buffer,playsize,0);
if(playsize>0){
@@ -1478,53 +1473,30 @@ while(sh_audio){
}
break;
-} // if(sh_audio)
-
-/*========================== UPDATE TIMERS ============================*/
-#if 0
- if(alsa){
- // Use system timer for sync, not audio card/driver
- time_frame-=GetRelativeTime();
- if(time_frame<-0.1 || time_frame>0.1){
- time_frame=0;
- } else {
- while(time_frame>0.022){
- usec_sleep(time_frame-0.022);
- time_frame-=GetRelativeTime();
- }
- while(time_frame>0.007){
- usec_sleep(1000); // sleeps 1 clock tick (10ms)!
- time_frame-=GetRelativeTime();
- }
- }
- }
-#endif
+} // while(sh_audio)
if(!sh_video) {
+ // handle audio-only case:
if(!quiet) mp_msg(MSGT_AVSYNC,MSGL_STATUS,"A:%6.1f %4.1f%% %d%% \r"
,sh_audio->timer-audio_out->get_delay()
,(sh_audio->timer>0.5)?100.0*audio_time_usage/(double)sh_audio->timer:0
,cache_fill_status
);
- if(d_audio->eof && sh_audio->a_buffer_len < ao_data.outburst)
- eof = PT_NEXT_ENTRY;
- goto read_input;
-}
+ if(d_audio->eof) eof = PT_NEXT_ENTRY;
+
+} else {
/*========================== PLAY VIDEO ============================*/
-vo_pts=sh_video->timer*90000.0;
-vo_fps=sh_video->fps;
+ float frame_time=0;
+ int blit_frame=0;
-cvideo_base_vframe=sh_video->timer;
-cvideo_base_vtime=video_time_usage;
+ vo_pts=sh_video->timer*90000.0;
+ vo_fps=sh_video->fps;
+
+ cvideo_base_vframe=sh_video->timer;
+ cvideo_base_vtime=video_time_usage;
-if(1)
- while(1){
-
- float frame_time=0;
- int blit_frame=0;
-
//-------------------- Decode a frame: -----------------------
vdecode_time=video_time_usage;
{ unsigned char* start=NULL;
@@ -1541,17 +1513,21 @@ if(1)
}
vdecode_time=video_time_usage-vdecode_time;
//------------------------ frame decoded. --------------------
+
+ mp_dbg(MSGT_AVSYNC,MSGL_DBG2,"*** ftime=%5.3f ***\n",frame_time);
+ sh_video->timer+=frame_time;
+ time_frame+=frame_time; // for nosound
+
+// ==========================================================================
-//------------------------ add OSD to frame contents ---------
current_module="draw_osd";
if(vo_config_count) video_out->draw_osd();
- current_module="av_sync";
-
- sh_video->timer+=frame_time;
- time_frame+=frame_time; // for nosound
+#ifdef HAVE_NEW_GUI
+ if(use_gui) guiEventHandling();
+#endif
- mp_dbg(MSGT_AVSYNC,MSGL_DBG2,"*** ftime=%5.3f ***\n",frame_time);
+ current_module="calc_sleep_time";
if(drop_frame){
@@ -1569,13 +1545,12 @@ if(1)
mp_msg(MSGT_AVSYNC,MSGL_DBG2,"\nstill dropping, %.2f\n", time_frame);
}
}
-#ifdef HAVE_NEW_GUI
- if(use_gui) guiEventHandling();
-#endif
- if(vo_config_count) video_out->check_events(); // check events AST
+
+ time_frame=0; // don't sleep!
+ blit_frame=0; // don't display!
+
} else {
// It's time to sleep...
- current_module="sleep";
time_frame-=GetRelativeTime(); // reset timer
@@ -1583,7 +1558,7 @@ if(1)
float delay=audio_out->get_delay();
mp_dbg(MSGT_AVSYNC,MSGL_DBG2,"delay=%f\n",delay);
-if(!dapsync){
+ if(!dapsync){
/* Arpi's AV-sync */
@@ -1602,7 +1577,7 @@ if(!dapsync){
mp_msg(MSGT_AVSYNC,MSGL_DBG2,"\nframe drop %d, %.2f\n", drop_frame, time_frame);
}
-} else {
+ } else { // if(!dapsync)
/* DaP's AV-sync */
@@ -1645,9 +1620,10 @@ if(!dapsync){
}
} /* /start dropframe */
-}
+ } // if(dapsync)
} else {
+
// NOSOUND:
if( (time_frame<-3*frame_time || time_frame>3*frame_time) || benchmark)
time_frame=0;
@@ -1658,15 +1634,17 @@ if(!dapsync){
aq_sleep_time+=time_frame;
-#ifdef HAVE_NEW_GUI
- if(use_gui) guiEventHandling();
-#endif
+ } // !drop_frame
+
+//============================== SLEEP: ===================================
-if(!(vo_flags&256)){ // flag 256 means: libvo driver does its timing (dvb card)
+// flag 256 means: libvo driver does its timing (dvb card)
+if(time_frame>0.001 && !(vo_flags&256)){
#ifdef HAVE_RTC
if(rtc_fd>=0){
// -------- RTC -----------
+ current_module="sleep_rtc";
while (time_frame > 0.000) {
unsigned long long rtc_ts;
if (read (rtc_fd, &rtc_ts, sizeof(rtc_ts)) <= 0)
@@ -1678,6 +1656,7 @@ if(!(vo_flags&256)){ // flag 256 means: libvo driver does its timing (dvb card)
{
// -------- USLEEP + SOFTSLEEP -----------
float min=softsleep?0.021:0.005;
+ current_module="sleep_usleep";
while(time_frame>min){
if(time_frame<=0.020)
usec_sleep(0); // sleeps 1 clock tick (10ms)!
@@ -1686,6 +1665,7 @@ if(!(vo_flags&256)){ // flag 256 means: libvo driver does its timing (dvb card)
time_frame-=GetRelativeTime();
}
if(softsleep){
+ current_module="sleep_soft";
if(time_frame<0) mp_msg(MSGT_AVSYNC, MSGL_WARN, "Warning! Softsleep underflow!\n");
while(time_frame>0) time_frame-=GetRelativeTime(); // burn the CPU
}
@@ -1693,7 +1673,10 @@ if(!(vo_flags&256)){ // flag 256 means: libvo driver does its timing (dvb card)
}
+//====================== FLIP PAGE (VIDEO BLT): =========================
+
current_module="flip_page";
+
if(vo_config_count) video_out->check_events();
if(blit_frame){
unsigned int t2=GetTimer();
@@ -1710,27 +1693,16 @@ if(!(vo_flags&256)){ // flag 256 means: libvo driver does its timing (dvb card)
/* printf ("PANIC: too slow frame (%.3f)!\n", j); */
if(vo_config_count) video_out->flip_page();
+// usec_sleep(50000); // test only!
t2=GetTimer()-t2;
tt = t2*0.000001f;
vout_time_usage+=tt;
}
-// usec_sleep(50000); // test only!
- }
- current_module=NULL;
-
- if(eof) break;
- if(force_redraw){
- --force_redraw;
- if(!force_redraw) osd_function=OSD_PLAY;
- continue;
- }
+//====================== A-V TIMESTAMP CORRECTION: =========================
-// printf("A:%6.1f V:%6.1f A-V:%7.3f frame=%5.2f \r",d_audio->pts,d_video->pts,d_audio->pts-d_video->pts,sh_audio->timer);
-// fflush(stdout);
+ current_module="av_sync";
-#if 1
-/*================ A-V TIMESTAMP CORRECTION: =========================*/
if(sh_audio){
float a_pts=0;
float v_pts=0;
@@ -1739,29 +1711,18 @@ if(!(vo_flags&256)){ // flag 256 means: libvo driver does its timing (dvb card)
float delay=audio_out->get_delay()+(float)sh_audio->a_buffer_len/(float)sh_audio->o_bps;
if(pts_from_bps){
-#if 1
+ // PTS = sample_no / samplerate
unsigned int samples=(sh_audio->audio.dwSampleSize)?
((ds_tell(d_audio)-sh_audio->a_in_buffer_len)/sh_audio->audio.dwSampleSize) :
(d_audio->pack_no); // <- used for VBR audio
samples+=sh_audio->audio.dwStart; // offset
a_pts=samples*(float)sh_audio->audio.dwScale/(float)sh_audio->audio.dwRate;
-#else
- if(sh_audio->audio.dwSampleSize)
- a_pts=(ds_tell(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->wf->nAvgBytesPerSec;
- else // VBR:
- a_pts=d_audio->pack_no*(float)sh_audio->audio.dwScale/(float)sh_audio->audio.dwRate;
-#endif
-// v_pts=d_video->pack_no*(float)sh_video->video.dwScale/(float)sh_video->video.dwRate;
-// printf("V_PTS: PTS: %8.3f BPS: %8.3f \n",d_video->pts,v_pts);
- delay_corrected=1;
+ delay_corrected=1;
} else {
// PTS = (last timestamp) + (bytes after last timestamp)/(bytes per sec)
a_pts=d_audio->pts;
if(!delay_corrected) if(a_pts) delay_corrected=1;
- //printf("*** %5.3f ***\n",a_pts);
a_pts+=(ds_tell_pts(d_audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps;
-// v_pts=d_video->pts-frame_time;
-// v_pts=d_video->pts;
}
v_pts=d_video->pts;
@@ -1808,31 +1769,12 @@ if(!(vo_flags&256)){ // flag 256 means: libvo driver does its timing (dvb card)
fflush(stdout);
}
-#endif
+
+//============================ Auto QUALITY ============================
/*Output quality adjustments:*/
if(auto_quality>0){
-#if 0
- /*If we took a long time decoding this frame, downgrade the quality.*/
- if(output_quality>0&&
- (video_time_usage-cvideo_base_vtime)*sh_video->timer>=
- (0.95*sh_video->timer-(vout_time_usage+audio_time_usage))*
- (sh_video->timer-cvideo_base_vframe-frame_correction)){
- output_quality>>=1;
- mp_msg(MSGT_AUTOQ,MSGL_DBG2,"Downgrading quality to %i.\n",output_quality);
- set_video_quality(sh_video,output_quality);
- } else
- /*If we had plenty of extra time, upgrade the quality.*/
- if(output_quality<auto_quality&&
- vdecode_time<0.5*frame_time&&
- (video_time_usage-cvideo_base_vtime)*sh_video->timer<
- (0.67*sh_video->timer-(vout_time_usage+audio_time_usage))*
- (sh_video->timer-cvideo_base_vframe-frame_correction)){
- output_quality++;
- mp_msg(MSGT_AUTOQ,MSGL_DBG2,"Upgrading quality to %i.\n",output_quality);
- set_video_quality(sh_video,output_quality);
- }
-#else
+ current_module="autoq";
// float total=0.000001f * (GetTimer()-aq_total_time);
// if(output_quality<auto_quality && aq_sleep_time>0.05f*total)
if(output_quality<auto_quality && aq_sleep_time>0)
@@ -1846,10 +1788,13 @@ if(auto_quality>0){
output_quality=0;
// printf("total: %8.6f sleep: %8.6f q: %d\n",(0.000001f*aq_total_time),aq_sleep_time,output_quality);
set_video_quality(sh_video,output_quality);
-#endif
}
-read_input:
+} // end if(sh_video)
+
+//============================ Handle PAUSE ===============================
+
+ current_module="pause";
#ifdef USE_OSD
if(osd_visible){
@@ -1928,12 +1873,7 @@ read_input:
#endif
}
-
- if(!force_redraw) break;
- } // while(sh_video->timer<sh_audio->timer || force_redraw)
-
-// skip some seconds... added by fly
-
+// handle -sstep
if(step_sec>0) {
osd_function=OSD_FFW;
rel_seek_secs+=step_sec;
@@ -1946,6 +1886,8 @@ if (stream->type==STREAMTYPE_DVDNAV && dvd_nav_still)
//================= Keyboard events, SEEKing ====================
+ current_module="key_events";
+
#ifndef HAVE_NEW_INPUT
/* slave mode */
if(slave_mode) {