From: terminator356 <ter...@us...> - 2009-03-09 02:05:31
|
Update of /cvsroot/lmuse/muse/muse/driver In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv15085/muse/driver Modified Files: Tag: REL07 alsatimer.cpp alsatimer.h dummyaudio.cpp rtctimer.cpp Log Message: See ChangeLog Index: rtctimer.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/driver/rtctimer.cpp,v retrieving revision 1.1.2.10 retrieving revision 1.1.2.11 diff -C2 -d -r1.1.2.10 -r1.1.2.11 *** rtctimer.cpp 21 May 2008 00:28:53 -0000 1.1.2.10 --- rtctimer.cpp 9 Mar 2009 02:05:18 -0000 1.1.2.11 *************** *** 52,56 **** if (timerFd == -1) { fprintf(stderr, "fatal error: open /dev/rtc failed: %s\n", strerror(errno)); ! fprintf(stderr, "hint: check if 'rtc' kernel module is loaded!\n"); undoSetuid(); return timerFd; --- 52,56 ---- if (timerFd == -1) { fprintf(stderr, "fatal error: open /dev/rtc failed: %s\n", strerror(errno)); ! fprintf(stderr, "hint: check if 'rtc' kernel module is loaded, or used by something else\n"); undoSetuid(); return timerFd; Index: alsatimer.h =================================================================== RCS file: /cvsroot/lmuse/muse/muse/driver/alsatimer.h,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -C2 -d -r1.1.2.3 -r1.1.2.4 *** alsatimer.h 21 Aug 2005 18:11:28 -0000 1.1.2.3 --- alsatimer.h 9 Mar 2009 02:05:18 -0000 1.1.2.4 *************** *** 31,35 **** signed int count; unsigned int ticks; ! public: --- 31,35 ---- signed int count; unsigned int ticks; ! bool findBest; public: *************** *** 47,50 **** --- 47,51 ---- virtual unsigned int getTimerTicks(bool printTicks=false); + void setFindBestTimer(bool b) { findBest = b; } }; Index: dummyaudio.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/driver/dummyaudio.cpp,v retrieving revision 1.3.2.9 retrieving revision 1.3.2.10 diff -C2 -d -r1.3.2.9 -r1.3.2.10 *** dummyaudio.cpp 21 May 2008 00:28:53 -0000 1.3.2.9 --- dummyaudio.cpp 9 Mar 2009 02:05:18 -0000 1.3.2.10 *************** *** 190,193 **** --- 190,194 ---- segmentSize = 1024; AlsaTimer timer; + timer.setFindBestTimer(false); int fd = timer.initTimer(); Index: alsatimer.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/driver/alsatimer.cpp,v retrieving revision 1.1.2.7 retrieving revision 1.1.2.8 diff -C2 -d -r1.1.2.7 -r1.1.2.8 *** alsatimer.cpp 27 Jan 2007 14:52:42 -0000 1.1.2.7 --- alsatimer.cpp 9 Mar 2009 02:05:18 -0000 1.1.2.8 *************** *** 11,14 **** --- 11,15 ---- #include "alsatimer.h" + #include <climits> #define TIMER_DEBUG 0 *************** *** 22,25 **** --- 23,27 ---- info = NULL; params = NULL; + findBest = true; } *************** *** 30,36 **** if (handle) snd_timer_close(handle); ! if (id) free(id); ! if (info) free(info); ! if (params) free(params); } --- 32,38 ---- if (handle) snd_timer_close(handle); ! if (id) snd_timer_id_free(id); ! if (info) snd_timer_info_free(info); ! if (params) snd_timer_params_free(params); } *************** *** 46,49 **** --- 48,61 ---- int device = SND_TIMER_GLOBAL_SYSTEM; int subdevice = 0; + int test_ids[] = { SND_TIMER_GLOBAL_SYSTEM + , SND_TIMER_GLOBAL_RTC + #ifdef SND_TIMER_GLOBAL_HPET + , SND_TIMER_GLOBAL_HPET + #endif + }; + int max_ids = sizeof(test_ids) / sizeof(int); + long best_res = LONG_MAX; + int best_dev = SND_TIMER_GLOBAL_SYSTEM; + int i; if (id || info || params) { *************** *** 55,58 **** --- 67,93 ---- snd_timer_params_malloc(¶ms); + if (findBest) { + for (i = 0; i < max_ids; ++i) { + device = test_ids[i]; + sprintf(timername, "hw:CLASS=%i,SCLASS=%i,CARD=%i,DEV=%i,SUBDEV=%i", devclass, sclass, card, device, subdevice); + if ((err = snd_timer_open(&handle, timername, SND_TIMER_OPEN_NONBLOCK)) < 0) { + continue; + } + if ((err = snd_timer_info(handle, info)) < 0) { + snd_timer_close(handle); + continue; + } + // select a non slave timer with the lowest resolution value + int is_slave = snd_timer_info_is_slave(info); + long res = snd_timer_info_get_resolution(info); + if ((is_slave == 0) && (best_res > res)) { + best_res = res; + best_dev = device; + } + snd_timer_close(handle); + } + device = best_dev; + } + sprintf(timername, "hw:CLASS=%i,SCLASS=%i,CARD=%i,DEV=%i,SUBDEV=%i", devclass, sclass, card, device, subdevice); if ((err = snd_timer_open(&handle, timername, SND_TIMER_OPEN_NONBLOCK))<0) { *************** *** 65,68 **** --- 100,106 ---- } + if(TIMER_DEBUG) + fprintf(stderr, "AlsaTimer::initTimer(): best available ALSA timer: %s\n", snd_timer_info_get_name(info)); + snd_timer_params_set_auto_start(params, 1); snd_timer_params_set_ticks(params, 1); |