Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static double timing_sleep(double time_frame)
- {
- int x=0,y=0;
- double t=time_frame;
- if(time_frame>1)
- {
- printf("time_frame too big: %f\n",time_frame);
- time_frame=0.04;
- }
- #ifdef HAVE_RTC
- if (rtc_fd >= 0){
- // -------- RTC -----------
- current_module="sleep_rtc";
- while (time_frame > 0.000) {
- unsigned long rtc_ts;
- if (read(rtc_fd, &rtc_ts, sizeof(rtc_ts)) <= 0)
- mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_LinuxRTCReadError, strerror(errno));
- time_frame -= GetRelativeTime();
- }
- } else
- #endif
- {
- // assume kernel HZ=100 for softsleep, works with larger HZ but with
- // unnecessarily high CPU usage
- double margin = softsleep ? 0.0011 : 0.0;
- unsigned int sleep_time;
- sleep_time=(time_frame - margin)*1000000;
- current_module = "sleep_timer";
- // printf("timing_sleep run ");
- while (time_frame > margin) {
- usec_sleep(sleep_time);
- y++;
- time_frame -= GetRelativeTime();
- if(time_frame<0.0021 || time_frame>t) break;
- }
- //printf("-end\n");
- if (softsleep){
- //printf("sleep_soft run\n");
- current_module = "sleep_soft";
- if (time_frame < 0)
- {
- mp_msg(MSGT_AVSYNC, MSGL_WARN, MSGTR_SoftsleepUnderflow);
- printf("SoftsleepUnderflow: %f\n",time_frame);
- }
- while (time_frame > margin) {
- usec_sleep(1000000 * (time_frame - margin));
- time_frame -= GetRelativeTime();
- y++;
- }
- while (time_frame > 0.0000005)
- {
- x++;
- time_frame-=GetRelativeTime(); // burn the CPU
- if(x>20000) break;
- }
- //printf("-end\nsleep_soft run ");
- }
- }
- if(time_frame >0.0000005 || time_frame<-0.1 || x>20000 || y>1)
- {
- printf("orig: %f timeframe: %f x: %i y: %i\n",t,time_frame,x,y);
- }
- if(time_frame<-0.01 || time_frame>0.01)
- {
- time_frame=0.001;
- GetRelativeTime();
- }
- return time_frame;
- }
Add Comment
Please, Sign In to add comment