author | llornkcor <llornkcor> | 2002-02-25 01:35:47 (UTC) |
---|---|---|
committer | llornkcor <llornkcor> | 2002-02-25 01:35:47 (UTC) |
commit | f180c1a5e8fc889ff1fb390d5cc94cdbc5085046 (patch) (side-by-side diff) | |
tree | 5e9ea6f1313f4c33d57fb266523c1cfbe0826756 | |
parent | c0446b55fc32b7fdea9f58db06e40da703f5e8ff (diff) | |
download | opie-f180c1a5e8fc889ff1fb390d5cc94cdbc5085046.zip opie-f180c1a5e8fc889ff1fb390d5cc94cdbc5085046.tar.gz opie-f180c1a5e8fc889ff1fb390d5cc94cdbc5085046.tar.bz2 |
fucked up- no workie.. back out
37 files changed, 1102 insertions, 1270 deletions
diff --git a/core/multimedia/opieplayer/Makefile.in b/core/multimedia/opieplayer/Makefile.in index 8d33fb4..1d2ff5e 100644 --- a/core/multimedia/opieplayer/Makefile.in +++ b/core/multimedia/opieplayer/Makefile.in @@ -138,4 +138,2 @@ main.o: main.cpp \ $(OPIEDIR)/include/qpe/qpeapplication.h \ - $(OPIEDIR)/include/qpedecoration_qws.h \ - $(OPIEDIR)/include/timestring.h \ mediaplayerstate.h \ @@ -149,4 +147,3 @@ main.o: main.cpp \ $(OPIEDIR)/include/qpe/qcom.h \ - $(OPIEDIR)/include/qpe/quuid.h \ - mediaplayerplugininterface.h + $(OPIEDIR)/include/qpe/quuid.h @@ -154,4 +151,3 @@ loopcontrol.o: loopcontrol.cpp \ $(OPIEDIR)/include/qpe/qpeapplication.h \ - $(OPIEDIR)/include/qpedecoration_qws.h \ - $(OPIEDIR)/include/timestring.h \ + $(OPIEDIR)/include/qpe/qcopenvelope_qws.h \ loopcontrol.h \ @@ -171,4 +167,2 @@ mediaplayerstate.o: mediaplayerstate.cpp \ $(OPIEDIR)/include/qpe/qpeapplication.h \ - $(OPIEDIR)/include/qpedecoration_qws.h \ - $(OPIEDIR)/include/timestring.h \ $(OPIEDIR)/include/qpe/qlibrary.h \ @@ -177,3 +171,2 @@ mediaplayerstate.o: mediaplayerstate.cpp \ $(OPIEDIR)/include/qpe/config.h \ - mediaplayerplugininterface.h \ mediaplayerstate.h \ @@ -185,5 +178,2 @@ videowidget.o: videowidget.cpp \ $(OPIEDIR)/include/qpe/resource.h \ - mediaplayerplugininterface.h \ - $(OPIEDIR)/include/qpe/qcom.h \ - $(OPIEDIR)/include/qpe/quuid.h \ videowidget.h \ @@ -200,7 +190,2 @@ playlistwidget.o: playlistwidget.cpp \ $(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 \ @@ -215,4 +200,2 @@ mediaplayer.o: mediaplayer.cpp \ $(OPIEDIR)/include/qpe/qpeapplication.h \ - $(OPIEDIR)/include/qpedecoration_qws.h \ - $(OPIEDIR)/include/timestring.h \ $(OPIEDIR)/include/qpe/qlibrary.h \ @@ -223,3 +206,2 @@ mediaplayer.o: mediaplayer.cpp \ mediaplayer.h \ - mediaplayerplugininterface.h \ playlistwidget.h \ @@ -233,6 +215,5 @@ 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 + audiodevice.h \ + $(OPIEDIR)/include/qpe/qcopenvelope_qws.h @@ -262,4 +243,3 @@ moc_mediaplayer.o: moc_mediaplayer.cpp \ $(OPIEDIR)/include/qpe/qcom.h \ - $(OPIEDIR)/include/qpe/quuid.h \ - mediaplayerplugininterface.h + $(OPIEDIR)/include/qpe/quuid.h diff --git a/core/multimedia/opieplayer/audiodevice.cpp b/core/multimedia/opieplayer/audiodevice.cpp index 11fd9e8..7b3700a 100644 --- a/core/multimedia/opieplayer/audiodevice.cpp +++ b/core/multimedia/opieplayer/audiodevice.cpp @@ -1,5 +1,5 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** @@ -19,7 +19,4 @@ **********************************************************************/ -// L.J.Potter added better error code Fri 02-15-2002 14:37:47 - #include <stdlib.h> -#include <stdio.h> #include <qpe/qpeapplication.h> @@ -111,3 +108,3 @@ void AudioDevice::getVolume( unsigned int& leftVolume, unsigned int& rightVolume if ( waveOutGetVolume( handle, (LPDWORD)&volume ) ) -// qDebug( "get volume of audio device failed" ); + qDebug( "get volume of audio device failed" ); waveOutClose( handle ); @@ -118,7 +115,6 @@ void AudioDevice::getVolume( unsigned int& leftVolume, unsigned int& rightVolume if ( mixerHandle >= 0 ) { - if(ioctl( mixerHandle, MIXER_READ(0), &volume )==-1) - perror("ioctl(\"MIXER_READ\")"); + ioctl( mixerHandle, MIXER_READ(0), &volume ); close( mixerHandle ); } else - perror("open(\"/dev/mixer\")"); + qDebug( "get volume of audio device failed" ); leftVolume = ((volume & 0x00FF) << 16) / 101; @@ -132,9 +128,9 @@ void AudioDevice::setVolume( unsigned int leftVolume, unsigned int rightVolume, if ( muted ) { - AudioDevicePrivate::leftVolume = leftVolume; - AudioDevicePrivate::rightVolume = rightVolume; - leftVolume = 0; - rightVolume = 0; + AudioDevicePrivate::leftVolume = leftVolume; + AudioDevicePrivate::rightVolume = rightVolume; + leftVolume = 0; + rightVolume = 0; } else { leftVolume = ( (int) leftVolume < 0 ) ? 0 : (( leftVolume > 0xFFFF ) ? 0xFFFF : leftVolume ); - rightVolume = ( (int)rightVolume < 0 ) ? 0 : (( rightVolume > 0xFFFF ) ? 0xFFFF : rightVolume ); + rightVolume = ( (int)rightVolume < 0 ) ? 0 : (( rightVolume > 0xFFFF ) ? 0xFFFF : rightVolume ); } @@ -153,3 +149,3 @@ void AudioDevice::setVolume( unsigned int leftVolume, unsigned int rightVolume, if ( waveOutSetVolume( handle, volume ) ) -// qDebug( "set volume of audio device failed" ); + qDebug( "set volume of audio device failed" ); waveOutClose( handle ); @@ -164,8 +160,6 @@ void AudioDevice::setVolume( unsigned int leftVolume, unsigned int rightVolume, if ( ( mixerHandle = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { - if(ioctl( mixerHandle, MIXER_WRITE(0), &volume ) ==-1) - perror("ioctl(\"MIXER_WRITE\")"); + ioctl( mixerHandle, MIXER_WRITE(0), &volume ); close( mixerHandle ); } else - perror("open(\"/dev/mixer\")"); - + qDebug( "set volume of audio device failed" ); # else @@ -194,13 +188,41 @@ AudioDevice::AudioDevice( unsigned int f, unsigned int chs, unsigned int bps ) { 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; @@ -211,7 +233,7 @@ AudioDevice::AudioDevice( unsigned int f, unsigned int chs, unsigned int bps ) { if ( ( d->handle = ::open( "/dev/dsp", O_WRONLY ) ) < 0 ) { - perror("open(\"/dev/dsp\") sending to /dev/null instead"); - d->handle = ::open( "/dev/null", O_WRONLY ); + qDebug( "error opening audio device /dev/dsp, sending data to /dev/null instead" ); + d->handle = ::open( "/dev/null", O_WRONLY ); } #ifdef KEEP_DEVICE_OPEN - AudioDevicePrivate::dspFd = d->handle; + AudioDevicePrivate::dspFd = d->handle; } else { @@ -221,16 +243,9 @@ AudioDevice::AudioDevice( unsigned int f, unsigned int chs, unsigned int bps ) { - 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); + 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_CHANNELS, &d->channels ) == -1 ) { - d->channels = ( d->channels == 1 ) ? 2 : d->channels; - if(ioctl( d->handle, SNDCTL_DSP_CHANNELS, &d->channels )==-1) - perror("ioctl(\"SNDCTL_DSP_CHANNELS\")"); + d->channels = ( d->channels == 1 ) ? 2 : d->channels; + ioctl( d->handle, SNDCTL_DSP_CHANNELS, &d->channels ); } @@ -242,4 +257,4 @@ AudioDevice::AudioDevice( unsigned int f, unsigned int chs, unsigned int bps ) { - //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 ( 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" ); @@ -248,2 +263,3 @@ AudioDevice::AudioDevice( unsigned int f, unsigned int chs, unsigned int bps ) { //if ( capabilities & DSP_CAP_MMAP ) qDebug( "Sound card can mmap" ); +#endif } @@ -256,3 +272,3 @@ AudioDevice::~AudioDevice() { # ifndef KEEP_DEVICE_OPEN - close( d->handle ); // Now it should be safe to shut the handle + close( d->handle ); // Now it should be safe to shut the handle # endif @@ -283,3 +299,3 @@ void AudioDevice::write( char *buffer, unsigned int length ) if ( waveOutWrite( (HWAVEOUT)d->handle, lpWaveHdr, sizeof(WAVEHDR) ) ) - qDebug( "failed to write block to audio device" ); + qDebug( "failed to write block to audio device" ); // emit completedIO(); @@ -289,5 +305,5 @@ void AudioDevice::write( char *buffer, unsigned int length ) if ( t != (int)length) { - qDebug("Ahhh!! memcpys 1"); - memcpy(d->unwrittenBuffer,buffer+t,length-t); - d->unwritten = length-t; + qDebug("Ahhh!! memcpys 1"); + memcpy(d->unwrittenBuffer,buffer+t,length-t); + d->unwritten = length-t; } @@ -327,23 +343,23 @@ unsigned int AudioDevice::canWrite() const if ( d->can_GETOSPACE && ioctl(d->handle,SNDCTL_DSP_GETOSPACE,&info) ) { - d->can_GETOSPACE = FALSE; - fcntl( d->handle, F_SETFL, O_NONBLOCK ); + d->can_GETOSPACE = FALSE; + fcntl( d->handle, F_SETFL, O_NONBLOCK ); } if ( d->can_GETOSPACE ) { - int t = info.fragments * sound_fragment_bytes; - return QMIN(t,(int)bufferSize()); + int t = info.fragments * sound_fragment_bytes; + return QMIN(t,(int)bufferSize()); } else { - if ( d->unwritten ) { - int t = ::write( d->handle, d->unwrittenBuffer, d->unwritten ); - if ( t<0 ) t = 0; - if ( (unsigned)t!=d->unwritten ) { - memcpy(d->unwrittenBuffer,d->unwrittenBuffer+t,d->unwritten-t); - d->unwritten -= t; - } else { - d->unwritten = 0; - } - } - if ( d->unwritten ) - return 0; - else - return d->bufferSize; + if ( d->unwritten ) { + int t = ::write( d->handle, d->unwrittenBuffer, d->unwritten ); + if ( t<0 ) t = 0; + if ( (unsigned)t!=d->unwritten ) { + memcpy(d->unwrittenBuffer,d->unwrittenBuffer+t,d->unwritten-t); + d->unwritten -= t; + } else { + d->unwritten = 0; + } + } + if ( d->unwritten ) + return 0; + else + return d->bufferSize; } @@ -357,4 +373,4 @@ int AudioDevice::bytesWritten() { if ( ( waveOutGetPosition( (HWAVEOUT)d->handle, &pmmt, sizeof(MMTIME) ) != MMSYSERR_NOERROR ) || ( pmmt.wType != TIME_BYTES ) ) { - qDebug( "failed to get audio device position" ); - return -1; + qDebug( "failed to get audio device position" ); + return -1; } @@ -364,4 +380,4 @@ int AudioDevice::bytesWritten() { if ( ioctl( d->handle, SNDCTL_DSP_GETODELAY, &buffered ) ) { - qDebug( "failed to get audio device position" ); - return -1; + qDebug( "failed to get audio device position" ); + return -1; } diff --git a/core/multimedia/opieplayer/audiodevice.h b/core/multimedia/opieplayer/audiodevice.h index dcd79fe..ec70788 100644 --- a/core/multimedia/opieplayer/audiodevice.h +++ b/core/multimedia/opieplayer/audiodevice.h @@ -1,5 +1,5 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** @@ -19,5 +19,2 @@ **********************************************************************/ -// L.J.Potter added changes Fri 02-15-2002 - - #ifndef AUDIODEVICE_H @@ -25,5 +22,3 @@ - #include <qobject.h> -#include <sys/soundcard.h> @@ -36,3 +31,3 @@ class AudioDevice : public QObject { public: - AudioDevice( unsigned int freq = 44000, unsigned int channels = 2, unsigned int bytesPerSample = AFMT_S16_LE ); + AudioDevice( unsigned int freq = 44000, unsigned int channels = 2, unsigned int bytesPerSample = 2 ); ~AudioDevice(); diff --git a/core/multimedia/opieplayer/audiowidget.cpp b/core/multimedia/opieplayer/audiowidget.cpp index 0d88591..1e0757f 100644 --- a/core/multimedia/opieplayer/audiowidget.cpp +++ b/core/multimedia/opieplayer/audiowidget.cpp @@ -1,5 +1,5 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** @@ -28,3 +28,2 @@ - extern MediaPlayerState *mediaPlayerState; @@ -63,3 +62,3 @@ AudioWidget::AudioWidget(QWidget* parent, const char* name, WFlags f) : { - setCaption( tr("OpiePlayer") ); + setCaption( tr("MediaPlayer") ); setBackgroundPixmap( Resource::loadPixmap( "mpegplayer/metalFinish" ) ); @@ -106,3 +105,3 @@ AudioWidget::~AudioWidget() { for ( int i = 0; i < 4; i++ ) - delete pixmaps[i]; + delete pixmaps[i]; } @@ -121,3 +120,3 @@ void AudioWidget::sliderReleased() { if ( slider->width() == 0 ) - return; + return; long val = long((double)slider->value() * mediaPlayerState->length() / slider->width()); @@ -139,7 +138,7 @@ void AudioWidget::setView( char view ) { if ( view == 'a' ) { - startTimer( 150 ); - showMaximized(); + startTimer( 150 ); + showMaximized(); } else { - killTimers(); - hide(); + killTimers(); + hide(); } @@ -150,3 +149,3 @@ void AudioWidget::updateSlider( long i, long max ) { if ( max == 0 ) - return; + return; // Will flicker too much if we don't do this @@ -156,6 +155,6 @@ void AudioWidget::updateSlider( long i, long max ) { if ( !audioSliderBeingMoved ) { - if ( slider->value() != val ) - slider->setValue( val ); - if ( slider->maxValue() != width ) - slider->setMaxValue( width ); + if ( slider->value() != val ) + slider->setValue( val ); + if ( slider->maxValue() != width ) + slider->setMaxValue( width ); } @@ -166,3 +165,3 @@ void AudioWidget::setToggleButton( int i, bool down ) { if ( down != audioButtons[i].isDown ) - toggleButton( i ); + toggleButton( i ); } @@ -190,9 +189,9 @@ void AudioWidget::timerEvent( QTimerEvent * ) { if ( !mediaPlayerState->paused() && audioButtons[ AudioPlay ].isDown ) { - frame = frame >= 7 ? 0 : frame + 1; - int x = audioButtons[AudioPlay].xPos; - int y = audioButtons[AudioPlay].yPos; - QPainter p( this ); - // Optimize to only draw the little bit of the changing images which is different - p.drawPixmap( x + 14, y + 8, *pixmaps[3], 32 * frame, 0, 32, 32 ); - p.drawPixmap( x + 37, y + 37, *pixmaps[2], 18 * AudioPlay, 0, 6, 3 ); + frame = frame >= 7 ? 0 : frame + 1; + int x = audioButtons[AudioPlay].xPos; + int y = audioButtons[AudioPlay].yPos; + QPainter p( this ); + // Optimize to only draw the little bit of the changing images which is different + p.drawPixmap( x + 14, y + 8, *pixmaps[3], 32 * frame, 0, 32, 32 ); + p.drawPixmap( x + 37, y + 37, *pixmaps[2], 18 * AudioPlay, 0, 6, 3 ); } @@ -203,44 +202,44 @@ void AudioWidget::mouseMoveEvent( QMouseEvent *event ) { for ( int i = 0; i < numButtons; i++ ) { - int size = audioButtons[i].isBig; - int x = audioButtons[i].xPos; - int y = audioButtons[i].yPos; - if ( event->state() == QMouseEvent::LeftButton ) { - // The test to see if the mouse click is inside the circular button or not - // (compared with the radius squared to avoid a square-root of our distance) - int radius = 32 + 13 * size; - QPoint center = QPoint( x + radius, y + radius ); - QPoint dXY = center - event->pos(); - int dist = dXY.x() * dXY.x() + dXY.y() * dXY.y(); - bool isOnButton = dist <= (radius * radius); -// QRect r( x, y, 64 + 22*size, 64 + 22*size ); -// bool isOnButton = r.contains( event->pos() ); // Rectangular Button code - if ( isOnButton && !audioButtons[i].isHeld ) { - audioButtons[i].isHeld = TRUE; - toggleButton(i); - switch (i) { + int size = audioButtons[i].isBig; + int x = audioButtons[i].xPos; + int y = audioButtons[i].yPos; + if ( event->state() == QMouseEvent::LeftButton ) { + // The test to see if the mouse click is inside the circular button or not + // (compared with the radius squared to avoid a square-root of our distance) + int radius = 32 + 13 * size; + QPoint center = QPoint( x + radius, y + radius ); + QPoint dXY = center - event->pos(); + int dist = dXY.x() * dXY.x() + dXY.y() * dXY.y(); + bool isOnButton = dist <= (radius * radius); +// QRect r( x, y, 64 + 22*size, 64 + 22*size ); +// bool isOnButton = r.contains( event->pos() ); // Rectangular Button code + if ( isOnButton && !audioButtons[i].isHeld ) { + audioButtons[i].isHeld = TRUE; + toggleButton(i); + switch (i) { case AudioVolumeUp: emit moreClicked(); return; case AudioVolumeDown: emit lessClicked(); return; - } - } else if ( !isOnButton && audioButtons[i].isHeld ) { - audioButtons[i].isHeld = FALSE; - toggleButton(i); - } - } else { - if ( audioButtons[i].isHeld ) { - audioButtons[i].isHeld = FALSE; - if ( !audioButtons[i].isToggle ) - setToggleButton( i, FALSE ); - switch (i) { - case AudioPlay: mediaPlayerState->setPlaying(audioButtons[i].isDown); return; - case AudioStop: mediaPlayerState->setPlaying(FALSE); return; - case AudioPause: mediaPlayerState->setPaused(audioButtons[i].isDown); return; - case AudioNext: mediaPlayerState->setNext(); return; - case AudioPrevious: mediaPlayerState->setPrev(); return; - case AudioLoop: mediaPlayerState->setLooping(audioButtons[i].isDown); return; - case AudioVolumeUp: emit moreReleased(); return; - case AudioVolumeDown: emit lessReleased(); return; - case AudioPlayList: mediaPlayerState->setList(); return; - } - } - } + } + } else if ( !isOnButton && audioButtons[i].isHeld ) { + audioButtons[i].isHeld = FALSE; + toggleButton(i); + } + } else { + if ( audioButtons[i].isHeld ) { + audioButtons[i].isHeld = FALSE; + if ( !audioButtons[i].isToggle ) + setToggleButton( i, FALSE ); + switch (i) { + case AudioPlay: mediaPlayerState->setPlaying(audioButtons[i].isDown); return; + case AudioStop: mediaPlayerState->setPlaying(FALSE); return; + case AudioPause: mediaPlayerState->setPaused(audioButtons[i].isDown); return; + case AudioNext: mediaPlayerState->setNext(); return; + case AudioPrevious: mediaPlayerState->setPrev(); return; + case AudioLoop: mediaPlayerState->setLooping(audioButtons[i].isDown); return; + case AudioVolumeUp: emit moreReleased(); return; + case AudioVolumeDown: emit lessReleased(); return; + case AudioPlayList: mediaPlayerState->setList(); return; + } + } + } } @@ -273,3 +272,3 @@ void AudioWidget::paintEvent( QPaintEvent * ) { for ( int i = 0; i < numButtons; i++ ) - paintButton( &p, i ); + paintButton( &p, i ); } diff --git a/core/multimedia/opieplayer/audiowidget.h b/core/multimedia/opieplayer/audiowidget.h index 4b82a91..95f5322 100644 --- a/core/multimedia/opieplayer/audiowidget.h +++ b/core/multimedia/opieplayer/audiowidget.h @@ -1,5 +1,5 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** @@ -22,3 +22,2 @@ - #include <qwidget.h> diff --git a/core/multimedia/opieplayer/libflash/libflashplugin.h b/core/multimedia/opieplayer/libflash/libflashplugin.h index a2f1c42..48b512f 100644 --- a/core/multimedia/opieplayer/libflash/libflashplugin.h +++ b/core/multimedia/opieplayer/libflash/libflashplugin.h @@ -26,4 +26,3 @@ #include "flash.h" -//#include <qpe/mediaplayerplugininterface.h> -#include "../mediaplayerplugininterface.h" +#include <qpe/mediaplayerplugininterface.h> @@ -51,3 +50,2 @@ public: int audioSamples( int /*stream*/ ) { return 1000000; } -int audioBitsPerSample(int) { return 0;} bool audioSetSample( long sample, int stream ); diff --git a/core/multimedia/opieplayer/libflash/libflashpluginimpl.h b/core/multimedia/opieplayer/libflash/libflashpluginimpl.h index cb8d959..33d8ad2 100644 --- a/core/multimedia/opieplayer/libflash/libflashpluginimpl.h +++ b/core/multimedia/opieplayer/libflash/libflashpluginimpl.h @@ -23,4 +23,3 @@ -//#include <qpe/mediaplayerplugininterface.h> -#include "../mediaplayerplugininterface.h" +#include <qpe/mediaplayerplugininterface.h> diff --git a/core/multimedia/opieplayer/libflash/swf.h b/core/multimedia/opieplayer/libflash/swf.h index 48986cc..5f5e4f7 100644 --- a/core/multimedia/opieplayer/libflash/swf.h +++ b/core/multimedia/opieplayer/libflash/swf.h @@ -210,3 +210,3 @@ extern "C" { //#include "zlib.h" -#include "/opt/qt-2.3.2-embedded/src/3rdparty/zlib/zlib.h" +#include "../src/3rdparty/zlib/zlib.h" }; diff --git a/core/multimedia/opieplayer/libmad/Makefile.in b/core/multimedia/opieplayer/libmad/Makefile.in index 552043c..e9f74e7 100644 --- a/core/multimedia/opieplayer/libmad/Makefile.in +++ b/core/multimedia/opieplayer/libmad/Makefile.in @@ -216,3 +216,2 @@ libmadplugin.o: libmadplugin.cpp \ libmadplugin.h \ - ../mediaplayerplugininterface.h \ mad.h @@ -221,3 +220,2 @@ 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 b54ca6b..6c40a15 100644 --- a/core/multimedia/opieplayer/libmad/libmad.pro +++ b/core/multimedia/opieplayer/libmad/libmad.pro @@ -1,14 +1,12 @@ -TEMPLATE = lib -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 +TEMPLATE = lib +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 +VERSION = 1.0.0 diff --git a/core/multimedia/opieplayer/libmad/libmadplugin.h b/core/multimedia/opieplayer/libmad/libmadplugin.h index ff84c27..d85e0d4 100644 --- a/core/multimedia/opieplayer/libmad/libmadplugin.h +++ b/core/multimedia/opieplayer/libmad/libmadplugin.h @@ -22,6 +22,4 @@ - #include <qstring.h> -//#include <qpe/mediaplayerplugininterface.h> -#include "../mediaplayerplugininterface.h" +#include <qpe/mediaplayerplugininterface.h> @@ -56,3 +54,2 @@ public: bool audioSetSample( long sample, int stream ); - int audioBitsPerSample(int) {return 0;} long audioGetSample( int stream ); diff --git a/core/multimedia/opieplayer/libmad/libmadpluginimpl.h b/core/multimedia/opieplayer/libmad/libmadpluginimpl.h index 8ad4956..2c5ed3b 100644 --- a/core/multimedia/opieplayer/libmad/libmadpluginimpl.h +++ b/core/multimedia/opieplayer/libmad/libmadpluginimpl.h @@ -22,5 +22,3 @@ - -//#include <qpe/mediaplayerplugininterface.h> -#include "../mediaplayerplugininterface.h" +#include <qpe/mediaplayerplugininterface.h> @@ -45,2 +43,3 @@ public: virtual MediaPlayerEncoder *encoder(); + private: diff --git a/core/multimedia/opieplayer/libmad/version.c b/core/multimedia/opieplayer/libmad/version.c index 1baba26..413d54b 100644 --- a/core/multimedia/opieplayer/libmad/version.c +++ b/core/multimedia/opieplayer/libmad/version.c @@ -90,2 +90,2 @@ char const mad_build[] = # endif -;
\ No newline at end of file +; diff --git a/core/multimedia/opieplayer/libmpeg3/Makefile.in b/core/multimedia/opieplayer/libmpeg3/Makefile.in index d255e4f..154f85d 100644 --- a/core/multimedia/opieplayer/libmpeg3/Makefile.in +++ b/core/multimedia/opieplayer/libmpeg3/Makefile.in @@ -178,4 +178,3 @@ libmpeg3plugin.o: libmpeg3plugin.cpp \ video/mpeg3video.h \ - mpeg3protos.h \ - ../mediaplayerplugininterface.h + mpeg3protos.h @@ -195,3 +194,2 @@ libmpeg3pluginimpl.o: libmpeg3pluginimpl.cpp \ mpeg3protos.h \ - ../mediaplayerplugininterface.h \ libmpeg3pluginimpl.h @@ -418,3 +416,3 @@ audio/layer2.o: audio/layer2.c \ audio/layer3.o: audio/layer3.c \ - huffman.h \ + audio/huffman.h \ audio/mpeg3audio.h \ diff --git a/core/multimedia/opieplayer/libmpeg3/libmpeg3plugin.h b/core/multimedia/opieplayer/libmpeg3/libmpeg3plugin.h index 54f259b..e0eb930 100644 --- a/core/multimedia/opieplayer/libmpeg3/libmpeg3plugin.h +++ b/core/multimedia/opieplayer/libmpeg3/libmpeg3plugin.h @@ -22,3 +22,2 @@ - #include <qstring.h> @@ -27,4 +26,3 @@ #include "mpeg3protos.h" -//#include <qpe/mediaplayerplugininterface.h> -#include "../mediaplayerplugininterface.h" +#include <qpe/mediaplayerplugininterface.h> @@ -54,3 +52,2 @@ public: 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; } diff --git a/core/multimedia/opieplayer/libmpeg3/libmpeg3pluginimpl.h b/core/multimedia/opieplayer/libmpeg3/libmpeg3pluginimpl.h index 89abf97..e9926f4 100644 --- a/core/multimedia/opieplayer/libmpeg3/libmpeg3pluginimpl.h +++ b/core/multimedia/opieplayer/libmpeg3/libmpeg3pluginimpl.h @@ -22,5 +22,3 @@ - -//#include <qpe/mediaplayerplugininterface.h> -#include "../mediaplayerplugininterface.h" +#include <qpe/mediaplayerplugininterface.h> diff --git a/core/multimedia/opieplayer/loopcontrol.cpp b/core/multimedia/opieplayer/loopcontrol.cpp index 1ae0059..dd466ed 100644 --- a/core/multimedia/opieplayer/loopcontrol.cpp +++ b/core/multimedia/opieplayer/loopcontrol.cpp @@ -1,5 +1,5 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** @@ -19,9 +19,8 @@ **********************************************************************/ -// L.J.Potter added changes Fri 02-15-2002 - #include <qpe/qpeapplication.h> - #ifdef Q_WS_QWS + #include <qpe/qcopenvelope_qws.h> #endif +#include <qpe/mediaplayerplugininterface.h> #include <stdio.h> @@ -35,3 +34,2 @@ #include "audiodevice.h" -#include "mediaplayerplugininterface.h" #include "mediaplayerstate.h" @@ -47,9 +45,9 @@ extern MediaPlayerState *mediaPlayerState; -static char *audioBuffer = NULL; +static char *audioBuffer = NULL; static AudioDevice *audioDevice = NULL; -static bool disabledSuspendScreenSaver = FALSE; -static bool previousSuspendMode = FALSE; +static bool disabledSuspendScreenSaver = FALSE; +static bool previousSuspendMode = FALSE; -pthread_t audio_tid; +pthread_t audio_tid; pthread_attr_t audio_attr; @@ -61,6 +59,6 @@ public: Mutex() { - pthread_mutexattr_t attr; - pthread_mutexattr_init( &attr ); - pthread_mutex_init( &mutex, &attr ); - pthread_mutexattr_destroy( &attr ); + pthread_mutexattr_t attr; + pthread_mutexattr_init( &attr ); + pthread_mutex_init( &mutex, &attr ); + pthread_mutexattr_destroy( &attr ); } @@ -68,3 +66,3 @@ public: ~Mutex() { - pthread_mutex_destroy( &mutex ); + pthread_mutex_destroy( &mutex ); } @@ -72,3 +70,3 @@ public: void lock() { - pthread_mutex_lock( &mutex ); + pthread_mutex_lock( &mutex ); } @@ -76,3 +74,3 @@ public: void unlock() { - pthread_mutex_unlock( &mutex ); + pthread_mutex_unlock( &mutex ); } @@ -86,6 +84,6 @@ void *startAudioThread( void *ptr ) { while ( TRUE ) { - if ( threadOkToGo && mpegView->moreAudio ) - mpegView->startAudio(); - else - usleep( 10000 ); // Semi-buzy-wait till we are playing again + if ( threadOkToGo && mpegView->moreAudio ) + mpegView->startAudio(); + else + usleep( 10000 ); // Semi-buzy-wait till we are playing again } @@ -106,15 +104,20 @@ LoopControl::LoopControl( QObject *parent, const char *name ) pthread_attr_init(&audio_attr); -#define USE_REALTIME_AUDIO_THREAD -#ifdef USE_REALTIME_AUDIO_THREAD - // Attempt to set it to real-time round robin - if ( pthread_attr_setschedpolicy( &audio_attr, SCHED_RR ) == 0 ) { - sched_param params; - params.sched_priority = 50; - pthread_attr_setschedparam(&audio_attr,¶ms); - } else { - qDebug( "Error setting up a realtime thread, reverting to using a normal thread." ); - pthread_attr_destroy(&audio_attr); - pthread_attr_init(&audio_attr); + + if ( getuid() == 0 ) { + printf("true, guid = %i\n", getuid()); + + // Attempt to set it to real-time round robin + if ( pthread_attr_setschedpolicy( &audio_attr, SCHED_RR ) == 0 ) { + sched_param params; + params.sched_priority = 50; + pthread_attr_setschedparam(&audio_attr,¶ms); + } else { + qDebug( "Error setting up a realtime thread, reverting to using a normal thread." ); + pthread_attr_destroy(&audio_attr); + pthread_attr_init(&audio_attr); + } } -#endif +// printf("false, guid = %i\n", getuid()); + usleep( 100 ); + pthread_create(&audio_tid, &audio_attr, (void * (*)(void *))startAudioThread, this); @@ -135,10 +138,10 @@ void LoopControl::timerEvent( QTimerEvent *te ) { if ( te->timerId() == videoId ) - startVideo(); + startVideo(); if ( te->timerId() == sliderId ) { - if ( hasAudioChannel && !hasVideoChannel && moreAudio ) { - mediaPlayerState->updatePosition( audioSampleCounter ); - } else if ( hasVideoChannel && moreVideo ) { - mediaPlayerState->updatePosition( current_frame ); - } + if ( hasAudioChannel && !hasVideoChannel && moreAudio ) { + mediaPlayerState->updatePosition( audioSampleCounter ); + } else if ( hasVideoChannel && moreVideo ) { + mediaPlayerState->updatePosition( current_frame ); + } } @@ -156,22 +159,22 @@ void LoopControl::setPosition( long pos ) { if ( hasVideoChannel && hasAudioChannel ) { - playtime.restart(); - playtime = playtime.addMSecs( long((double)-pos * 1000.0 / framerate) ); - current_frame = pos + 1; - mediaPlayerState->curDecoder()->videoSetFrame( current_frame, stream ); - prev_frame = current_frame - 1; - currentSample = (int)( (double)current_frame * freq / framerate ); - mediaPlayerState->curDecoder()->audioSetSample( currentSample, stream ); - audioSampleCounter = currentSample - 1; + playtime.restart(); + playtime = playtime.addMSecs( long((double)-pos * 1000.0 / framerate) ); + current_frame = pos + 1; + mediaPlayerState->curDecoder()->videoSetFrame( current_frame, stream ); + prev_frame = current_frame - 1; + currentSample = (int)( (double)current_frame * freq / framerate ); + mediaPlayerState->curDecoder()->audioSetSample( currentSample, stream ); + audioSampleCounter = currentSample - 1; } else if ( hasVideoChannel ) { - playtime.restart(); - playtime = playtime.addMSecs( long((double)-pos * 1000.0 / framerate) ); - current_frame = pos + 1; - mediaPlayerState->curDecoder()->videoSetFrame( current_frame, stream ); - prev_frame = current_frame - 1; + playtime.restart(); + playtime = playtime.addMSecs( long((double)-pos * 1000.0 / framerate) ); + current_frame = pos + 1; + mediaPlayerState->curDecoder()->videoSetFrame( current_frame, stream ); + prev_frame = current_frame - 1; } else if ( hasAudioChannel ) { - playtime.restart(); - playtime = playtime.addMSecs( long((double)-pos * 1000.0 / freq) ); - currentSample = pos + 1; - mediaPlayerState->curDecoder()->audioSetSample( currentSample, stream ); - audioSampleCounter = currentSample - 1; + playtime.restart(); + playtime = playtime.addMSecs( long((double)-pos * 1000.0 / freq) ); + currentSample = pos + 1; + mediaPlayerState->curDecoder()->audioSetSample( currentSample, stream ); + audioSampleCounter = currentSample - 1; } @@ -188,28 +191,28 @@ void LoopControl::startVideo() { - if ( hasAudioChannel && !isMuted ) { + if ( hasAudioChannel && !isMuted ) { - current_frame = long( playtime.elapsed() * framerate / 1000 ); + current_frame = long( playtime.elapsed() * framerate / 1000 ); - if ( prev_frame != -1 && current_frame <= prev_frame ) - return; + if ( prev_frame != -1 && current_frame <= prev_frame ) + return; - } else { - // Don't skip - current_frame++; - } + } else { + // Don't skip + current_frame++; + } - if ( prev_frame == -1 || current_frame > prev_frame ) { - if ( current_frame > prev_frame + 1 ) { - mediaPlayerState->curDecoder()->videoSetFrame( current_frame, stream ); - } - moreVideo = videoUI->playVideo(); - prev_frame = current_frame; - } + if ( prev_frame == -1 || current_frame > prev_frame ) { + if ( current_frame > prev_frame + 1 ) { + mediaPlayerState->curDecoder()->videoSetFrame( current_frame, stream ); + } + moreVideo = videoUI->playVideo(); + prev_frame = current_frame; + } - } else { + } else { - moreVideo = FALSE; - killTimer( videoId ); + moreVideo = FALSE; + killTimer( videoId ); - } + } @@ -225,33 +228,32 @@ void LoopControl::startAudio() { - if ( !isMuted && mediaPlayerState->curDecoder() ) { + if ( !isMuted && mediaPlayerState->curDecoder() ) { - currentSample = audioSampleCounter + 1; + currentSample = audioSampleCounter + 1; - if ( currentSample != audioSampleCounter + 1 ) - qDebug("out of sync with decoder %i %i", currentSample, audioSampleCounter); + 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; + long samplesRead = 0; + 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 < 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; + } - audioDevice->write( audioBuffer, samplesRead * 2 * channels ); - audioSampleCounter = currentSample + samplesRead - 1; + audioDevice->write( audioBuffer, samplesRead * 2 * channels ); + audioSampleCounter = currentSample + samplesRead - 1; - moreAudio = readOk && (audioSampleCounter <= total_audio_samples); + moreAudio = audioSampleCounter <= total_audio_samples; - } else { + } else { - moreAudio = FALSE; + moreAudio = FALSE; - } + } @@ -268,3 +270,3 @@ void LoopControl::killTimers() { if ( hasVideoChannel ) - killTimer( videoId ); + killTimer( videoId ); killTimer( sliderId ); @@ -284,5 +286,5 @@ void LoopControl::startTimers() { if ( hasVideoChannel ) { - moreVideo = TRUE; - int mSecsBetweenFrames = (int)(100 / framerate); // 10% of the real value - videoId = startTimer( mSecsBetweenFrames ); + moreVideo = TRUE; + int mSecsBetweenFrames = (int)(100 / framerate); // 10% of the real value + videoId = startTimer( mSecsBetweenFrames ); } @@ -290,4 +292,4 @@ void LoopControl::startTimers() { if ( hasAudioChannel ) { - moreAudio = TRUE; - threadOkToGo = TRUE; + moreAudio = TRUE; + threadOkToGo = TRUE; } @@ -303,12 +305,12 @@ void LoopControl::setPaused( bool pause ) { if ( !mediaPlayerState->curDecoder() || !mediaPlayerState->curDecoder()->isOpen() ) - return; + return; if ( pause ) { - killTimers(); + killTimers(); } else { - // Force an update of the position - mediaPlayerState->setPosition( mediaPlayerState->position() + 1 ); - mediaPlayerState->setPosition( mediaPlayerState->position() - 1 ); - // Just like we never stopped - startTimers(); + // Force an update of the position + mediaPlayerState->setPosition( mediaPlayerState->position() + 1 ); + mediaPlayerState->setPosition( mediaPlayerState->position() - 1 ); + // Just like we never stopped + startTimers(); } @@ -321,5 +323,5 @@ void LoopControl::stop( bool willPlayAgainShortly ) { if ( !willPlayAgainShortly && disabledSuspendScreenSaver ) { - disabledSuspendScreenSaver = FALSE; - // Re-enable the suspend mode - QCopEnvelope("QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; + disabledSuspendScreenSaver = FALSE; + // Re-enable the suspend mode + QCopEnvelope("QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; } @@ -329,16 +331,16 @@ void LoopControl::stop( bool willPlayAgainShortly ) { - killTimers(); + killTimers(); - audioMutex->lock(); + audioMutex->lock(); - mediaPlayerState->curDecoder()->close(); + mediaPlayerState->curDecoder()->close(); - if ( audioDevice ) { - delete audioDevice; - delete audioBuffer; - audioDevice = 0; - audioBuffer = 0; - } + if ( audioDevice ) { + delete audioDevice; + delete audioBuffer; + audioDevice = 0; + audioBuffer = 0; + } - audioMutex->unlock(); + audioMutex->unlock(); @@ -361,11 +363,11 @@ bool LoopControl::init( const QString& filename ) { if ( mediaPlayerState->curDecoder()->pluginName() == QString("LibMadPlugin") ) { - if ( mediaPlayerState->libMpeg3Decoder() && mediaPlayerState->libMpeg3Decoder()->open( filename ) ) { - total_audio_samples = mediaPlayerState->libMpeg3Decoder()->audioSamples( 0 ); - mediaPlayerState->libMpeg3Decoder()->close(); - } + if ( mediaPlayerState->libMpeg3Decoder() && mediaPlayerState->libMpeg3Decoder()->open( filename ) ) { + total_audio_samples = mediaPlayerState->libMpeg3Decoder()->audioSamples( 0 ); + mediaPlayerState->libMpeg3Decoder()->close(); + } } - + if ( !mediaPlayerState->curDecoder()|| !mediaPlayerState->curDecoder()->open( filename ) ) { - audioMutex->unlock(); - return FALSE; + audioMutex->unlock(); + return FALSE; } @@ -376,30 +378,30 @@ bool LoopControl::init( const QString& filename ) { if ( hasAudioChannel ) { - int astream = 0; + int astream = 0; - channels = mediaPlayerState->curDecoder()->audioChannels( astream ); - qDebug( "LC- channels = %d", channels ); - - if ( !total_audio_samples ) - total_audio_samples = mediaPlayerState->curDecoder()->audioSamples( astream ); + channels = mediaPlayerState->curDecoder()->audioChannels( astream ); + DecodeLoopDebug(( "channels = %d\n", 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 ); - qDebug( "LC- frequency = %d", freq ); + mediaPlayerState->setLength( total_audio_samples ); + + freq = mediaPlayerState->curDecoder()->audioFrequency( astream ); + DecodeLoopDebug(( "frequency = %d\n", freq )); - audioSampleCounter = 0; + audioSampleCounter = 0; - int bits_per_sample = mediaPlayerState->curDecoder()->audioBitsPerSample( astream); + static const int bytes_per_sample = 2; //16 bit - audioDevice = new AudioDevice( freq, channels, bits_per_sample); - audioBuffer = new char[ audioDevice->bufferSize() ]; - channels = audioDevice->channels(); + audioDevice = new AudioDevice( freq, channels, bytes_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 ); + //### 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 ); } @@ -407,17 +409,17 @@ bool LoopControl::init( const QString& filename ) { if ( hasVideoChannel ) { - total_video_frames = mediaPlayerState->curDecoder()->videoFrames( stream ); + total_video_frames = mediaPlayerState->curDecoder()->videoFrames( stream ); - mediaPlayerState->setLength( total_video_frames ); + mediaPlayerState->setLength( total_video_frames ); - framerate = mediaPlayerState->curDecoder()->videoFrameRate( stream ); - DecodeLoopDebug(( "Frame rate %g total %ld", framerate, total_video_frames )); + framerate = mediaPlayerState->curDecoder()->videoFrameRate( stream ); + DecodeLoopDebug(( "Frame rate %g total %ld", framerate, total_video_frames )); - if ( framerate <= 1.0 ) { - DecodeLoopDebug(( "Crazy frame rate, resetting to sensible" )); - framerate = 25; - } + if ( framerate <= 1.0 ) { + DecodeLoopDebug(( "Crazy frame rate, resetting to sensible" )); + framerate = 25; + } - if ( total_video_frames == 1 ) { - DecodeLoopDebug(( "Cannot seek to frame" )); - } + if ( total_video_frames == 1 ) { + DecodeLoopDebug(( "Cannot seek to frame" )); + } @@ -441,7 +443,7 @@ void LoopControl::play() { if ( !disabledSuspendScreenSaver || previousSuspendMode != hasVideoChannel ) { - disabledSuspendScreenSaver = TRUE; - previousSuspendMode = hasVideoChannel; + disabledSuspendScreenSaver = TRUE; + previousSuspendMode = hasVideoChannel; // Stop the screen from blanking and power saving state - QCopEnvelope("QPE/System", "setScreenSaverMode(int)" ) - << ( hasVideoChannel ? QPEApplication::Disable : QPEApplication::DisableSuspend ); + QCopEnvelope("QPE/System", "setScreenSaverMode(int)" ) + << ( hasVideoChannel ? QPEApplication::Disable : QPEApplication::DisableSuspend ); } @@ -456,10 +458,10 @@ void LoopControl::setMute( bool on ) { if ( on != isMuted ) { - isMuted = on; - if ( !on ) { - // Force an update of the position - mediaPlayerState->setPosition( mediaPlayerState->position() + 1 ); - mediaPlayerState->setPosition( mediaPlayerState->position() - 1 ); - // Resume playing audio - moreAudio = TRUE; - } + isMuted = on; + if ( !on ) { + // Force an update of the position + mediaPlayerState->setPosition( mediaPlayerState->position() + 1 ); + mediaPlayerState->setPosition( mediaPlayerState->position() - 1 ); + // Resume playing audio + moreAudio = TRUE; + } } diff --git a/core/multimedia/opieplayer/loopcontrol.h b/core/multimedia/opieplayer/loopcontrol.h index fc7d316..3191259 100644 --- a/core/multimedia/opieplayer/loopcontrol.h +++ b/core/multimedia/opieplayer/loopcontrol.h @@ -1,5 +1,5 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** @@ -19,4 +19,2 @@ **********************************************************************/ -// L.J.Potter added changes Fri 02-15-2002 - #ifndef MPEGVIEW_H @@ -24,3 +22,2 @@ - #include <qwidget.h> diff --git a/core/multimedia/opieplayer/loopcontrol_threaded.cpp b/core/multimedia/opieplayer/loopcontrol_threaded.cpp index 2e49bb7..eb89b85 100644 --- a/core/multimedia/opieplayer/loopcontrol_threaded.cpp +++ b/core/multimedia/opieplayer/loopcontrol_threaded.cpp @@ -1,5 +1,5 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** @@ -22,2 +22,3 @@ + #include <qpe/qpeapplication.h> @@ -28,3 +29,3 @@ #endif -#include "mediaplayerplugininterface.h" +#include <qpe/mediaplayerplugininterface.h> #include <stdio.h> diff --git a/core/multimedia/opieplayer/loopcontrol_threaded.h b/core/multimedia/opieplayer/loopcontrol_threaded.h index 9a009d1..ced6ac8 100644 --- a/core/multimedia/opieplayer/loopcontrol_threaded.h +++ b/core/multimedia/opieplayer/loopcontrol_threaded.h @@ -1,5 +1,5 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** @@ -23,2 +23,3 @@ + #include <qwidget.h> diff --git a/core/multimedia/opieplayer/main.cpp b/core/multimedia/opieplayer/main.cpp index 9f7ef73..720a1ca 100644 --- a/core/multimedia/opieplayer/main.cpp +++ b/core/multimedia/opieplayer/main.cpp @@ -1,5 +1,5 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** @@ -27,3 +27,2 @@ - MediaPlayerState *mediaPlayerState; @@ -50,3 +49,3 @@ int main(int argc, char **argv) { - pl.setCaption( MediaPlayer::tr("Opie Player") ); + pl.setCaption( MediaPlayer::tr("Media Player") ); a.showMainDocumentWidget(&pl); diff --git a/core/multimedia/opieplayer/mediaplayer.cpp b/core/multimedia/opieplayer/mediaplayer.cpp index 3d8f76c..ce42c2c 100644 --- a/core/multimedia/opieplayer/mediaplayer.cpp +++ b/core/multimedia/opieplayer/mediaplayer.cpp @@ -1,5 +1,5 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** @@ -19,2 +19,3 @@ **********************************************************************/ + #include <qpe/qpeapplication.h> diff --git a/core/multimedia/opieplayer/mediaplayer.h b/core/multimedia/opieplayer/mediaplayer.h index 379d95c..73f8124 100644 --- a/core/multimedia/opieplayer/mediaplayer.h +++ b/core/multimedia/opieplayer/mediaplayer.h @@ -1,5 +1,5 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** @@ -22,3 +22,2 @@ - #include <qmainwindow.h> @@ -26,3 +25,3 @@ #include <qpe/qlibrary.h> -#include "mediaplayerplugininterface.h" +#include <qpe/mediaplayerplugininterface.h> diff --git a/core/multimedia/opieplayer/mediaplayerplugininterface.h b/core/multimedia/opieplayer/mediaplayerplugininterface.h index 339b2e4..aeeffde 100644 --- a/core/multimedia/opieplayer/mediaplayerplugininterface.h +++ b/core/multimedia/opieplayer/mediaplayerplugininterface.h @@ -22,2 +22,3 @@ + #include <qpe/qcom.h> @@ -63,3 +64,8 @@ public: 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; @@ -93,5 +99,2 @@ public: - // File Properies - virtual long getPlayTime() { return -1; } - virtual int audioBitsPerSample( int stream ) = 0; }; diff --git a/core/multimedia/opieplayer/mediaplayerstate.cpp b/core/multimedia/opieplayer/mediaplayerstate.cpp index 2a6bca3..7e82166 100644 --- a/core/multimedia/opieplayer/mediaplayerstate.cpp +++ b/core/multimedia/opieplayer/mediaplayerstate.cpp @@ -1,5 +1,5 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** @@ -21,2 +21,3 @@ #include <qpe/qlibrary.h> +#include <qpe/mediaplayerplugininterface.h> #include <qpe/config.h> @@ -25,7 +26,4 @@ #include <qdir.h> -#include "mediaplayerplugininterface.h" #include "mediaplayerstate.h" - - #ifdef QT_NO_COMPONENT @@ -38,4 +36,4 @@ -//#define MediaPlayerDebug(x) qDebug x -#define MediaPlayerDebug(x) +#define MediaPlayerDebug(x) qDebug x +//#define MediaPlayerDebug(x) @@ -99,6 +97,6 @@ MediaPlayerDecoder *MediaPlayerState::newDecoder( const QString& file ) { for ( it = pluginList.begin(); it != pluginList.end(); ++it ) { - if ( (*it).decoder->isFileSupported( file ) ) { - tmpDecoder = (*it).decoder; - break; - } + if ( (*it).decoder->isFileSupported( file ) ) { + tmpDecoder = (*it).decoder; + break; + } } @@ -118,6 +116,2 @@ MediaPlayerDecoder *MediaPlayerState::libMpeg3Decoder() { -// ### hack to get true sample count -// MediaPlayerDecoder *MediaPlayerState::libWavDecoder() { -// return libwavdecoder; -// } @@ -128,5 +122,5 @@ void MediaPlayerState::loadPlugins() { for ( mit = pluginList.begin(); mit != pluginList.end(); ++mit ) { - (*mit).iface->release(); - (*mit).library->unload(); - delete (*mit).library; + (*mit).iface->release(); + (*mit).library->unload(); + delete (*mit).library; } @@ -139,25 +133,25 @@ void MediaPlayerState::loadPlugins() { for ( it = list.begin(); it != list.end(); ++it ) { - MediaPlayerPluginInterface *iface = 0; - QLibrary *lib = new QLibrary( path + "/" + *it ); + MediaPlayerPluginInterface *iface = 0; + QLibrary *lib = new QLibrary( path + "/" + *it ); - MediaPlayerDebug(( "querying: %s", QString( path + "/" + *it ).latin1() )); + MediaPlayerDebug(( "querying: %s", QString( path + "/" + *it ).latin1() )); - if ( lib->queryInterface( IID_MediaPlayerPlugin, (QUnknownInterface**)&iface ) == QS_OK ) { + if ( lib->queryInterface( IID_MediaPlayerPlugin, (QUnknownInterface**)&iface ) == QS_OK ) { - MediaPlayerDebug(( "loading: %s", QString( path + "/" + *it ).latin1() )); + MediaPlayerDebug(( "loading: %s", QString( path + "/" + *it ).latin1() )); - MediaPlayerPlugin plugin; - plugin.library = lib; - plugin.iface = iface; - plugin.decoder = plugin.iface->decoder(); - plugin.encoder = plugin.iface->encoder(); - pluginList.append( plugin ); + MediaPlayerPlugin plugin; + plugin.library = lib; + plugin.iface = iface; + plugin.decoder = plugin.iface->decoder(); + plugin.encoder = plugin.iface->encoder(); + pluginList.append( plugin ); - // ### hack to get true sample count - if ( plugin.decoder->pluginName() == QString("LibMpeg3Plugin") ) - libmpeg3decoder = plugin.decoder; + // ### hack to get true sample count + if ( plugin.decoder->pluginName() == QString("LibMpeg3Plugin") ) + libmpeg3decoder = plugin.decoder; - } else { - delete lib; - } + } else { + delete lib; + } } @@ -186,5 +180,5 @@ void MediaPlayerState::loadPlugins() { if ( pluginList.count() ) - MediaPlayerDebug(( "%i decoders found", pluginList.count() )); + MediaPlayerDebug(( "%i decoders found", pluginList.count() )); else - MediaPlayerDebug(( "No decoders found" )); + MediaPlayerDebug(( "No decoders found" )); } diff --git a/core/multimedia/opieplayer/mediaplayerstate.h b/core/multimedia/opieplayer/mediaplayerstate.h index 1a23742..e82c263 100644 --- a/core/multimedia/opieplayer/mediaplayerstate.h +++ b/core/multimedia/opieplayer/mediaplayerstate.h @@ -1,5 +1,5 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** @@ -22,3 +22,2 @@ - #include <qobject.h> @@ -36,12 +35,12 @@ public: - bool fullscreen() { return isFullscreen; } - bool scaled() { return isScaled; } - bool looping() { return isLooping; } - bool shuffled() { return isShuffled; } - bool playlist() { return usePlaylist; } - bool paused() { return isPaused; } - bool playing() { return isPlaying; } - long position() { return curPosition; } - long length() { return curLength; } - char view() { return curView; } + bool fullscreen() { return isFullscreen; } + bool scaled() { return isScaled; } + bool looping() { return isLooping; } + bool shuffled() { return isShuffled; } + bool playlist() { return usePlaylist; } + bool paused() { return isPaused; } + bool playing() { return isPlaying; } + long position() { return curPosition; } + long length() { return curLength; } + char view() { return curView; } @@ -50,3 +49,3 @@ public: MediaPlayerDecoder *libMpeg3Decoder(); // ### Yucky hack needed to use libmpeg3plugin to get the - // number of audio samples if we are using the libmad plugin + // number of audio samples if we are using the libmad plugin public slots: @@ -57,22 +56,22 @@ public slots: void setPlaylist( bool b ) { if ( usePlaylist == b ) return; usePlaylist = b; emit playlistToggled(b); } - void setPaused( bool b ) { if ( isPaused == b ) return; isPaused = b; emit pausedToggled(b); } - void setPlaying( bool b ) { if ( isPlaying == b ) return; isPlaying = b; emit playingToggled(b); } + void setPaused( bool b ) { if ( isPaused == b ) return; isPaused = b; emit pausedToggled(b); } + void setPlaying( bool b ) { if ( isPlaying == b ) return; isPlaying = b; emit playingToggled(b); } void setPosition( long p ) { if ( curPosition == p ) return; curPosition = p; emit positionChanged(p); } void updatePosition( long p ){ if ( curPosition == p ) return; curPosition = p; emit positionUpdated(p); } - void setLength( long l ) { if ( curLength == l ) return; curLength = l; emit lengthChanged(l); } - void setView( char v ) { if ( curView == v ) return; curView = v; emit viewChanged(v); } - - void setPrev() { emit prev(); } - void setNext() { emit next(); } - void setList() { setPlaying( FALSE ); setView('l'); } - void setVideo() { setView('v'); } - void setAudio() { setView('a'); } - - void toggleFullscreen() { setFullscreen( !isFullscreen ); } - void toggleScaled() { setScaled( !isScaled); } - void toggleLooping() { setLooping( !isLooping); } - void toggleShuffled() { setShuffled( !isShuffled); } - void togglePlaylist() { setPlaylist( !usePlaylist); } - void togglePaused() { setPaused( !isPaused); } - void togglePlaying() { setPlaying( !isPlaying); } + void setLength( long l ) { if ( curLength == l ) return; curLength = l; emit lengthChanged(l); } + void setView( char v ) { if ( curView == v ) return; curView = v; emit viewChanged(v); } + + void setPrev() { emit prev(); } + void setNext() { emit next(); } + void setList() { setPlaying( FALSE ); setView('l'); } + void setVideo() { setView('v'); } + void setAudio() { setView('a'); } + + void toggleFullscreen() { setFullscreen( !isFullscreen ); } + void toggleScaled() { setScaled( !isScaled); } + void toggleLooping() { setLooping( !isLooping); } + void toggleShuffled() { setShuffled( !isShuffled); } + void togglePlaylist() { setPlaylist( !usePlaylist); } + void togglePaused() { setPaused( !isPaused); } + void togglePlaying() { setPlaying( !isPlaying); } @@ -108,3 +107,2 @@ private: MediaPlayerDecoder *libmpeg3decoder; -// MediaPlayerDecoder *libwavdecoder; diff --git a/core/multimedia/opieplayer/playlistselection.cpp b/core/multimedia/opieplayer/playlistselection.cpp index f17ab6f..a82b594 100644 --- a/core/multimedia/opieplayer/playlistselection.cpp +++ b/core/multimedia/opieplayer/playlistselection.cpp @@ -1,5 +1,5 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** @@ -32,3 +32,2 @@ - class PlayListSelectionItem : public QListViewItem { @@ -36,4 +35,4 @@ public: PlayListSelectionItem( QListView *parent, const DocLnk *f ) : QListViewItem( parent ), fl( f ) { - setText( 0, f->name() ); - setPixmap( 0, f->pixmap() ); + setText( 0, f->name() ); + setPixmap( 0, f->pixmap() ); } @@ -73,3 +72,3 @@ void PlayListSelection::drawBackground( QPainter *p, const QRect &r ) { if ( !logo.isNull() ) - p->drawImage( (width() - logo.width()) / 2, (height() - logo.height()) / 2, logo ); + p->drawImage( (width() - logo.width()) / 2, (height() - logo.height()) / 2, logo ); } @@ -80,8 +79,8 @@ void PlayListSelection::contentsMouseMoveEvent( QMouseEvent *event ) { if ( event->state() == QMouseEvent::LeftButton ) { - QListViewItem *currentItem = selectedItem(); - QListViewItem *itemUnder = itemAt( QPoint( event->pos().x(), event->pos().y() - contentsY() ) ); - if ( currentItem && currentItem->itemAbove() == itemUnder ) - moveSelectedUp(); - else if ( currentItem && currentItem->itemBelow() == itemUnder ) - moveSelectedDown(); + QListViewItem *currentItem = selectedItem(); + QListViewItem *itemUnder = itemAt( QPoint( event->pos().x(), event->pos().y() - contentsY() ) ); + if ( currentItem && currentItem->itemAbove() == itemUnder ) + moveSelectedUp(); + else if ( currentItem && currentItem->itemBelow() == itemUnder ) + moveSelectedDown(); } @@ -93,3 +92,3 @@ const DocLnk *PlayListSelection::current() { if ( item ) - return item->file(); + return item->file(); return NULL; @@ -99,3 +98,3 @@ const DocLnk *PlayListSelection::current() { void PlayListSelection::addToSelection( const DocLnk &lnk ) { - PlayListSelectionItem *item = new PlayListSelectionItem( this, new DocLnk( lnk ) ); + PlayListSelectionItem *item = new PlayListSelectionItem( this, new DocLnk( lnk ) ); QListViewItem *current = selectedItem(); @@ -111,3 +110,3 @@ void PlayListSelection::removeSelected() { if ( item ) - delete item; + delete item; setSelected( currentItem(), TRUE ); @@ -120,3 +119,3 @@ void PlayListSelection::moveSelectedUp() { if ( item && item->itemAbove() ) - item->itemAbove()->moveItem( item ); + item->itemAbove()->moveItem( item ); ensureItemVisible( selectedItem() ); @@ -138,3 +137,3 @@ bool PlayListSelection::prev() { else - return FALSE; + return FALSE; ensureItemVisible( selectedItem() ); @@ -149,3 +148,3 @@ bool PlayListSelection::next() { else - return FALSE; + return FALSE; ensureItemVisible( selectedItem() ); @@ -160,3 +159,3 @@ bool PlayListSelection::first() { else - return FALSE; + return FALSE; ensureItemVisible( selectedItem() ); @@ -170,3 +169,3 @@ bool PlayListSelection::last() { while ( ( item = item->nextSibling() ) ) - prevItem = item; + prevItem = item; if ( prevItem ) @@ -174,3 +173,3 @@ bool PlayListSelection::last() { else - return FALSE; + return FALSE; ensureItemVisible( selectedItem() ); diff --git a/core/multimedia/opieplayer/playlistselection.h b/core/multimedia/opieplayer/playlistselection.h index 6ce6bdc..22d3c74 100644 --- a/core/multimedia/opieplayer/playlistselection.h +++ b/core/multimedia/opieplayer/playlistselection.h @@ -1,5 +1,5 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** @@ -23,2 +23,3 @@ + #include <qlist.h> diff --git a/core/multimedia/opieplayer/playlistwidget.cpp b/core/multimedia/opieplayer/playlistwidget.cpp index 269aed8..0423e7a 100644 --- a/core/multimedia/opieplayer/playlistwidget.cpp +++ b/core/multimedia/opieplayer/playlistwidget.cpp @@ -1,5 +1,5 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** @@ -19,2 +19,3 @@ **********************************************************************/ + #include <qpe/qpemenubar.h> @@ -22,4 +23,2 @@ #include <qpe/fileselector.h> -#include <qpe/qpeapplication.h> - #include <qpe/applnk.h> @@ -38,6 +37,2 @@ #include <qtoolbutton.h> -#include <qtabwidget.h> -#include <qlistview.h> -#include <qpoint.h> -//#include <qtimer.h> @@ -49,5 +44,2 @@ -#define BUTTONS_ON_TOOLBAR -#define SIDE_BUTTONS -#define CAN_SAVE_LOAD_PLAYLISTS @@ -55,8 +47,11 @@ extern MediaPlayerState *mediaPlayerState; -// class myFileSelector { -// }; class PlayListWidgetPrivate { public: - QToolButton *tbPlay, *tbFull, *tbLoop, *tbScale, *tbShuffle, *tbAddToList, *tbRemoveFromList, *tbMoveUp, *tbMoveDown, *tbRemove; + QToolButton *tbPlay; + QToolButton *tbFull; + QToolButton *tbLoop; + QToolButton *tbScale; + QToolButton *tbShuffle; + QFrame *playListFrame; @@ -72,10 +67,10 @@ public: ToolButton( QWidget *parent, const char *name, const QString& icon, QObject *handler, const QString& slot, bool t = FALSE ) - : QToolButton( parent, name ) { - setTextLabel( name ); - setPixmap( Resource::loadPixmap( icon ) ); - setAutoRaise( TRUE ); - setFocusPolicy( QWidget::NoFocus ); - setToggleButton( t ); - connect( this, t ? SIGNAL( toggled(bool) ) : SIGNAL( clicked() ), handler, slot ); - QPEMenuToolFocusManager::manager()->addWidget( this ); + : QToolButton( parent, name ) { + setTextLabel( name ); + setPixmap( Resource::loadPixmap( icon ) ); + setAutoRaise( TRUE ); + setFocusPolicy( QWidget::NoFocus ); + setToggleButton( t ); + connect( this, t ? SIGNAL( toggled(bool) ) : SIGNAL( clicked() ), handler, slot ); + QPEMenuToolFocusManager::manager()->addWidget( this ); } @@ -87,5 +82,5 @@ public: MenuItem( QWidget *parent, const QString& text, QObject *handler, const QString& slot ) - : QAction( text, QString::null, 0, 0 ) { - connect( this, SIGNAL( activated() ), handler, slot ); - addTo( parent ); + : QAction( text, QString::null, 0, 0 ) { + connect( this, SIGNAL( activated() ), handler, slot ); + addTo( parent ); } @@ -100,4 +95,2 @@ PlayListWidget::PlayListWidget( QWidget* parent, const char* name, WFlags fl ) d->current = NULL; -// menuTimer = new QTimer( this ,"menu timer"), -// connect( menuTimer, SIGNAL( timeout() ), SLOT( addSelected() ) ); @@ -105,3 +98,3 @@ PlayListWidget::PlayListWidget( QWidget* parent, const char* name, WFlags fl ) - setCaption( tr("OpiePlayer") ); + setCaption( tr("MediaPlayer") ); setIcon( Resource::loadPixmap( "MPEGPlayer" ) ); @@ -120,154 +113,67 @@ PlayListWidget::PlayListWidget( QWidget* parent, const char* name, WFlags fl ) bar->setLabel( tr( "Play Operations" ) ); - 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 ); +#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 ); QPopupMenu *pmPlayList = new QPopupMenu( this ); - menu->insertItem( tr( "File" ), pmPlayList ); + menu->insertItem( tr( "PlayList" ), pmPlayList ); + new MenuItem( pmPlayList, tr( "Toggle PlayList" ), mediaPlayerState, SLOT( togglePlaylist() ) ); new MenuItem( pmPlayList, tr( "Clear List" ), this, SLOT( clearList() ) ); - new MenuItem( pmPlayList, tr( "Add all audio files" ), this, SLOT( addAllMusicToList() ) ); + new MenuItem( pmPlayList, tr( "Add all music 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() ) ); - - 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); +#endif 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( pTab ); vbox3->setBackgroundMode( PaletteButton ); + QVBox *vbox3 = new QVBox( vbox5 ); vbox3->setBackgroundMode( PaletteButton ); d->playListFrame = vbox3; - d->playListFrame ->setMinimumSize(235,260); + + QLabel *plString = new QLabel( tr(" PlayList"), vbox3 ); + plString->setBackgroundMode( QButton::PaletteButton ); + plString->setFont( QFont( "Helvetica", 8, QFont::Bold ) ); QHBox *hbox2 = new QHBox( vbox3 ); hbox2->setBackgroundMode( PaletteButton ); - d->selectedFiles = new PlayListSelection( hbox2); - QVBox *vbox1 = new QVBox( hbox2 ); vbox1->setBackgroundMode( PaletteButton ); - - QVBox *stretch1 = new QVBox( vbox1 ); stretch1->setBackgroundMode( PaletteButton ); // add stretch - 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 - - 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/hda") != -1 ) storage="CF"; - else if(dit.current()->file().find("/mnt/card") != -1 ) storage="SD"; - else storage="RAM"; - if ( QFile( dit.current()->file()).exists() ) { - 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/hda") != -1 ) storage="CF"; - else if( Vdit.current()->file().find("/mnt/card") != -1 ) storage="SD"; - else storage="RAM"; - QListViewItem * newItem; - if ( QFile( Vdit.current()->file()).exists() ) { - 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 ); + 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 // add the library area + QVBox *vbox4 = new QVBox( vbox5 ); vbox4->setBackgroundMode( PaletteButton ); -// 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 *) ) ); + QLabel *libString = new QLabel( tr(" Media Library"), vbox4 ); + libString->setBackgroundMode( QButton::PaletteButton ); + libString->setFont( QFont( "Helvetica", 8, QFont::Bold ) ); - connect( audioView, SIGNAL( clicked( QListViewItem *) ), this, SLOT( addToSelection( QListViewItem *) ) ); - connect( videoView, SIGNAL( clicked( QListViewItem *) ), this, SLOT( addToSelection( QListViewItem *) ) ); + 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 ); - 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 )) ); +#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( 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( d->files, SIGNAL( fileSelected( const DocLnk & ) ), this, SLOT( addToSelection( const DocLnk & ) ) ); connect( mediaPlayerState, SIGNAL( playingToggled( bool ) ), d->tbPlay, SLOT( setOn( bool ) ) ); @@ -275,7 +181,5 @@ PlayListWidget::PlayListWidget( QWidget* parent, const char* name, WFlags fl ) connect( mediaPlayerState, SIGNAL( shuffledToggled( bool ) ), d->tbShuffle, SLOT( setOn( 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( 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( playlistToggled( bool ) ), this, SLOT( setPlaylist( bool ) ) ); @@ -296,3 +200,3 @@ PlayListWidget::~PlayListWidget() { if ( d->current ) - delete d->current; + delete d->current; delete d; @@ -302,3 +206,2 @@ PlayListWidget::~PlayListWidget() { void PlayListWidget::initializeStates() { - d->tbPlay->setOn( mediaPlayerState->playing() ); @@ -306,6 +209,6 @@ void PlayListWidget::initializeStates() { 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() ); } @@ -319,7 +222,7 @@ void PlayListWidget::readConfig( Config& cfg ) { for ( int i = 0; i < noOfFiles; i++ ) { - QString entryName; - entryName.sprintf( "File%i", i + 1 ); - QString linkFile = cfg.readEntry( entryName ); - DocLnk lnk( linkFile ); - if ( lnk.isValid() ) + QString entryName; + entryName.sprintf( "File%i", i + 1 ); + QString linkFile = cfg.readEntry( entryName ); + DocLnk lnk( linkFile ); + if ( lnk.isValid() ) d->selectedFiles->addToSelection( lnk ); @@ -337,24 +240,24 @@ void PlayListWidget::writeConfig( Config& cfg ) const { do { - const DocLnk *lnk = d->selectedFiles->current(); - if ( lnk ) { - QString entryName; - entryName.sprintf( "File%i", noOfFiles + 1 ); - cfg.writeEntry( entryName, lnk->linkFile() ); - // if this link does exist, add it so we have the file - // next time... - if ( !QFile::exists( lnk->linkFile() ) ) { - // the way writing lnks doesn't really check for out - // of disk space, but check it anyway. - if ( !lnk->writeLink() ) { - QMessageBox::critical( 0, tr("Out of space"), - tr( "There was a problem saving " - "the playlist.\n" - "Your playlist " - "may be missing some entries\n" - "the next time you start it." ) - ); - } - } - noOfFiles++; - } + const DocLnk *lnk = d->selectedFiles->current(); + if ( lnk ) { + QString entryName; + entryName.sprintf( "File%i", noOfFiles + 1 ); + cfg.writeEntry( entryName, lnk->linkFile() ); + // if this link does exist, add it so we have the file + // next time... + if ( !QFile::exists( lnk->linkFile() ) ) { + // the way writing lnks doesn't really check for out + // of disk space, but check it anyway. + if ( !lnk->writeLink() ) { + QMessageBox::critical( 0, tr("Out of space"), + tr( "There was a problem saving " + "the playlist.\n" + "Your playlist " + "may be missing some entries\n" + "the next time you start it." ) + ); + } + } + noOfFiles++; + } } while ( d->selectedFiles->next() ); @@ -366,3 +269,3 @@ void PlayListWidget::writeConfig( Config& cfg ) const { void PlayListWidget::addToSelection( const DocLnk& lnk ) { - d->setDocumentUsed = FALSE; + d->setDocumentUsed = FALSE; if ( mediaPlayerState->playlist() ) @@ -370,13 +273,3 @@ void PlayListWidget::addToSelection( const DocLnk& 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 ); -// + mediaPlayerState->setPlaying( TRUE ); } @@ -386,3 +279,3 @@ void PlayListWidget::clearList() { while ( first() ) - d->selectedFiles->removeSelected(); + d->selectedFiles->removeSelected(); } @@ -419,12 +312,12 @@ void PlayListWidget::setDocument(const QString& fileref) { if ( fileref.isNull() ) { - QMessageBox::critical( 0, tr( "Invalid File" ), tr( "There was a problem in getting the file." ) ); - return; + QMessageBox::critical( 0, tr( "Invalid File" ), tr( "There was a problem in getting the file." ) ); + return; } if ( mediaPlayerState->playlist() ) - addToSelection( DocLnk( fileref ) ); + addToSelection( DocLnk( fileref ) ); else { - d->setDocumentUsed = TRUE; - if ( d->current ) - delete d->current; - d->current = new DocLnk( fileref ); + d->setDocumentUsed = TRUE; + if ( d->current ) + delete d->current; + d->current = new DocLnk( fileref ); } @@ -450,7 +343,7 @@ const DocLnk *PlayListWidget::current() { if ( mediaPlayerState->playlist() ) - return d->selectedFiles->current(); + return d->selectedFiles->current(); else if ( d->setDocumentUsed && d->current ) { - return d->current; + return d->current; } else - return d->files->selected(); + return d->files->selected(); } @@ -460,25 +353,25 @@ bool PlayListWidget::prev() { if ( mediaPlayerState->playlist() ) { - if ( mediaPlayerState->shuffled() ) { - const DocLnk *cur = current(); - int j = 1 + (int)(97.0 * rand() / (RAND_MAX + 1.0)); - for ( int i = 0; i < j; i++ ) { - if ( !d->selectedFiles->next() ) - d->selectedFiles->first(); - } - if ( cur == current() ) - if ( !d->selectedFiles->next() ) - d->selectedFiles->first(); - return TRUE; - } else { - if ( !d->selectedFiles->prev() ) { - if ( mediaPlayerState->looping() ) { - return d->selectedFiles->last(); - } else { - return FALSE; - } - } - return TRUE; - } + if ( mediaPlayerState->shuffled() ) { + const DocLnk *cur = current(); + int j = 1 + (int)(97.0 * rand() / (RAND_MAX + 1.0)); + for ( int i = 0; i < j; i++ ) { + if ( !d->selectedFiles->next() ) + d->selectedFiles->first(); + } + if ( cur == current() ) + if ( !d->selectedFiles->next() ) + d->selectedFiles->first(); + return TRUE; + } else { + if ( !d->selectedFiles->prev() ) { + if ( mediaPlayerState->looping() ) { + return d->selectedFiles->last(); + } else { + return FALSE; + } + } + return TRUE; + } } else { - return mediaPlayerState->looping(); + return mediaPlayerState->looping(); } @@ -489,16 +382,16 @@ bool PlayListWidget::next() { if ( mediaPlayerState->playlist() ) { - if ( mediaPlayerState->shuffled() ) { - return prev(); - } else { - if ( !d->selectedFiles->next() ) { - if ( mediaPlayerState->looping() ) { - return d->selectedFiles->first(); + if ( mediaPlayerState->shuffled() ) { + return prev(); + } else { + if ( !d->selectedFiles->next() ) { + if ( mediaPlayerState->looping() ) { + return d->selectedFiles->first(); + } else { + return FALSE; + } + } + return TRUE; + } } else { - return FALSE; - } - } - return TRUE; - } - } else { - return mediaPlayerState->looping(); + return mediaPlayerState->looping(); } @@ -509,5 +402,5 @@ bool PlayListWidget::first() { if ( mediaPlayerState->playlist() ) - return d->selectedFiles->first(); + return d->selectedFiles->first(); else - return mediaPlayerState->looping(); + return mediaPlayerState->looping(); } @@ -517,5 +410,5 @@ bool PlayListWidget::last() { if ( mediaPlayerState->playlist() ) - return d->selectedFiles->last(); + return d->selectedFiles->last(); else - return mediaPlayerState->looping(); + return mediaPlayerState->looping(); } @@ -543,5 +436,5 @@ void PlayListWidget::setPlaylist( bool shown ) { if ( shown ) - d->playListFrame->show(); + d->playListFrame->show(); else - d->playListFrame->hide(); + d->playListFrame->hide(); } @@ -551,148 +444,6 @@ void PlayListWidget::setView( char view ) { if ( view == 'l' ) - showMaximized(); + showMaximized(); else - hide(); + 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 6fe2211..819adb1 100644 --- a/core/multimedia/opieplayer/playlistwidget.h +++ b/core/multimedia/opieplayer/playlistwidget.h @@ -1,5 +1,5 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** @@ -22,7 +22,4 @@ - #include <qmainwindow.h> #include <qpe/applnk.h> -#include <qtabwidget.h> -/* #include <qtimer.h> */ @@ -31,7 +28,3 @@ class PlayListWidgetPrivate; class Config; -class QListViewItem; -class QListView; -class QPoint; -class QAction; -class QLabel; + @@ -42,8 +35,3 @@ public: ~PlayListWidget(); - QTabWidget * tabWidget; - QAction *fullScreenButton, *scaleButton; - DocLnkSet files; - DocLnkSet vFiles; - QListView *audioView, *videoView, *playlistView; - QLabel *libString; + // retrieve the current playlist entry (media file link) @@ -51,3 +39,2 @@ public: void useSelectedDocument(); -/* QTimer * menuTimer; */ @@ -56,4 +43,2 @@ public slots: 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 @@ -67,3 +52,2 @@ public slots: void loadList(); // Load a playlist - void playIt( QListViewItem *); bool first(); @@ -72,10 +56,2 @@ public slots: bool prev(); - void addSelected(); - void removeSelected(); - void tabChanged(QWidget*); -/* void setFullScreen(); */ -/* void setScaled(); */ -protected: -/* void contentsMousePressEvent( QMouseEvent * e ); */ -/* void contentsMouseReleaseEvent( QMouseEvent * e ); */ @@ -86,8 +62,2 @@ private: PlayListWidgetPrivate *d; // Private implementation data - -protected slots: -/* void cancelMenuTimer(); */ -/* void showFileMenu(); */ - - }; diff --git a/core/multimedia/opieplayer/videowidget.cpp b/core/multimedia/opieplayer/videowidget.cpp index 1f128a4..12ae4fd 100644 --- a/core/multimedia/opieplayer/videowidget.cpp +++ b/core/multimedia/opieplayer/videowidget.cpp @@ -1,5 +1,5 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** @@ -19,4 +19,5 @@ **********************************************************************/ + #include <qpe/resource.h> -#include "mediaplayerplugininterface.h" +#include <qpe/mediaplayerplugininterface.h> #include <qwidget.h> @@ -68,3 +69,3 @@ VideoWidget::VideoWidget(QWidget* parent, const char* name, WFlags f) : QWidget( parent, name, f ), scaledWidth( 0 ), scaledHeight( 0 ) { - setCaption( tr("OpiePlayer") ); + setCaption( tr("MediaPlayer") ); setBackgroundPixmap( Resource::loadPixmap( "mpegplayer/metalFinish" ) ); @@ -82,4 +83,4 @@ VideoWidget::VideoWidget(QWidget* parent, const char* name, WFlags f) : - connect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); - connect( slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); + connect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); + connect( slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); @@ -103,3 +104,3 @@ VideoWidget::~VideoWidget() { for ( int i = 0; i < 3; i++ ) - delete pixmaps[i]; + delete pixmaps[i]; delete currentFrame; @@ -119,3 +120,3 @@ void VideoWidget::sliderReleased() { if ( slider->width() == 0 ) - return; + return; long val = long((double)slider->value() * mediaPlayerState->length() / slider->width()); @@ -137,8 +138,8 @@ void VideoWidget::setView( char view ) { if ( view == 'v' ) { - makeVisible(); + makeVisible(); } else { - // Effectively blank the view next time we show it so it looks nicer - scaledWidth = 0; - scaledHeight = 0; - hide(); + // Effectively blank the view next time we show it so it looks nicer + scaledWidth = 0; + scaledHeight = 0; + hide(); } @@ -150,3 +151,3 @@ void VideoWidget::updateSlider( long i, long max ) { if ( max == 0 ) - return; + return; int width = slider->width(); @@ -154,6 +155,6 @@ void VideoWidget::updateSlider( long i, long max ) { if ( !mediaPlayerState->fullscreen() && !videoSliderBeingMoved ) { - if ( slider->value() != val ) - slider->setValue( val ); - if ( slider->maxValue() != width ) - slider->setMaxValue( width ); + if ( slider->value() != val ) + slider->setValue( val ); + if ( slider->maxValue() != width ) + slider->setMaxValue( width ); } @@ -164,3 +165,3 @@ void VideoWidget::setToggleButton( int i, bool down ) { if ( down != videoButtons[i].isDown ) - toggleButton( i ); + toggleButton( i ); } @@ -186,32 +187,32 @@ void VideoWidget::mouseMoveEvent( QMouseEvent *event ) { for ( int i = 0; i < numButtons; i++ ) { - int x = videoButtons[i].xPos; - int y = videoButtons[i].yPos; - if ( event->state() == QMouseEvent::LeftButton ) { - // The test to see if the mouse click is inside the circular button or not - // (compared with the radius squared to avoid a square-root of our distance) - int radius = 16; - QPoint center = QPoint( x + radius, y + radius ); - QPoint dXY = center - event->pos(); - int dist = dXY.x() * dXY.x() + dXY.y() * dXY.y(); - bool isOnButton = dist <= (radius * radius); - if ( isOnButton != videoButtons[i].isHeld ) { - videoButtons[i].isHeld = isOnButton; - toggleButton(i); - } - } else { - if ( videoButtons[i].isHeld ) { - videoButtons[i].isHeld = FALSE; - if ( !videoButtons[i].isToggle ) - setToggleButton( i, FALSE ); - switch (i) { - case VideoPlay: mediaPlayerState->setPlaying(videoButtons[i].isDown); return; - case VideoStop: mediaPlayerState->setPlaying(FALSE); return; - case VideoPause: mediaPlayerState->setPaused(videoButtons[i].isDown); return; - case VideoNext: mediaPlayerState->setNext(); return; - case VideoPrevious: mediaPlayerState->setPrev(); return; - case VideoPlayList: mediaPlayerState->setList(); return; - case VideoFullscreen: mediaPlayerState->setFullscreen( TRUE ); makeVisible(); return; - } - } - } + int x = videoButtons[i].xPos; + int y = videoButtons[i].yPos; + if ( event->state() == QMouseEvent::LeftButton ) { + // The test to see if the mouse click is inside the circular button or not + // (compared with the radius squared to avoid a square-root of our distance) + int radius = 16; + QPoint center = QPoint( x + radius, y + radius ); + QPoint dXY = center - event->pos(); + int dist = dXY.x() * dXY.x() + dXY.y() * dXY.y(); + bool isOnButton = dist <= (radius * radius); + if ( isOnButton != videoButtons[i].isHeld ) { + videoButtons[i].isHeld = isOnButton; + toggleButton(i); + } + } else { + if ( videoButtons[i].isHeld ) { + videoButtons[i].isHeld = FALSE; + if ( !videoButtons[i].isToggle ) + setToggleButton( i, FALSE ); + switch (i) { + case VideoPlay: mediaPlayerState->setPlaying(videoButtons[i].isDown); return; + case VideoStop: mediaPlayerState->setPlaying(FALSE); return; + case VideoPause: mediaPlayerState->setPaused(videoButtons[i].isDown); return; + case VideoNext: mediaPlayerState->setNext(); return; + case VideoPrevious: mediaPlayerState->setPrev(); return; + case VideoPlayList: mediaPlayerState->setList(); return; + case VideoFullscreen: mediaPlayerState->setFullscreen( TRUE ); makeVisible(); return; + } + } + } } @@ -227,6 +228,6 @@ void VideoWidget::mouseReleaseEvent( QMouseEvent *event ) { if ( mediaPlayerState->fullscreen() ) { - mediaPlayerState->setFullscreen( FALSE ); - makeVisible(); + mediaPlayerState->setFullscreen( FALSE ); + makeVisible(); } else { - mouseMoveEvent( event ); + mouseMoveEvent( event ); } @@ -237,11 +238,11 @@ void VideoWidget::makeVisible() { if ( mediaPlayerState->fullscreen() ) { - setBackgroundMode( QWidget::NoBackground ); - showFullScreen(); - resize( qApp->desktop()->size() ); - slider->hide(); + setBackgroundMode( QWidget::NoBackground ); + showFullScreen(); + resize( qApp->desktop()->size() ); + slider->hide(); } else { - setBackgroundPixmap( Resource::loadPixmap( "mpegplayer/metalFinish" ) ); - showNormal(); - showMaximized(); - slider->show(); + setBackgroundPixmap( Resource::loadPixmap( "mpegplayer/metalFinish" ) ); + showNormal(); + showMaximized(); + slider->show(); } @@ -254,25 +255,25 @@ void VideoWidget::paintEvent( QPaintEvent * ) { if ( mediaPlayerState->fullscreen() ) { - // Clear the background - p.setBrush( QBrush( Qt::black ) ); - p.drawRect( rect() ); + // Clear the background + p.setBrush( QBrush( Qt::black ) ); + p.drawRect( rect() ); - // Draw the current frame - //p.drawImage( ); // If using directpainter we won't have a copy except whats on the screen + // Draw the current frame + //p.drawImage( ); // If using directpainter we won't have a copy except whats on the screen } else { - // draw border - qDrawShadePanel( &p, 4, 15, 230, 170, colorGroup(), TRUE, 5, NULL ); + // draw border + qDrawShadePanel( &p, 4, 15, 230, 170, colorGroup(), TRUE, 5, NULL ); - // Clear the movie screen first - p.setBrush( QBrush( Qt::black ) ); - p.drawRect( 9, 20, 220, 160 ); + // Clear the movie screen first + p.setBrush( QBrush( Qt::black ) ); + p.drawRect( 9, 20, 220, 160 ); - // draw current frame (centrally positioned from scaling to maintain aspect ratio) - p.drawImage( 9 + (220 - scaledWidth) / 2, 20 + (160 - scaledHeight) / 2, *currentFrame, 0, 0, scaledWidth, scaledHeight ); + // draw current frame (centrally positioned from scaling to maintain aspect ratio) + p.drawImage( 9 + (220 - scaledWidth) / 2, 20 + (160 - scaledHeight) / 2, *currentFrame, 0, 0, scaledWidth, scaledHeight ); - // draw the buttons - for ( int i = 0; i < numButtons; i++ ) - paintButton( &p, i ); + // draw the buttons + for ( int i = 0; i < numButtons; i++ ) + paintButton( &p, i ); - // draw the slider - slider->repaint( TRUE ); + // draw the slider + slider->repaint( TRUE ); } @@ -301,89 +302,89 @@ bool VideoWidget::playVideo() { #ifdef USE_DIRECT_PAINTER - QDirectPainter p(this); - - if ( ( qt_screen->transformOrientation() == 3 ) && - ( ( dd == 16 ) || ( dd == 32 ) ) && ( p.numRects() == 1 ) ) { - - w = 320; - h = 240; - - if ( mediaPlayerState->scaled() ) { - // maintain aspect ratio - if ( w * sh > sw * h ) - w = sw * h / sh; - else - h = sh * w / sw; - } else { - w = sw; - h = sh; - } - - w--; // we can't allow libmpeg to overwrite. - QPoint roff = qt_screen->mapToDevice( p.offset(), QSize( qt_screen->width(), qt_screen->height() ) ); - - int ox = roff.x() - height() + 2 + (height() - w) / 2; - int oy = roff.y() + (width() - h) / 2; - int sx = 0, sy = 0; - - uchar* fp = p.frameBuffer() + p.lineStep() * oy; - fp += dd * ox / 8; - uchar **jt = new uchar*[h]; - for ( int i = h; i; i-- ) { - jt[h - i] = fp; - fp += p.lineStep(); - } - - result = mediaPlayerState->curDecoder()->videoReadScaledFrame( jt, sx, sy, sw, sh, w, h, format, 0) == 0; - - delete [] jt; - } else { + QDirectPainter p(this); + + if ( ( qt_screen->transformOrientation() == 3 ) && + ( ( dd == 16 ) || ( dd == 32 ) ) && ( p.numRects() == 1 ) ) { + + w = 320; + h = 240; + + if ( mediaPlayerState->scaled() ) { + // maintain aspect ratio + if ( w * sh > sw * h ) + w = sw * h / sh; + else + h = sh * w / sw; + } else { + w = sw; + h = sh; + } + + w--; // we can't allow libmpeg to overwrite. + QPoint roff = qt_screen->mapToDevice( p.offset(), QSize( qt_screen->width(), qt_screen->height() ) ); + + int ox = roff.x() - height() + 2 + (height() - w) / 2; + int oy = roff.y() + (width() - h) / 2; + int sx = 0, sy = 0; + + uchar* fp = p.frameBuffer() + p.lineStep() * oy; + fp += dd * ox / 8; + uchar **jt = new uchar*[h]; + for ( int i = h; i; i-- ) { + jt[h - i] = fp; + fp += p.lineStep(); + } + + result = mediaPlayerState->curDecoder()->videoReadScaledFrame( jt, sx, sy, sw, sh, w, h, format, 0) == 0; + + delete [] jt; + } else { #endif - QPainter p(this); - - w = 320; - h = 240; - - if ( mediaPlayerState->scaled() ) { - // maintain aspect ratio - if ( w * sh > sw * h ) - w = sw * h / sh; - else - h = sh * w / sw; - } else { - w = sw; - h = sh; - } - - int bytes = ( dd == 16 ) ? 2 : 4; - QImage tempFrame( w, h, bytes << 3 ); - result = mediaPlayerState->curDecoder()->videoReadScaledFrame( tempFrame.jumpTable(), - 0, 0, sw, sh, w, h, format, 0) == 0; - if ( result && mediaPlayerState->fullscreen() ) { - - int rw = h, rh = w; - QImage rotatedFrame( rw, rh, bytes << 3 ); - - ushort* in = (ushort*)tempFrame.bits(); - ushort* out = (ushort*)rotatedFrame.bits(); - int spl = rotatedFrame.bytesPerLine() / bytes; - for (int x=0; x<h; x++) { - if ( bytes == 2 ) { - ushort* lout = out++ + (w - 1)*spl; - for (int y=0; y<w; y++) { - *lout=*in++; - lout-=spl; - } - } else { - ulong* lout = ((ulong *)out)++ + (w - 1)*spl; - for (int y=0; y<w; y++) { - *lout=*((ulong*)in)++; - lout-=spl; - } - } - } - - p.drawImage( (240 - rw) / 2, (320 - rh) / 2, rotatedFrame, 0, 0, rw, rh ); - } + QPainter p(this); + + w = 320; + h = 240; + + if ( mediaPlayerState->scaled() ) { + // maintain aspect ratio + if ( w * sh > sw * h ) + w = sw * h / sh; + else + h = sh * w / sw; + } else { + w = sw; + h = sh; + } + + int bytes = ( dd == 16 ) ? 2 : 4; + QImage tempFrame( w, h, bytes << 3 ); + result = mediaPlayerState->curDecoder()->videoReadScaledFrame( tempFrame.jumpTable(), + 0, 0, sw, sh, w, h, format, 0) == 0; + if ( result && mediaPlayerState->fullscreen() ) { + + int rw = h, rh = w; + QImage rotatedFrame( rw, rh, bytes << 3 ); + + ushort* in = (ushort*)tempFrame.bits(); + ushort* out = (ushort*)rotatedFrame.bits(); + int spl = rotatedFrame.bytesPerLine() / bytes; + for (int x=0; x<h; x++) { + if ( bytes == 2 ) { + ushort* lout = out++ + (w - 1)*spl; + for (int y=0; y<w; y++) { + *lout=*in++; + lout-=spl; + } + } else { + ulong* lout = ((ulong *)out)++ + (w - 1)*spl; + for (int y=0; y<w; y++) { + *lout=*((ulong*)in)++; + lout-=spl; + } + } + } + + p.drawImage( (240 - rw) / 2, (320 - rh) / 2, rotatedFrame, 0, 0, rw, rh ); + } #ifdef USE_DIRECT_PAINTER - } + } #endif @@ -391,27 +392,27 @@ bool VideoWidget::playVideo() { - w = 220; - h = 160; + w = 220; + h = 160; - // maintain aspect ratio - if ( w * sh > sw * h ) - w = sw * h / sh; - else - h = sh * w / sw; + // maintain aspect ratio + if ( w * sh > sw * h ) + w = sw * h / sh; + else + h = sh * w / sw; - result = mediaPlayerState->curDecoder()->videoReadScaledFrame( currentFrame->jumpTable(), 0, 0, sw, sh, w, h, format, 0) == 0; + result = mediaPlayerState->curDecoder()->videoReadScaledFrame( currentFrame->jumpTable(), 0, 0, sw, sh, w, h, format, 0) == 0; - QPainter p( this ); + QPainter p( this ); - // Image changed size, therefore need to blank the possibly unpainted regions first - if ( scaledWidth != w || scaledHeight != h ) { - p.setBrush( QBrush( Qt::black ) ); - p.drawRect( 9, 20, 220, 160 ); - } + // Image changed size, therefore need to blank the possibly unpainted regions first + if ( scaledWidth != w || scaledHeight != h ) { + p.setBrush( QBrush( Qt::black ) ); + p.drawRect( 9, 20, 220, 160 ); + } - scaledWidth = w; - scaledHeight = h; + scaledWidth = w; + scaledHeight = h; - if ( result ) { - p.drawImage( 9 + (220 - scaledWidth) / 2, 20 + (160 - scaledHeight) / 2, *currentFrame, 0, 0, scaledWidth, scaledHeight ); - } + if ( result ) { + p.drawImage( 9 + (220 - scaledWidth) / 2, 20 + (160 - scaledHeight) / 2, *currentFrame, 0, 0, scaledWidth, scaledHeight ); + } diff --git a/core/multimedia/opieplayer/videowidget.h b/core/multimedia/opieplayer/videowidget.h index 8b49091..cf13743 100644 --- a/core/multimedia/opieplayer/videowidget.h +++ b/core/multimedia/opieplayer/videowidget.h @@ -1,5 +1,5 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** @@ -25,3 +25,2 @@ - class QPixmap; diff --git a/core/multimedia/opieplayer/wavplugin/Makefile.in b/core/multimedia/opieplayer/wavplugin/Makefile.in index a46b925..bcbe7f2 100644 --- a/core/multimedia/opieplayer/wavplugin/Makefile.in +++ b/core/multimedia/opieplayer/wavplugin/Makefile.in @@ -102,4 +102,3 @@ REQUIRES= wavplugin.o: wavplugin.cpp \ - wavplugin.h \ - ../mediaplayerplugininterface.h + wavplugin.h @@ -107,3 +106,2 @@ 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 7f63b3b..0be667f 100644 --- a/core/multimedia/opieplayer/wavplugin/wavplugin.cpp +++ b/core/multimedia/opieplayer/wavplugin/wavplugin.cpp @@ -19,4 +19,2 @@ **********************************************************************/ -// L.J.Potter added changes Fri 02-15-2002 - #include <stdio.h> @@ -29,3 +27,2 @@ - //#define debugMsg(a) qDebug(a) @@ -51,3 +48,3 @@ struct ChunkData { -const int sound_buffer_size = 512; // 4096; // you got to be kidding right? +const int sound_buffer_size = 4096; @@ -65,86 +62,97 @@ public: int samples; - + int freq; + int chan; + int sampleRate; + int resolution; + 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; } - // expands out samples to the frequency of 44kHz + // 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"); + { + qDebug("add"); + done = 0; + + if ( input == 0 ) { + qDebug("no input"); return FALSE; } - samples_due += chunkdata.samplesPerSec; - while ( count && (samples_due > chunkdata.samplesPerSec) ) { - *output++ = l; - if ( stereo ) - *output++ = r; - samples_due -= chunkdata.samplesPerSec; - count--; - done++; + + while ( count ) { + int l,r; + 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; + samples_due -= chunkdata.samplesPerSec; + count--; + done++; + } } + + return TRUE; } - return TRUE; - } bool initialise() { - if ( input == 0 ) - return FALSE; + qDebug("initialize"); + 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; + } + } - 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 - qDebug("bits %d", chunkdata.wBitsPerSample); - return TRUE; + + + else { + // ignored chunk + if ( chunk.size > 1000000000 || !input->at(input->at()+chunk.size) ) { + return FALSE; + } + } + } // while + + return TRUE; } @@ -152,43 +160,191 @@ public: - // gets a sample from the file + // gets a sample from the file bool getSample(int& l, int& r) - { - l = r = 0; + { + l = r = 0; - if ( input == 0 ) - return FALSE; + if ( input == 0 ) + return FALSE; - if ( (wavedata_remaining < 0) || !max ) - return FALSE; + if ( (wavedata_remaining < 0) || !max ) + return FALSE; - if ( out >= max ) { - max = input->readBlock( (char*)data, (uint)QMIN(sound_buffer_size,wavedata_remaining) ); + if ( out >= max ) { + max = input->readBlock( (char*)data, (uint)QMIN(sound_buffer_size,wavedata_remaining) ); - wavedata_remaining -= max; + 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 + out = 0; + if ( max <= 0 ) { + max = 0; + return TRUE; + } + } + if ( resolution == 8 ) { + l = (data[out++] - 128) * 128; + } else { + l = ((short*)data)[out/2]; + out += 2; + } + if ( chan == 1 ) { + r = l; + } else { + if ( resolution == 8 ) { + r = (data[out++] - 128) * 128; + } else { + r = ((short*)data)[out/2]; + out += 2; + } + } + return TRUE; + } // getSample + +////////////////////////////////////////////////////// +int getWavSettings(int fd) +{ //this came from wmrecord + + char t1[4]; + unsigned long l1; + int found; + short fmt; + unsigned short ch, brate; + unsigned long srate; + + + /* First read in the RIFF identifier. If this is missing then the + * file is not a valid WAVE file. + */ + if (read(fd, t1, 4)<4) { + qDebug(" Could not read from sound file.\n"); + return -1; + } + if (strncmp(t1, "RIFF", 4)) { + qDebug(" not a valid WAV file.\n"); + return -1; + } + /* Advance the file pointer to the next relevant field. */ + lseek(fd, 4, SEEK_CUR); + /* Read in the WAVE identifier. */ + if (read(fd, t1, 4)<4) { + qDebug("Could not read from sound file.\n"); + return -1; + } + if (strncmp(t1, "WAVE", 4)) { + qDebug("not a valid WAV file.\n"); + return -1; + } + /* Search through the file for the format chunk. If the end of the + * file is reached without finding the chunk, then the file is not a + * valid WAVE file. + */ + found = 0; + while (!found) { + if (read(fd, t1, 4)<4) { + qDebug("Could not read from sound file.\n"); + return -1; + } + if (strncmp(t1, "fmt ", 4)) { + /* Determine the length of the chunk found and skip to the next + * chunk. The chunk length is always stored in the four bytes + * following the chunk id. + */ + if (read(fd, &l1, 4)<4) { + qDebug("Could not read from sound file.\n"); + return -1; + } + lseek(fd, l1, SEEK_CUR); + } + else { + /* This is the format chunk, which stores the playback settings + * for the recording. + */ + /* Skip the length field, since we don't really need it. */ + lseek(fd, 4, SEEK_CUR); + /* Read in the format tag. If it has a value of 1, then there is + * no compression and we can attempt to play the file + * back. Otherwise, return. + */ + if (read(fd, &fmt, 2)<2) { + qDebug("Could not read from format chunk.\n"); + return -1; + } + if (fmt != 1) { + qDebug("Wave file contains compressed data." + " Unable to continue.\n"); + return -1; + } + /* Get the stereo mode. */ + if (read(fd, &ch, 2)<2) { + qDebug("Could not read from format chunk.\n"); + return -1; + } + else { + chan = ch; + qDebug("File has %d channels", chan); + } + /* Get the sample rate. */ + if (read(fd, &srate, 4)<4) { + qDebug("Could not read from format chunk.\n"); + return -1; + } + else { + sampleRate = srate; + qDebug("File has samplerate of %d", sampleRate); + } + /* Get the bit rate. This is at the end of the format chunk. */ + lseek(fd, 6, SEEK_CUR); + if (read(fd, &brate, 2)<2) { + qDebug("Could not read from format chunk.\n"); + return -1; + } + else { + resolution = brate; + qDebug("File has bitrate of %d", resolution); + } + + found++; + } + } + + /* Search through the file for the data chunk. If the end of the + * file is reached without finding the chunk, then the file is not a + * valid WAVE file. + */ + found = 0; + while (!found) { + if (read(fd, t1, 4)<4) { + qDebug("Could not read from sound file.\n"); + return -1; + } + if (strncmp(t1, "data", 4)) { + /* Determine the length of the chunk found and skip to the next + * chunk. The chunk length is always stored in the four bytes + * following the chunk id. + */ + if (read(fd, &l1, 4)<4) { + qDebug("Could not read from sound file.\n"); + return -1; + } + lseek(fd, l1, SEEK_CUR); + } + else { + /* This is the data chunk, which stores the recording. */ + /* Get the length field. */ + if (read(fd, &l1, 4)<4) { + qDebug("Could not read from sound file.\n"); + return -1; + } + else { + samples =l1; + qDebug("file has length of %d\nlasting %d seconds",l1, (( l1 / sampleRate) / chan) / 2 ); // ???? + return l1; + } + } + } + + return 0; +} + +////////////////////////////////////////////////// }; @@ -209,3 +365,3 @@ WavPlugin::~WavPlugin() { bool WavPlugin::isFileSupported( const QString& path ) { -// qDebug( "WavPlugin::isFileSupported" ); + debugMsg( "WavPlugin::isFileSupported" ); @@ -228,3 +384,3 @@ bool WavPlugin::isFileSupported( const QString& path ) { bool WavPlugin::open( const QString& path ) { -// qDebug( "WavPlugin::open" ); + qDebug( "WavPlugin::open" ); @@ -236,8 +392,9 @@ 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; } - + +// d->getWavSettings( d->input.handle()); d->initialise(); @@ -249,3 +406,3 @@ bool WavPlugin::open( const QString& path ) { bool WavPlugin::close() { -// qDebug( "WavPlugin::close" ); + qDebug( "WavPlugin::close" ); @@ -259,3 +416,3 @@ bool WavPlugin::close() { bool WavPlugin::isOpen() { -// qDebug( "WavPlugin::isOpen" ); + qDebug( "WavPlugin::isOpen" ); return ( d->input != 0 ); @@ -265,3 +422,3 @@ bool WavPlugin::isOpen() { int WavPlugin::audioStreams() { -// qDebug( "WavPlugin::audioStreams" ); + qDebug( "WavPlugin::audioStreams" ); return 1; @@ -271,4 +428,4 @@ int WavPlugin::audioStreams() { int WavPlugin::audioChannels( int ) { -// qDebug( "WavPlugin::audioChannels" ); - return d->chunkdata.channels;// 2; // ### Always scale audio to stereo samples + debugMsg( "WavPlugin::audioChannels" ); + return d->chan; } @@ -277,4 +434,4 @@ int WavPlugin::audioChannels( int ) { int WavPlugin::audioFrequency( int ) { -// qDebug( "WavPlugin::audioFrequency %d", d->chunkdata.samplesPerSec ); - return d->chunkdata.samplesPerSec; //44100; // ### Always scale to frequency of 44100 + qDebug( "WavPlugin::audioFrequency" ); + return d->freq; } @@ -283,5 +440,6 @@ int WavPlugin::audioFrequency( int ) { int WavPlugin::audioSamples( int ) { -// 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 + qDebug( "WavPlugin::audioSamples" ); + return d->samples; +// 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 } @@ -290,3 +448,3 @@ int WavPlugin::audioSamples( int ) { bool WavPlugin::audioSetSample( long, int ) { -// qDebug( "WavPlugin::audioSetSample" ); + qDebug( "WavPlugin::audioSetSample" ); return FALSE; @@ -296,3 +454,3 @@ bool WavPlugin::audioSetSample( long, int ) { long WavPlugin::audioGetSample( int ) { -// qDebug( "WavPlugin::audioGetSample" ); + qDebug( "WavPlugin::audioGetSample" ); return 0; @@ -326,3 +484,3 @@ bool WavPlugin::audioReadStereoSamples( short *output, long samples, long& sampl bool WavPlugin::audioReadSamples( short *output, int channels, long samples, long& samplesMade, int ) { -// qDebug( "WavPlugin::audioReadSamples" ); + qDebug( "WavPlugin::audioReadSamples" ); return d->add( output, samples, samplesMade, channels != 1 ); @@ -331,3 +489,3 @@ bool WavPlugin::audioReadSamples( short *output, int channels, long samples, lon double WavPlugin::getTime() { -// qDebug( "WavPlugin::getTime" ); + qDebug( "WavPlugin::getTime" ); return 0.0; @@ -335,7 +493,2 @@ double WavPlugin::getTime() { -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 6afd67e..19d1a8e 100644 --- a/core/multimedia/opieplayer/wavplugin/wavplugin.h +++ b/core/multimedia/opieplayer/wavplugin/wavplugin.h @@ -19,4 +19,2 @@ **********************************************************************/ -// L.J.Potter added changes Fri 02-15-2002 - #ifndef WAV_PLUGIN_H @@ -24,6 +22,5 @@ - #include <qstring.h> #include <qapplication.h> -#include "../mediaplayerplugininterface.h" +#include <qpe/mediaplayerplugininterface.h> @@ -56,3 +53,2 @@ public: int audioFrequency( int stream ); - int audioBitsPerSample( int stream ); int audioSamples( int stream ); diff --git a/core/multimedia/opieplayer/wavplugin/wavpluginimpl.cpp b/core/multimedia/opieplayer/wavplugin/wavpluginimpl.cpp index 1f7b85b..2923180 100644 --- a/core/multimedia/opieplayer/wavplugin/wavpluginimpl.cpp +++ b/core/multimedia/opieplayer/wavplugin/wavpluginimpl.cpp @@ -22,3 +22,2 @@ - WavPluginImpl::WavPluginImpl() diff --git a/core/multimedia/opieplayer/wavplugin/wavpluginimpl.h b/core/multimedia/opieplayer/wavplugin/wavpluginimpl.h index ee32f54..71f5f20 100644 --- a/core/multimedia/opieplayer/wavplugin/wavpluginimpl.h +++ b/core/multimedia/opieplayer/wavplugin/wavpluginimpl.h @@ -22,4 +22,3 @@ - -#include "../mediaplayerplugininterface.h" +#include <qpe/mediaplayerplugininterface.h> |