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