traverso-commit
[Top][All Lists]
Advanced

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

[Traverso-commit] traverso/src core/AudioClip.cpp core/ReadSource...


From: Ben Levitt
Subject: [Traverso-commit] traverso/src core/AudioClip.cpp core/ReadSource...
Date: Mon, 24 Sep 2007 00:57:52 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Ben Levitt <benjie>     07/09/24 00:57:51

Modified files:
        src/core       : AudioClip.cpp ReadSource.cpp Song.cpp 
                         WriteSource.cpp WriteSource.h 
        src/commands   : AudioClipExternalProcessing.cpp 
        src/audiofileio/decode: FlacAudioReader.cpp MadAudioReader.cpp 
        src/audiofileio/encode: AbstractAudioWriter.cpp 
                                AbstractAudioWriter.h 
                                FlacAudioWriter.cpp FlacAudioWriter.h 
                                LameAudioWriter.cpp LameAudioWriter.h 
                                SFAudioWriter.cpp SFAudioWriter.h 
                                VorbisAudioWriter.cpp 
                                VorbisAudioWriter.h WPAudioWriter.cpp 
                                WPAudioWriter.h 
        src/traverso   : ExportWidget.cpp 

Log message:
        Make error checking in the Writers more robust.
        Fix bugs in writing mono files.
        Clean up commented-out debug messages in Readers.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/AudioClip.cpp?cvsroot=traverso&r1=1.134&r2=1.135
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ReadSource.cpp?cvsroot=traverso&r1=1.61&r2=1.62
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Song.cpp?cvsroot=traverso&r1=1.138&r2=1.139
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/WriteSource.cpp?cvsroot=traverso&r1=1.35&r2=1.36
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/WriteSource.h?cvsroot=traverso&r1=1.19&r2=1.20
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/AudioClipExternalProcessing.cpp?cvsroot=traverso&r1=1.28&r2=1.29
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/decode/FlacAudioReader.cpp?cvsroot=traverso&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/decode/MadAudioReader.cpp?cvsroot=traverso&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/encode/AbstractAudioWriter.cpp?cvsroot=traverso&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/encode/AbstractAudioWriter.h?cvsroot=traverso&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/encode/FlacAudioWriter.cpp?cvsroot=traverso&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/encode/FlacAudioWriter.h?cvsroot=traverso&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/encode/LameAudioWriter.cpp?cvsroot=traverso&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/encode/LameAudioWriter.h?cvsroot=traverso&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/encode/SFAudioWriter.cpp?cvsroot=traverso&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/encode/SFAudioWriter.h?cvsroot=traverso&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/encode/VorbisAudioWriter.cpp?cvsroot=traverso&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/encode/VorbisAudioWriter.h?cvsroot=traverso&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/encode/WPAudioWriter.cpp?cvsroot=traverso&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/encode/WPAudioWriter.h?cvsroot=traverso&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/ExportWidget.cpp?cvsroot=traverso&r1=1.59&r2=1.60

Patches:
Index: core/AudioClip.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/AudioClip.cpp,v
retrieving revision 1.134
retrieving revision 1.135
diff -u -b -r1.134 -r1.135
--- core/AudioClip.cpp  20 Sep 2007 18:25:14 -0000      1.134
+++ core/AudioClip.cpp  24 Sep 2007 00:57:50 -0000      1.135
@@ -573,6 +573,12 @@
        spec->dataF = m_captureBus->get_buffer(0, 
audiodevice().get_buffer_size());
 
        m_recorder = new WriteSource(spec);
+       if (m_recorder->prepare_export() == -1) {
+               delete m_recorder;
+               delete spec;
+               spec = 0;
+               return -1;
+       }
        m_recorder->set_process_peaks( true );
        m_recorder->set_recording( true );
        

Index: core/ReadSource.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/ReadSource.cpp,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -b -r1.61 -r1.62
--- core/ReadSource.cpp 21 Sep 2007 01:36:24 -0000      1.61
+++ core/ReadSource.cpp 24 Sep 2007 00:57:50 -0000      1.62
@@ -244,8 +244,8 @@
        // (re)set the decoder type
        m_decodertype = m_audioReader->decoder_type();
        
-       if (m_channelCount > m_audioReader->get_num_channels()) {
-               PERROR("ReadAudioSource: file only contains %d channels; %d is 
invalid as a channel number", m_audioReader->get_num_channels(), 
m_channelCount);
+       if (m_audioReader->get_num_channels() > 2) {
+               PERROR("ReadAudioSource: file contains %d channels; only 2 
channels are supported", m_audioReader->get_num_channels());
                delete m_audioReader;
                m_audioReader = 0;
                return INVALID_CHANNEL_COUNT;
@@ -258,6 +258,7 @@
                return ZERO_CHANNELS;
        }
 
+       m_channelCount = m_audioReader->get_num_channels();
        m_rate = m_audioReader->get_file_rate();
        m_length = m_audioReader->get_length();
        

Index: core/Song.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/Song.cpp,v
retrieving revision 1.138
retrieving revision 1.139
diff -u -b -r1.138 -r1.139
--- core/Song.cpp       20 Sep 2007 18:25:15 -0000      1.138
+++ core/Song.cpp       24 Sep 2007 00:57:50 -0000      1.139
@@ -403,7 +403,11 @@
        spec->basename = "Song" + 
QString::number(m_project->get_song_index(m_id)) +"-" + title;
        spec->name = spec->basename;
 
-       if (spec->start_frame >= spec->end_frame) {
+       if (spec->start_frame == spec->end_frame) {
+               info().warning(tr("No audio to export! (Is everything 
muted?)"));
+               return -1;
+       }
+       else if (spec->start_frame > spec->end_frame) {
                info().warning(tr("Export start frame starts beyond export end 
frame!!"));
                return -1;
        }
@@ -419,6 +423,10 @@
        
        if (spec->renderpass == ExportSpecification::WRITE_TO_HARDDISK) {
                m_exportSource = new WriteSource(spec);
+               if (m_exportSource->prepare_export() == -1) {
+                       delete m_exportSource;
+                       return -1;
+               }
        }
 
        m_transportLocation.set_position(spec->start_frame, devicerate);

Index: core/WriteSource.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/WriteSource.cpp,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -b -r1.35 -r1.36
--- core/WriteSource.cpp        19 Sep 2007 21:31:09 -0000      1.35
+++ core/WriteSource.cpp        24 Sep 2007 00:57:50 -0000      1.36
@@ -43,7 +43,6 @@
        m_diskio = 0;
        m_writer = 0;
        m_peak = 0;
-       prepare_export();
 }
 
 WriteSource::~WriteSource()
@@ -325,6 +324,7 @@
        PENTER;
 
        if (m_writer) {
+               m_writer->close();
                delete m_writer;
                m_writer = 0;
        }

Index: core/WriteSource.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/WriteSource.h,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -b -r1.19 -r1.20
--- core/WriteSource.h  17 Sep 2007 18:14:30 -0000      1.19
+++ core/WriteSource.h  24 Sep 2007 00:57:50 -0000      1.20
@@ -50,6 +50,7 @@
 
        int process(nframes_t nframes);
        
+       int prepare_export();
        int finish_export();
        void set_process_peaks(bool process);
        void set_recording(int rec);
@@ -82,9 +83,6 @@
        void*           m_output_data;
        
        
-       int prepare_export();
-       
-
 signals:
        void exportFinished();
 };

Index: commands/AudioClipExternalProcessing.cpp
===================================================================
RCS file: 
/sources/traverso/traverso/src/commands/AudioClipExternalProcessing.cpp,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -b -r1.28 -r1.29
--- commands/AudioClipExternalProcessing.cpp    10 Sep 2007 18:42:12 -0000      
1.28
+++ commands/AudioClipExternalProcessing.cpp    24 Sep 2007 00:57:50 -0000      
1.29
@@ -74,6 +74,12 @@
                spec->dataF = new audio_sample_t[buffersize * 2];
        
                WriteSource* writesource = new WriteSource(spec);
+               if (writesource->prepare_export() == -1) {
+                       delete writesource;
+                       delete [] spec->dataF;
+                       delete spec;
+                       return;
+               }
        
                do {
                        nframes_t this_nframes = 
std::min((nframes_t)(spec->end_frame - spec->pos), buffersize);

Index: audiofileio/decode/FlacAudioReader.cpp
===================================================================
RCS file: 
/sources/traverso/traverso/src/audiofileio/decode/FlacAudioReader.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- audiofileio/decode/FlacAudioReader.cpp      10 Sep 2007 21:22:44 -0000      
1.7
+++ audiofileio/decode/FlacAudioReader.cpp      24 Sep 2007 00:57:50 -0000      
1.8
@@ -439,15 +439,11 @@
 
        if (0 == memcmp(buf, "ID3", 3)) {
                // Found ID3 tag, try and seek past it.
-               //kdDebug() << "(K3bFLACDecorder) File " << filename << ": 
found ID3 tag" << endl;
-
                // See www.id3.org for details of the header, note that the 
size field
                // unpacks to 7-bit bytes, then the +10 is for the header 
itself.
                int pos;
                pos = ((buf[6]<<21)|(buf[7]<<14)|(buf[8]<<7)|buf[9]) + 10;
 
-               //kdDebug() << "(K3bFLACDecoder) " << filename << ": seeking to 
" 
-               //      << pos << endl;
                if (!f.seek(pos)) {
                        //PERROR("Couldn't seek to %d in file: %s", pos, 
QS_C(filename));
                        return false;
@@ -474,7 +470,6 @@
        
        flac.finish();
        
-       //PERROR("Return: Is%s a flac file: %s", ((valid) ? "" : " not"), 
QS_C(filename));
        return valid;
 }
 
@@ -589,28 +584,8 @@
                        m_flac->bufferStart += framesToCopy * 
get_num_channels();
                }
                framesCoppied += framesToCopy;
-               
-               //printf("samplesCoppied = %d (%d, %d)\n", samplesCoppied, 
m_flac->bufferStart, m_flac->buferSize);
        }
        
-       // Pad end of file with 0s if necessary.  (Shouldn't be necessary...)
-       /*int remainingFramesRequested = frameCount - framesCoppied;
-       int remainingFramesInFile = get_length() - (m_readPos + framesCoppied);
-       if (framesCoppied == 0 && remainingFramesInFile > 0) {
-               int padLength = (remainingFramesRequested > 
remainingFramesInFile) ? remainingFramesInFile : remainingFramesRequested;
-               PERROR("padLength: %d", padLength);
-               for (int c = 0; c < get_num_channels(); c++) {
-                       memset(buffer[c] + framesCoppied, 0, padLength * 
sizeof(audio_sample_t));
-               }
-               framesCoppied += padLength;
-       }
-       if (framesCoppied > frameCount) {
-               PERROR("Truncating");
-               framesCoppied = frameCount;
-       }*/
-       
-       //printf("copied %d of %d.  nextFrame: %lu of %lu\n", framesCoppied, 
frameCount, m_readPos, m_length); fflush(stdout);
-       
        return framesCoppied;
 }
 

Index: audiofileio/decode/MadAudioReader.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/audiofileio/decode/MadAudioReader.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- audiofileio/decode/MadAudioReader.cpp       21 Sep 2007 01:36:24 -0000      
1.7
+++ audiofileio/decode/MadAudioReader.cpp       24 Sep 2007 00:57:51 -0000      
1.8
@@ -509,17 +509,18 @@
        
        initDecoderInternal();
        
+       m_nframes = countFrames();
+       
        switch( d->firstHeader.mode ) {
                case MAD_MODE_SINGLE_CHANNEL:
                        m_channels = 1;
+                       break;
                case MAD_MODE_DUAL_CHANNEL:
                case MAD_MODE_JOINT_STEREO:
                case MAD_MODE_STEREO:
                        m_channels = 2;
        }
        
-       m_nframes = countFrames();
-       
        if (m_nframes <= 0) {
                d->handle->cleanup();
                delete d->handle;
@@ -683,7 +684,7 @@
        //
        // Ben says: It looks like Rob (the author of MAD) implies here:
        //    http://www.mars.org/mailman/public/mad-dev/2001-August/000321.html
-       // that 3 frames (1 + 2 extra) is enough... seems to work fine...
+       // that 3 frames (1 + 2 extra) is enough... much faster, and seems to 
work fine...
        unsigned int frameReservoirProtect = (frame > 3 ? 3 : frame);
        
        frame -= frameReservoirProtect;
@@ -763,9 +764,7 @@
 
 
 unsigned long MadAudioReader::countFrames()
-       {
-       //kdDebug() << "(K3bMadDecoder::countFrames)" << endl;
-       
+{
        unsigned long frames = 0;
        bool error = false;
        d->vbr = false;
@@ -795,13 +794,10 @@
        if (!d->handle->inputError() && !error) {
                frames =  d->firstHeader.samplerate * 
(d->handle->madTimer->seconds + (unsigned long)(
                        
(float)d->handle->madTimer->fraction/(float)MAD_TIMER_RESOLUTION));
-               //kdDebug() << "(K3bMadDecoder) length of track " << seconds << 
endl;
        }
 
        d->handle->cleanup();
        
-       //kdDebug() << "(K3bMadDecoder::countFrames) end" << endl;
-       
        return frames;
 }
 
@@ -865,29 +861,6 @@
        
        nframes_t framesWritten = d->outputPos;
        
-       // Pad end with zeros if necessary
-       // FIXME: This shouldn't be necessary!  :P
-       // is m_nframes reporting incorrectly?
-       // are we not outputting the last mp3-frame for some reason?
-       /*int remainingFramesRequested = frameCount - framesWritten;
-       int remainingFramesInFile = m_nframes - (m_readPos + framesWritten);
-       if (remainingFramesRequested > 0 && remainingFramesInFile > 0) {
-               int padLength = (remainingFramesRequested > 
remainingFramesInFile) ? remainingFramesInFile : remainingFramesRequested;
-               for (int c = 0; c < m_channels; c++) {
-                       //memset(d->outputBuffers[c] + framesWritten, 0, 
padLength * sizeof(audio_sample_t));
-               }
-               framesWritten += padLength;
-               printf("padding: %d\n", padLength);
-       }
-
-       // Truncate so we don't return too many frames
-       if (framesWritten + m_readPos > m_nframes) {
-               printf("truncating by %d!\n", m_length - (framesWritten + 
m_readPos));
-               framesWritten = m_nframes - m_readPos;
-       }*/
-       
-       //printf("request: %d (returned: %d), now at: %lu (total: %lu)\n", 
frameCount, framesWritten, m_readPos + framesWritten, m_length);
-       
        return framesWritten;
 }
 
@@ -906,7 +879,6 @@
        
        if (writeBuffers && (m_readPos + d->outputPos + nframes) > m_nframes) {
                nframes = m_nframes - (m_readPos + offset);
-               //printf("!!!nframes: %lu, length: %lu, current: %lu\n", 
nframes, m_nframes, d->outputPos + m_readPos);
        }
        
        // now create the output

Index: audiofileio/encode/AbstractAudioWriter.cpp
===================================================================
RCS file: 
/sources/traverso/traverso/src/audiofileio/encode/AbstractAudioWriter.cpp,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- audiofileio/encode/AbstractAudioWriter.cpp  23 Sep 2007 02:58:32 -0000      
1.9
+++ audiofileio/encode/AbstractAudioWriter.cpp  24 Sep 2007 00:57:51 -0000      
1.10
@@ -101,18 +101,22 @@
 }
 
 
-void AbstractAudioWriter::close()
+bool AbstractAudioWriter::close()
 {
+       bool success = false;;
+       
        if (m_isOpen) {
-               close_private();
+               success = close_private();
                m_isOpen = false;
        }
+       
+       return success;
 }
 
 
 nframes_t AbstractAudioWriter::write(void* buffer, nframes_t count)
 {
-       if (buffer && count) {
+       if (m_isOpen && buffer && count) {
                nframes_t framesWritten = write_private(buffer, count);
                
                if (framesWritten > 0) {

Index: audiofileio/encode/AbstractAudioWriter.h
===================================================================
RCS file: 
/sources/traverso/traverso/src/audiofileio/encode/AbstractAudioWriter.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- audiofileio/encode/AbstractAudioWriter.h    13 Aug 2007 00:01:52 -0000      
1.5
+++ audiofileio/encode/AbstractAudioWriter.h    24 Sep 2007 00:57:51 -0000      
1.6
@@ -46,14 +46,14 @@
        
        bool open(const QString& filename);
        nframes_t write(void* buffer, nframes_t frameCount);
-       void close();
+       bool close();
        
        static AbstractAudioWriter* create_audio_writer(const QString& type);
        
 protected:
        virtual bool open_private() = 0;
        virtual nframes_t write_private(void* buffer, nframes_t frameCount) = 0;
-       virtual void close_private() = 0;
+       virtual bool close_private() = 0;
        
        QString         m_fileName;
        bool            m_isOpen;

Index: audiofileio/encode/FlacAudioWriter.cpp
===================================================================
RCS file: 
/sources/traverso/traverso/src/audiofileio/encode/FlacAudioWriter.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- audiofileio/encode/FlacAudioWriter.cpp      23 Sep 2007 02:58:32 -0000      
1.1
+++ audiofileio/encode/FlacAudioWriter.cpp      24 Sep 2007 00:57:51 -0000      
1.2
@@ -92,11 +92,6 @@
 
 bool FlacAudioWriter::set_format_attribute(const QString& key, const QString& 
value)
 {
-       if (key == "quality") {
-               d->quality = value.toInt();
-               return true;
-       }
-       
        return false;
 }
 
@@ -112,7 +107,7 @@
        if ((d->encoder = FLAC__stream_encoder_new()) == NULL) {
 #endif
                PERROR("ERROR: allocating encoder");
-               return 1;
+               return false;
        }
        
        bool ok = true;
@@ -159,7 +154,7 @@
 {
        FLAC__byte *data = (FLAC__byte *)buffer;
        
-       if (d->bufferSize < frameCount * m_channels) {
+       if (d->bufferSize < (long)(frameCount * m_channels)) {
                if (d->buffer) {
                        delete [] d->buffer;
                }
@@ -190,7 +185,7 @@
        bool ok = FLAC__seekable_stream_encoder_process_interleaved(d->encoder, 
d->buffer, frameCount);
 #endif
        
-       return frameCount;
+       return ((ok) ? frameCount : 0);
 }
 
 
@@ -207,16 +202,19 @@
 }
 
 
-void FlacAudioWriter::close_private()
+bool FlacAudioWriter::close_private()
 {
 #ifdef LEGACY_FLAC
        FLAC__file_encoder_finish(d->encoder);
+       bool success = (FLAC__file_encoder_get_state(d->encoder) == 
FLAC__FILE_ENCODER_UNINITIALIZED);
 #else
-       FLAC__stream_encoder_finish(d->encoder);
+       bool success = FLAC__stream_encoder_finish(d->encoder);
 #endif
        
        // FIXME: Rewrite the header to store the real length (num samples)
        
        cleanup();
+       
+       return success;
 }
 

Index: audiofileio/encode/FlacAudioWriter.h
===================================================================
RCS file: /sources/traverso/traverso/src/audiofileio/encode/FlacAudioWriter.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- audiofileio/encode/FlacAudioWriter.h        23 Sep 2007 02:58:32 -0000      
1.1
+++ audiofileio/encode/FlacAudioWriter.h        24 Sep 2007 00:57:51 -0000      
1.2
@@ -43,7 +43,7 @@
        bool open_private();
        nframes_t write_private(void* buffer, nframes_t frameCount);
        void cleanup();
-       void close_private();
+       bool close_private();
        
        class   Private;
        Private* d;

Index: audiofileio/encode/LameAudioWriter.cpp
===================================================================
RCS file: 
/sources/traverso/traverso/src/audiofileio/encode/LameAudioWriter.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- audiofileio/encode/LameAudioWriter.cpp      23 Sep 2007 02:58:32 -0000      
1.4
+++ audiofileio/encode/LameAudioWriter.cpp      24 Sep 2007 00:57:51 -0000      
1.5
@@ -211,10 +211,8 @@
 }
 
 
-void LameAudioWriter::close_private()
+bool LameAudioWriter::close_private()
 {
-       if (m_fid)
-       {
                if (m_bufferSize < 7200) {
                        if (m_buffer) {
                                delete [] m_buffer;
@@ -223,20 +221,28 @@
                        m_buffer = new char[m_bufferSize];
                }
                
+       bool success = true;
                int size = lame_encode_flush(m_lameInfo->flags,
                                             (unsigned char*)m_buffer,
                                             m_bufferSize);
-               if(size > 0) {
-                       fwrite(m_buffer, 1, size, m_fid);
+       if (size < 0) {
+               PERROR("lame_encode_buffer_flush failed.");
+               success = false;
                }
-               
+       if (size > 0 && fwrite(m_buffer, 1, size, m_fid) != (nframes_t)size) {
+               PERROR("writing mp3 data failed.");
+               success = false;
+       }
+       else {
                lame_mp3_tags_fid(m_lameInfo->flags, m_fid);
+       }
                
                lame_close(m_lameInfo->flags);
                m_lameInfo->flags = 0;
                
                fclose(m_fid);
                m_fid = 0;
-       }
+       
+       return success;
 }
 

Index: audiofileio/encode/LameAudioWriter.h
===================================================================
RCS file: /sources/traverso/traverso/src/audiofileio/encode/LameAudioWriter.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- audiofileio/encode/LameAudioWriter.h        21 Sep 2007 01:36:24 -0000      
1.1
+++ audiofileio/encode/LameAudioWriter.h        24 Sep 2007 00:57:51 -0000      
1.2
@@ -42,7 +42,7 @@
 protected:
        bool open_private();
        nframes_t write_private(void* buffer, nframes_t frameCount);
-       void close_private();
+       bool close_private();
        
        struct  LameInfo;
        LameInfo* m_lameInfo;

Index: audiofileio/encode/SFAudioWriter.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/audiofileio/encode/SFAudioWriter.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- audiofileio/encode/SFAudioWriter.cpp        16 Aug 2007 14:26:50 -0000      
1.5
+++ audiofileio/encode/SFAudioWriter.cpp        24 Sep 2007 00:57:51 -0000      
1.6
@@ -142,12 +142,13 @@
 }
 
 
-void SFAudioWriter::close_private()
+bool SFAudioWriter::close_private()
 {
-       if (sf_close(m_sf)) {
-               qWarning("sf_close returned an error!");
-       }
+       bool success = (sf_close(m_sf) == 0);
+       
        m_sf = 0;
+       
+       return success;
 }
 
 

Index: audiofileio/encode/SFAudioWriter.h
===================================================================
RCS file: /sources/traverso/traverso/src/audiofileio/encode/SFAudioWriter.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- audiofileio/encode/SFAudioWriter.h  13 Aug 2007 00:01:52 -0000      1.4
+++ audiofileio/encode/SFAudioWriter.h  24 Sep 2007 00:57:51 -0000      1.5
@@ -43,7 +43,7 @@
 protected:
        bool open_private();
        nframes_t write_private(void* buffer, nframes_t frameCount);
-       void close_private();
+       bool close_private();
        int get_sf_format();
        
        int             m_fileType;     

Index: audiofileio/encode/VorbisAudioWriter.cpp
===================================================================
RCS file: 
/sources/traverso/traverso/src/audiofileio/encode/VorbisAudioWriter.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- audiofileio/encode/VorbisAudioWriter.cpp    23 Sep 2007 02:58:32 -0000      
1.3
+++ audiofileio/encode/VorbisAudioWriter.cpp    24 Sep 2007 00:57:51 -0000      
1.4
@@ -262,16 +262,20 @@
        // expose the buffer to submit data
        float** writeBuffer = vorbis_analysis_buffer(d->vorbisDspState, 
frameCount);
        
+       if (!writeBuffer) {
+               return 0;
+       }
+       
        // uninterleave samples
        if (m_channels == 1) {
                for (nframes_t i = 0; i < frameCount; i++) {
-                       // FIXME: Currently assumes 16bit audio
-                       writeBuffer[0][i]=( (data[i*4+1]<<8) | 
(0x00ff&(int)data[i*4]) ) / 32768.f;
+                       // Currently assumes 16bit audio
+                       writeBuffer[0][i]=( (data[i*2+1]<<8) | 
(0x00ff&(int)data[i*2]) ) / 32768.f;
                }
        }
        else {
                for (nframes_t i = 0; i < frameCount; i++) {
-                       // FIXME: Currently assumes 16bit audio
+                       // Currently assumes 16bit audio
                        writeBuffer[0][i]=( (data[i*4+1]<<8) | 
(0x00ff&(int)data[i*4]) ) / 32768.f;
                        writeBuffer[1][i]=( (data[i*4+3]<<8) | 
(0x00ff&(int)data[i*4+2]) ) / 32768.f;
                }
@@ -280,7 +284,9 @@
        // tell the library how much we actually submitted
        vorbis_analysis_wrote(d->vorbisDspState, frameCount);
        
-       return flushVorbis();
+       ;
+       
+       return ((flushVorbis() != -1) ? frameCount : 0);
 }
 
 
@@ -290,6 +296,7 @@
        // more involved (potentially parallel) processing.  Get a single
        // block for encoding now
        long writtenData = 0;
+       bool success = true;
        
        while (vorbis_analysis_blockout( d->vorbisDspState, d->vorbisBlock ) == 
1) {
                // analysis
@@ -302,15 +309,16 @@
                        
                        // write out pages (if any)
                        while (ogg_stream_pageout(d->oggStream, d->oggPage)) {
-                               fwrite((char*)d->oggPage->header, 1, 
d->oggPage->header_len, d->fid);
-                               fwrite((char*)d->oggPage->body, 1, 
d->oggPage->body_len, d->fid);
-                               
+                               if (fwrite((char*)d->oggPage->header, 1, 
d->oggPage->header_len, d->fid) != (uint)d->oggPage->header_len
+                               || fwrite((char*)d->oggPage->body, 1, 
d->oggPage->body_len, d->fid) != (uint)d->oggPage->body_len) {
+                                       success = false;
+                               }
                                writtenData += (d->oggPage->header_len + 
d->oggPage->body_len);
                        }
                }
        }
        
-       return writtenData;
+       return ((success) ? writtenData : -1);
 }
 
 
@@ -361,12 +369,18 @@
 }
 
 
-void VorbisAudioWriter::close_private()
+bool VorbisAudioWriter::close_private()
 {
+       bool success = true;
+       
        if (d->vorbisDspState) {
                vorbis_analysis_wrote(d->vorbisDspState, 0);
-               flushVorbis();
+               if (flushVorbis() == -1) {
+                       success = false;
+               }
        }
        cleanup();
+       
+       return success;
 }
 

Index: audiofileio/encode/VorbisAudioWriter.h
===================================================================
RCS file: 
/sources/traverso/traverso/src/audiofileio/encode/VorbisAudioWriter.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- audiofileio/encode/VorbisAudioWriter.h      21 Sep 2007 17:01:07 -0000      
1.1
+++ audiofileio/encode/VorbisAudioWriter.h      24 Sep 2007 00:57:51 -0000      
1.2
@@ -45,7 +45,7 @@
        nframes_t write_private(void* buffer, nframes_t frameCount);
        long flushVorbis();
        void cleanup();
-       void close_private();
+       bool close_private();
        
        class   Private;
        Private* d;

Index: audiofileio/encode/WPAudioWriter.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/audiofileio/encode/WPAudioWriter.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- audiofileio/encode/WPAudioWriter.cpp        24 Aug 2007 19:06:08 -0000      
1.12
+++ audiofileio/encode/WPAudioWriter.cpp        24 Sep 2007 00:57:51 -0000      
1.13
@@ -225,23 +225,36 @@
                                        break;
                        }
                }
-               WavpackPackSamples(m_wp, m_tmp_buffer, frameCount);
+               if (WavpackPackSamples(m_wp, m_tmp_buffer, frameCount) == 
false) {
+                       return 0;
+               }
                return frameCount;
        }
        
-       WavpackPackSamples(m_wp, (int32_t *)buffer, frameCount);
+       if (WavpackPackSamples(m_wp, (int32_t *)buffer, frameCount) == false) {
+               return 0;
+       }
        return frameCount;
 }
 
 
-void WPAudioWriter::close_private()
+bool WPAudioWriter::close_private()
 {
-       WavpackFlushSamples(m_wp);
-       rewrite_first_block();
+       bool success = true;
+       
+       if (WavpackFlushSamples(m_wp) == false) {
+               success = false;
+       }
+       if (rewrite_first_block() == false) {
+               success = false;
+       }
+       
        WavpackCloseFile(m_wp);
-       fclose(m_file);
        m_wp = 0;
 
+       fclose(m_file);
+       m_file = 0;
+
        if (m_tmp_buffer) {
                delete [] m_tmp_buffer;
                m_tmp_buffer = 0;
@@ -253,5 +266,7 @@
                m_firstBlock = 0;
                m_firstBlockSize = 0;
        }
+       
+       return success;
 }
 

Index: audiofileio/encode/WPAudioWriter.h
===================================================================
RCS file: /sources/traverso/traverso/src/audiofileio/encode/WPAudioWriter.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- audiofileio/encode/WPAudioWriter.h  15 Aug 2007 20:07:41 -0000      1.7
+++ audiofileio/encode/WPAudioWriter.h  24 Sep 2007 00:57:51 -0000      1.8
@@ -43,7 +43,7 @@
 protected:
        bool open_private();
        nframes_t write_private(void* buffer, nframes_t frameCount);
-       void close_private();
+       bool close_private();
        int write_to_file(void *lpBuffer, uint32_t nNumberOfBytesToWrite, 
uint32_t *lpNumberOfBytesWritten);
        bool rewrite_first_block();
        

Index: traverso/ExportWidget.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/ExportWidget.cpp,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -b -r1.59 -r1.60
--- traverso/ExportWidget.cpp   23 Sep 2007 02:58:33 -0000      1.59
+++ traverso/ExportWidget.cpp   24 Sep 2007 00:57:51 -0000      1.60
@@ -230,14 +230,11 @@
        }
        
        if (newType == "mp3" || newType == "ogg" || newType == "flac") {
-               channelComboBox->setCurrentIndex(channelComboBox->findData(2));
-               channelComboBox->setDisabled(true);
                
bitdepthComboBox->setCurrentIndex(bitdepthComboBox->findData(16));
                bitdepthComboBox->setDisabled(true);
        }
        else {
                bitdepthComboBox->setEnabled(true);
-               channelComboBox->setEnabled(true);
        }
 }
 
@@ -310,12 +307,6 @@
        }
        else if (audioType == "flac") {
                m_exportSpec->writerType = "flac";
-               if 
(bitdepthComboBox->itemData(channelComboBox->currentIndex()).toInt() == 1) {
-                       // Change from float to int32
-                       // FIXME: Need to do this _Before_ the user starts 
encoding
-                       // (i.e. disable the float option when flac is selected)
-                       
bitdepthComboBox->setCurrentIndex(bitdepthComboBox->findData(32));
-               }
        }
        else if (audioType == "wavpack") {
                m_exportSpec->writerType = "wavpack";




reply via email to

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