summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McNeil <sean.mcneil@windriver.com>2009-04-05 02:03:35 +0700
committerSean McNeil <sean.mcneil@windriver.com>2009-04-08 03:21:41 +0700
commitd9ca3222cff122312af6dd329063dd8fd6f40dcf (patch)
treebac6aa70416216108158dbcef8c91558ef4902bf
parent6186b61b05256f91ccba70edee935f3a2b3f475a (diff)
downloadalsa_sound-d9ca3222cff122312af6dd329063dd8fd6f40dcf.tar.gz
Call with appropriate parameters to setDevice
Put back missing return.
-rw-r--r--Android.mk4
-rw-r--r--AudioHardwareALSA.cpp103
-rw-r--r--AudioHardwareALSA.h9
3 files changed, 55 insertions, 61 deletions
diff --git a/Android.mk b/Android.mk
index 52a9adb..04968ed 100644
--- a/Android.mk
+++ b/Android.mk
@@ -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:
/**