From: Robert J. <spa...@us...> - 2005-01-20 21:44:44
|
Update of /cvsroot/lmuse/muse/muse/driver In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7925/muse/driver Modified Files: Tag: REL07 alsatimer.cpp alsatimer.h dummyaudio.cpp rtctimer.cpp rtctimer.h timerdev.h Log Message: improved no-audio backend Index: timerdev.h =================================================================== RCS file: /cvsroot/lmuse/muse/muse/driver/timerdev.h,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** timerdev.h 26 Nov 2004 21:15:31 -0000 1.1.2.1 --- timerdev.h 20 Jan 2005 21:44:32 -0000 1.1.2.2 *************** *** 34,38 **** virtual bool startTimer() = 0; virtual bool stopTimer() = 0; ! virtual unsigned long getTimerTicks() = 0; }; --- 34,38 ---- virtual bool startTimer() = 0; virtual bool stopTimer() = 0; ! virtual unsigned long getTimerTicks(bool printTicks = false) = 0; }; Index: alsatimer.h =================================================================== RCS file: /cvsroot/lmuse/muse/muse/driver/alsatimer.h,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** alsatimer.h 26 Nov 2004 21:14:13 -0000 1.1.2.1 --- alsatimer.h 20 Jan 2005 21:44:32 -0000 1.1.2.2 *************** *** 44,48 **** virtual bool startTimer(); virtual bool stopTimer(); ! virtual unsigned long getTimerTicks(); }; --- 44,48 ---- virtual bool startTimer(); virtual bool stopTimer(); ! virtual unsigned long getTimerTicks(bool printTicks=false); }; Index: alsatimer.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/driver/alsatimer.cpp,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -C2 -d -r1.1.2.2 -r1.1.2.3 *** alsatimer.cpp 17 Dec 2004 21:09:29 -0000 1.1.2.2 --- alsatimer.cpp 20 Jan 2005 21:44:31 -0000 1.1.2.3 *************** *** 130,141 **** } ! unsigned long AlsaTimer::getTimerTicks() { //if(TIMER_DEBUG) // printf("AlsaTimer::getTimerTicks\n"); snd_timer_read_t tr; while (snd_timer_read(handle, &tr, sizeof(tr)) == sizeof(tr)) { ! // printf("TIMER: resolution = %uns, ticks = %u\n", ! // tr.resolution, tr.ticks); } return tr.ticks; --- 130,144 ---- } ! unsigned long AlsaTimer::getTimerTicks(bool printTicks) { //if(TIMER_DEBUG) // printf("AlsaTimer::getTimerTicks\n"); snd_timer_read_t tr; + tr.ticks = 0; while (snd_timer_read(handle, &tr, sizeof(tr)) == sizeof(tr)) { ! if (printTicks) { ! printf("TIMER: resolution = %uns, ticks = %u\n", ! tr.resolution, tr.ticks); ! } } return tr.ticks; Index: rtctimer.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/driver/rtctimer.cpp,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -C2 -d -r1.1.2.2 -r1.1.2.3 *** rtctimer.cpp 25 Dec 2004 21:03:59 -0000 1.1.2.2 --- rtctimer.cpp 20 Jan 2005 21:44:32 -0000 1.1.2.3 *************** *** 129,133 **** } ! unsigned long RtcTimer::getTimerTicks() { if(TIMER_DEBUG) --- 129,133 ---- } ! unsigned long RtcTimer::getTimerTicks(bool printTicks) { if(TIMER_DEBUG) Index: rtctimer.h =================================================================== RCS file: /cvsroot/lmuse/muse/muse/driver/rtctimer.h,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** rtctimer.h 26 Nov 2004 21:15:31 -0000 1.1.2.1 --- rtctimer.h 20 Jan 2005 21:44:32 -0000 1.1.2.2 *************** *** 34,38 **** virtual bool startTimer(); virtual bool stopTimer(); ! virtual unsigned long getTimerTicks(); private: --- 34,38 ---- virtual bool startTimer(); virtual bool stopTimer(); ! virtual unsigned long getTimerTicks(bool printTicks=false); private: Index: dummyaudio.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/driver/dummyaudio.cpp,v retrieving revision 1.3.2.1 retrieving revision 1.3.2.2 diff -C2 -d -r1.3.2.1 -r1.3.2.2 *** dummyaudio.cpp 17 Dec 2004 21:09:30 -0000 1.3.2.1 --- dummyaudio.cpp 20 Jan 2005 21:44:32 -0000 1.3.2.2 *************** *** 32,41 **** int _framePos; int playPos; ! DummyAudioDevice() { ! state = Audio::STOP; ! _framePos = 0; ! playPos = 0; ! } virtual ~DummyAudioDevice() {} --- 32,38 ---- int _framePos; int playPos; + bool realtimeFlag; ! DummyAudioDevice(); virtual ~DummyAudioDevice() {} *************** *** 86,90 **** return _framePos; } ! virtual bool isRealtime() { return false; } virtual void startTransport() { if(DEBUG_DUMMY) --- 83,87 ---- return _framePos; } ! virtual bool isRealtime() { return realtimeFlag; } virtual void startTransport() { if(DEBUG_DUMMY) *************** *** 109,116 **** --- 106,125 ---- } virtual void setFreewheel(bool) {} + void setRealTime() { realtimeFlag = true; } }; DummyAudioDevice* dummyAudio; + DummyAudioDevice::DummyAudioDevice() + { + realtimeFlag = false; + state = Audio::STOP; + _framePos = 0; + playPos = 0; + } + + + + //--------------------------------------------------------- // initDummyAudio *************** *** 159,165 **** --- 168,178 ---- AlsaTimer timer; int fd = timer.initTimer(); + timer.setTimerTicks(tickRate); + timer.startTimer(); + DummyAudioDevice *drvPtr = (DummyAudioDevice *)ptr; + //fd_set pFd; //FD_SET(fd, &pFd); *************** *** 170,199 **** //int counter=0; ! DummyAudioDevice *drvPtr = (DummyAudioDevice *)ptr; for (;;) { int _pollWait = 10; // ms ! int n = poll(&myPollFd, 1 /* npfd */, _pollWait); ! ! timer.getTimerTicks(); ! /*if (counter == 32) */{ ! // counter=0; ! ! audio->process(segmentSize); ! ! //usleep(1000*100); ! // 44100 / 1024 ! int increment = 1; //tickRate / sampleRate * segmentSize; ! //printf("sampleRate =%d, segmentSize=%d increment=%d\n",sampleRate, segmentSize, increment); ! ! drvPtr->_framePos+=increment; ! if (drvPtr->state == Audio::PLAY) ! { ! //if(DEBUG_DUMMY) ! // printf("dummyLoop - play!\n"); ! drvPtr->playPos+=increment; ! } } } --- 183,243 ---- //int counter=0; ! ! doSetuid(); ! struct sched_param rt_param; ! int rv; ! memset(&rt_param, 0, sizeof(sched_param)); ! int type; ! rv = pthread_getschedparam(pthread_self(), &type, &rt_param); ! if (rv != 0) ! perror("get scheduler parameter"); ! if (type != SCHED_FIFO) { ! fprintf(stderr, "Driver thread not running SCHED_FIFO, trying to set...\n"); ! ! memset(&rt_param, 0, sizeof(sched_param)); ! rt_param.sched_priority = 1; ! rv = pthread_setschedparam(pthread_self(), SCHED_FIFO, &rt_param); ! if (rv != 0) ! perror("set realtime scheduler"); ! memset(&rt_param, 0, sizeof(sched_param)); ! rv = pthread_getschedparam(pthread_self(), &type, &rt_param); ! if (rv != 0) ! perror("get scheduler parameter"); ! if (type == SCHED_FIFO) { ! drvPtr->setRealTime(); ! fprintf(stderr, "Thread succesfully set to SCHED_FIFO\n"); ! } ! else { ! fprintf(stderr, "Unable to set thread to SCHED_FIFO\n"); ! } ! } ! undoSetuid(); ! ! unsigned long tick = 0; for (;;) { int _pollWait = 10; // ms ! unsigned long count = 0; ! while (count < 1) ! { ! int n = poll(&myPollFd, 1 /* npfd */, _pollWait); ! ! ! count = timer.getTimerTicks(); ! ! } ! ! audio->process(segmentSize); ! ! int increment = 1; //tickRate / sampleRate * segmentSize; ! //printf("sampleRate =%d, segmentSize=%d increment=%d\n",sampleRate, segmentSize, increment); ! drvPtr->_framePos+=increment; ! if (drvPtr->state == Audio::PLAY) ! { ! //if(DEBUG_DUMMY) ! // printf("dummyLoop - play!\n"); ! drvPtr->playPos+=increment; } } *************** *** 215,218 **** --- 259,263 ---- pthread_cancel(dummyThread); pthread_join(dummyThread, 0); + dummyThread = 0; } |