Diffstat (limited to 'core/multimedia/opieplayer/wavplugin/wavplugin.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | core/multimedia/opieplayer/wavplugin/wavplugin.cpp | 261 |
1 files changed, 134 insertions, 127 deletions
diff --git a/core/multimedia/opieplayer/wavplugin/wavplugin.cpp b/core/multimedia/opieplayer/wavplugin/wavplugin.cpp index a6bd974..7f63b3b 100644 --- a/core/multimedia/opieplayer/wavplugin/wavplugin.cpp +++ b/core/multimedia/opieplayer/wavplugin/wavplugin.cpp @@ -19,2 +19,4 @@ **********************************************************************/ +// L.J.Potter added changes Fri 02-15-2002 + #include <stdio.h> @@ -28,3 +30,3 @@ -//#define debugMsg(a) qDebug(a) +//#define debugMsg(a) qDebug(a) #define debugMsg(a) @@ -49,3 +51,3 @@ struct ChunkData { -const int sound_buffer_size = 4096; +const int sound_buffer_size = 512; // 4096; // you got to be kidding right? @@ -65,6 +67,6 @@ public: WavPluginData() { - max = out = sound_buffer_size; - wavedata_remaining = 0; - samples_due = 0; - samples = -1; + max = out = sound_buffer_size; + wavedata_remaining = 0; + samples_due = 0; + samples = -1; } @@ -74,8 +76,9 @@ public: { - done = 0; + done = 0; + qApp->processEvents(); - if ( input == 0 ) { - qDebug("no input"); - return FALSE; - } + if ( input == 0 ) { + qDebug("no input"); + return FALSE; + } @@ -84,16 +87,15 @@ public: if ( getSample(l, r) == FALSE ) { - qDebug("didn't get sample"); - return FALSE; - } - samples_due += 44100; - while ( count && (samples_due > chunkdata.samplesPerSec) ) { - *output++ = l; - if ( stereo ) - *output++ = r; + qDebug("didn't get sample"); + return FALSE; + } + samples_due += chunkdata.samplesPerSec; + while ( count && (samples_due > chunkdata.samplesPerSec) ) { + *output++ = l; + if ( stereo ) + *output++ = r; samples_due -= chunkdata.samplesPerSec; count--; - done++; + done++; } } - return TRUE; @@ -102,47 +104,47 @@ public: bool initialise() { - if ( input == 0 ) - return FALSE; - - wavedata_remaining = -1; - - while ( wavedata_remaining == -1 ) { - // Keep reading chunks... - const int n = sizeof(chunk) - sizeof(chunk.data); - int t = input->readBlock( (char*)&chunk, n ); - if ( t != n ) { - if ( t == -1 ) - return FALSE; - return TRUE; - } - if ( qstrncmp(chunk.id,"data",4) == 0 ) { - samples = wavedata_remaining = chunk.size; - } else if ( qstrncmp(chunk.id,"RIFF",4) == 0 ) { - char d[4]; - if ( input->readBlock(d,4) != 4 ) { - return FALSE; - } - if ( qstrncmp(d,"WAVE",4) != 0 ) { - // skip - if ( chunk.size > 1000000000 || !input->at(input->at()+chunk.size-4) ) { - return FALSE; - } - } - } else if ( qstrncmp(chunk.id,"fmt ",4) == 0 ) { - if ( input->readBlock((char*)&chunkdata,sizeof(chunkdata)) != sizeof(chunkdata) ) { - return FALSE; - } + if ( input == 0 ) + return FALSE; + + wavedata_remaining = -1; + + while ( wavedata_remaining == -1 ) { + // Keep reading chunks... + const int n = sizeof(chunk) - sizeof(chunk.data); + int t = input->readBlock( (char*)&chunk, n ); + if ( t != n ) { + if ( t == -1 ) + return FALSE; + return TRUE; + } + if ( qstrncmp(chunk.id,"data",4) == 0 ) { + samples = wavedata_remaining = chunk.size; + } else if ( qstrncmp(chunk.id,"RIFF",4) == 0 ) { + char d[4]; + if ( input->readBlock(d,4) != 4 ) { + return FALSE; + } + if ( qstrncmp(d,"WAVE",4) != 0 ) { + // skip + if ( chunk.size > 1000000000 || !input->at(input->at()+chunk.size-4) ) { + return FALSE; + } + } + } else if ( qstrncmp(chunk.id,"fmt ",4) == 0 ) { + if ( input->readBlock((char*)&chunkdata,sizeof(chunkdata)) != sizeof(chunkdata) ) { + return FALSE; + } #define WAVE_FORMAT_PCM 1 - if ( chunkdata.formatTag != WAVE_FORMAT_PCM ) { - qDebug("WAV file: UNSUPPORTED FORMAT %d",chunkdata.formatTag); - return FALSE; - } - } else { - // ignored chunk - if ( chunk.size > 1000000000 || !input->at(input->at()+chunk.size) ) { - return FALSE; - } - } - } // while - - return TRUE; + if ( chunkdata.formatTag != WAVE_FORMAT_PCM ) { + qDebug("WAV file: UNSUPPORTED FORMAT %d",chunkdata.formatTag); + return FALSE; + } + } else { + // ignored chunk + if ( chunk.size > 1000000000 || !input->at(input->at()+chunk.size) ) { + return FALSE; + } + } + } // while + qDebug("bits %d", chunkdata.wBitsPerSample); + return TRUE; } @@ -153,38 +155,38 @@ public: { - l = r = 0; - - if ( input == 0 ) - return FALSE; - - if ( (wavedata_remaining < 0) || !max ) - return FALSE; - - if ( out >= max ) { - max = input->readBlock( (char*)data, (uint)QMIN(sound_buffer_size,wavedata_remaining) ); - - wavedata_remaining -= max; - - out = 0; - if ( max <= 0 ) { - max = 0; - return TRUE; - } - } - if ( chunkdata.wBitsPerSample == 8 ) { - l = (data[out++] - 128) * 128; - } else { - l = ((short*)data)[out/2]; - out += 2; - } - if ( chunkdata.channels == 1 ) { - r = l; - } else { - if ( chunkdata.wBitsPerSample == 8 ) { - r = (data[out++] - 128) * 128; - } else { - r = ((short*)data)[out/2]; - out += 2; - } - } - return TRUE; + l = r = 0; + + if ( input == 0 ) + return FALSE; + + if ( (wavedata_remaining < 0) || !max ) + return FALSE; + + if ( out >= max ) { + max = input->readBlock( (char*)data, (uint)QMIN(sound_buffer_size,wavedata_remaining) ); + + wavedata_remaining -= max; + + out = 0; + if ( max <= 0 ) { + max = 0; + return TRUE; + } + } + if ( chunkdata.wBitsPerSample == 8 ) { + l = (data[out++] - 128) * 128; + } else { + l = ((short*)data)[out/2]; + out += 2; + } + if ( chunkdata.channels == 1 ) { + r = l; + } else { + if ( chunkdata.wBitsPerSample == 8 ) { + r = (data[out++] - 128) * 128; + } else { + r = ((short*)data)[out/2]; + out += 2; + } + } + return TRUE; } // getSample @@ -207,3 +209,3 @@ WavPlugin::~WavPlugin() { bool WavPlugin::isFileSupported( const QString& path ) { - debugMsg( "WavPlugin::isFileSupported" ); +// qDebug( "WavPlugin::isFileSupported" ); @@ -213,8 +215,8 @@ bool WavPlugin::isFileSupported( const QString& path ) { if ( ext ) { - if ( strncasecmp(ext, ".raw", 4) == 0 ) - return TRUE; - if ( strncasecmp(ext, ".wav", 4) == 0 ) - return TRUE; - if ( strncasecmp(ext, ".wave", 4) == 0 ) - return TRUE; + if ( strncasecmp(ext, ".raw", 4) == 0 ) + return TRUE; + if ( strncasecmp(ext, ".wav", 4) == 0 ) + return TRUE; + if ( strncasecmp(ext, ".wave", 4) == 0 ) + return TRUE; } @@ -226,3 +228,3 @@ bool WavPlugin::isFileSupported( const QString& path ) { bool WavPlugin::open( const QString& path ) { - debugMsg( "WavPlugin::open" ); +// qDebug( "WavPlugin::open" ); @@ -234,6 +236,6 @@ bool WavPlugin::open( const QString& path ) { if ( d->input->open(IO_ReadOnly) == FALSE ) { - qDebug("couldn't open file"); - delete d->input; - d->input = 0; - return FALSE; + qDebug("couldn't open file"); + delete d->input; + d->input = 0; + return FALSE; } @@ -247,3 +249,3 @@ bool WavPlugin::open( const QString& path ) { bool WavPlugin::close() { - debugMsg( "WavPlugin::close" ); +// qDebug( "WavPlugin::close" ); @@ -257,3 +259,3 @@ bool WavPlugin::close() { bool WavPlugin::isOpen() { - debugMsg( "WavPlugin::isOpen" ); +// qDebug( "WavPlugin::isOpen" ); return ( d->input != 0 ); @@ -263,3 +265,3 @@ bool WavPlugin::isOpen() { int WavPlugin::audioStreams() { - debugMsg( "WavPlugin::audioStreams" ); +// qDebug( "WavPlugin::audioStreams" ); return 1; @@ -269,4 +271,4 @@ int WavPlugin::audioStreams() { int WavPlugin::audioChannels( int ) { - debugMsg( "WavPlugin::audioChannels" ); - return 2; // ### Always scale audio to stereo samples +// qDebug( "WavPlugin::audioChannels" ); + return d->chunkdata.channels;// 2; // ### Always scale audio to stereo samples } @@ -275,4 +277,4 @@ int WavPlugin::audioChannels( int ) { int WavPlugin::audioFrequency( int ) { - debugMsg( "WavPlugin::audioFrequency" ); - return 44100; // ### Always scale to frequency of 44100 +// qDebug( "WavPlugin::audioFrequency %d", d->chunkdata.samplesPerSec ); + return d->chunkdata.samplesPerSec; //44100; // ### Always scale to frequency of 44100 } @@ -281,5 +283,5 @@ int WavPlugin::audioFrequency( int ) { int WavPlugin::audioSamples( int ) { - debugMsg( "WavPlugin::audioSamples" ); - return d->samples * 2 / d->chunkdata.channels; // ### Scaled samples will be made stereo, - // Therefore if source is mono we will double the number of samples +// qDebug( "WavPlugin::audioSamples" ); + return d->samples / d->chunkdata.channels/2; // ### Scaled samples will be made stereo, + // Therefore if source is mono we will double the number of samples } @@ -288,3 +290,3 @@ int WavPlugin::audioSamples( int ) { bool WavPlugin::audioSetSample( long, int ) { - debugMsg( "WavPlugin::audioSetSample" ); +// qDebug( "WavPlugin::audioSetSample" ); return FALSE; @@ -294,3 +296,3 @@ bool WavPlugin::audioSetSample( long, int ) { long WavPlugin::audioGetSample( int ) { - debugMsg( "WavPlugin::audioGetSample" ); +// qDebug( "WavPlugin::audioGetSample" ); return 0; @@ -324,3 +326,3 @@ bool WavPlugin::audioReadStereoSamples( short *output, long samples, long& sampl bool WavPlugin::audioReadSamples( short *output, int channels, long samples, long& samplesMade, int ) { - debugMsg( "WavPlugin::audioReadSamples" ); +// qDebug( "WavPlugin::audioReadSamples" ); return d->add( output, samples, samplesMade, channels != 1 ); @@ -329,3 +331,3 @@ bool WavPlugin::audioReadSamples( short *output, int channels, long samples, lon double WavPlugin::getTime() { - debugMsg( "WavPlugin::getTime" ); +// qDebug( "WavPlugin::getTime" ); return 0.0; @@ -333,2 +335,7 @@ double WavPlugin::getTime() { +int WavPlugin::audioBitsPerSample( int ) { +// qDebug( "WavPlugin::audioFormat %d", d->chunkdata.wBitsPerSample ); + return d->chunkdata.wBitsPerSample; // +} + |