[Top][All Lists]
[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;