CVS: main mplayer.c,1.119,1.120 cfg-mplayer.h,1.46,1.47
Update of /cvsroot/mplayer/main In directory usw-pr-cvs1:/tmp/cvs-serv22995 Modified Files: mplayer.c cfg-mplayer.h Log Message: frame dropping... Index: mplayer.c =================================================================== RCS file: /cvsroot/mplayer/main/mplayer.c,v retrieving revision 1.119 retrieving revision 1.120 diff -C2 -r1.119 -r1.120 *** mplayer.c 2001/05/14 02:06:32 1.119 --- mplayer.c 2001/05/14 09:35:51 1.120 *************** *** 474,477 **** --- 474,478 ---- int pts_from_bps=0; #endif + int frame_dropping=0; // option 0=no drop 1= drop vo 2= drop decode char* title="MPlayer"; // screen info: *************** *** 1663,1667 **** // if(!force_redraw && v_frame+0.1<a_frame) drop_frame=1; else drop_frame=0; ! drop_frame_cnt+=drop_frame; //-------------------- Decode a frame: ----------------------- --- 1664,1668 ---- // if(!force_redraw && v_frame+0.1<a_frame) drop_frame=1; else drop_frame=0; ! // if(drop_frame) ++drop_frame_cnt; //-------------------- Decode a frame: ----------------------- *************** *** 1701,1705 **** if(in_size>max_framesize) max_framesize=in_size; ! DS_VideoDecoder_DecodeFrame(start, in_size, 0, !drop_frame); current_module="draw_frame"; --- 1702,1706 ---- if(in_size>max_framesize) max_framesize=in_size; ! if(drop_frame<2) DS_VideoDecoder_DecodeFrame(start, in_size, 0, !drop_frame); current_module="draw_frame"; *************** *** 1735,1739 **** // ret = ICDecompress(avi_header.hic, ICDECOMPRESS_NOTKEYFRAME|(ICDECOMPRESS_HURRYUP|ICDECOMPRESS_PREROL), ret = ICDecompress(sh_video->hic, ICDECOMPRESS_NOTKEYFRAME | ! ( drop_frame?(ICDECOMPRESS_HURRYUP|ICDECOMPRESS_PREROL):0 ) , sh_video->bih, start, &sh_video->o_bih, --- 1736,1740 ---- // ret = ICDecompress(avi_header.hic, ICDECOMPRESS_NOTKEYFRAME|(ICDECOMPRESS_HURRYUP|ICDECOMPRESS_PREROL), ret = ICDecompress(sh_video->hic, ICDECOMPRESS_NOTKEYFRAME | ! ( (drop_frame==2)?(ICDECOMPRESS_HURRYUP|ICDECOMPRESS_PREROL):0 ) , sh_video->bih, start, &sh_video->o_bih, *************** *** 1839,1844 **** if(file_format==DEMUXER_TYPE_MPEG_PS) d_video->pts+=frame_time; ! if(!drop_frame){ // It's time to sleep... current_module="sleep"; --- 1840,1854 ---- if(file_format==DEMUXER_TYPE_MPEG_PS) d_video->pts+=frame_time; ! if(drop_frame){ + if(has_audio){ + int delay=get_audio_delay(audio_fd); + if(verbose>1)printf("delay=%d\n",delay); + time_frame=v_frame; + time_frame-=a_frame-(float)delay/(float)sh_audio->o_bps; + if(time_frame>-0.1) drop_frame=0; // stop dropping frames + } + + } else { // It's time to sleep... current_module="sleep"; *************** *** 1851,1858 **** time_frame=v_frame; time_frame-=a_frame-(float)delay/(float)sh_audio->o_bps; } else { if(time_frame<-0.1 || time_frame>0.1) time_frame=0; } ! if(verbose>1)printf("sleep: %5.3f a:%6.3f v:%6.3f \n",time_frame,a_frame,v_frame); --- 1861,1873 ---- time_frame=v_frame; time_frame-=a_frame-(float)delay/(float)sh_audio->o_bps; + // we are out of time... drop next frame! + if(time_frame<-0.1){ + drop_frame=frame_dropping; // tricky! + ++drop_frame_cnt; + } } else { if(time_frame<-0.1 || time_frame>0.1) time_frame=0; } ! if(verbose>1)printf("sleep: %5.3f a:%6.3f v:%6.3f \n",time_frame,a_frame,v_frame); *************** *** 1930,1939 **** max_pts_correction=sh_video->frametime*0.10; // +-10% of time a_frame+=x; c_total+=x; ! printf(" ct:%7.3f %3d %2d%% %2d%% %3.1f%% \r",c_total, (int)num_frames, (v_frame>0.5)?(int)(100.0*video_time_usage/(double)v_frame):0, (v_frame>0.5)?(int)(100.0*vout_time_usage/(double)v_frame):0, (v_frame>0.5)?(100.0*audio_time_usage/(double)v_frame):0 ! // ,drop_frame_cnt // dbg_es_sent-dbg_es_rcvd ); --- 1945,1954 ---- max_pts_correction=sh_video->frametime*0.10; // +-10% of time a_frame+=x; c_total+=x; ! printf(" ct:%7.3f %3d %2d%% %2d%% %3.1f%% %d\r",c_total, (int)num_frames, (v_frame>0.5)?(int)(100.0*video_time_usage/(double)v_frame):0, (v_frame>0.5)?(int)(100.0*vout_time_usage/(double)v_frame):0, (v_frame>0.5)?(100.0*audio_time_usage/(double)v_frame):0 ! ,drop_frame_cnt // dbg_es_sent-dbg_es_rcvd ); *************** *** 2071,2076 **** break; case 'd': ! drop_frame=!drop_frame; ! printf("== drop: %d == \n",drop_frame); break; } --- 2086,2091 ---- break; case 'd': ! frame_dropping=(frame_dropping+1)%3; ! printf("== drop: %d == \n",frame_dropping); break; } Index: cfg-mplayer.h =================================================================== RCS file: /cvsroot/mplayer/main/cfg-mplayer.h,v retrieving revision 1.46 retrieving revision 1.47 diff -C2 -r1.46 -r1.47 *** cfg-mplayer.h 2001/05/12 01:56:31 1.46 --- cfg-mplayer.h 2001/05/14 09:35:51 1.47 *************** *** 77,80 **** --- 77,84 ---- {"noni", &force_ni, CONF_TYPE_FLAG, 0, 1, 0}, + {"framedrop", &frame_dropping, CONF_TYPE_FLAG, 0, 0, 1}, + {"hardframedrop", &frame_dropping, CONF_TYPE_FLAG, 0, 0, 2}, + {"no framedrop", &frame_dropping, CONF_TYPE_FLAG, 0, 1, 0}, + {"aid", &audio_id, CONF_TYPE_INT, CONF_RANGE, 0, 256}, {"vid", &video_id, CONF_TYPE_INT, CONF_RANGE, 0, 256}, _______________________________________________ Mplayer-cvslog mailing list Mplayer-cvslog@lists.sourceforge.net http://lists.sourceforge.net/lists/listinfo/mplayer-cvslog
participants (1)
-
GEREOFFY