traverso-commit
[Top][All Lists]
Advanced

[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




reply via email to

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