[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Traverso-commit] traverso/src core/DiskIO.cpp core/DiskIO.h core...
From: |
Remon Sijrier |
Subject: |
[Traverso-commit] traverso/src core/DiskIO.cpp core/DiskIO.h core... |
Date: |
Thu, 29 Nov 2007 19:52:18 +0000 |
CVSROOT: /sources/traverso
Module name: traverso
Changes by: Remon Sijrier <r_sijrier> 07/11/29 19:52:18
Modified files:
src/core : DiskIO.cpp DiskIO.h ReadSource.cpp Song.cpp
Song.h
src/traverso : Interface.cpp Interface.h
Log message:
* detect samplerate conversion config change, and apply at runtime
* added submenu in Settings menu to select resample quality
* Move check for proper ReadSource channel count in
DiskIO::register_read_source() so we don't check for it in the very often run
there_are_processable_sources()
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/DiskIO.cpp?cvsroot=traverso&r1=1.54&r2=1.55
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/DiskIO.h?cvsroot=traverso&r1=1.26&r2=1.27
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ReadSource.cpp?cvsroot=traverso&r1=1.83&r2=1.84
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Song.cpp?cvsroot=traverso&r1=1.162&r2=1.163
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Song.h?cvsroot=traverso&r1=1.75&r2=1.76
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/Interface.cpp?cvsroot=traverso&r1=1.111&r2=1.112
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/Interface.h?cvsroot=traverso&r1=1.47&r2=1.48
Patches:
Index: core/DiskIO.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/DiskIO.cpp,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -b -r1.54 -r1.55
--- core/DiskIO.cpp 29 Nov 2007 04:30:31 -0000 1.54
+++ core/DiskIO.cpp 29 Nov 2007 19:52:18 -0000 1.55
@@ -146,6 +146,7 @@
cpuTimeBuffer = new RingBuffer(128);
lastCpuReadTime = get_microseconds();
m_stopWork = m_seeking = m_sampleRateChanged = 0;
+ m_resampleQuality = config().get_property("Conversion",
"RTResamplingConverterType", 2).toInt();
m_readBufferFillStatus = 0;
m_hardDiskOverLoadCounter = 0;
@@ -194,9 +195,16 @@
m_seeking = true;
TimeRef location = m_song->get_new_transport_location();
+ bool resampleQualityChanged = false;
+ int quality = config().get_property("Conversion",
"RTResamplingConverterType", 2).toInt();
+ if (quality != m_resampleQuality) {
+ resampleQualityChanged = true;
+ m_resampleQuality = quality;
+ }
+
foreach(ReadSource* source, m_readSources) {
- if (m_sampleRateChanged) {
+ if (m_sampleRateChanged || resampleQualityChanged) {
source->set_diskio(this);
}
source->rb_seek_to_file_position(location);
@@ -283,11 +291,9 @@
for (int j=0; j<m_readSources.size(); ++j) {
ReadSource* source = m_readSources.at(j);
- if (source->get_channel_count() > 0) {
BufferStatus* status = source->get_buffer_status();
m_readersStatus.append(QPair<BufferStatus*,
ReadSource*>(status, source));
}
- }
for (int i=(bufferdividefactor-2); i >= 0; --i) {
@@ -391,6 +397,10 @@
{
PENTER2;
+ if (source->get_channel_count() == 0) {
+ return;
+ }
+
source->set_diskio(this);
QMutexLocker locker(&mutex);
Index: core/DiskIO.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/DiskIO.h,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -b -r1.26 -r1.27
--- core/DiskIO.h 24 Nov 2007 15:56:15 -0000 1.26
+++ core/DiskIO.h 29 Nov 2007 19:52:18 -0000 1.27
@@ -68,6 +68,7 @@
int get_write_buffers_fill_status();
int get_read_buffers_fill_status();
int get_output_rate() {return m_outputRate;}
+ int get_resample_quality() {return m_resampleQuality;}
DecodeBuffer* get_resample_decode_buffer() {return
m_resampleDecodeBuffer;}
private:
@@ -88,6 +89,7 @@
trav_time_t cycleStartTime;
trav_time_t lastCpuReadTime;
bool m_seeking;
+ int m_resampleQuality;
bool m_sampleRateChanged;
int m_hardDiskOverLoadCounter;
audio_sample_t* framebuffer[2];
Index: core/ReadSource.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/ReadSource.cpp,v
retrieving revision 1.83
retrieving revision 1.84
diff -u -b -r1.83 -r1.84
--- core/ReadSource.cpp 29 Nov 2007 13:17:30 -0000 1.83
+++ core/ReadSource.cpp 29 Nov 2007 19:52:18 -0000 1.84
@@ -664,9 +664,12 @@
{
m_diskio = diskio;
set_output_rate(m_diskio->get_output_rate());
- prepare_rt_buffers();
+
if (m_audioReader) {
m_audioReader->set_resample_decode_buffer(m_diskio->get_resample_decode_buffer());
+
m_audioReader->set_converter_type(m_diskio->get_resample_quality());
}
+
+ prepare_rt_buffers();
}
Index: core/Song.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/Song.cpp,v
retrieving revision 1.162
retrieving revision 1.163
diff -u -b -r1.162 -r1.163
--- core/Song.cpp 29 Nov 2007 11:04:08 -0000 1.162
+++ core/Song.cpp 29 Nov 2007 19:52:18 -0000 1.163
@@ -139,6 +139,7 @@
connect(m_diskio, SIGNAL(seekFinished()), this, SLOT(seek_finished()),
Qt::QueuedConnection);
connect (m_diskio, SIGNAL(readSourceBufferUnderRun()), this,
SLOT(handle_diskio_readbuffer_underrun()));
connect (m_diskio, SIGNAL(writeSourceBufferOverRun()), this,
SLOT(handle_diskio_writebuffer_overrun()));
+ connect(&config(), SIGNAL(configChanged()), this,
SLOT(config_changed()));
connect(this, SIGNAL(transferStarted()), m_diskio, SLOT(start_io()));
connect(this, SIGNAL(transferStopped()), m_diskio, SLOT(stop_io()));
@@ -1380,3 +1381,16 @@
PMESG2("Song :: leaving seek_finished");
}
+void Song::config_changed()
+{
+ PENTER;
+
+ int quality = config().get_property("Conversion",
"RTResamplingConverterType", 2).toInt();
+ if (m_diskio->get_resample_quality() != quality) {
+ TimeRef location = m_transportLocation;
+ location.add_frames(1, audiodevice().get_sample_rate());
+
+ set_transport_pos(location);
+ }
+}
+
Index: core/Song.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/Song.h,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -b -r1.75 -r1.76
--- core/Song.h 29 Nov 2007 11:04:08 -0000 1.75
+++ core/Song.h 29 Nov 2007 19:52:18 -0000 1.76
@@ -270,6 +270,7 @@
void handle_diskio_readbuffer_underrun();
void prepare_recording();
void clip_finished_recording(AudioClip* clip);
+ void config_changed();
};
inline float Song::get_gain() const
Index: traverso/Interface.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/Interface.cpp,v
retrieving revision 1.111
retrieving revision 1.112
diff -u -b -r1.111 -r1.112
--- traverso/Interface.cpp 23 Nov 2007 21:47:14 -0000 1.111
+++ traverso/Interface.cpp 29 Nov 2007 19:52:18 -0000 1.112
@@ -500,13 +500,31 @@
menu = menuBar()->addMenu(tr("Se&ttings"));
- QMenu* submenu = menu->addMenu(tr("&Recording File Format"));
- m_wavAction = submenu->addAction("WAVE");
- connect(m_wavAction, SIGNAL(triggered( bool )), this,
SLOT(change_recording_format_to_wav()));
- m_wavpackAction = submenu->addAction("WavPack");
- connect(m_wavpackAction, SIGNAL(triggered( bool )), this,
SLOT(change_recording_format_to_wavpack()));
- m_wav64Action = submenu->addAction("WAVE-64");
- connect(m_wav64Action, SIGNAL(triggered( bool )), this,
SLOT(change_recording_format_to_wav64()));
+ m_encodingMenu = menu->addMenu(tr("&Recording File Format"));
+
+ action = m_encodingMenu->addAction("WAVE");
+ action->setData("wav");
+ connect(action, SIGNAL(triggered(bool)), this,
SLOT(change_recording_format_to_wav()));
+ action = m_encodingMenu->addAction("WavPack");
+ action->setData("wavpack");
+ connect(action, SIGNAL(triggered( bool )), this,
SLOT(change_recording_format_to_wavpack()));
+ action = m_encodingMenu->addAction("WAVE-64");
+ action->setData("w64");
+ connect(action, SIGNAL(triggered( bool )), this,
SLOT(change_recording_format_to_wav64()));
+
+ m_resampleQualityMenu = menu->addMenu(tr("&Resample Quality"));
+ action = m_resampleQualityMenu->addAction("Best");
+ action->setData(0);
+ connect(action, SIGNAL(triggered(bool)), this,
SLOT(change_resample_quality_to_best()));
+ action = m_resampleQualityMenu->addAction("High");
+ action->setData(1);
+ connect(action, SIGNAL(triggered(bool)), this,
SLOT(change_resample_quality_to_high()));
+ action = m_resampleQualityMenu->addAction("Medium");
+ action->setData(2);
+ connect(action, SIGNAL(triggered(bool)), this,
SLOT(change_resample_quality_to_medium()));
+ action = m_resampleQualityMenu->addAction("Fast");
+ action->setData(3);
+ connect(action, SIGNAL(triggered(bool)), this,
SLOT(change_resample_quality_to_fast()));
// fake a config changed 'signal-slot' action, to set the encoding menu
icons
config_changed();
@@ -943,15 +961,25 @@
}
QString encoding = config().get_property("Recording", "FileFormat",
"").toString();
- m_wavAction->setIcon(QIcon());
- m_wav64Action->setIcon(QIcon());
- m_wavpackAction->setIcon(QIcon());
- if (encoding == "wav") {
-
m_wavAction->setIcon(style()->standardIcon(QStyle::SP_DialogApplyButton));
- } else if (encoding == "wavpack") {
-
m_wavpackAction->setIcon(style()->standardIcon(QStyle::SP_DialogApplyButton));
- } else if (encoding == "w64") {
-
m_wav64Action->setIcon(style()->standardIcon(QStyle::SP_DialogApplyButton));
+ QList<QAction* > actions = m_encodingMenu->actions();
+
+ foreach(QAction* action, actions) {
+ if (action->data().toString() == encoding) {
+
action->setIcon(style()->standardIcon(QStyle::SP_DialogApplyButton));
+ } else {
+ action->setIcon(QIcon());
+ }
+ }
+
+ int quality = config().get_property("Conversion",
"RTResamplingConverterType", 2).toInt();
+ actions = m_resampleQualityMenu->actions();
+
+ foreach(QAction* action, actions) {
+ if (action->data().toInt() == quality) {
+
action->setIcon(style()->standardIcon(QStyle::SP_DialogApplyButton));
+ } else {
+ action->setIcon(QIcon());
+ }
}
}
@@ -1155,21 +1183,49 @@
void Interface::change_recording_format_to_wav()
{
config().set_property("Recording", "FileFormat", "wav");
- info().information(tr("Changed encoding for recording to
%1").arg("WAVE"));
+ save_config_and_emit_message(tr("Changed encoding for recording to
%1").arg("WAVE"));
config().save();
}
void Interface::change_recording_format_to_wav64()
{
config().set_property("Recording", "FileFormat", "w64");
- info().information(tr("Changed encoding for recording to
%1").arg("WAVE-64"));
- config().save();
+ save_config_and_emit_message(tr("Changed encoding for recording to
%1").arg("WAVE-64"));
}
void Interface::change_recording_format_to_wavpack()
{
config().set_property("Recording", "FileFormat", "wavpack");
- info().information(tr("Changed encoding for recording to
%1").arg("WavPack"));
+ save_config_and_emit_message(tr("Changed encoding for recording to
%1").arg("WavPack"));
+}
+
+void Interface::change_resample_quality_to_best()
+{
+ config().set_property("Conversion", "RTResamplingConverterType", 0);
+ save_config_and_emit_message(tr("Changed resample quality to:
%1").arg("Best"));
+}
+
+void Interface::change_resample_quality_to_high()
+{
+ config().set_property("Conversion", "RTResamplingConverterType", 1);
+ save_config_and_emit_message(tr("Changed resample quality to:
%1").arg("High"));
+}
+
+void Interface::change_resample_quality_to_medium()
+{
+ config().set_property("Conversion", "RTResamplingConverterType", 2);
+ save_config_and_emit_message(tr("Changed resample quality to:
%1").arg("Medium"));
+}
+
+void Interface::change_resample_quality_to_fast()
+{
+ config().set_property("Conversion", "RTResamplingConverterType", 3);
+ save_config_and_emit_message(tr("Changed resample quality to:
%1").arg("Fast"));
+}
+
+void Interface::save_config_and_emit_message(const QString & message)
+{
+ info().information(message);
config().save();
}
Index: traverso/Interface.h
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/Interface.h,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -b -r1.47 -r1.48
--- traverso/Interface.h 23 Nov 2007 21:47:14 -0000 1.47
+++ traverso/Interface.h 29 Nov 2007 19:52:18 -0000 1.48
@@ -134,15 +134,15 @@
QAction* m_projectSongManagerAction;
QAction* m_projectExportAction;
QAction* m_songMenuAction;
- QAction* m_wavAction;
- QAction* m_wav64Action;
- QAction* m_wavpackAction;
+ QMenu* m_encodingMenu;
+ QMenu* m_resampleQualityMenu;
ResourcesInfoWidget* resourcesInfo;
DriverInfoWidget* driverInfo;
HDDSpaceInfoWidget* hddInfo;
void create_menus();
+ void save_config_and_emit_message(const QString& message);
static Interface* m_instance;
@@ -163,6 +163,10 @@
void change_recording_format_to_wav();
void change_recording_format_to_wav64();
void change_recording_format_to_wavpack();
+ void change_resample_quality_to_best();
+ void change_resample_quality_to_high();
+ void change_resample_quality_to_medium();
+ void change_resample_quality_to_fast();
Command* full_screen();
Command* about_traverso();
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Traverso-commit] traverso/src core/DiskIO.cpp core/DiskIO.h core...,
Remon Sijrier <=