traverso-commit
[Top][All Lists]
Advanced

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

[Traverso-commit] traverso/src audiofileio/decode/ResampleAudioRe...


From: Remon Sijrier
Subject: [Traverso-commit] traverso/src audiofileio/decode/ResampleAudioRe...
Date: Thu, 24 Jan 2008 19:19:12 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Remon Sijrier <r_sijrier>       08/01/24 19:19:12

Modified files:
        src/audiofileio/decode: ResampleAudioReader.cpp 
                                ResampleAudioReader.h 
        src/core       : DiskIO.cpp DiskIO.h ReadSource.cpp Sheet.cpp 

Log message:
        * do not issue a seek when the resample quality changed, instead, 
update the ResampleAudioReaders resample quality just before a read() in 
ReadSource::process_ringbuffer().

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/decode/ResampleAudioReader.cpp?cvsroot=traverso&r1=1.20&r2=1.21
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/decode/ResampleAudioReader.h?cvsroot=traverso&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/DiskIO.cpp?cvsroot=traverso&r1=1.58&r2=1.59
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/DiskIO.h?cvsroot=traverso&r1=1.28&r2=1.29
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ReadSource.cpp?cvsroot=traverso&r1=1.92&r2=1.93
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Sheet.cpp?cvsroot=traverso&r1=1.2&r2=1.3

Patches:
Index: audiofileio/decode/ResampleAudioReader.cpp
===================================================================
RCS file: 
/sources/traverso/traverso/src/audiofileio/decode/ResampleAudioReader.cpp,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -b -r1.20 -r1.21
--- audiofileio/decode/ResampleAudioReader.cpp  29 Nov 2007 19:49:14 -0000      
1.20
+++ audiofileio/decode/ResampleAudioReader.cpp  24 Jan 2008 19:19:10 -0000      
1.21
@@ -51,6 +51,7 @@
        m_overflowUsed = 0;
        m_resampleDecodeBufferIsMine = false;
        m_resampleDecodeBuffer = 0;
+       m_convertorType = -1;
 }
 
 
@@ -116,8 +117,13 @@
        int error;
        
        if ( (float(m_outputRate) / get_file_rate()) > 2.0 && converter_type == 
3 ) {
+               if (m_convertorType == 2) {
+                       return;
+               }
                printf("ResampleAudioReader::set_converter_type: src does not 
support a resample ratio > 2 with converter type Fast, using quality Medium\n");
-               converter_type = 2;
+               m_convertorType = 2; 
+       } else {
+               m_convertorType = converter_type;
        }
        
        while (m_srcStates.size()) {
@@ -129,7 +135,7 @@
        
        for (int c = 0; c < m_reader->get_num_channels(); c++) {
                
-               m_srcStates.append(src_new(converter_type, 1, &error));
+               m_srcStates.append(src_new(m_convertorType, 1, &error));
                
                if (!m_srcStates[c]) {
                        PERROR("ResampleAudioReader: couldn't create 
libSampleRate SRC_STATE");
@@ -141,7 +147,7 @@
        }
        
        // seek_private will reset the src states!
-       seek_private(0);
+       seek_private(pos());
 }
 
 int ResampleAudioReader::get_output_rate()

Index: audiofileio/decode/ResampleAudioReader.h
===================================================================
RCS file: 
/sources/traverso/traverso/src/audiofileio/decode/ResampleAudioReader.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- audiofileio/decode/ResampleAudioReader.h    12 Oct 2007 19:39:07 -0000      
1.12
+++ audiofileio/decode/ResampleAudioReader.h    24 Jan 2008 19:19:11 -0000      
1.13
@@ -46,6 +46,7 @@
        
        int get_output_rate();
        int get_file_rate();
+       int get_convertor_type() const {return m_convertorType;}
        void set_output_rate(int rate);
        void set_converter_type(int converter_type);
        void set_resample_decode_buffer(DecodeBuffer* buffer);
@@ -65,6 +66,7 @@
        audio_sample_t**        m_overflowBuffers;
        long                    m_overflowUsed;
        int                     m_outputRate;
+       int                     m_convertorType;
        bool                    m_isResampleAvailable;
        nframes_t               m_readExtraFrames;
        

Index: core/DiskIO.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/DiskIO.cpp,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -b -r1.58 -r1.59
--- core/DiskIO.cpp     23 Jan 2008 17:32:23 -0000      1.58
+++ core/DiskIO.cpp     24 Jan 2008 19:19:11 -0000      1.59
@@ -195,16 +195,9 @@
        m_seeking = true;
        
        TimeRef location = m_sheet->get_new_transport_location();
-       bool resampleQualityChanged = false;
-       int quality = config().get_property("Conversion", 
"RTResamplingConverterType", DEFAULT_RESAMPLE_QUALITY).toInt();
-       if (quality != m_resampleQuality) {
-               resampleQualityChanged = true;
-               m_resampleQuality = quality;
-       }
-               
 
        foreach(ReadSource* source, m_readSources) {
-               if (m_sampleRateChanged || resampleQualityChanged) {
+               if (m_sampleRateChanged) {
                        source->set_diskio(this);
                }
                source->rb_seek_to_file_position(location);
@@ -533,3 +526,8 @@
 //     m_workTimer.stop();
 }
 
+void DiskIO::set_resample_quality(int quality)
+{
+       m_resampleQuality = quality;
+}
+

Index: core/DiskIO.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/DiskIO.h,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -b -r1.28 -r1.29
--- core/DiskIO.h       21 Jan 2008 16:22:13 -0000      1.28
+++ core/DiskIO.h       24 Jan 2008 19:19:11 -0000      1.29
@@ -61,6 +61,8 @@
        void register_read_source(ReadSource* source);
        void register_write_source(WriteSource* source);
        
+       void set_resample_quality(int quality);
+       
        void unregister_read_source(ReadSource* source);
        void unregister_write_source(WriteSource* source);
 

Index: core/ReadSource.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/ReadSource.cpp,v
retrieving revision 1.92
retrieving revision 1.93
diff -u -b -r1.92 -r1.93
--- core/ReadSource.cpp 23 Jan 2008 17:32:23 -0000      1.92
+++ core/ReadSource.cpp 24 Jan 2008 19:19:11 -0000      1.93
@@ -236,8 +236,8 @@
                return (m_error = COULD_NOT_OPEN_FILE);
        }
        
-       int converter_type = config().get_property("Conversion", 
"RTResamplingConverterType", DEFAULT_RESAMPLE_QUALITY).toInt();
-       m_audioReader->set_converter_type(converter_type);
+/*     int converter_type = config().get_property("Conversion", 
"RTResamplingConverterType", DEFAULT_RESAMPLE_QUALITY).toInt();
+       m_audioReader->set_converter_type(converter_type);*/
        
        set_output_rate(m_audioReader->get_file_rate());
        
@@ -531,6 +531,13 @@
                }
        }
        
+       // Check if the resample quality has changed, it's a safe place here
+       // to reconfigure the audioreaders resample quality.
+       // This allows on the fly changing of the resample quality :)
+       if (m_diskio->get_resample_quality() != 
m_audioReader->get_convertor_type()) {
+               
m_audioReader->set_converter_type(m_diskio->get_resample_quality());
+       }
+       
        // Read in the samples from source
        nframes_t toWrite = rb_file_read(buffer, toRead);
        

Index: core/Sheet.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/Sheet.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- core/Sheet.cpp      23 Jan 2008 17:32:23 -0000      1.2
+++ core/Sheet.cpp      24 Jan 2008 19:19:11 -0000      1.3
@@ -131,6 +131,9 @@
        m_diskio = new DiskIO(this);
        m_currentSampleRate = audiodevice().get_sample_rate();
        m_diskio->output_rate_changed(m_currentSampleRate);
+       int converter_type = config().get_property("Conversion", 
"RTResamplingConverterType", DEFAULT_RESAMPLE_QUALITY).toInt();
+       m_diskio->set_resample_quality(converter_type);
+
        
        connect(this, SIGNAL(seekStart()), m_diskio, SLOT(seek()), 
Qt::QueuedConnection);
        connect(this, SIGNAL(prepareRecording()), this, 
SLOT(prepare_recording()));
@@ -1401,14 +1404,9 @@
 
 void Sheet::config_changed()
 {
-       PENTER;
-       
        int quality = config().get_property("Conversion", 
"RTResamplingConverterType", DEFAULT_RESAMPLE_QUALITY).toInt();
        if (m_diskio->get_resample_quality() != quality) {
-               TimeRef location = m_transportLocation;
-               location.add_frames(1, audiodevice().get_sample_rate());
-       
-               set_transport_pos(location);
+               m_diskio->set_resample_quality(quality);
        }
 }
 




reply via email to

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