summaryrefslogtreecommitdiff
path: root/core/multimedia/opieplayer/audiodevice.cpp
Side-by-side diff
Diffstat (limited to 'core/multimedia/opieplayer/audiodevice.cpp') (more/less context) (show whitespace changes)
-rw-r--r--core/multimedia/opieplayer/audiodevice.cpp81
1 files changed, 32 insertions, 49 deletions
diff --git a/core/multimedia/opieplayer/audiodevice.cpp b/core/multimedia/opieplayer/audiodevice.cpp
index 7b3700a..9a10eb4 100644
--- a/core/multimedia/opieplayer/audiodevice.cpp
+++ b/core/multimedia/opieplayer/audiodevice.cpp
@@ -1,7 +1,7 @@
/**********************************************************************
-** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
-** This file is part of the Qtopia Environment.
+** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
@@ -17,8 +17,10 @@
** not clear to you.
**
**********************************************************************/
+// L.J.Potter added better error code Fri 02-15-2002 14:37:47
#include <stdlib.h>
+#include <stdio.h>
#include <qpe/qpeapplication.h>
#include <qpe/config.h>
#include "audiodevice.h"
@@ -106,17 +108,18 @@ void AudioDevice::getVolume( unsigned int& leftVolume, unsigned int& rightVolume
formatData.wBitsPerSample = 16;
waveOutOpen(&handle, WAVE_MAPPER, &formatData, 0L, 0L, CALLBACK_NULL);
if ( waveOutGetVolume( handle, (LPDWORD)&volume ) )
- qDebug( "get volume of audio device failed" );
+// qDebug( "get volume of audio device failed" );
waveOutClose( handle );
leftVolume = volume & 0xFFFF;
rightVolume = volume >> 16;
#else
int mixerHandle = open( "/dev/mixer", O_RDWR );
if ( mixerHandle >= 0 ) {
- ioctl( mixerHandle, MIXER_READ(0), &volume );
+ if(ioctl( mixerHandle, MIXER_READ(0), &volume )==-1)
+ perror("ioctl(\"MIXER_READ\")");
close( mixerHandle );
} else
- qDebug( "get volume of audio device failed" );
+ perror("open(\"/dev/mixer\")");
leftVolume = ((volume & 0x00FF) << 16) / 101;
rightVolume = ((volume & 0xFF00) << 8) / 101;
#endif
@@ -147,7 +150,7 @@ void AudioDevice::setVolume( unsigned int leftVolume, unsigned int rightVolume,
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" );
+// qDebug( "set volume of audio device failed" );
waveOutClose( handle );
#else
// Volume can be from 0 to 100 which is 101 distinct values
@@ -158,10 +161,12 @@ void AudioDevice::setVolume( unsigned int leftVolume, unsigned int rightVolume,
unsigned int volume = ((rV << 8) & 0xFF00) | (lV & 0x00FF);
int mixerHandle = 0;
if ( ( mixerHandle = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
- ioctl( mixerHandle, MIXER_WRITE(0), &volume );
+ if(ioctl( mixerHandle, MIXER_WRITE(0), &volume ) ==-1)
+ perror("ioctl(\"MIXER_WRITE\")");
close( mixerHandle );
} else
- qDebug( "set volume of audio device failed" );
+ perror("open(\"/dev/mixer\")");
+
# else
// This is the way this has to be done now I guess, doesn't allow for
// independant right and left channel setting, or setting for different outputs
@@ -186,52 +191,24 @@ AudioDevice::AudioDevice( unsigned int f, unsigned int chs, unsigned int bps ) {
d->frequency = f;
d->channels = chs;
d->bytesPerSample = bps;
+// qDebug("%d",bps);
+ int format=0;
+ if( bps == 8) format = AFMT_U8;
+ else if( bps <= 0) format = AFMT_S16_LE;
+ else format = AFMT_S16_LE;
+// qDebug("AD- freq %d, channels %d, b/sample %d, bitrate %d",f,chs,bps,format);
connect( qApp, SIGNAL( volumeChanged(bool) ), this, SLOT( volumeChanged(bool) ) );
-#ifdef Q_OS_WIN32
- UINT result;
- WAVEFORMATEX formatData;
- formatData.cbSize = sizeof(WAVEFORMATEX);
-/*
- // Other possible formats windows supports
- formatData.wFormatTag = WAVE_FORMAT_MPEG;
- formatData.wFormatTag = WAVE_FORMAT_MPEGLAYER3;
- formatData.wFormatTag = WAVE_FORMAT_ADPCM;
-*/
- formatData.wFormatTag = WAVE_FORMAT_PCM;
- formatData.nAvgBytesPerSec = bps * chs * f;
- formatData.nBlockAlign = bps * chs;
- formatData.nChannels = chs;
- formatData.nSamplesPerSec = f;
- formatData.wBitsPerSample = bps * 8;
- // Open a waveform device for output
- if (result = waveOutOpen((LPHWAVEOUT)&d->handle, WAVE_MAPPER, &formatData, 0L, 0L, CALLBACK_NULL)) {
- QString errorMsg = "error opening audio device.\nReason: %i - ";
- switch (result) {
- case MMSYSERR_ALLOCATED: errorMsg += "Specified resource is already allocated."; break;
- case MMSYSERR_BADDEVICEID: errorMsg += "Specified device identifier is out of range."; break;
- case MMSYSERR_NODRIVER: errorMsg += "No device driver is present."; break;
- case MMSYSERR_NOMEM: errorMsg += "Unable to allocate or lock memory."; break;
- case WAVERR_BADFORMAT: errorMsg += "Attempted to open with an unsupported waveform-audio format."; break;
- case WAVERR_SYNC: errorMsg += "The device is synchronous but waveOutOpen was called without using the WAVE_ALLOWSYNC flag."; break;
- default: errorMsg += "Undefined error"; break;
- }
- qDebug( errorMsg, result );
- }
-
- d->bufferSize = sound_fragment_bytes;
-#else
int fragments = 0x10000 * 8 + sound_fragment_shift;
- int format = AFMT_S16_LE;
int capabilities = 0;
#ifdef KEEP_DEVICE_OPEN
if ( AudioDevicePrivate::dspFd == 0 ) {
#endif
if ( ( d->handle = ::open( "/dev/dsp", O_WRONLY ) ) < 0 ) {
- qDebug( "error opening audio device /dev/dsp, sending data to /dev/null instead" );
+ perror("open(\"/dev/dsp\") sending to /dev/null instead");
d->handle = ::open( "/dev/null", O_WRONLY );
}
#ifdef KEEP_DEVICE_OPEN
@@ -241,13 +218,20 @@ AudioDevice::AudioDevice( unsigned int f, unsigned int chs, unsigned int bps ) {
}
#endif
- ioctl( d->handle, SNDCTL_DSP_GETCAPS, &capabilities );
- ioctl( d->handle, SNDCTL_DSP_SETFRAGMENT, &fragments );
- ioctl( d->handle, SNDCTL_DSP_SETFMT, &format );
- ioctl( d->handle, SNDCTL_DSP_SPEED, &d->frequency );
+ if(ioctl( d->handle, SNDCTL_DSP_GETCAPS, &capabilities )==-1)
+ perror("ioctl(\"SNDCTL_DSP_GETCAPS\")");
+ if(ioctl( d->handle, SNDCTL_DSP_SETFRAGMENT, &fragments )==-1)
+ perror("ioctl(\"SNDCTL_DSP_SETFRAGMENT\")");
+ if(ioctl( d->handle, SNDCTL_DSP_SETFMT, & format )==-1)
+ perror("ioctl(\"SNDCTL_DSP_SETFMT\")");
+ qDebug("freq %d", d->frequency);
+ if(ioctl( d->handle, SNDCTL_DSP_SPEED, &d->frequency )==-1)
+ perror("ioctl(\"SNDCTL_DSP_SPEED\")");
+ qDebug("channels %d",d->channels);
if ( ioctl( d->handle, SNDCTL_DSP_CHANNELS, &d->channels ) == -1 ) {
d->channels = ( d->channels == 1 ) ? 2 : d->channels;
- ioctl( d->handle, SNDCTL_DSP_CHANNELS, &d->channels );
+ if(ioctl( d->handle, SNDCTL_DSP_CHANNELS, &d->channels )==-1)
+ perror("ioctl(\"SNDCTL_DSP_CHANNELS\")");
}
d->bufferSize = sound_fragment_bytes;
@@ -261,7 +245,6 @@ AudioDevice::AudioDevice( unsigned int f, unsigned int chs, unsigned int bps ) {
//if ( capabilities & DSP_CAP_REALTIME )qDebug( "Sound card has realtime sync" );
//if ( capabilities & DSP_CAP_TRIGGER ) qDebug( "Sound card has precise trigger" );
//if ( capabilities & DSP_CAP_MMAP ) qDebug( "Sound card can mmap" );
-#endif
}