traverso-commit
[Top][All Lists]
Advanced

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

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


From: Remon Sijrier
Subject: [Traverso-commit] traverso/src/core ReadSource.cpp
Date: Sat, 24 Nov 2007 12:29:57 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Remon Sijrier <r_sijrier>       07/11/24 12:29:57

Modified files:
        src/core       : ReadSource.cpp 

Log message:
        * make rb_file_read() more robust by not detecting the end of file, but 
just reading in as many frames as requested.
        When they do not match, which most likely is due reading beyond the end 
of the file, stop processing by setting ringbuffer readposition to file length!

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ReadSource.cpp?cvsroot=traverso&r1=1.79&r2=1.80

Patches:
Index: ReadSource.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/ReadSource.cpp,v
retrieving revision 1.79
retrieving revision 1.80
diff -u -b -r1.79 -r1.80
--- ReadSource.cpp      8 Nov 2007 14:47:56 -0000       1.79
+++ ReadSource.cpp      24 Nov 2007 12:29:57 -0000      1.80
@@ -411,19 +411,15 @@
 
 int ReadSource::rb_file_read(DecodeBuffer* buffer, nframes_t cnt)
 {
-       TimeRef range(cnt, m_outputRate);
-       if ( (m_rbFileReadPos + range) > m_length) {
-               cnt = (m_length - m_rbFileReadPos).to_frame(m_outputRate);
-       }
-       
        nframes_t readFrames = file_read(buffer, m_rbFileReadPos, cnt);
        if (readFrames == cnt) {
                m_rbFileReadPos.add_frames(readFrames, m_outputRate);
        } else {
-               printf("ERROR in ReadSource::rb_file_read %s : \nreadFrames %d, 
requested %d, m_rbFileReadPos %d\n", QS_C(m_fileName), readFrames, cnt, 
m_rbRelativeFileReadPos.to_frame(get_rate()));
-               // DiskIO will be confused when cnt != readframes, so just for 
the sake of
-               // not looping in DiskIO::do_work(), fake that the file_read() 
did work out correctly!
-               m_rbFileReadPos.add_frames(cnt, m_outputRate);
+               // We either passed the end of the file, or our audio reader
+               // is doing weird things, is broken, invalid or something else
+               // Set the rinbuffer file readpos to m_length so processing 
stops here!
+               // * Due resample rounding issues, we nev
+               m_rbFileReadPos = m_length;
        }
 
        return readFrames;
@@ -602,7 +598,7 @@
 {
        int freespace = m_buffers.at(0)->write_space();
        
-//     printf("m_rbFileReadPos, m_length %d, %d\n", 
m_rbFileReadPos.to_frame(get_rate()), m_length.to_frame(get_rate()));
+//     printf("m_rbFileReadPos, m_length %lld, %lld\n", 
m_rbFileReadPos.universal_frame(), m_length.universal_frame());
 
        if (m_rbFileReadPos >= m_length) {
                m_bufferstatus->fillStatus =  100;




reply via email to

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