traverso-commit
[Top][All Lists]
Advanced

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

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


From: Ben Levitt
Subject: [Traverso-commit] traverso/src/core MadAudioReader.cpp
Date: Sun, 15 Jul 2007 19:59:35 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Ben Levitt <benjie>     07/07/15 19:59:35

Modified files:
        src/core       : MadAudioReader.cpp 

Log message:
        Fix 2 mad bugs that caused crashes during resampling (and that could 
have crashed even when not resampling, but memory layout was just lucky.  :P ) 

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/MadAudioReader.cpp?cvsroot=traverso&r1=1.4&r2=1.5

Patches:
Index: MadAudioReader.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/MadAudioReader.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- MadAudioReader.cpp  15 Jul 2007 05:14:47 -0000      1.4
+++ MadAudioReader.cpp  15 Jul 2007 19:59:35 -0000      1.5
@@ -691,7 +691,7 @@
                //printf("seekOffset: %lu (start: %lu)\n", frameOffset, start);
                d->outputBuffer = 0; // Zeros so that we write to overflow
                d->outputBufferEnd = 0;
-               d->outputPointer = d->outputBufferEnd + 1;
+               d->outputPointer = 0;
                createPcmSamples(d->handle->madSynth);
                d->overflowStart = frameOffset;
                d->overflowSize -= frameOffset;
@@ -828,7 +828,7 @@
        // is get_length() reporting incorrectly?
        // are we not outputting the last mp3-frame for some reason?
        int remainingSamplesRequested = sampleCount - samplesWritten;
-       int remainingSamplesInFile = (get_length() - m_nextFrame) * 
get_num_channels();
+       int remainingSamplesInFile = (get_length() - m_nextFrame) * 
get_num_channels() - samplesWritten;
        if (remainingSamplesRequested > 0 && remainingSamplesInFile > 0) {
                int padLength = (remainingSamplesRequested > 
remainingSamplesInFile) ? remainingSamplesInFile : remainingSamplesRequested;
                memset(d->outputPointer, 0, padLength * sizeof(audio_sample_t));
@@ -851,13 +851,18 @@
 
 bool MadAudioReader::createPcmSamples(mad_synth* synth)
 {
-       unsigned short nframes = synth->pcm.length;
+       nframes_t nframes = synth->pcm.length;
        bool overflow = false;
        int i;
        
+       if ((nframes + ((d->outputPointer - d->outputBuffer)/get_num_channels() 
+ m_nextFrame)) > get_length()) {
+               nframes = get_length() - ((d->outputPointer - 
d->outputBuffer)/get_num_channels() + m_nextFrame);
+               //printf("!!!nframes: %lu, length: %lu, current: %lu\n", 
nframes, get_length(), (d->outputPointer - d->outputBuffer)/get_num_channels() 
+ m_nextFrame);
+       }
+       
        // now create the output
        for (i = 0; i < nframes; i++) {
-               if (overflow == false && d->outputPointer > d->outputBufferEnd) 
{
+               if (overflow == false && d->outputPointer >= 
d->outputBufferEnd) {
                        d->outputPointer = d->overflowBuffer;
                        overflow = true;
                }




reply via email to

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