29 files changed, 508 insertions, 172 deletions
diff --git a/core/multimedia/opieplayer/Makefile.in b/core/multimedia/opieplayer/Makefile.in index 1b0307a..8d33fb4 100644 --- a/core/multimedia/opieplayer/Makefile.in +++ b/core/multimedia/opieplayer/Makefile.in @@ -131,102 +131,115 @@ REQUIRES= ###### Combined headers ####### Compile main.o: main.cpp \ $(OPIEDIR)/include/qpe/qpeapplication.h \ + $(OPIEDIR)/include/qpedecoration_qws.h \ + $(OPIEDIR)/include/timestring.h \ mediaplayerstate.h \ playlistwidget.h \ $(OPIEDIR)/include/qpe/applnk.h \ audiowidget.h \ videowidget.h \ loopcontrol.h \ mediaplayer.h \ $(OPIEDIR)/include/qpe/qlibrary.h \ $(OPIEDIR)/include/qpe/qcom.h \ $(OPIEDIR)/include/qpe/quuid.h \ - $(OPIEDIR)/include/qpe/mediaplayerplugininterface.h + mediaplayerplugininterface.h loopcontrol.o: loopcontrol.cpp \ $(OPIEDIR)/include/qpe/qpeapplication.h \ - $(OPIEDIR)/include/qpe/qcopenvelope_qws.h \ + $(OPIEDIR)/include/qpedecoration_qws.h \ + $(OPIEDIR)/include/timestring.h \ loopcontrol.h \ videowidget.h \ audiodevice.h \ mediaplayerplugininterface.h \ $(OPIEDIR)/include/qpe/qcom.h \ $(OPIEDIR)/include/qpe/quuid.h \ mediaplayerstate.h playlistselection.o: playlistselection.cpp \ $(OPIEDIR)/include/qpe/applnk.h \ $(OPIEDIR)/include/qpe/resource.h \ playlistselection.h mediaplayerstate.o: mediaplayerstate.cpp \ $(OPIEDIR)/include/qpe/qpeapplication.h \ + $(OPIEDIR)/include/qpedecoration_qws.h \ + $(OPIEDIR)/include/timestring.h \ $(OPIEDIR)/include/qpe/qlibrary.h \ $(OPIEDIR)/include/qpe/qcom.h \ $(OPIEDIR)/include/qpe/quuid.h \ - $(OPIEDIR)/include/qpe/mediaplayerplugininterface.h \ $(OPIEDIR)/include/qpe/config.h \ + mediaplayerplugininterface.h \ mediaplayerstate.h \ libmad/libmadpluginimpl.h \ libmpeg3/libmpeg3pluginimpl.h \ wavplugin/wavpluginimpl.h videowidget.o: videowidget.cpp \ $(OPIEDIR)/include/qpe/resource.h \ - $(OPIEDIR)/include/qpe/mediaplayerplugininterface.h \ + mediaplayerplugininterface.h \ $(OPIEDIR)/include/qpe/qcom.h \ $(OPIEDIR)/include/qpe/quuid.h \ videowidget.h \ mediaplayerstate.h audiowidget.o: audiowidget.cpp \ $(OPIEDIR)/include/qpe/resource.h \ audiowidget.h \ mediaplayerstate.h playlistwidget.o: playlistwidget.cpp \ $(OPIEDIR)/include/qpe/qpemenubar.h \ $(OPIEDIR)/include/qpe/qpetoolbar.h \ $(OPIEDIR)/include/qpe/fileselector.h \ + $(OPIEDIR)/include/filemanager.h \ + $(OPIEDIR)/include/applnk.h \ + $(OPIEDIR)/include/qpe/qpeapplication.h \ + $(OPIEDIR)/include/qpedecoration_qws.h \ + $(OPIEDIR)/include/timestring.h \ $(OPIEDIR)/include/qpe/applnk.h \ $(OPIEDIR)/include/qpe/config.h \ $(OPIEDIR)/include/qpe/global.h \ $(OPIEDIR)/include/qpe/resource.h \ playlistselection.h \ playlistwidget.h \ mediaplayerstate.h mediaplayer.o: mediaplayer.cpp \ $(OPIEDIR)/include/qpe/qpeapplication.h \ + $(OPIEDIR)/include/qpedecoration_qws.h \ + $(OPIEDIR)/include/timestring.h \ $(OPIEDIR)/include/qpe/qlibrary.h \ $(OPIEDIR)/include/qpe/qcom.h \ $(OPIEDIR)/include/qpe/quuid.h \ $(OPIEDIR)/include/qpe/resource.h \ $(OPIEDIR)/include/qpe/config.h \ mediaplayer.h \ - $(OPIEDIR)/include/qpe/mediaplayerplugininterface.h \ + mediaplayerplugininterface.h \ playlistwidget.h \ $(OPIEDIR)/include/qpe/applnk.h \ audiowidget.h \ loopcontrol.h \ audiodevice.h \ mediaplayerstate.h audiodevice.o: audiodevice.cpp \ $(OPIEDIR)/include/qpe/qpeapplication.h \ + $(OPIEDIR)/include/qpedecoration_qws.h \ + $(OPIEDIR)/include/timestring.h \ $(OPIEDIR)/include/qpe/config.h \ - audiodevice.h \ - $(OPIEDIR)/include/qpe/qcopenvelope_qws.h + audiodevice.h moc_loopcontrol.o: moc_loopcontrol.cpp \ loopcontrol.h moc_playlistselection.o: moc_playlistselection.cpp \ playlistselection.h \ $(OPIEDIR)/include/qpe/applnk.h @@ -243,17 +256,17 @@ moc_playlistwidget.o: moc_playlistwidget.cpp \ playlistwidget.h \ $(OPIEDIR)/include/qpe/applnk.h moc_mediaplayer.o: moc_mediaplayer.cpp \ mediaplayer.h \ $(OPIEDIR)/include/qpe/qlibrary.h \ $(OPIEDIR)/include/qpe/qcom.h \ $(OPIEDIR)/include/qpe/quuid.h \ - $(OPIEDIR)/include/qpe/mediaplayerplugininterface.h + mediaplayerplugininterface.h moc_audiodevice.o: moc_audiodevice.cpp \ audiodevice.h moc_loopcontrol.cpp: loopcontrol.h $(MOC) loopcontrol.h -o moc_loopcontrol.cpp moc_playlistselection.cpp: playlistselection.h diff --git a/core/multimedia/opieplayer/audiodevice.cpp b/core/multimedia/opieplayer/audiodevice.cpp index 8861015..59136af 100644 --- a/core/multimedia/opieplayer/audiodevice.cpp +++ b/core/multimedia/opieplayer/audiodevice.cpp @@ -12,17 +12,21 @@ ** 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 better error code Fri 02-15-2002 14:37:47 + + #include <stdlib.h> +#include <stdio.h> #include <qpe/qpeapplication.h> #include <qpe/config.h> #include "audiodevice.h" #if ( defined Q_WS_QWS || defined(_WS_QWS_) ) && !defined(QT_NO_COP) #include "qpe/qcopenvelope_qws.h" #endif @@ -107,20 +111,21 @@ void AudioDevice::getVolume( unsigned int& leftVolume, unsigned int& rightVolume if ( waveOutGetVolume( handle, (LPDWORD)&volume ) ) qDebug( "get volume of audio device failed" ); waveOutClose( handle ); leftVolume = volume & 0xFFFF; rightVolume = volume >> 16; #else int mixerHandle = open( "/dev/mixer", O_RDWR ); if ( mixerHandle >= 0 ) { - ioctl( mixerHandle, MIXER_READ(0), &volume ); + if(ioctl( mixerHandle, MIXER_READ(0), &volume )==-1) + perror("ioctl(\"MIXER_READ\")"); close( mixerHandle ); } else - qDebug( "get volume of audio device failed" ); + perror("open(\"/dev/mixer\")"); leftVolume = ((volume & 0x00FF) << 16) / 101; rightVolume = ((volume & 0xFF00) << 8) / 101; #endif } void AudioDevice::setVolume( unsigned int leftVolume, unsigned int rightVolume, bool muted ) { AudioDevicePrivate::muted = muted; @@ -152,20 +157,22 @@ void AudioDevice::setVolume( unsigned int leftVolume, unsigned int rightVolume, // Volume can be from 0 to 100 which is 101 distinct values unsigned int rV = (rightVolume * 101) >> 16; # if 0 unsigned int lV = (leftVolume * 101) >> 16; unsigned int volume = ((rV << 8) & 0xFF00) | (lV & 0x00FF); int mixerHandle = 0; if ( ( mixerHandle = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { - ioctl( mixerHandle, MIXER_WRITE(0), &volume ); + if(ioctl( mixerHandle, MIXER_WRITE(0), &volume ) ==-1) + perror("ioctl(\"MIXER_WRITE\")"); close( mixerHandle ); } else - qDebug( "set volume of audio device failed" ); + perror("open(\"/dev/mixer\")"); + # else // This is the way this has to be done now I guess, doesn't allow for // independant right and left channel setting, or setting for different outputs Config cfg("Sound"); cfg.setGroup("System"); cfg.writeEntry("Volume",(int)rV); # endif @@ -180,92 +187,70 @@ void AudioDevice::setVolume( unsigned int leftVolume, unsigned int rightVolume, AudioDevice::AudioDevice( unsigned int f, unsigned int chs, unsigned int bps ) { d = new AudioDevicePrivate; d->frequency = f; d->channels = chs; d->bytesPerSample = bps; + qDebug("%d",bps); + int format=0; + if( bps == 8) format = AFMT_U8; + else if( bps <= 0) format = AFMT_S16_LE; + else format = AFMT_S16_LE; + qDebug("AD- freq %d, channels %d, b/sample %d, bitrate %d",f,chs,bps,format); connect( qApp, SIGNAL( volumeChanged(bool) ), this, SLOT( volumeChanged(bool) ) ); -#ifdef Q_OS_WIN32 - UINT result; - WAVEFORMATEX formatData; - formatData.cbSize = sizeof(WAVEFORMATEX); -/* - // Other possible formats windows supports - formatData.wFormatTag = WAVE_FORMAT_MPEG; - formatData.wFormatTag = WAVE_FORMAT_MPEGLAYER3; - formatData.wFormatTag = WAVE_FORMAT_ADPCM; -*/ - formatData.wFormatTag = WAVE_FORMAT_PCM; - formatData.nAvgBytesPerSec = bps * chs * f; - formatData.nBlockAlign = bps * chs; - formatData.nChannels = chs; - formatData.nSamplesPerSec = f; - formatData.wBitsPerSample = bps * 8; - // Open a waveform device for output - if (result = waveOutOpen((LPHWAVEOUT)&d->handle, WAVE_MAPPER, &formatData, 0L, 0L, CALLBACK_NULL)) { - QString errorMsg = "error opening audio device.\nReason: %i - "; - switch (result) { - case MMSYSERR_ALLOCATED: errorMsg += "Specified resource is already allocated."; break; - case MMSYSERR_BADDEVICEID: errorMsg += "Specified device identifier is out of range."; break; - case MMSYSERR_NODRIVER: errorMsg += "No device driver is present."; break; - case MMSYSERR_NOMEM: errorMsg += "Unable to allocate or lock memory."; break; - case WAVERR_BADFORMAT: errorMsg += "Attempted to open with an unsupported waveform-audio format."; break; - case WAVERR_SYNC: errorMsg += "The device is synchronous but waveOutOpen was called without using the WAVE_ALLOWSYNC flag."; break; - default: errorMsg += "Undefined error"; break; - } - qDebug( errorMsg, result ); - } - - d->bufferSize = sound_fragment_bytes; -#else int fragments = 0x10000 * 8 + sound_fragment_shift; - int format = AFMT_S16_LE; int capabilities = 0; #ifdef KEEP_DEVICE_OPEN if ( AudioDevicePrivate::dspFd == 0 ) { #endif if ( ( d->handle = ::open( "/dev/dsp", O_WRONLY ) ) < 0 ) { - qDebug( "error opening audio device /dev/dsp, sending data to /dev/null instead" ); + perror("open(\"/dev/dsp\") sending to /dev/null instead"); d->handle = ::open( "/dev/null", O_WRONLY ); } #ifdef KEEP_DEVICE_OPEN AudioDevicePrivate::dspFd = d->handle; } else { d->handle = AudioDevicePrivate::dspFd; } #endif - ioctl( d->handle, SNDCTL_DSP_GETCAPS, &capabilities ); - ioctl( d->handle, SNDCTL_DSP_SETFRAGMENT, &fragments ); - ioctl( d->handle, SNDCTL_DSP_SETFMT, &format ); - ioctl( d->handle, SNDCTL_DSP_SPEED, &d->frequency ); + if(ioctl( d->handle, SNDCTL_DSP_GETCAPS, &capabilities )==-1) + perror("ioctl(\"SNDCTL_DSP_GETCAPS\")"); + if(ioctl( d->handle, SNDCTL_DSP_SETFRAGMENT, &fragments )==-1) + perror("ioctl(\"SNDCTL_DSP_SETFRAGMENT\")"); + if(ioctl( d->handle, SNDCTL_DSP_SETFMT, & format )==-1) + perror("ioctl(\"SNDCTL_DSP_SETFMT\")"); + qDebug("freq %d", d->frequency); + if(ioctl( d->handle, SNDCTL_DSP_SPEED, &d->frequency )==-1) + perror("ioctl(\"SNDCTL_DSP_SPEED\")"); + qDebug("channels %d",d->channels); if ( ioctl( d->handle, SNDCTL_DSP_CHANNELS, &d->channels ) == -1 ) { d->channels = ( d->channels == 1 ) ? 2 : d->channels; - ioctl( d->handle, SNDCTL_DSP_CHANNELS, &d->channels ); + if(ioctl( d->handle, SNDCTL_DSP_CHANNELS, &d->channels )==-1) + perror("ioctl(\"SNDCTL_DSP_CHANNELS\")"); } d->bufferSize = sound_fragment_bytes; d->unwrittenBuffer = new char[d->bufferSize]; d->unwritten = 0; d->can_GETOSPACE = TRUE; // until we find otherwise //if ( chs != d->channels ) qDebug( "Wanted %d, got %d channels", chs, d->channels ); //if ( f != d->frequency ) qDebug( "wanted %dHz, got %dHz", f, d->frequency ); //if ( capabilities & DSP_CAP_BATCH ) qDebug( "Sound card has local buffer" ); //if ( capabilities & DSP_CAP_REALTIME )qDebug( "Sound card has realtime sync" ); //if ( capabilities & DSP_CAP_TRIGGER ) qDebug( "Sound card has precise trigger" ); //if ( capabilities & DSP_CAP_MMAP ) qDebug( "Sound card can mmap" ); -#endif } AudioDevice::~AudioDevice() { #ifdef Q_OS_WIN32 waveOutClose( (HWAVEOUT)d->handle ); #else # ifndef KEEP_DEVICE_OPEN diff --git a/core/multimedia/opieplayer/audiodevice.h b/core/multimedia/opieplayer/audiodevice.h index 928f134..dcd79fe 100644 --- a/core/multimedia/opieplayer/audiodevice.h +++ b/core/multimedia/opieplayer/audiodevice.h @@ -12,30 +12,34 @@ ** 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 AUDIODEVICE_H #define AUDIODEVICE_H #include <qobject.h> +#include <sys/soundcard.h> class AudioDevicePrivate; class AudioDevice : public QObject { Q_OBJECT public: - AudioDevice( unsigned int freq = 44000, unsigned int channels = 2, unsigned int bytesPerSample = 2 ); + AudioDevice( unsigned int freq = 44000, unsigned int channels = 2, unsigned int bytesPerSample = AFMT_S16_LE ); ~AudioDevice(); unsigned int canWrite() const; void write( char *buffer, unsigned int length ); int bytesWritten(); unsigned int channels() const; unsigned int frequency() const; diff --git a/core/multimedia/opieplayer/audiowidget.cpp b/core/multimedia/opieplayer/audiowidget.cpp index 243c58c..0d88591 100644 --- a/core/multimedia/opieplayer/audiowidget.cpp +++ b/core/multimedia/opieplayer/audiowidget.cpp @@ -56,17 +56,17 @@ MediaButton audioButtons[] = { static const int numButtons = (sizeof(audioButtons)/sizeof(MediaButton)); AudioWidget::AudioWidget(QWidget* parent, const char* name, WFlags f) : QWidget( parent, name, f ) { - setCaption( tr("MediaPlayer") ); + setCaption( tr("OpiePlayer") ); setBackgroundPixmap( Resource::loadPixmap( "mpegplayer/metalFinish" ) ); pixmaps[0] = new QPixmap( Resource::loadPixmap( "mpegplayer/mediaButtonsAll" ) ); pixmaps[1] = new QPixmap( Resource::loadPixmap( "mpegplayer/mediaButtonsBig" ) ); pixmaps[2] = new QPixmap( Resource::loadPixmap( "mpegplayer/mediaControls" ) ); pixmaps[3] = new QPixmap( Resource::loadPixmap( "mpegplayer/animatedButton" ) ); songInfo = new Ticker( this ); songInfo->setFocusPolicy( QWidget::NoFocus ); diff --git a/core/multimedia/opieplayer/libflash/libflashplugin.h b/core/multimedia/opieplayer/libflash/libflashplugin.h index 532bca2..a2f1c42 100644 --- a/core/multimedia/opieplayer/libflash/libflashplugin.h +++ b/core/multimedia/opieplayer/libflash/libflashplugin.h @@ -19,17 +19,18 @@ **********************************************************************/ #ifndef LIBFLASH_PLUGIN_H #define LIBFLASH_PLUGIN_H #include <qstring.h> #include <qapplication.h> #include "flash.h" -#include "mediaplayerplugininterface.h" +//#include <qpe/mediaplayerplugininterface.h> +#include "../mediaplayerplugininterface.h" class LibFlashPlugin : public MediaPlayerDecoder { public: LibFlashPlugin(); ~LibFlashPlugin() { close(); } @@ -43,16 +44,17 @@ public: bool isOpen() { return file != NULL; } const QString &fileInfo() { return strInfo = qApp->translate( "MediaPlayer", "No Information Available", "media plugin text" ); } // If decoder doesn't support audio then return 0 here int audioStreams() { return 1; } int audioChannels( int /*stream*/ ) { return 2; } int audioFrequency( int /*stream*/ ) { return 44100; } int audioSamples( int /*stream*/ ) { return 1000000; } +int audioBitsPerSample(int) { return 0;} 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 ); 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 ); diff --git a/core/multimedia/opieplayer/libflash/libflashpluginimpl.h b/core/multimedia/opieplayer/libflash/libflashpluginimpl.h index b5cc869..cb8d959 100644 --- a/core/multimedia/opieplayer/libflash/libflashpluginimpl.h +++ b/core/multimedia/opieplayer/libflash/libflashpluginimpl.h @@ -16,16 +16,17 @@ ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef LIBFLASH_PLUGIN_IMPL_H #define LIBFLASH_PLUGIN_IMPL_H +//#include <qpe/mediaplayerplugininterface.h> #include "../mediaplayerplugininterface.h" class LibFlashPlugin; class LibFlashPluginImpl : public MediaPlayerPluginInterface { diff --git a/core/multimedia/opieplayer/libflash/swf.h b/core/multimedia/opieplayer/libflash/swf.h index 5f5e4f7..48986cc 100644 --- a/core/multimedia/opieplayer/libflash/swf.h +++ b/core/multimedia/opieplayer/libflash/swf.h @@ -203,17 +203,17 @@ typedef void (*ScanLineFunc)(void *id, long y, long start, long end); class Bitmap; struct FlashMovie; extern "C" { #include "jpeglib.h" }; extern "C" { //#include "zlib.h" -#include "../src/3rdparty/zlib/zlib.h" +#include "/opt/qt-2.3.2-embedded/src/3rdparty/zlib/zlib.h" }; #include "graphic.h" #include "character.h" #include "bitmap.h" #include "shape.h" #include "displaylist.h" #include "sound.h" diff --git a/core/multimedia/opieplayer/libmad/Makefile.in b/core/multimedia/opieplayer/libmad/Makefile.in index e9f74e7..552043c 100644 --- a/core/multimedia/opieplayer/libmad/Makefile.in +++ b/core/multimedia/opieplayer/libmad/Makefile.in @@ -209,15 +209,17 @@ layer3.o: layer3.c \ imdct_s.dat huffman.o: huffman.c \ libmad_global.h \ huffman.h libmadplugin.o: libmadplugin.cpp \ libmadplugin.h \ + ../mediaplayerplugininterface.h \ mad.h libmadpluginimpl.o: libmadpluginimpl.cpp \ libmadplugin.h \ + ../mediaplayerplugininterface.h \ libmadpluginimpl.h diff --git a/core/multimedia/opieplayer/libmad/libmad.pro b/core/multimedia/opieplayer/libmad/libmad.pro index 6c40a15..b54ca6b 100644 --- a/core/multimedia/opieplayer/libmad/libmad.pro +++ b/core/multimedia/opieplayer/libmad/libmad.pro @@ -3,10 +3,12 @@ CONFIG += qt warn_on release HEADERS = libmad_version.h fixed.h bit.h timer.h stream.h frame.h synth.h decoder.h \ layer12.h layer3.h huffman.h libmad_global.h mad.h libmadplugin.h libmadpluginimpl.h SOURCES = version.c fixed.c bit.c timer.c stream.c frame.c synth.c decoder.c \ layer12.c layer3.c huffman.c libmadplugin.cpp libmadpluginimpl.cpp TARGET = madplugin DESTDIR = ../../plugins/codecs INCLUDEPATH += $(OPIEDIR)/include .. DEPENDPATH += ../$(OPIEDIR)/include .. +TMAKE_CFLAGS += -DFPM_64BIT +TMAKE_CXXFLAGS += -DFPM_64BIT LIBS += -lqpe -lm VERSION = 1.0.0 diff --git a/core/multimedia/opieplayer/libmad/libmadplugin.h b/core/multimedia/opieplayer/libmad/libmadplugin.h index 88647ae..ff84c27 100644 --- a/core/multimedia/opieplayer/libmad/libmadplugin.h +++ b/core/multimedia/opieplayer/libmad/libmadplugin.h @@ -17,17 +17,21 @@ ** not clear to you. ** **********************************************************************/ #ifndef LIBMAD_PLUGIN_H #define LIBMAD_PLUGIN_H #include <qstring.h> -#include "mediaplayerplugininterface.h" +//#include <qpe/mediaplayerplugininterface.h> +#include "../mediaplayerplugininterface.h" + + +// #define OLD_MEDIAPLAYER_API class LibMadPluginData; class LibMadPlugin : public MediaPlayerDecoder { public: @@ -45,22 +49,26 @@ public: const QString &fileInfo() { return info; } // If decoder doesn't support audio then return 0 here int audioStreams(); int audioChannels( int stream ); int audioFrequency( int stream ); int audioSamples( int stream ); bool audioSetSample( long sample, int stream ); + int audioBitsPerSample(int) {return 0;} 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 bool read(); bool decode( short *output, long samples, long& samplesRead ); void printID3Tags(); // If decoder doesn't support video then return 0 here @@ -86,16 +94,18 @@ public: 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: LibMadPluginData *d; QString info; }; #endif diff --git a/core/multimedia/opieplayer/libmad/libmadpluginimpl.h b/core/multimedia/opieplayer/libmad/libmadpluginimpl.h index a26b421..8ad4956 100644 --- a/core/multimedia/opieplayer/libmad/libmadpluginimpl.h +++ b/core/multimedia/opieplayer/libmad/libmadpluginimpl.h @@ -16,16 +16,17 @@ ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef LIBMAD_PLUGIN_IMPL_H #define LIBMAD_PLUGIN_IMPL_H +//#include <qpe/mediaplayerplugininterface.h> #include "../mediaplayerplugininterface.h" class LibMadPlugin; class LibMadPluginImpl : public MediaPlayerPluginInterface { @@ -37,17 +38,16 @@ public: QRESULT queryInterface( const QUuid&, QUnknownInterface** ); Q_REFCOUNT #endif virtual MediaPlayerDecoder *decoder(); virtual MediaPlayerEncoder *encoder(); - private: LibMadPlugin *libmadplugin; ulong ref; }; #endif diff --git a/core/multimedia/opieplayer/libmad/version.c b/core/multimedia/opieplayer/libmad/version.c index 413d54b..1baba26 100644 --- a/core/multimedia/opieplayer/libmad/version.c +++ b/core/multimedia/opieplayer/libmad/version.c diff --git a/core/multimedia/opieplayer/libmpeg3/Makefile.in b/core/multimedia/opieplayer/libmpeg3/Makefile.in index 154f85d..d255e4f 100644 --- a/core/multimedia/opieplayer/libmpeg3/Makefile.in +++ b/core/multimedia/opieplayer/libmpeg3/Makefile.in @@ -171,32 +171,34 @@ libmpeg3plugin.o: libmpeg3plugin.cpp \ mpeg3demux.h \ mpeg3title.h \ mpeg3io.h \ mpeg3css.h \ mpeg3private.inc \ audio/mpeg3audio.h \ mpeg3vtrack.h \ video/mpeg3video.h \ - mpeg3protos.h + mpeg3protos.h \ + ../mediaplayerplugininterface.h libmpeg3pluginimpl.o: libmpeg3pluginimpl.cpp \ libmpeg3plugin.h \ libmpeg3.h \ mpeg3private.h \ mpeg3atrack.h \ mpeg3demux.h \ mpeg3title.h \ mpeg3io.h \ mpeg3css.h \ mpeg3private.inc \ audio/mpeg3audio.h \ mpeg3vtrack.h \ video/mpeg3video.h \ mpeg3protos.h \ + ../mediaplayerplugininterface.h \ libmpeg3pluginimpl.h bitstream.o: bitstream.c \ mpeg3private.h \ mpeg3atrack.h \ mpeg3demux.h \ mpeg3title.h \ mpeg3io.h \ @@ -409,17 +411,17 @@ audio/layer2.o: audio/layer2.c \ mpeg3atrack.h \ audio/mpeg3audio.h \ mpeg3vtrack.h \ video/mpeg3video.h \ audio/../mpeg3protos.h \ audio/tables.h audio/layer3.o: audio/layer3.c \ - audio/huffman.h \ + huffman.h \ audio/mpeg3audio.h \ audio/ac3.h \ audio/mpeg3real.h \ audio/../bitstream.h \ mpeg3demux.h \ mpeg3title.h \ mpeg3io.h \ mpeg3css.h \ diff --git a/core/multimedia/opieplayer/libmpeg3/libmpeg3plugin.h b/core/multimedia/opieplayer/libmpeg3/libmpeg3plugin.h index 0a06264..54f259b 100644 --- a/core/multimedia/opieplayer/libmpeg3/libmpeg3plugin.h +++ b/core/multimedia/opieplayer/libmpeg3/libmpeg3plugin.h @@ -20,47 +20,55 @@ #ifndef LIBMPEG3_PLUGIN_H #define LIBMPEG3_PLUGIN_H #include <qstring.h> #include <qapplication.h> #include "libmpeg3.h" #include "mpeg3protos.h" -#include "mediaplayerplugininterface.h" +//#include <qpe/mediaplayerplugininterface.h> +#include "../mediaplayerplugininterface.h" + + +// #define OLD_MEDIAPLAYER_API class LibMpeg3Plugin : public MediaPlayerDecoder { public: LibMpeg3Plugin() { file = NULL; } ~LibMpeg3Plugin() { close(); } const char *pluginName() { return "LibMpeg3Plugin"; } const char *pluginComment() { return "This is the libmpeg3 library writen by ... which has been modified by trolltech to use fixed point maths"; } double pluginVersion() { return 1.0; } bool isFileSupported( const QString& fileName ) { return mpeg3_check_sig( (char *)fileName.latin1() ) == 1; } bool open( const QString& fileName ) { file = mpeg3_open( (char *)fileName.latin1() ); return file != NULL; } bool close() { if ( file ) { int r = mpeg3_close( file ); file = NULL; return r == 1; } return FALSE; } bool isOpen() { return file != NULL; } - const QString &fileInfo() { return strInfo = QString( "" ); } + const QString &fileInfo() { return strInfo = ""; } // If decoder doesn't support audio then return 0 here int audioStreams() { return file ? mpeg3_total_astreams( file ) : 0; } int audioChannels( int stream ) { return file ? mpeg3_audio_channels( file, stream ) : 0; } int audioFrequency( int stream ) { return file ? mpeg3_sample_rate( file, stream ) : 0; } + int audioBitsPerSample(int) { return 0;} int audioSamples( int stream ) { return file ? mpeg3_audio_samples( file, stream ) : 0; } bool audioSetSample( long sample, int stream ) { return file ? mpeg3_set_sample( file, sample, stream) == 1 : FALSE; } long audioGetSample( int stream ) { return file ? mpeg3_get_sample( file, stream ) : 0; } -// 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 file ? mpeg3_total_vstreams( file ) : 0; } int videoWidth( int stream ) { return file ? mpeg3_video_width( file, stream ) : 0; } int videoHeight( int stream ) { return file ? mpeg3_video_height( file, stream ) : 0; } double videoFrameRate( int stream ) { return file ? mpeg3_frame_rate( file, stream ) : 0.0; } int videoFrames( int stream ) { return file ? mpeg3_video_frames( file, stream ) : 0; } @@ -97,16 +105,18 @@ public: bool supportsAudio() { return TRUE; } bool supportsVideo() { return TRUE; } bool supportsYUV() { return TRUE; } bool supportsMMX() { return TRUE; } bool supportsSMP() { return TRUE; } bool supportsStereo() { return TRUE; } bool supportsScaling() { return TRUE; } + long getPlayTime() { return -1; } + private: mpeg3_t *file; QString strInfo; }; #endif diff --git a/core/multimedia/opieplayer/libmpeg3/libmpeg3pluginimpl.h b/core/multimedia/opieplayer/libmpeg3/libmpeg3pluginimpl.h index 29ec6ba..89abf97 100644 --- a/core/multimedia/opieplayer/libmpeg3/libmpeg3pluginimpl.h +++ b/core/multimedia/opieplayer/libmpeg3/libmpeg3pluginimpl.h @@ -16,16 +16,17 @@ ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef LIBMPEG3_PLUGIN_IMPL_H #define LIBMPEG3_PLUGIN_IMPL_H +//#include <qpe/mediaplayerplugininterface.h> #include "../mediaplayerplugininterface.h" class LibMpeg3Plugin; class LibMpeg3PluginImpl : public MediaPlayerPluginInterface { diff --git a/core/multimedia/opieplayer/loopcontrol.cpp b/core/multimedia/opieplayer/loopcontrol.cpp index 6dfd057..859a67a 100644 --- a/core/multimedia/opieplayer/loopcontrol.cpp +++ b/core/multimedia/opieplayer/loopcontrol.cpp @@ -12,17 +12,20 @@ ** 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 <qpe/qpeapplication.h> + #ifdef Q_WS_QWS #include <qpe/qcopenvelope_qws.h> #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #include <pthread.h> #include <errno.h> @@ -227,23 +230,24 @@ void LoopControl::startAudio() { if ( currentSample != audioSampleCounter + 1 ) qDebug("out of sync with decoder %i %i", currentSample, audioSampleCounter); long samplesRead = 0; bool readOk=mediaPlayerState->curDecoder()->audioReadSamples( (short*)audioBuffer, channels, 1024, samplesRead, stream ); long sampleWeShouldBeAt = long( playtime.elapsed() ) * freq / 1000; long sampleWaitTime = currentSample - sampleWeShouldBeAt; - if ( ( sampleWaitTime > 2000 ) && ( sampleWaitTime < 20000 ) ) { - usleep( (long)((double)sampleWaitTime * 1000000.0 / freq) ); - } else if ( sampleWaitTime <= -5000 ) { - qDebug("need to catch up by: %li (%i,%li)", -sampleWaitTime, currentSample, sampleWeShouldBeAt ); - //mediaPlayerState->curDecoder()->audioSetSample( sampleWeShouldBeAt, stream ); - currentSample = sampleWeShouldBeAt; - } +// if ( ( sampleWaitTime > 2000 ) && ( sampleWaitTime < 5000 ) ) { +// usleep( (long)((double)sampleWaitTime * 1000000.0 / freq) ); +// } +// else if ( sampleWaitTime <= -5000 ) { +// qDebug("need to catch up by: %li (%i,%li)", -sampleWaitTime, currentSample, sampleWeShouldBeAt ); +// //mediaPlayerState->curDecoder()->audioSetSample( sampleWeShouldBeAt, stream ); +// currentSample = sampleWeShouldBeAt; +// } audioDevice->write( audioBuffer, samplesRead * 2 * channels ); audioSampleCounter = currentSample + samplesRead - 1; moreAudio = readOk && (audioSampleCounter <= total_audio_samples); } else { @@ -368,33 +372,33 @@ bool LoopControl::init( const QString& filename ) { hasAudioChannel = mediaPlayerState->curDecoder()->audioStreams() > 0; hasVideoChannel = mediaPlayerState->curDecoder()->videoStreams() > 0; if ( hasAudioChannel ) { int astream = 0; channels = mediaPlayerState->curDecoder()->audioChannels( astream ); - DecodeLoopDebug(( "channels = %d\n", channels )); + qDebug( "LC- channels = %d", channels ); if ( !total_audio_samples ) total_audio_samples = mediaPlayerState->curDecoder()->audioSamples( astream ); - total_audio_samples += 1000; +// total_audio_samples += 1000; mediaPlayerState->setLength( total_audio_samples ); freq = mediaPlayerState->curDecoder()->audioFrequency( astream ); - DecodeLoopDebug(( "frequency = %d\n", freq )); + qDebug( "LC- frequency = %d", freq ); audioSampleCounter = 0; - static const int bytes_per_sample = 2; //16 bit + int bits_per_sample = mediaPlayerState->curDecoder()->audioBitsPerSample( astream); - audioDevice = new AudioDevice( freq, channels, bytes_per_sample ); + audioDevice = new AudioDevice( freq, channels, bits_per_sample); audioBuffer = new char[ audioDevice->bufferSize() ]; channels = audioDevice->channels(); //### must check which frequency is actually used. static const int size = 1; short int buf[size]; long samplesRead = 0; mediaPlayerState->curDecoder()->audioReadSamples( buf, channels, size, samplesRead, stream ); diff --git a/core/multimedia/opieplayer/loopcontrol.h b/core/multimedia/opieplayer/loopcontrol.h index 967ee25..fc7d316 100644 --- a/core/multimedia/opieplayer/loopcontrol.h +++ b/core/multimedia/opieplayer/loopcontrol.h @@ -12,16 +12,18 @@ ** 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 MPEGVIEW_H #define MPEGVIEW_H #include <qwidget.h> #include <qdatetime.h> diff --git a/core/multimedia/opieplayer/loopcontrol_threaded.cpp b/core/multimedia/opieplayer/loopcontrol_threaded.cpp index 2ec4a48..2e49bb7 100644 --- a/core/multimedia/opieplayer/loopcontrol_threaded.cpp +++ b/core/multimedia/opieplayer/loopcontrol_threaded.cpp @@ -21,27 +21,27 @@ #define _REENTRANT #include <qpe/qpeapplication.h> #include <qimage.h> #include <qpainter.h> #ifdef Q_WS_QWS #include <qpe/qcopenvelope_qws.h> #endif +#include "mediaplayerplugininterface.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <unistd.h> #include <pthread.h> #include "loopcontrol.h" #include "audiodevice.h" #include "videowidget.h" #include "audiowidget.h" -#include "mediaplayerplugininterface.h" #include "mediaplayerstate.h" #if defined(QT_QWS_CUSTOM) || defined(QT_QWS_IPAQ) #define USE_REALTIME_AUDIO_THREAD #endif diff --git a/core/multimedia/opieplayer/main.cpp b/core/multimedia/opieplayer/main.cpp index 5246e40..9f7ef73 100644 --- a/core/multimedia/opieplayer/main.cpp +++ b/core/multimedia/opieplayer/main.cpp @@ -43,15 +43,15 @@ int main(int argc, char **argv) { AudioWidget aw( 0, "audioUI" ); audioUI = &aw; VideoWidget vw( 0, "videoUI" ); videoUI = &vw; LoopControl lc( 0, "loopControl" ); loopControl = &lc; MediaPlayer mp( 0, "mediaPlayer" ); - pl.setCaption( MediaPlayer::tr("Media Player") ); + pl.setCaption( MediaPlayer::tr("Opie Player") ); a.showMainDocumentWidget(&pl); return a.exec(); } diff --git a/core/multimedia/opieplayer/mediaplayerplugininterface.h b/core/multimedia/opieplayer/mediaplayerplugininterface.h index 24d5a80..339b2e4 100644 --- a/core/multimedia/opieplayer/mediaplayerplugininterface.h +++ b/core/multimedia/opieplayer/mediaplayerplugininterface.h @@ -56,22 +56,17 @@ public: // If decoder doesn't support audio then return 0 here virtual int audioStreams() = 0; virtual int audioChannels( int stream ) = 0; virtual int audioFrequency( int stream ) = 0; virtual int audioSamples( int stream ) = 0; virtual bool audioSetSample( long sample, int stream ) = 0; virtual long audioGetSample( int stream ) = 0; -// virtual bool audioReadMonoSamples( short *samples, long samples, long& samplesRead, int stream ) = 0; -// virtual bool audioReadStereoSamples( short *samples, long samples, long& samplesRead, int stream ) = 0; virtual bool audioReadSamples( short *samples, int channels, long samples, long& samplesRead, int stream ) = 0; - // Libmpeg3 functions, perhaps good for reading an audio file with 5 channels or something! -// virtual bool audioReadSamples( short *samples, int channel, long samples, int stream ) = 0; -// virtual bool audioReReadSamples( short *samples, int channel, long samples, int stream ) = 0; // If decoder doesn't support video then return 0 here virtual int videoStreams() = 0; virtual int videoWidth( int stream ) = 0; virtual int videoHeight( int stream ) = 0; virtual double videoFrameRate( int stream ) = 0; // frames per second (this may change to frames/1000secs) virtual int videoFrames( int stream ) = 0; virtual bool videoSetFrame( long sample, int stream ) = 0; @@ -91,16 +86,19 @@ public: virtual bool supportsAudio() = 0; virtual bool supportsVideo() = 0; virtual bool supportsYUV() = 0; virtual bool supportsMMX() = 0; virtual bool supportsSMP() = 0; virtual bool supportsStereo() = 0; virtual bool supportsScaling() = 0; + // File Properies + virtual long getPlayTime() { return -1; } + virtual int audioBitsPerSample( int stream ) = 0; }; class MediaPlayerEncoder; struct MediaPlayerPluginInterface : public QUnknownInterface { diff --git a/core/multimedia/opieplayer/mediaplayerstate.cpp b/core/multimedia/opieplayer/mediaplayerstate.cpp index 9b9d133..2a6bca3 100644 --- a/core/multimedia/opieplayer/mediaplayerstate.cpp +++ b/core/multimedia/opieplayer/mediaplayerstate.cpp @@ -21,16 +21,18 @@ #include <qpe/qlibrary.h> #include <qpe/config.h> #include <qvaluelist.h> #include <qobject.h> #include <qdir.h> #include "mediaplayerplugininterface.h" #include "mediaplayerstate.h" + + #ifdef QT_NO_COMPONENT // Plugins which are compiled in when no plugin architecture available #include "libmad/libmadpluginimpl.h" #include "libmpeg3/libmpeg3pluginimpl.h" #include "wavplugin/wavpluginimpl.h" #endif @@ -109,16 +111,20 @@ MediaPlayerDecoder *MediaPlayerState::curDecoder() { } // ### hack to get true sample count MediaPlayerDecoder *MediaPlayerState::libMpeg3Decoder() { return libmpeg3decoder; } +// ### hack to get true sample count +// MediaPlayerDecoder *MediaPlayerState::libWavDecoder() { +// return libwavdecoder; +// } void MediaPlayerState::loadPlugins() { #ifndef QT_NO_COMPONENT QValueList<MediaPlayerPlugin>::Iterator mit; for ( mit = pluginList.begin(); mit != pluginList.end(); ++mit ) { (*mit).iface->release(); (*mit).library->unload(); diff --git a/core/multimedia/opieplayer/mediaplayerstate.h b/core/multimedia/opieplayer/mediaplayerstate.h index 5d95b92..1a23742 100644 --- a/core/multimedia/opieplayer/mediaplayerstate.h +++ b/core/multimedia/opieplayer/mediaplayerstate.h @@ -101,16 +101,17 @@ private: bool isPaused; bool isPlaying; long curPosition; long curLength; char curView; MediaPlayerDecoder *decoder; MediaPlayerDecoder *libmpeg3decoder; +// MediaPlayerDecoder *libwavdecoder; void loadPlugins(); void readConfig( Config& cfg ); void writeConfig( Config& cfg ) const; }; #endif // MEDIA_PLAYER_STATE_H diff --git a/core/multimedia/opieplayer/playlistselection.cpp b/core/multimedia/opieplayer/playlistselection.cpp index fbfb946..f17ab6f 100644 --- a/core/multimedia/opieplayer/playlistselection.cpp +++ b/core/multimedia/opieplayer/playlistselection.cpp diff --git a/core/multimedia/opieplayer/playlistwidget.cpp b/core/multimedia/opieplayer/playlistwidget.cpp index 969fc4b..4e1543e 100644 --- a/core/multimedia/opieplayer/playlistwidget.cpp +++ b/core/multimedia/opieplayer/playlistwidget.cpp @@ -15,49 +15,55 @@ ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include <qpe/qpemenubar.h> #include <qpe/qpetoolbar.h> #include <qpe/fileselector.h> +#include <qpe/qpeapplication.h> + #include <qpe/applnk.h> #include <qpe/config.h> #include <qpe/global.h> #include <qpe/resource.h> #include <qaction.h> #include <qimage.h> #include <qfile.h> #include <qlayout.h> #include <qlabel.h> #include <qlist.h> #include <qlistbox.h> #include <qmainwindow.h> #include <qmessagebox.h> #include <qtoolbutton.h> +#include <qtabwidget.h> +#include <qlistview.h> +#include <qpoint.h> +#include <qtimer.h> #include "playlistselection.h" #include "playlistwidget.h" #include "mediaplayerstate.h" #include <stdlib.h> +#define BUTTONS_ON_TOOLBAR +#define SIDE_BUTTONS +#define CAN_SAVE_LOAD_PLAYLISTS extern MediaPlayerState *mediaPlayerState; +// class myFileSelector { +// }; class PlayListWidgetPrivate { public: - QToolButton *tbPlay; - QToolButton *tbFull; - QToolButton *tbLoop; - QToolButton *tbScale; - QToolButton *tbShuffle; - + QToolButton *tbPlay, *tbFull, *tbLoop, *tbScale, *tbShuffle, *tbAddToList, *tbRemoveFromList, *tbMoveUp, *tbMoveDown, *tbRemove; QFrame *playListFrame; FileSelector *files; PlayListSelection *selectedFiles; bool setDocumentUsed; DocLnk *current; }; @@ -87,105 +93,191 @@ public: PlayListWidget::PlayListWidget( QWidget* parent, const char* name, WFlags fl ) : QMainWindow( parent, name, fl ) { d = new PlayListWidgetPrivate; d->setDocumentUsed = FALSE; d->current = NULL; + menuTimer = new QTimer( this ,"menu timer"), + connect( menuTimer, SIGNAL( timeout() ), SLOT( addSelected() ) ); setBackgroundMode( PaletteButton ); - setCaption( tr("MediaPlayer") ); + setCaption( tr("OpiePlayer") ); setIcon( Resource::loadPixmap( "MPEGPlayer" ) ); setToolBarsMovable( FALSE ); // Create Toolbar QPEToolBar *toolbar = new QPEToolBar( this ); toolbar->setHorizontalStretchable( TRUE ); // Create Menubar QPEMenuBar *menu = new QPEMenuBar( toolbar ); menu->setMargin( 0 ); QPEToolBar *bar = new QPEToolBar( this ); bar->setLabel( tr( "Play Operations" ) ); -#ifdef BUTTONS_ON_TOOLBAR - d->tbPlay = new ToolButton( bar, tr( "Play" ), "mpegplayer/play", mediaPlayerState, SLOT(setPlaying(bool)), TRUE ); - d->tbShuffle = new ToolButton( bar, tr( "Randomize" ), "mpegplayer/shuffle", mediaPlayerState, SLOT(setShuffled(bool)), TRUE ); -#endif - d->tbLoop = new ToolButton( bar, tr( "Loop" ), "mpegplayer/loop", mediaPlayerState, SLOT(setLooping(bool)), TRUE ); - d->tbFull = new ToolButton( bar, tr( "Fullscreen" ), "fullscreen", mediaPlayerState, SLOT(setFullscreen(bool)), TRUE ); - d->tbScale = new ToolButton( bar, tr( "Scale" ), "mpegplayer/scale", mediaPlayerState, SLOT(setScaled(bool)), TRUE ); + d->tbAddToList = new ToolButton( bar, tr( "Add to Playlist" ), "mpegplayer/add_to_playlist", + this , SLOT(addSelected()) ); + d->tbRemoveFromList = new ToolButton( bar, tr( "Remove from Playlist" ), "mpegplayer/remove_from_playlist", + this , SLOT(removeSelected()) ); + d->tbPlay = new ToolButton( bar, tr( "Play" ), "mpegplayer/play", + mediaPlayerState, SLOT(setPlaying(bool)), TRUE ); + + d->tbShuffle = new ToolButton( bar, tr( "Randomize" ), "mpegplayer/shuffle", + mediaPlayerState, SLOT(setShuffled(bool)), TRUE ); + d->tbLoop = new ToolButton( bar, tr( "Loop" ), "mpegplayer/loop", + mediaPlayerState, SLOT(setLooping(bool)), TRUE ); + +// d->tbFull = new ToolButton( bar, tr( "Fullscreen" ), "fullscreen", mediaPlayerState, SLOT(setFullscreen(bool)), TRUE ); +// d->tbScale = new ToolButton( bar, tr( "Scale" ), "mpegplayer/scale", mediaPlayerState, SLOT(setScaled(bool)), TRUE ); QPopupMenu *pmPlayList = new QPopupMenu( this ); - menu->insertItem( tr( "PlayList" ), pmPlayList ); - new MenuItem( pmPlayList, tr( "Toggle PlayList" ), mediaPlayerState, SLOT( togglePlaylist() ) ); + menu->insertItem( tr( "File" ), pmPlayList ); new MenuItem( pmPlayList, tr( "Clear List" ), this, SLOT( clearList() ) ); - new MenuItem( pmPlayList, tr( "Add all music files" ), this, SLOT( addAllMusicToList() ) ); + new MenuItem( pmPlayList, tr( "Add all audio files" ), this, SLOT( addAllMusicToList() ) ); new MenuItem( pmPlayList, tr( "Add all video files" ), this, SLOT( addAllVideoToList() ) ); new MenuItem( pmPlayList, tr( "Add all files" ), this, SLOT( addAllToList() ) ); -#ifdef CAN_SAVE_LOAD_PLAYLISTS new MenuItem( pmPlayList, tr( "Save PlayList" ), this, SLOT( saveList() ) ); new MenuItem( pmPlayList, tr( "Load PlayList" ), this, SLOT( loadList() ) ); -#endif + + QPopupMenu *pmView = new QPopupMenu( this ); + menu->insertItem( tr( "View" ), pmView ); + + fullScreenButton = new QAction(tr("Full Screen"), Resource::loadPixmap("fullscreen"), QString::null, 0, this, 0); + connect( fullScreenButton, SIGNAL(activated()), mediaPlayerState, SLOT(toggleFullscreen()) ); + fullScreenButton->addTo(pmView); + scaleButton = new QAction(tr("Scale"), Resource::loadPixmap("mpegplayer/scale"), QString::null, 0, this, 0); + connect( scaleButton, SIGNAL(activated()), mediaPlayerState, SLOT(toggleScaled()) ); + scaleButton->addTo(pmView); QVBox *vbox5 = new QVBox( this ); vbox5->setBackgroundMode( PaletteButton ); + QVBox *vbox4 = new QVBox( vbox5 ); vbox4->setBackgroundMode( PaletteButton ); +// vbox4->setMargin(4); +// libString = new QLabel( tr(" Media Library"), vbox4 ); +// libString->setBackgroundMode( QButton::PaletteButton ); +// libString->setFont( QFont( "Helvetica", 8, QFont::Bold ) ); + + QHBox *hbox6 = new QHBox( vbox4 ); hbox6->setBackgroundMode( PaletteButton ); + + tabWidget = new QTabWidget( hbox6, "tabWidget" ); + tabWidget->setTabShape(QTabWidget::Triangular); + + + QWidget *pTab; + pTab = new QWidget( tabWidget, "pTab" ); + playlistView = new QListView( pTab, "Videoview" ); + playlistView->setMinimumSize(236,260); + tabWidget->insertTab( pTab,"Playlist"); // Add the playlist area - QVBox *vbox3 = new QVBox( vbox5 ); vbox3->setBackgroundMode( PaletteButton ); - d->playListFrame = vbox3; - QLabel *plString = new QLabel( tr(" PlayList"), vbox3 ); - plString->setBackgroundMode( QButton::PaletteButton ); - plString->setFont( QFont( "Helvetica", 8, QFont::Bold ) ); + QVBox *vbox3 = new QVBox( pTab ); vbox3->setBackgroundMode( PaletteButton ); + d->playListFrame = vbox3; + d->playListFrame ->setMinimumSize(235,260); QHBox *hbox2 = new QHBox( vbox3 ); hbox2->setBackgroundMode( PaletteButton ); d->selectedFiles = new PlayListSelection( hbox2 ); QVBox *vbox1 = new QVBox( hbox2 ); vbox1->setBackgroundMode( PaletteButton ); -#ifndef BUTTONS_ON_TOOLBAR - d->tbPlay = new ToolButton( vbox1, tr( "Play" ), "mpegplayer/play", mediaPlayerState, SLOT(setPlaying(bool)), TRUE ); QVBox *stretch1 = new QVBox( vbox1 ); stretch1->setBackgroundMode( PaletteButton ); // add stretch -#endif new ToolButton( vbox1, tr( "Move Up" ), "mpegplayer/up", d->selectedFiles, SLOT(moveSelectedUp()) ); new ToolButton( vbox1, tr( "Remove" ), "mpegplayer/cut", d->selectedFiles, SLOT(removeSelected()) ); new ToolButton( vbox1, tr( "Move Down" ), "mpegplayer/down", d->selectedFiles, SLOT(moveSelectedDown()) ); QVBox *stretch2 = new QVBox( vbox1 ); stretch2->setBackgroundMode( PaletteButton ); // add stretch -#ifndef BUTTONS_ON_TOOLBAR - d->tbShuffle = new ToolButton( vbox1, tr( "Randomize" ), "mpegplayer/shuffle", mediaPlayerState, SLOT(setShuffled(bool)), TRUE ); -#endif + + QWidget *aTab; + aTab = new QWidget( tabWidget, "aTab" ); + audioView = new QListView( aTab, "Audioview" ); + audioView->setMinimumSize(233,260); + audioView->addColumn( "Title",150); + audioView->addColumn("Size", 45); + audioView->addColumn("Media",35); + audioView->setColumnAlignment(1, Qt::AlignRight); + audioView->setColumnAlignment(2, Qt::AlignRight); + tabWidget->insertTab(aTab,"Audio"); +// audioView + Global::findDocuments(&files, "audio/*"); + QListIterator<DocLnk> dit( files.children() ); + QString storage; + for ( ; dit.current(); ++dit ) { + QListViewItem * newItem; + if(dit.current()->file().find("/mnt/cf") != -1 ) storage="CF"; + else if(dit.current()->file().find("/mnt/card") != -1 ) storage="SD"; + else storage="RAM"; + + newItem= /*(void)*/ new QListViewItem( audioView, dit.current()->name(), QString::number( QFile( dit.current()->file()).size() ), storage); + newItem->setPixmap(0, Resource::loadPixmap( "mpegplayer/musicfile" )); + } +// videowidget + + QWidget *vTab; + vTab = new QWidget( tabWidget, "vTab" ); + videoView = new QListView( vTab, "Videoview" ); + videoView->setMinimumSize(233,260); + + videoView->addColumn("Title",150); + videoView->addColumn("Size",45); + videoView->addColumn("Media",35); + videoView->setColumnAlignment(1, Qt::AlignRight); + videoView->setColumnAlignment(2, Qt::AlignRight); + + tabWidget->insertTab( vTab,"Video"); + + Global::findDocuments(&vFiles, "video/*"); + QListIterator<DocLnk> Vdit( vFiles.children() ); + for ( ; Vdit.current(); ++Vdit ) { + if( Vdit.current()->file().find("/mnt/cf") != -1 ) storage="CF"; + else if( Vdit.current()->file().find("/mnt/card") != -1 ) storage="SD"; + else storage="RAM"; + QListViewItem * newItem; + newItem= /*(void)*/ new QListViewItem( videoView, Vdit.current()->name(), QString::number( QFile( Vdit.current()->file()).size() ), storage); + newItem->setPixmap(0, Resource::loadPixmap( "mpegplayer/videofile" )); + } + + +// d->tbPlay = new ToolButton( vbox1, tr( "Play" ), "mpegplayer/play", mediaPlayerState, SLOT(setPlaying(bool)), TRUE ); +// d->tbShuffle = new ToolButton( vbox1, tr( "Randomize" ), "mpegplayer/shuffle", mediaPlayerState, SLOT(setShuffled(bool)), TRUE ); // add the library area - QVBox *vbox4 = new QVBox( vbox5 ); vbox4->setBackgroundMode( PaletteButton ); - QLabel *libString = new QLabel( tr(" Media Library"), vbox4 ); - libString->setBackgroundMode( QButton::PaletteButton ); - libString->setFont( QFont( "Helvetica", 8, QFont::Bold ) ); +// d->files->setBackgroundMode( PaletteButton ); +// QVBox *vbox7 = new QVBox( hbox6 ); vbox7->setBackgroundMode( PaletteButton ); - QHBox *hbox6 = new QHBox( vbox4 ); hbox6->setBackgroundMode( PaletteButton ); - d->files = new FileSelector( "video/*;audio/*", hbox6, "Find Media Files", FALSE, FALSE ); - d->files->setBackgroundMode( PaletteButton ); - QVBox *vbox7 = new QVBox( hbox6 ); vbox7->setBackgroundMode( PaletteButton ); +// #ifdef SIDE_BUTTONS +// QVBox *stretch3 = new QVBox( vbox1 ); stretch3->setBackgroundMode( PaletteButton ); // add stretch +// #endif + QPEApplication::setStylusOperation( this, QPEApplication::RightOnHold ); + +// connect( audioView, SIGNAL( clicked( QListViewItem *) ), this, SLOT( playIt( QListViewItem *) ) ); +// connect( videoView, SIGNAL( clicked( QListViewItem *) ), this, SLOT( playIt( QListViewItem *) ) ); -#ifdef SIDE_BUTTONS - new ToolButton( vbox7, tr( "Add to Playlist" ), "mpegplayer/add_to_playlist", d->selectedFiles, SLOT(addSelected()) ); - new ToolButton( vbox7, tr( "Remove from Playlist" ), "mpegplayer/remove_from_playlist", d->selectedFiles, SLOT(removeSelected()) ); - QVBox *stretch3 = new QVBox( vbox1 ); stretch3->setBackgroundMode( PaletteButton ); // add stretch -#endif + connect( audioView, SIGNAL( clicked( QListViewItem *) ), this, SLOT( addToSelection( QListViewItem *) ) ); + connect( videoView, SIGNAL( clicked( QListViewItem *) ), this, SLOT( addToSelection( QListViewItem *) ) ); - connect( d->files, SIGNAL( fileSelected( const DocLnk & ) ), this, SLOT( addToSelection( const DocLnk & ) ) ); + connect( audioView, SIGNAL( rightButtonPressed( QListViewItem *, const QPoint&, int ) ), + this, SLOT( addToSelection( QListViewItem *, const QPoint&, int )) ); + connect( videoView, SIGNAL( rightButtonPressed( QListViewItem *, const QPoint&, int ) ), + this, SLOT( addToSelection( QListViewItem *, const QPoint&, int )) ); + + connect( playlistView, SIGNAL( pressed( QListViewItem *) ), this, SLOT( playIt( QListViewItem *) ) ); + connect( tabWidget, SIGNAL (currentChanged(QWidget*)),this,SLOT(tabChanged(QWidget*))); + // connect( d->files, SIGNAL( fileSelected( const DocLnk & ) ), this, SLOT( addToSelection( const DocLnk & ) ) ); + // connect( d->files, SIGNAL( fileSelected( const DocLnk & ) ), this, SLOT( addToSelection( const DocLnk & ) ) ); connect( mediaPlayerState, SIGNAL( playingToggled( bool ) ), d->tbPlay, SLOT( setOn( bool ) ) ); connect( mediaPlayerState, SIGNAL( loopingToggled( bool ) ), d->tbLoop, SLOT( setOn( bool ) ) ); connect( mediaPlayerState, SIGNAL( shuffledToggled( bool ) ), d->tbShuffle, SLOT( setOn( bool ) ) ); - connect( mediaPlayerState, SIGNAL( fullscreenToggled( bool ) ), d->tbFull, SLOT( setOn( bool ) ) ); - connect( mediaPlayerState, SIGNAL( scaledToggled( bool ) ), d->tbScale, SLOT( setOn( bool ) ) ); - connect( mediaPlayerState, SIGNAL( fullscreenToggled( bool ) ), d->tbScale, SLOT( setEnabled( bool ) ) ); + +// connect( mediaPlayerState, SIGNAL( fullscreenToggled( bool ) ), fullScreenButton, SLOT( setOn( bool ) ) ); +// connect( mediaPlayerState, SIGNAL( scaledToggled( bool ) ), scaleButton, SLOT( setEnabled( bool ) ) ); +// connect( mediaPlayerState, SIGNAL( fullscreenToggled( bool ) ), fullScreenButton, SLOT( setEnabled( bool ) ) ); + connect( mediaPlayerState, SIGNAL( playlistToggled( bool ) ), this, SLOT( setPlaylist( bool ) ) ); setCentralWidget( vbox5 ); Config cfg( "MediaPlayer" ); readConfig( cfg ); initializeStates(); @@ -198,23 +290,24 @@ PlayListWidget::~PlayListWidget() { if ( d->current ) delete d->current; delete d; } void PlayListWidget::initializeStates() { + d->tbPlay->setOn( mediaPlayerState->playing() ); d->tbLoop->setOn( mediaPlayerState->looping() ); d->tbShuffle->setOn( mediaPlayerState->shuffled() ); - d->tbFull->setOn( mediaPlayerState->fullscreen() ); - d->tbScale->setOn( mediaPlayerState->scaled() ); - d->tbScale->setEnabled( mediaPlayerState->fullscreen() ); - setPlaylist( mediaPlayerState->playlist() ); +// d->tbFull->setOn( mediaPlayerState->fullscreen() ); +// d->tbScale->setOn( mediaPlayerState->scaled() ); +// d->tbScale->setEnabled( mediaPlayerState->fullscreen() ); +// setPlaylist( mediaPlayerState->playlist() ); } void PlayListWidget::readConfig( Config& cfg ) { cfg.setGroup("PlayList"); int noOfFiles = cfg.readNumEntry("NumberOfFiles", 0 ); @@ -269,16 +362,26 @@ void PlayListWidget::addToSelection( const DocLnk& lnk ) { d->setDocumentUsed = FALSE; if ( mediaPlayerState->playlist() ) d->selectedFiles->addToSelection( lnk ); else mediaPlayerState->setPlaying( TRUE ); } +void PlayListWidget::addToSelection( QListViewItem *it ,const QPoint & p, int index) { + qDebug("add"); +// d->selectedFiles->addToSelection( lnk ); + // } +// else +// mediaPlayerState->setPlaying( TRUE ); +// +} + + void PlayListWidget::clearList() { while ( first() ) d->selectedFiles->removeSelected(); } void PlayListWidget::addAllToList() { DocLnkSet files; @@ -441,8 +544,150 @@ void PlayListWidget::setPlaylist( bool shown ) { void PlayListWidget::setView( char view ) { if ( view == 'l' ) showMaximized(); else hide(); } +void PlayListWidget::addSelected() { +// QMessageBox::message("Note","Bozo the clown thinks\nthere's something actually here"); + int tabPage=tabWidget->currentPageIndex(); + switch (tabPage) { + case 0: //playlist + break; + case 1: { //audio + addToSelection( audioView->selectedItem() ); + } + break; + case 2: { // video + addToSelection( videoView->selectedItem() ); + } + break; + }; +} + +void PlayListWidget::removeSelected() { + d->selectedFiles->removeSelected( ); +} + + +void PlayListWidget::playIt( QListViewItem *it) { + d->setDocumentUsed = FALSE; + + if(it) { + qDebug("playit"); + int tabPage=tabWidget->currentPageIndex(); + switch (tabPage) { + case 1: { + DocLnkSet files; + QListIterator<DocLnk> dit( files.children() ); + for ( ; dit.current(); ++dit ) { + if( dit.current()->name() == it->text(0)) { + setDocument( dit.current()->name()); + } + } + } + break; + case 2: { + DocLnkSet vFiles; + QListIterator<DocLnk> dit( vFiles.children() ); + for ( ; dit.current(); ++dit ) { + qDebug(dit.current()->name()); + if( dit.current()->name() == it->text(0)) { + qDebug(it->text(0)); + setDocument( dit.current()->name()); + } + } + } + break; + }; + } +} + +void PlayListWidget::addToSelection( QListViewItem *it) { + d->setDocumentUsed = FALSE; + + if(it) { + qDebug("add to selection"); + int tabPage=tabWidget->currentPageIndex(); + switch (tabPage) { + case 1: { + QListIterator<DocLnk> dit( files.children() ); + for ( ; dit.current(); ++dit ) { + if( dit.current()->name() == it->text(0)) { + d->selectedFiles->addToSelection( **dit ); + } + } + } + break; + case 2: { + QListIterator<DocLnk> dit( vFiles.children() ); + for ( ; dit.current(); ++dit ) { + qDebug(dit.current()->name()); + if( dit.current()->name() == it->text(0)) { + d->selectedFiles->addToSelection( **dit ); + } + } + } + break; + case 0: + break; + }; + tabWidget->setCurrentPage(0); +// mediaPlayerState->setPlaying( TRUE ); + } +} + +void PlayListWidget::tabChanged(QWidget *widg) { + + int tabPage=tabWidget->currentPageIndex(); + switch (tabPage) { + case 0: + { + d->tbRemoveFromList->setEnabled(TRUE); + d->tbAddToList->setEnabled(FALSE); + } + break; + case 1: + { + d->tbRemoveFromList->setEnabled(FALSE); + d->tbAddToList->setEnabled(TRUE); + } + break; + case 2: + { + d->tbRemoveFromList->setEnabled(FALSE); + d->tbAddToList->setEnabled(TRUE); + } + break; + }; +} + +void PlayListWidget::cancelMenuTimer() { + if( menuTimer->isActive() ) + menuTimer->stop(); +} + +void PlayListWidget::showFileMenu() { + +} + +void PlayListWidget::contentsMousePressEvent( QMouseEvent * e ) +{ +// QListView::contentsMousePressEvent( e ); + menuTimer->start( 750, TRUE ); +} + + +void PlayListWidget::contentsMouseReleaseEvent( QMouseEvent * e ) +{ +// QListView::contentsMouseReleaseEvent( e ); + menuTimer->stop(); +} +// void PlayListWidget::setFullScreen() { +// mediaPlayerState->toggleFullscreen( ); +// } + +// void PlayListWidget::setScaled() { +// mediaPlayerState->toggleScaled(); +// } diff --git a/core/multimedia/opieplayer/playlistwidget.h b/core/multimedia/opieplayer/playlistwidget.h index 6976641..3a52dd5 100644 --- a/core/multimedia/opieplayer/playlistwidget.h +++ b/core/multimedia/opieplayer/playlistwidget.h @@ -18,51 +18,80 @@ ** **********************************************************************/ #ifndef PLAY_LIST_WIDGET_H #define PLAY_LIST_WIDGET_H #include <qmainwindow.h> #include <qpe/applnk.h> +#include <qtabwidget.h> +#include <qtimer.h> class PlayListWidgetPrivate; class Config; - +class QListViewItem; +class QListView; +class QPoint; +class QAction; +class QLabel; class PlayListWidget : public QMainWindow { Q_OBJECT public: PlayListWidget( QWidget* parent=0, const char* name=0, WFlags fl=0 ); ~PlayListWidget(); - + QTabWidget * tabWidget; + QAction *fullScreenButton, *scaleButton; + DocLnkSet files; + DocLnkSet vFiles; + QListView *audioView, *videoView, *playlistView; + QLabel *libString; // retrieve the current playlist entry (media file link) const DocLnk *current(); void useSelectedDocument(); + QTimer * menuTimer; public slots: void setDocument( const QString& fileref ); void addToSelection( const DocLnk& ); // Add a media file to the playlist + void addToSelection( QListViewItem* ); // Add a media file to the playlist + void addToSelection( QListViewItem*, const QPoint&,int ); // Add a media file to the playlist void setActiveWindow(); // need to handle this to show the right view void setPlaylist( bool ); // Show/Hide the playlist void setView( char ); void clearList(); void addAllToList(); void addAllMusicToList(); void addAllVideoToList(); void saveList(); // Save the playlist void loadList(); // Load a playlist + void playIt( QListViewItem *); bool first(); bool last(); bool next(); bool prev(); + void addSelected(); + void removeSelected(); + void tabChanged(QWidget*); +/* void setFullScreen(); */ +/* void setScaled(); */ +protected: + void contentsMousePressEvent( QMouseEvent * e ); + void contentsMouseReleaseEvent( QMouseEvent * e ); private: void initializeStates(); void readConfig( Config& cfg ); void writeConfig( Config& cfg ) const; PlayListWidgetPrivate *d; // Private implementation data + +protected slots: + void cancelMenuTimer(); + void showFileMenu(); + + }; #endif // PLAY_LIST_WIDGET_H diff --git a/core/multimedia/opieplayer/videowidget.cpp b/core/multimedia/opieplayer/videowidget.cpp index f3974a0..1f128a4 100644 --- a/core/multimedia/opieplayer/videowidget.cpp +++ b/core/multimedia/opieplayer/videowidget.cpp @@ -13,23 +13,23 @@ ** ** 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. ** **********************************************************************/ #include <qpe/resource.h> +#include "mediaplayerplugininterface.h" #include <qwidget.h> #include <qpainter.h> #include <qpixmap.h> #include <qslider.h> #include <qdrawutil.h> #include "videowidget.h" -#include "mediaplayerplugininterface.h" #include "mediaplayerstate.h" #ifdef Q_WS_QWS # define USE_DIRECT_PAINTER # include <qdirectpainter_qws.h> # include <qgfxraster_qws.h> #endif @@ -61,17 +61,17 @@ MediaButton videoButtons[] = { }; static const int numButtons = (sizeof(videoButtons)/sizeof(MediaButton)); VideoWidget::VideoWidget(QWidget* parent, const char* name, WFlags f) : QWidget( parent, name, f ), scaledWidth( 0 ), scaledHeight( 0 ) { - setCaption( tr("MediaPlayer") ); + setCaption( tr("OpiePlayer") ); setBackgroundPixmap( Resource::loadPixmap( "mpegplayer/metalFinish" ) ); pixmaps[0] = new QPixmap( Resource::loadPixmap( "mpegplayer/mediaButton0a" ) ); pixmaps[1] = new QPixmap( Resource::loadPixmap( "mpegplayer/mediaButton0b" ) ); pixmaps[2] = new QPixmap( Resource::loadPixmap( "mpegplayer/mediaControls0" ) ); currentFrame = new QImage( 220 + 2, 160, (QPixmap::defaultDepth() == 16) ? 16 : 32 ); slider = new QSlider( Qt::Horizontal, this ); slider->setMinValue( 0 ); 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 @@ -95,15 +95,17 @@ REQUIRES= ###### 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 @@ -12,16 +12,18 @@ ** 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" @@ -42,17 +44,17 @@ struct ChunkData { 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; @@ -68,39 +70,39 @@ public: 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; @@ -138,17 +140,17 @@ public: } } 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; @@ -200,17 +202,17 @@ WavPlugin::WavPlugin() { 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 ) @@ -219,17 +221,17 @@ bool WavPlugin::isFileSupported( const QString& path ) { 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"); @@ -240,64 +242,64 @@ bool WavPlugin::open( const QString& path ) { 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; } @@ -317,18 +319,23 @@ bool WavPlugin::audioReadMonoSamples( short *output, long samples, long& samples 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 @@ -12,23 +12,28 @@ ** 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: @@ -38,31 +43,34 @@ public: 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; } @@ -82,16 +90,18 @@ public: 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 |