[PD-cvs] pd/src m_sched.c, 1.5.4.32, 1.5.4.33 s_stuff.h, 1.5.4.8, 1.5.4.9 s_audio.c, 1.5.4.14, 1.5.4.15
Tim Blechmann
timblech at users.sourceforge.net
Sun May 15 20:51:18 CEST 2005
Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9904
Modified Files:
Tag: devel_0_38
m_sched.c s_stuff.h s_audio.c
Log Message:
- sleepgrain cleanup
- improved sys_timedlock
Index: s_audio.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_audio.c,v
retrieving revision 1.5.4.14
retrieving revision 1.5.4.15
diff -C2 -d -r1.5.4.14 -r1.5.4.15
*** s_audio.c 13 May 2005 16:45:43 -0000 1.5.4.14
--- s_audio.c 15 May 2005 18:51:15 -0000 1.5.4.15
***************
*** 393,405 ****
sched_set_using_dacs(enable);
! /* tb {
! * cut'n'paste from m_scheduler to adapt the sleepgrain with the latency */
! sys_sleepgrain = sys_schedadvance/4;
! if (sys_sleepgrain < 100)
! sys_sleepgrain = 100;
! else
! if (sys_sleepgrain > 5000)
! sys_sleepgrain = 5000;
! /* } tb */
}
--- 393,397 ----
sched_set_using_dacs(enable);
! sys_update_sleepgrain();
}
***************
*** 1204,1206 ****
--- 1196,1211 ----
rate, dacblocksize, advance, scheduler, 1);
}
+
+
+ /* some general helper functions */
+ void sys_update_sleepgrain(void)
+ {
+ sys_sleepgrain = sys_schedadvance/4;
+ if (sys_sleepgrain < 100)
+ sys_sleepgrain = 100;
+ else
+ if (sys_sleepgrain > 5000)
+ sys_sleepgrain = 5000;
+ }
+
/* tb } */
Index: m_sched.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_sched.c,v
retrieving revision 1.5.4.32
retrieving revision 1.5.4.33
diff -C2 -d -r1.5.4.32 -r1.5.4.33
*** m_sched.c 13 May 2005 15:55:30 -0000 1.5.4.32
--- m_sched.c 15 May 2005 18:51:15 -0000 1.5.4.33
***************
*** 8,11 ****
--- 8,21 ----
#include "m_imp.h"
#include "s_stuff.h"
+ #include "m_fifo.h"
+
+ /* for timeval */
+ #ifdef UNISTD
+ #include "sys/time.h"
+ #endif
+ #ifdef MSW
+ #include "winsock.h"
+ #endif
+
/* LATER consider making this variable. It's now the LCM of all sample
***************
*** 27,31 ****
int sys_callbackscheduler = 0; /* if 1: change scheduler to callback based dsp */
- #include "m_fifo.h"
static void run_idle_callbacks(int microsec);
--- 37,40 ----
***************
*** 408,412 ****
sys_time_per_dsp_tick = (TIMEUNITPERSEC) *
((double)sys_schedblocksize) / sys_dacsr;
!
/* T.Grill - lock mutex */
sys_lock();
--- 417,421 ----
sys_time_per_dsp_tick = (TIMEUNITPERSEC) *
((double)sys_schedblocksize) / sys_dacsr;
!
/* T.Grill - lock mutex */
sys_lock();
***************
*** 415,424 ****
/* tb: adapt sleepgrain with advance */
! if (sys_schedadvance < 20000)
! sys_sleepgrain = sys_schedadvance/4;
! if (sys_sleepgrain < 100)
! sys_sleepgrain = 100;
! else if (sys_sleepgrain > 5000)
! sys_sleepgrain = 5000;
sys_initmidiqueue();
--- 424,429 ----
/* tb: adapt sleepgrain with advance */
! sys_update_sleepgrain();
!
sys_initmidiqueue();
***************
*** 558,577 ****
/* tb { */
#include <errno.h>
int sys_timedlock(int microsec)
{
- #if 0 /* pthread_mutex_timedlock is broken :-( */
struct timespec timeout;
int ret;
! timeout.tv_sec = 0;
! timeout.tv_nsec = microsec * 1000;
ret = pthread_mutex_timedlock(&sys_mutex, &timeout);
return ret;
- #else
- /* todo: find a clean solution */
- sys_lock();
- return 0;
- #endif
}
/* tb } */
--- 563,607 ----
/* tb { */
#include <errno.h>
+
+ #ifdef MSW
+ /* gettimeofday isn't available on windoze ... */
+ int gettimeofday (struct timeval *tv, void* tz)
+ {
+ __int64 now; /* time since 1 Jan 1601 in 100ns */
+
+ GetSystemTimeAsFileTime ((LPFILETIME*) &now);
+ tv->tv_usec = (long) ((now / 10LL) % 1000000LL);
+ tv->tv_sec = (long) ((now - 116444736000000000LL) / 10000000LL);
+ return (0);
+ }
+ #endif
+
int sys_timedlock(int microsec)
{
struct timespec timeout;
int ret;
! struct timeval now;
!
! /* timedlock seems to have a resolution of 1ms */
! if (microsec < 1e3)
! microsec = 1e3;
!
! gettimeofday(&now,0);
!
! timeout.tv_sec = now.tv_sec;
! timeout.tv_nsec = (now.tv_usec + microsec) * 1000;
!
! while (timeout.tv_nsec > 1e9)
! {
! timeout.tv_sec += 1;
! timeout.tv_nsec -= 1e9;
! }
ret = pthread_mutex_timedlock(&sys_mutex, &timeout);
+
+ if (ret)
+ post("timeout");
return ret;
}
/* tb } */
***************
*** 603,608 ****
* { */
- #include "m_fifo.h"
-
/* linked list of callbacks
* callback will be freed after returning 0 */
--- 633,636 ----
Index: s_stuff.h
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_stuff.h,v
retrieving revision 1.5.4.8
retrieving revision 1.5.4.9
diff -C2 -d -r1.5.4.8 -r1.5.4.9
*** s_stuff.h 13 May 2005 17:01:48 -0000 1.5.4.8
--- s_stuff.h 15 May 2005 18:51:15 -0000 1.5.4.9
***************
*** 94,97 ****
--- 94,101 ----
void sys_setblocksize(int n);
+ /* tb { */
+ void sys_update_sleepgrain(void);
+ /* } */
+
/* s_midi.c */
#define MAXMIDIINDEV 16 /* max. number of input ports */
More information about the Pd-cvs
mailing list