summaryrefslogtreecommitdiff
path: root/core
Side-by-side diff
Diffstat (limited to 'core') (more/less context) (show whitespace changes)
-rw-r--r--core/multimedia/opieplayer/audiodevice.cpp76
-rw-r--r--core/multimedia/opieplayer/audiowidget.cpp35
-rw-r--r--core/multimedia/opieplayer/audiowidget.h13
-rw-r--r--core/multimedia/opieplayer/mediaplayer.cpp57
-rw-r--r--core/multimedia/opieplayer/mediaplayerstate.h2
5 files changed, 91 insertions, 92 deletions
diff --git a/core/multimedia/opieplayer/audiodevice.cpp b/core/multimedia/opieplayer/audiodevice.cpp
index 020f6be..136e06c 100644
--- a/core/multimedia/opieplayer/audiodevice.cpp
+++ b/core/multimedia/opieplayer/audiodevice.cpp
@@ -35,11 +35,6 @@
#include "qpe/qcopenvelope_qws.h"
#endif
-// #ifdef Q_WS_WIN
-// #include <windows.h>
-// #include <mmsystem.h>
-// #include <mmreg.h>
-// #endif
#if defined(Q_WS_X11) || defined(Q_WS_QWS)
#include <fcntl.h>
#include <sys/ioctl.h>
@@ -50,11 +45,6 @@
#include <unistd.h>
#endif
-// #if defined(Q_OS_WIN32)
-// static const int expectedBytesPerMilliSecond = 2 * 2 * 44000 / 1000;
-// static const int timerResolutionMilliSeconds = 30;
-// static const int sound_fragment_bytes = timerResolutionMilliSeconds * expectedBytesPerMilliSecond;
-// #else
# if defined(QT_QWS_IPAQ)
static const int sound_fragment_shift = 14;
# else
@@ -101,23 +91,6 @@ unsigned int AudioDevicePrivate::rightVolume = 0;
void AudioDevice::getVolume( unsigned int& leftVolume, unsigned int& rightVolume, bool &muted ) {
muted = AudioDevicePrivate::muted;
unsigned int volume;
-// #ifdef Q_OS_WIN32
-// HWAVEOUT handle;
-// WAVEFORMATEX formatData;
-// formatData.cbSize = sizeof(WAVEFORMATEX);
-// formatData.wFormatTag = WAVE_FORMAT_PCM;
-// formatData.nAvgBytesPerSec = 4 * 44000;
-// formatData.nBlockAlign = 4;
-// formatData.nChannels = 2;
-// formatData.nSamplesPerSec = 44000;
-// formatData.wBitsPerSample = 16;
-// waveOutOpen(&handle, WAVE_MAPPER, &formatData, 0L, 0L, CALLBACK_NULL);
-// if ( waveOutGetVolume( handle, (LPDWORD)&volume ) )
-// // qDebug( "get volume of audio device failed" );
-// waveOutClose( handle );
-// leftVolume = volume & 0xFFFF;
-// rightVolume = volume >> 16;
-// #else
int mixerHandle = open( "/dev/mixer", O_RDWR );
if ( mixerHandle >= 0 ) {
if(ioctl( mixerHandle, MIXER_READ(0), &volume )==-1)
@@ -127,7 +100,6 @@ void AudioDevice::getVolume( unsigned int& leftVolume, unsigned int& rightVolume
perror("open(\"/dev/mixer\")");
leftVolume = ((volume & 0x00FF) << 16) / 101;
rightVolume = ((volume & 0xFF00) << 8) / 101;
-//#endif
}
@@ -142,22 +114,6 @@ void AudioDevice::setVolume( unsigned int leftVolume, unsigned int rightVolume,
leftVolume = ( (int) leftVolume < 0 ) ? 0 : (( leftVolume > 0xFFFF ) ? 0xFFFF : leftVolume );
rightVolume = ( (int)rightVolume < 0 ) ? 0 : (( rightVolume > 0xFFFF ) ? 0xFFFF : rightVolume );
}
-// #ifdef Q_OS_WIN32
-// HWAVEOUT handle;
-// WAVEFORMATEX formatData;
-// formatData.cbSize = sizeof(WAVEFORMATEX);
-// formatData.wFormatTag = WAVE_FORMAT_PCM;
-// formatData.nAvgBytesPerSec = 4 * 44000;
-// formatData.nBlockAlign = 4;
-// formatData.nChannels = 2;
-// formatData.nSamplesPerSec = 44000;
-// formatData.wBitsPerSample = 16;
-// waveOutOpen(&handle, WAVE_MAPPER, &formatData, 0L, 0L, CALLBACK_NULL);
-// unsigned int volume = (rightVolume << 16) | leftVolume;
-// if ( waveOutSetVolume( handle, volume ) )
-// // qDebug( "set volume of audio device failed" );
-// waveOutClose( handle );
-// #else
// Volume can be from 0 to 100 which is 101 distinct values
unsigned int rV = (rightVolume * 101) >> 16;
@@ -190,7 +146,6 @@ void AudioDevice::setVolume( unsigned int leftVolume, unsigned int rightVolume,
-
AudioDevice::AudioDevice( unsigned int f, unsigned int chs, unsigned int bps ) {
qDebug("creating new audio device");
QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << TRUE;
@@ -266,15 +221,11 @@ AudioDevice::~AudioDevice() {
qDebug("destryo audiodevice");
QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << TRUE;
-// #ifdef Q_OS_WIN32
-// waveOutClose( (HWAVEOUT)d->handle );
-// #else
# ifndef KEEP_DEVICE_OPEN
close( d->handle ); // Now it should be safe to shut the handle
# endif
delete d->unwrittenBuffer;
delete d;
-//#endif
QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << FALSE;
}
@@ -288,20 +239,6 @@ void AudioDevice::volumeChanged( bool muted )
void AudioDevice::write( char *buffer, unsigned int length )
{
-// #ifdef Q_OS_WIN32
-// // returns immediately and (to be implemented) emits completedIO() when finished writing
-// WAVEHDR *lpWaveHdr = (WAVEHDR *)malloc( sizeof(WAVEHDR) );
-// // maybe the buffer should be copied so that this fool proof, but its a performance hit
-// lpWaveHdr->lpData = buffer;
-// lpWaveHdr->dwBufferLength = length;
-// lpWaveHdr->dwFlags = 0L;
-// lpWaveHdr->dwLoops = 0L;
-// waveOutPrepareHeader( (HWAVEOUT)d->handle, lpWaveHdr, sizeof(WAVEHDR) );
-// // waveOutWrite returns immediately. the data is sent in the background.
-// if ( waveOutWrite( (HWAVEOUT)d->handle, lpWaveHdr, sizeof(WAVEHDR) ) )
-// qDebug( "failed to write block to audio device" );
-// // emit completedIO();
-// #else
int t = ::write( d->handle, buffer, length );
if ( t<0 ) t = 0;
if ( t != (int)length) {
@@ -338,9 +275,6 @@ unsigned int AudioDevice::bufferSize() const
unsigned int AudioDevice::canWrite() const
{
-// #ifdef Q_OS_WIN32
-// return bufferSize(); // Any better?
-// #else
audio_buf_info info;
if ( d->can_GETOSPACE && ioctl(d->handle,SNDCTL_DSP_GETOSPACE,&info) ) {
d->can_GETOSPACE = FALSE;
@@ -365,25 +299,15 @@ unsigned int AudioDevice::canWrite() const
else
return d->bufferSize;
}
-//#endif
}
int AudioDevice::bytesWritten() {
-// #ifdef Q_OS_WIN32
-// MMTIME pmmt = { TIME_BYTES, 0 };
-// if ( ( waveOutGetPosition( (HWAVEOUT)d->handle, &pmmt, sizeof(MMTIME) ) != MMSYSERR_NOERROR ) || ( pmmt.wType != TIME_BYTES ) ) {
-// qDebug( "failed to get audio device position" );
-// return -1;
-// }
-// return pmmt.u.cb;
-// #else
int buffered = 0;
if ( ioctl( d->handle, SNDCTL_DSP_GETODELAY, &buffered ) ) {
qDebug( "failed to get audio device position" );
return -1;
}
return buffered;
-//#endif
}
diff --git a/core/multimedia/opieplayer/audiowidget.cpp b/core/multimedia/opieplayer/audiowidget.cpp
index d20d560..ef7c8dc 100644
--- a/core/multimedia/opieplayer/audiowidget.cpp
+++ b/core/multimedia/opieplayer/audiowidget.cpp
@@ -146,14 +146,14 @@ AudioWidget::AudioWidget(QWidget* parent, const char* name, WFlags f) :
connect( mediaPlayerState, SIGNAL( lengthChanged(long) ), this, SLOT( setLength(long) ) );
connect( mediaPlayerState, SIGNAL( viewChanged(char) ), this, SLOT( setView(char) ) );
connect( mediaPlayerState, SIGNAL( loopingToggled(bool) ), this, SLOT( setLooping(bool) ) );
- connect( mediaPlayerState, SIGNAL( pausedToggled(bool) ), this, SLOT( setPaused(bool) ) );
+// connect( mediaPlayerState, SIGNAL( pausedToggled(bool) ), this, SLOT( setPaused(bool) ) );
connect( mediaPlayerState, SIGNAL( playingToggled(bool) ), this, SLOT( setPlaying(bool) ) );
// Intialise state
setLength( mediaPlayerState->length() );
setPosition( mediaPlayerState->position() );
setLooping( mediaPlayerState->fullscreen() );
- setPaused( mediaPlayerState->paused() );
+// setPaused( mediaPlayerState->paused() );
setPlaying( mediaPlayerState->playing() );
}
@@ -363,7 +363,16 @@ void AudioWidget::mouseMoveEvent( QMouseEvent *event ) {
qDebug("more clicked");
emit moreClicked();
return;
- case AudioVolumeDown: emit lessClicked(); return;
+ case AudioVolumeDown:
+ qDebug("less clicked");
+ emit lessClicked();
+ return;
+ case AudioForward:
+ emit forwardClicked();
+ return;
+ case AudioBack:
+ emit backClicked();
+ return;
}
} else if ( !isOnButton && audioButtons[i].isHeld ) {
audioButtons[i].isHeld = FALSE;
@@ -375,9 +384,17 @@ void AudioWidget::mouseMoveEvent( QMouseEvent *event ) {
if ( !audioButtons[i].isToggle )
setToggleButton( i, FALSE );
switch (i) {
- case AudioPlay: mediaPlayerState->setPlaying(audioButtons[i].isDown); return;
+ case AudioPlay:
+ if( mediaPlayerState->isPaused ) {
+ mediaPlayerState->setPaused( FALSE );
+ return;
+ } else if( !mediaPlayerState->isPaused ) {
+ mediaPlayerState->setPaused( TRUE );
+ return;
+ }
+// case AudioPlay: mediaPlayerState->setPlaying(audioButtons[i].isDown); return;
case AudioStop: mediaPlayerState->setPlaying(FALSE); return;
- case AudioPause: mediaPlayerState->setPaused(audioButtons[i].isDown); 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;
@@ -463,16 +480,16 @@ void AudioWidget::keyReleaseEvent( QKeyEvent *e)
}
break;
case Key_Down: //volume
- toggleButton(6);
+// toggleButton(6);
emit lessClicked();
emit lessReleased();
- toggleButton(6);
+// toggleButton(6);
break;
case Key_Up: //volume
- toggleButton(5);
+// toggleButton(5);
emit moreClicked();
emit moreReleased();
- toggleButton(5);
+// toggleButton(5);
break;
case Key_Right: //next in playlist
// toggleButton(3);
diff --git a/core/multimedia/opieplayer/audiowidget.h b/core/multimedia/opieplayer/audiowidget.h
index c686741..96bc55c 100644
--- a/core/multimedia/opieplayer/audiowidget.h
+++ b/core/multimedia/opieplayer/audiowidget.h
@@ -36,15 +36,16 @@
class QPixmap;
enum AudioButtons {
- AudioPlay,
+ AudioPlay=0,
AudioStop,
- AudioPause,
AudioNext,
AudioPrevious,
AudioVolumeUp,
AudioVolumeDown,
AudioLoop,
- AudioPlayList
+ AudioPlayList,
+ AudioForward,
+ AudioBack
};
@@ -61,7 +62,7 @@ public slots:
void updateSlider( long, long );
void sliderPressed( );
void sliderReleased( );
- void setPaused( bool b) { setToggleButton( AudioPause, b ); }
+// void setPaused( bool b) { setToggleButton( AudioPause, b ); }
void setLooping( bool b) { setToggleButton( AudioLoop, b ); }
void setPlaying( bool b) { setToggleButton( AudioPlay, b ); }
void setPosition( long );
@@ -74,6 +75,10 @@ signals:
void moreReleased();
void lessReleased();
void sliderMoved(long);
+ void forwardClicked();
+ void backClicked();
+ void forwardReleased();
+ void backReleased();
protected:
void doBlank();
diff --git a/core/multimedia/opieplayer/mediaplayer.cpp b/core/multimedia/opieplayer/mediaplayer.cpp
index b0963cf..4f3823a 100644
--- a/core/multimedia/opieplayer/mediaplayer.cpp
+++ b/core/multimedia/opieplayer/mediaplayer.cpp
@@ -106,14 +106,16 @@ void MediaPlayer::setPlaying( bool play ) {
if ( ((currentFile->file()).left(4) != "http") && !QFile::exists( currentFile->file() ) ) {
QMessageBox::critical( 0, tr( "File not found"),
- tr( "The following file was not found: <i>" ) + currentFile->file() + "</i>" );
+ tr( "The following file was not found: <i>" )
+ + currentFile->file() + "</i>" );
mediaPlayerState->setPlaying( FALSE );
return;
}
if ( !mediaPlayerState->newDecoder( currentFile->file() ) ) {
QMessageBox::critical( 0, tr( "No decoder found"),
- tr( "Sorry, no appropriate decoders found for this file: <i>" ) + currentFile->file() + "</i>" );
+ tr( "Sorry, no appropriate decoders found for this file: <i>" )
+ + currentFile->file() + "</i>" );
mediaPlayerState->setPlaying( FALSE );
return;
}
@@ -176,19 +178,70 @@ void MediaPlayer::startIncreasingVolume() {
volumeDirection = +1;
startTimer( 100 );
AudioDevice::increaseVolume();
+
}
+bool drawnOnScreenDisplay = FALSE;
+unsigned int onScreenDisplayVolume = 0;
+const int yoff = 110;
void MediaPlayer::stopChangingVolume() {
killTimers();
+
+ // Get rid of the on-screen display stuff
+ drawnOnScreenDisplay = FALSE;
+ onScreenDisplayVolume = 0;
+ int w = audioUI->width();
+ int h = audioUI->height();
+ audioUI->repaint( (w - 200) / 2, h - yoff, 200 + 9, 70, FALSE );
}
void MediaPlayer::timerEvent( QTimerEvent * ) {
+// qDebug("timer");
if ( volumeDirection == +1 )
AudioDevice::increaseVolume();
else if ( volumeDirection == -1 )
AudioDevice::decreaseVolume();
+
+ // Display an on-screen display volume
+ unsigned int l, r, v; bool m;
+ AudioDevice::getVolume( l, r, m );
+ v = ((l + r) * 11) / (2*0xFFFF);
+
+ if ( drawnOnScreenDisplay && onScreenDisplayVolume == v ) {
+// qDebug("returning %d, %d, %d, %d", v, l, r, m);
+ return;
+ }
+
+ int w = audioUI->width();
+ int h = audioUI->height();
+
+ if ( drawnOnScreenDisplay ) {
+ if ( onScreenDisplayVolume > v )
+ audioUI->repaint( (w - 200) / 2 + v * 20 + 0, h - yoff + 40,
+ (onScreenDisplayVolume - v) * 20 + 9, 30, FALSE );
+ }
+
+ drawnOnScreenDisplay = TRUE;
+ onScreenDisplayVolume = v;
+
+ QPainter p( audioUI );
+ p.setPen( QColor( 0x10, 0xD0, 0x10 ) );
+ p.setBrush( QColor( 0x10, 0xD0, 0x10 ) );
+
+ QFont f;
+ f.setPixelSize( 20 );
+ f.setBold( TRUE );
+ p.setFont( f );
+ p.drawText( (w - 200) / 2, h - yoff + 20, tr("Volume") );
+
+ for ( unsigned int i = 0; i < 10; i++ ) {
+ if ( v > i )
+ p.drawRect( (w - 200) / 2 + i * 20 + 0, h - yoff + 40, 9, 30 );
+ else
+ p.drawRect( (w - 200) / 2 + i * 20 + 3, h - yoff + 50, 3, 10 );
+ }
}
void MediaPlayer::keyReleaseEvent( QKeyEvent *e) {
diff --git a/core/multimedia/opieplayer/mediaplayerstate.h b/core/multimedia/opieplayer/mediaplayerstate.h
index 26185c5..1c65599 100644
--- a/core/multimedia/opieplayer/mediaplayerstate.h
+++ b/core/multimedia/opieplayer/mediaplayerstate.h
@@ -33,6 +33,7 @@ Q_OBJECT
public:
MediaPlayerState( QObject *parent, const char *name );
~MediaPlayerState();
+ bool isPaused;
bool isStreaming;
bool fullscreen() { return isFullscreen; }
@@ -101,7 +102,6 @@ private:
bool isLooping;
bool isShuffled;
bool usePlaylist;
- bool isPaused;
bool isPlaying;
long curPosition;
long curLength;