[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Traverso-commit] traverso/src core/WriteSource.cpp audiofileio/e...
From: |
Ben Levitt |
Subject: |
[Traverso-commit] traverso/src core/WriteSource.cpp audiofileio/e... |
Date: |
Sun, 12 Aug 2007 00:45:19 +0000 |
CVSROOT: /sources/traverso
Module name: traverso
Changes by: Ben Levitt <benjie> 07/08/12 00:45:19
Modified files:
src/core : WriteSource.cpp
src/audiofileio/encode: WPAudioWriter.cpp WPAudioWriter.h
Log message:
When writing wavpack files, write the file length into the header
before closing the file.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/WriteSource.cpp?cvsroot=traverso&r1=1.27&r2=1.28
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/encode/WPAudioWriter.cpp?cvsroot=traverso&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/encode/WPAudioWriter.h?cvsroot=traverso&r1=1.1&r2=1.2
Patches:
Index: core/WriteSource.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/WriteSource.cpp,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -b -r1.27 -r1.28
--- core/WriteSource.cpp 11 Aug 2007 21:45:28 -0000 1.27
+++ core/WriteSource.cpp 12 Aug 2007 00:45:19 -0000 1.28
@@ -267,6 +267,8 @@
delete m_writer;
}
+ // Try out using the wavpack writer for all writing by switching these
lines
+ // m_writer = AbstractAudioWriter::create_audio_writer("wp");
m_writer = AbstractAudioWriter::create_audio_writer(m_spec->writerType);
m_writer->set_rate(m_spec->sample_rate);
m_writer->set_bits_per_sample(m_spec->data_width);
Index: audiofileio/encode/WPAudioWriter.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/audiofileio/encode/WPAudioWriter.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- audiofileio/encode/WPAudioWriter.cpp 11 Aug 2007 21:45:28 -0000
1.1
+++ audiofileio/encode/WPAudioWriter.cpp 12 Aug 2007 00:45:19 -0000
1.2
@@ -32,6 +32,8 @@
: AbstractAudioWriter()
{
m_wp = 0;
+ m_firstBlock = 0;
+ m_firstBlockSize = 0;
}
@@ -40,6 +42,9 @@
if (m_wp) {
close_private();
}
+ if (m_firstBlock) {
+ delete m_firstBlock;
+ }
}
@@ -78,7 +83,8 @@
return false;
}
- m_bytesWritten = 0;
+ m_firstBlock = 0;
+ m_firstBlockSize = 0;
return true;
}
@@ -112,14 +118,33 @@
uint32_t bcount;
if (writer && writer->m_file && data && length) {
+ if (writer->m_firstBlock == 0) {
+ writer->m_firstBlock = new char[length];
+ memcpy(writer->m_firstBlock, data, length);
+ writer->m_firstBlockSize = length;
+ }
if (!writer->write_to_file(data, (uint32_t)length,
(uint32_t*)&bcount) || bcount != (uint32_t)length) {
fclose(writer->m_file);
writer->m_wp = 0;
return false;
}
- else {
- writer->m_bytesWritten += length;
}
+
+ return true;
+}
+
+
+bool WPAudioWriter::rewrite_first_block()
+{
+ if (!m_firstBlock || !m_file || !m_wp) {
+ return false;
+ }
+ WavpackUpdateNumSamples (m_wp, m_firstBlock);
+ if (fseek(m_file, 0, SEEK_SET) != 0) {
+ return false;
+ }
+ if (!write_block(this, m_firstBlock, m_firstBlockSize)) {
+ return false;
}
return true;
@@ -160,14 +185,14 @@
void WPAudioWriter::close_private()
{
WavpackFlushSamples(m_wp);
-
- // FIXME: Update stored num samples
- // First Re-read first block
- // Then WavpackUpdateNumSamples(m_wp, firstBlock);
- // Then Re-write first block
-
+ rewrite_first_block();
WavpackCloseFile(m_wp);
fclose(m_file);
m_wp = 0;
+ if (m_firstBlock) {
+ delete m_firstBlock;
+ m_firstBlock = 0;
+ m_firstBlockSize = 0;
+ }
}
Index: audiofileio/encode/WPAudioWriter.h
===================================================================
RCS file: /sources/traverso/traverso/src/audiofileio/encode/WPAudioWriter.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- audiofileio/encode/WPAudioWriter.h 11 Aug 2007 21:45:29 -0000 1.1
+++ audiofileio/encode/WPAudioWriter.h 12 Aug 2007 00:45:19 -0000 1.2
@@ -44,13 +44,15 @@
nframes_t write_private(void* buffer, nframes_t frameCount);
void close_private();
int write_to_file(void *lpBuffer, uint32_t nNumberOfBytesToWrite,
uint32_t *lpNumberOfBytesWritten);
+ bool rewrite_first_block();
static int write_block(void *id, void *data, int32_t length);
WavpackConfig m_config;
WavpackContext* m_wp;
- int32_t m_bytesWritten;
FILE* m_file;
+ char* m_firstBlock;
+ int32_t m_firstBlockSize;
};
#endif
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Traverso-commit] traverso/src core/WriteSource.cpp audiofileio/e...,
Ben Levitt <=