traverso-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Traverso-commit] traverso/src/core DiskIO.cpp DiskIO.h ReadSourc...


From: Ben Levitt
Subject: [Traverso-commit] traverso/src/core DiskIO.cpp DiskIO.h ReadSourc...
Date: Thu, 26 Jul 2007 00:45:41 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Ben Levitt <benjie>     07/07/26 00:45:41

Modified files:
        src/core       : DiskIO.cpp DiskIO.h ReadSource.cpp 

Log message:
        Ah, DiskIO is less scary than I expected.  This should fix a possible 
        race between setting a new output samplerate on all the ReadSources, vs 
        seeking and reading from them in DiskIO.  (Thanks again remon)

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/DiskIO.cpp?cvsroot=traverso&r1=1.40&r2=1.41
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/DiskIO.h?cvsroot=traverso&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ReadSource.cpp?cvsroot=traverso&r1=1.44&r2=1.45

Patches:
Index: DiskIO.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/DiskIO.cpp,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -b -r1.40 -r1.41
--- DiskIO.cpp  18 Jul 2007 13:39:57 -0000      1.40
+++ DiskIO.cpp  26 Jul 2007 00:45:41 -0000      1.41
@@ -144,7 +144,7 @@
        m_diskThread = new DiskIOThread(this);
        cpuTimeBuffer = new RingBuffer(128);
        lastCpuReadTime = get_microseconds();
-       m_stopWork = m_seeking = 0;
+       m_stopWork = m_seeking = m_sampleRateChanged = 0;
        m_readBufferFillStatus = 0;
        m_hardDiskOverLoadCounter = 0;
        
@@ -159,6 +159,7 @@
        m_workTimer.moveToThread(m_diskThread);
 
        connect(&m_workTimer, SIGNAL(timeout()), this, SLOT(do_work()));
+       connect(&audiodevice(), SIGNAL(driverParamsChanged()), this, 
SLOT(output_rate_changed()));
        
        m_diskThread->start();
 }
@@ -191,9 +192,14 @@
        m_seeking = true;
 
        foreach(ReadSource* source, m_readSources) {
+               if (m_sampleRateChanged) {
+                       source->output_rate_changed();
+               }
                source->rb_seek_to_file_position(position);
        }
        
+       m_sampleRateChanged = false;
+       
        mutex.unlock();
 
        // Now, fill the buffers like normal
@@ -205,6 +211,12 @@
 }
 
 
+void DiskIO::output_rate_changed()
+{
+       m_sampleRateChanged = true;
+}
+
+
 // Internal function
 void DiskIO::do_work( )
 {

Index: DiskIO.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/DiskIO.h,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- DiskIO.h    18 Jul 2007 13:13:05 -0000      1.18
+++ DiskIO.h    26 Jul 2007 00:45:41 -0000      1.19
@@ -80,6 +80,7 @@
        trav_time_t             cycleStartTime;
        trav_time_t             lastCpuReadTime;
        bool                    m_seeking;
+       bool                    m_sampleRateChanged;
        int                     m_hardDiskOverLoadCounter;
        audio_sample_t*         framebuffer[2];
        audio_sample_t*         m_readbuffer;
@@ -96,6 +97,7 @@
        void seek(uint position);
        void start_io();
        void stop_io();
+       void output_rate_changed();
        
 private slots:
        void do_work();

Index: ReadSource.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/ReadSource.cpp,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -b -r1.44 -r1.45
--- ReadSource.cpp      24 Jul 2007 20:34:40 -0000      1.44
+++ ReadSource.cpp      26 Jul 2007 00:45:41 -0000      1.45
@@ -176,7 +176,6 @@
                m_audioReader = new ResampleAudioReader(m_fileName, 
converter_type);
                if (m_audioReader->get_num_channels()) {
                        output_rate_changed();
-                       connect(&audiodevice(), SIGNAL(driverParamsChanged()), 
this, SLOT(output_rate_changed()));
                }
                else {
                        delete m_audioReader;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]