Diffstat (limited to 'core/multimedia/opieplayer/wavplugin') (more/less context) (show whitespace changes)
-rw-r--r-- | core/multimedia/opieplayer/wavplugin/Makefile.in | 4 | ||||
-rw-r--r-- | core/multimedia/opieplayer/wavplugin/wavplugin.cpp | 45 | ||||
-rw-r--r-- | core/multimedia/opieplayer/wavplugin/wavplugin.h | 24 |
3 files changed, 46 insertions, 27 deletions
diff --git a/core/multimedia/opieplayer/wavplugin/Makefile.in b/core/multimedia/opieplayer/wavplugin/Makefile.in index bcbe7f2..a46b925 100644 --- a/core/multimedia/opieplayer/wavplugin/Makefile.in +++ b/core/multimedia/opieplayer/wavplugin/Makefile.in @@ -91,19 +91,21 @@ listaddonentmodules: REQUIRES= ####### Sub-libraries ###### Combined headers ####### Compile wavplugin.o: wavplugin.cpp \ - wavplugin.h + wavplugin.h \ + ../mediaplayerplugininterface.h wavpluginimpl.o: wavpluginimpl.cpp \ wavplugin.h \ + ../mediaplayerplugininterface.h \ wavpluginimpl.h 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 @@ -8,24 +8,26 @@ ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ +// L.J.Potter added changes Fri 02-15-2002 + #include <stdio.h> #include <stdarg.h> #include <stdlib.h> #include <errno.h> #include <unistd.h> #include <qfile.h> #include "wavplugin.h" //#define debugMsg(a) qDebug(a) #define debugMsg(a) @@ -38,25 +40,25 @@ struct RiffChunk { struct ChunkData { Q_INT16 formatTag; Q_INT16 channels; Q_INT32 samplesPerSec; Q_INT32 avgBytesPerSec; Q_INT16 blockAlign; Q_INT16 wBitsPerSample; }; -const int sound_buffer_size = 4096; +const int sound_buffer_size = 512; // 4096; // you got to be kidding right? class WavPluginData { public: QFile *input; int wavedata_remaining; ChunkData chunkdata; RiffChunk chunk; uchar data[sound_buffer_size+32]; // +32 to handle badly aligned input data int out,max; int samples_due; @@ -64,47 +66,47 @@ public: WavPluginData() { max = out = sound_buffer_size; wavedata_remaining = 0; samples_due = 0; samples = -1; } // expands out samples to the frequency of 44kHz bool add( short *output, long count, long& done, bool stereo ) { done = 0; + qApp->processEvents(); if ( input == 0 ) { qDebug("no input"); return FALSE; } while ( count ) { int l,r; if ( getSample(l, r) == FALSE ) { qDebug("didn't get sample"); return FALSE; } - samples_due += 44100; + samples_due += chunkdata.samplesPerSec; while ( count && (samples_due > chunkdata.samplesPerSec) ) { *output++ = l; if ( stereo ) *output++ = r; samples_due -= chunkdata.samplesPerSec; count--; done++; } } - return TRUE; } 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); @@ -134,25 +136,25 @@ public: #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 - + qDebug("bits %d", chunkdata.wBitsPerSample); return TRUE; } // gets a sample from the file bool getSample(int& l, int& r) { l = r = 0; if ( input == 0 ) return FALSE; @@ -196,112 +198,112 @@ WavPlugin::WavPlugin() { d = new WavPluginData; d->input = 0; } WavPlugin::~WavPlugin() { close(); delete d; } bool WavPlugin::isFileSupported( const QString& path ) { - debugMsg( "WavPlugin::isFileSupported" ); +// qDebug( "WavPlugin::isFileSupported" ); char *ext = strrchr( path.latin1(), '.' ); // Test file extension 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; } return FALSE; } bool WavPlugin::open( const QString& path ) { - debugMsg( "WavPlugin::open" ); +// qDebug( "WavPlugin::open" ); d->max = d->out = sound_buffer_size; d->wavedata_remaining = 0; d->samples_due = 0; d->input = new QFile( path ); if ( d->input->open(IO_ReadOnly) == FALSE ) { qDebug("couldn't open file"); delete d->input; d->input = 0; return FALSE; } d->initialise(); return TRUE; } bool WavPlugin::close() { - debugMsg( "WavPlugin::close" ); +// qDebug( "WavPlugin::close" ); d->input->close(); delete d->input; d->input = 0; return TRUE; } bool WavPlugin::isOpen() { - debugMsg( "WavPlugin::isOpen" ); +// qDebug( "WavPlugin::isOpen" ); return ( d->input != 0 ); } int WavPlugin::audioStreams() { - debugMsg( "WavPlugin::audioStreams" ); +// qDebug( "WavPlugin::audioStreams" ); return 1; } 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 } 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 } int WavPlugin::audioSamples( int ) { - debugMsg( "WavPlugin::audioSamples" ); - return d->samples * 2 / d->chunkdata.channels; // ### Scaled samples will be made stereo, +// 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 } bool WavPlugin::audioSetSample( long, int ) { - debugMsg( "WavPlugin::audioSetSample" ); +// qDebug( "WavPlugin::audioSetSample" ); return FALSE; } long WavPlugin::audioGetSample( int ) { - debugMsg( "WavPlugin::audioGetSample" ); +// qDebug( "WavPlugin::audioGetSample" ); return 0; } /* bool WavPlugin::audioReadSamples( short *, int, long, int ) { debugMsg( "WavPlugin::audioReadSamples" ); return FALSE; } bool WavPlugin::audioReReadSamples( short *, int, long, int ) { debugMsg( "WavPlugin::audioReReadSamples" ); @@ -313,22 +315,27 @@ bool WavPlugin::audioReadMonoSamples( short *output, long samples, long& samples debugMsg( "WavPlugin::audioReadMonoSamples" ); return !d->add( output, samples, samplesMade, FALSE ); } bool WavPlugin::audioReadStereoSamples( short *output, long samples, long& samplesMade, int ) { debugMsg( "WavPlugin::audioReadStereoSamples" ); return !d->add( output, samples, samplesMade, TRUE ); } */ 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 ); } double WavPlugin::getTime() { - debugMsg( "WavPlugin::getTime" ); +// qDebug( "WavPlugin::getTime" ); return 0.0; } +int WavPlugin::audioBitsPerSample( int ) { +// qDebug( "WavPlugin::audioFormat %d", d->chunkdata.wBitsPerSample ); + return d->chunkdata.wBitsPerSample; // +} + diff --git a/core/multimedia/opieplayer/wavplugin/wavplugin.h b/core/multimedia/opieplayer/wavplugin/wavplugin.h index 64635ca..6afd67e 100644 --- a/core/multimedia/opieplayer/wavplugin/wavplugin.h +++ b/core/multimedia/opieplayer/wavplugin/wavplugin.h @@ -8,65 +8,73 @@ ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ +// L.J.Potter added changes Fri 02-15-2002 + #ifndef WAV_PLUGIN_H #define WAV_PLUGIN_H #include <qstring.h> #include <qapplication.h> -#include "mediaplayerplugininterface.h" +#include "../mediaplayerplugininterface.h" + + +// #define OLD_MEDIAPLAYER_API class WavPluginData; class WavPlugin : public MediaPlayerDecoder { public: WavPlugin(); ~WavPlugin(); const char *pluginName() { return "WavPlugin"; } const char *pluginComment() { return "This is a simple plugin for playing wav files"; } double pluginVersion() { return 1.0; } bool isFileSupported( const QString& ); bool open( const QString& ); bool close(); bool isOpen(); - //const QString &fileInfo() { return strInfo = qApp->translate( "MediaPlayer", "No Information Available", "media plugin text" ); } - const QString &fileInfo() { return strInfo = QString(""); } + const QString &fileInfo() { return strInfo = ""; } // If decoder doesn't support audio then return 0 here int audioStreams(); int audioChannels( int stream ); int audioFrequency( int stream ); + int audioBitsPerSample( int stream ); int audioSamples( int stream ); bool audioSetSample( long sample, int stream ); long audioGetSample( int stream ); - //bool audioReadMonoSamples( short *output, long samples, long& samplesRead, int stream ); - //bool audioReadStereoSamples( short *output, long samples, long& samplesRead, int stream ); +#ifdef OLD_MEDIAPLAYER_API + bool audioReadMonoSamples( short *output, long samples, long& samplesRead, int stream ); + bool audioReadStereoSamples( short *output, long samples, long& samplesRead, int stream ); + bool audioReadSamples( short *output, int channel, long samples, int stream ); + bool audioReReadSamples( short *output, int channel, long samples, int stream ); +#else bool audioReadSamples( short *output, int channels, long samples, long& samplesRead, int stream ); - //bool audioReadSamples( short *output, int channel, long samples, int stream ); - //bool audioReReadSamples( short *output, int channel, long samples, int stream ); +#endif // If decoder doesn't support video then return 0 here int videoStreams() { return 0; } int videoWidth( int ) { return 0; } int videoHeight( int ) { return 0; } double videoFrameRate( int ) { return 0.0; } int videoFrames( int ) { return 0; } bool videoSetFrame( long, int ) { return FALSE; } long videoGetFrame( int ) { return 0; } bool videoReadFrame( unsigned char **, int, int, int, int, ColorFormat, int ) { return FALSE; } bool videoReadScaledFrame( unsigned char **, int, int, int, int, int, int, ColorFormat, int ) { return FALSE; } bool videoReadYUVFrame( char *, char *, char *, int, int, int, int, int ) { return FALSE; } @@ -78,20 +86,22 @@ public: bool setSMP( int ) { return FALSE; } bool setMMX( bool ) { return FALSE; } // Capabilities bool supportsAudio() { return TRUE; } bool supportsVideo() { return FALSE; } bool supportsYUV() { return FALSE; } bool supportsMMX() { return TRUE; } bool supportsSMP() { return FALSE; } bool supportsStereo() { return TRUE; } bool supportsScaling() { return FALSE; } + long getPlayTime() { return -1; } + private: WavPluginData *d; QString strInfo; }; #endif |