diff options
author | Sean McNeil <sean.mcneil@windriver.com> | 2009-04-05 02:03:35 +0700 |
---|---|---|
committer | Sean McNeil <sean.mcneil@windriver.com> | 2009-04-08 03:21:41 +0700 |
commit | d9ca3222cff122312af6dd329063dd8fd6f40dcf (patch) | |
tree | bac6aa70416216108158dbcef8c91558ef4902bf | |
parent | 6186b61b05256f91ccba70edee935f3a2b3f475a (diff) | |
download | alsa_sound-d9ca3222cff122312af6dd329063dd8fd6f40dcf.tar.gz |
Call with appropriate parameters to setDevice
Put back missing return.
-rw-r--r-- | Android.mk | 4 | ||||
-rw-r--r-- | AudioHardwareALSA.cpp | 103 | ||||
-rw-r--r-- | AudioHardwareALSA.h | 9 |
3 files changed, 55 insertions, 61 deletions
@@ -13,6 +13,10 @@ ifeq ($(strip $(BOARD_USES_ALSA_AUDIO)),true) LOCAL_CFLAGS := -D_POSIX_SOURCE LOCAL_WHOLE_STATIC_LIBRARIES := libasound + ifneq ($(ALSA_DEFAULT_SAMPLE_RATE),) + LOCAL_CFLAGS += -DALSA_DEFAULT_SAMPLE_RATE=$(ALSA_DEFAULT_SAMPLE_RATE) + endif + LOCAL_C_INCLUDES += external/alsa-lib/include LOCAL_SRC_FILES := AudioHardwareALSA.cpp diff --git a/AudioHardwareALSA.cpp b/AudioHardwareALSA.cpp index 3d7b77d..bce67ef 100644 --- a/AudioHardwareALSA.cpp +++ b/AudioHardwareALSA.cpp @@ -35,6 +35,10 @@ #include <alsa/asoundlib.h> #include "AudioHardwareALSA.h" +#ifndef ALSA_DEFAULT_SAMPLE_RATE +#define ALSA_DEFAULT_SAMPLE_RATE 44100 // in Hz +#endif + #define SND_MIXER_VOL_RANGE_MIN (0) #define SND_MIXER_VOL_RANGE_MAX (100) @@ -46,7 +50,6 @@ extern "C" { - extern int ffs(int i); // @@ -64,7 +67,6 @@ extern "C" android::AudioHardwareInterface *createAudioHardware(void) { return new android::AudioHardwareALSA(); } - } // extern "C" namespace android @@ -81,6 +83,8 @@ typedef AudioSystem::audio_routes audio_routes; // ---------------------------------------------------------------------------- +static const int DEFAULT_SAMPLE_RATE = ALSA_DEFAULT_SAMPLE_RATE; + static const char _nullALSADeviceName[] = "NULL_Device"; static void ALSAErrorHandler(const char *file, @@ -254,7 +258,8 @@ AudioStreamIn * AudioHardwareALSA::openInputStream(int format, int channelCount, uint32_t sampleRate, - status_t *status) + status_t *status, + AudioSystem::audio_in_acoustics acoustics) { AutoMutex lock(mLock); @@ -269,8 +274,10 @@ AudioHardwareALSA::openInputStream(int format, *status = in->set(format, channelCount, sampleRate); if (*status == NO_ERROR) { mInput = in; - // Now, actually open the device. Only 1 route used - mInput->setDevice(0, 0); + // Some information is expected to be available immediately after + // the device is open. + uint32_t routes = mRoutes[mMode]; + mInput->setDevice(mMode, routes); return mInput; } else { delete in; @@ -739,7 +746,7 @@ status_t ALSAStreamOps::setDevice(int mode, uint32_t device) return status; // Don't check for failure; some devices do not support the default - // 44100 Hz rate. + // sample rate. sampleRate(mDefaults->sampleRate); // Disable hardware resampling. @@ -824,6 +831,40 @@ status_t ALSAStreamOps::setDevice(int mode, uint32_t device) return status; } +const char *ALSAStreamOps::deviceName(int mode, uint32_t device) +{ + static char devString[ALSA_NAME_MAX]; + int dev; + int hasDevExt = 0; + + strcpy (devString, mDefaults->devicePrefix); + + for (dev=0; device; dev++) + if (device & (1 << dev)) { + /* Don't go past the end of our list */ + if (dev >= deviceSuffixLen) + break; + ALSA_STRCAT (devString, deviceSuffix[dev]); + device &= ~(1 << dev); + hasDevExt = 1; + } + + if (hasDevExt) + switch (mode) { + case AudioSystem::MODE_NORMAL: + ALSA_STRCAT (devString, "_normal"); + break; + case AudioSystem::MODE_RINGTONE: + ALSA_STRCAT (devString, "_ringtone"); + break; + case AudioSystem::MODE_IN_CALL: + ALSA_STRCAT (devString, "_incall"); + break; + }; + + return devString; +} + // ---------------------------------------------------------------------------- AudioStreamOutALSA::AudioStreamOutALSA(AudioHardwareALSA *parent) : @@ -835,7 +876,7 @@ AudioStreamOutALSA::AudioStreamOutALSA(AudioHardwareALSA *parent) : direction : SND_PCM_STREAM_PLAYBACK, format : SND_PCM_FORMAT_S16_LE, // AudioSystem::PCM_16_BIT channels : 2, - sampleRate : 44100, + sampleRate : DEFAULT_SAMPLE_RATE, latency : 250000, // Desired Delay in usec bufferSize : 16384, // Desired Number of samples }; @@ -907,40 +948,6 @@ status_t AudioStreamOutALSA::setDevice(int mode, uint32_t newDevice) return ALSAStreamOps::setDevice(mode, newDevice); } -const char *AudioStreamOutALSA::deviceName(int mode, uint32_t device) -{ - static char devString[ALSA_NAME_MAX]; - int dev; - int hasDevExt = 0; - - strcpy (devString, mDefaults->devicePrefix); - - for (dev=0; device; dev++) - if (device & (1 << dev)) { - /* Don't go past the end of our list */ - if (dev >= deviceSuffixLen) - break; - ALSA_STRCAT (devString, deviceSuffix[dev]); - device &= ~(1 << dev); - hasDevExt = 1; - } - - if (hasDevExt) - switch (mode) { - case AudioSystem::MODE_NORMAL: - ALSA_STRCAT (devString, "_normal"); - break; - case AudioSystem::MODE_RINGTONE: - ALSA_STRCAT (devString, "_ringtone"); - break; - case AudioSystem::MODE_IN_CALL: - ALSA_STRCAT (devString, "_incall"); - break; - }; - - return devString; -} - status_t AudioStreamOutALSA::standby() { AutoMutex lock(mLock); @@ -1029,20 +1036,6 @@ status_t AudioStreamInALSA::setDevice(int mode, uint32_t newDevice) return ALSAStreamOps::setDevice(mode, newDevice); } -const char *AudioStreamInALSA::deviceName(int mode, uint32_t device) -{ - static char devString[ALSA_NAME_MAX]; - - strcpy (devString, mDefaults->devicePrefix); - - // The AudioHardwareALSA API does not allow one to set the input routing. - // Only one input device (the microphone) is currently supported. - // - strcat (devString, "_Microphone"); - - return devString; -} - status_t AudioStreamInALSA::standby() { AutoMutex lock(mLock); diff --git a/AudioHardwareALSA.h b/AudioHardwareALSA.h index b2b0975..56045ff 100644 --- a/AudioHardwareALSA.h +++ b/AudioHardwareALSA.h @@ -82,7 +82,7 @@ namespace android const char *streamName(); virtual status_t setDevice(int mode, uint32_t device); - virtual const char *deviceName(int mode, uint32_t device) = 0; + const char *deviceName(int mode, uint32_t device); protected: friend class AudioStreamOutALSA; @@ -149,8 +149,6 @@ namespace android status_t setVolume(float volume); - virtual const char *deviceName(int mode, uint32_t device); - status_t standby(); bool isStandby(); @@ -196,8 +194,6 @@ namespace android virtual status_t setGain(float gain); - virtual const char *deviceName(int mode, uint32_t device); - virtual status_t standby(); private: @@ -248,7 +244,8 @@ namespace android int format, int channelCount, uint32_t sampleRate, - status_t *status); + status_t *status, + AudioSystem::audio_in_acoustics acoustics); protected: /** |