[Top][All Lists]
[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;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Traverso-commit] traverso/src/core DiskIO.cpp DiskIO.h ReadSourc...,
Ben Levitt <=