summaryrefslogtreecommitdiff
path: root/core/multimedia/opieplayer/wavplugin/wavplugin.cpp
Side-by-side diff
Diffstat (limited to 'core/multimedia/opieplayer/wavplugin/wavplugin.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/multimedia/opieplayer/wavplugin/wavplugin.cpp261
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; //
+}
+