summaryrefslogtreecommitdiffstats
path: root/libaudio/AudioHardwareALSA.h
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2010-09-30 16:38:39 -0700
committerEric Laurent <elaurent@google.com>2010-10-01 14:58:12 -0700
commitbc4a3e85df64485dbe02a879bae9048579d88ac2 (patch)
treec9aa38a642585dbc738be0b0fe1d91128e1a81cf /libaudio/AudioHardwareALSA.h
parent6413e53edc03faa28de42bde30e14f94c4666571 (diff)
downloaddevice_samsung_crespo-bc4a3e85df64485dbe02a879bae9048579d88ac2.tar.gz
device_samsung_crespo-bc4a3e85df64485dbe02a879bae9048579d88ac2.tar.bz2
device_samsung_crespo-bc4a3e85df64485dbe02a879bae9048579d88ac2.zip
Workaround in audio HAL to fix audio input
Patched audio HAL to allow minimal audio input functionality until real fixes are submitted. This will allow features like voice search, VoIP, camcorder and mms audio record to work (with poor audio quality). Change-Id: I18acb120c5c398ccaeac11c462d629d41e33eef4
Diffstat (limited to 'libaudio/AudioHardwareALSA.h')
-rwxr-xr-xlibaudio/AudioHardwareALSA.h73
1 files changed, 50 insertions, 23 deletions
diff --git a/libaudio/AudioHardwareALSA.h b/libaudio/AudioHardwareALSA.h
index 5a4b5d5..0390beb 100755
--- a/libaudio/AudioHardwareALSA.h
+++ b/libaudio/AudioHardwareALSA.h
@@ -90,9 +90,29 @@
#define OEM_SOUND_TYPE_HEADSET 0x31 // Headset (0x30) + Voice(0x01)
#define OEM_SOUND_TYPE_BTVOICE 0x41 // BT(0x40) + Voice(0x01)
#endif
+
+#ifndef ALSA_DEFAULT_SAMPLE_RATE
+#define ALSA_DEFAULT_SAMPLE_RATE 44100 // in Hz
+#endif
+
+#define DEFAULT_SAMPLE_RATE ALSA_DEFAULT_SAMPLE_RATE
+
+#define PLAYBACK 0
+#define PERIOD_SZ_PLAYBACK 1024
+#define PERIODS_PLAYBACK 4
+#define BUFFER_SZ_PLAYBACK (PERIODS_PLAYBACK * PERIOD_SZ_PLAYBACK)
+#define LATENCY_PLAYBACK_MS ((BUFFER_SZ_PLAYBACK * 1000 / DEFAULT_SAMPLE_RATE) * 1000)
+
+#define CAPTURE 1
+#define PERIOD_SZ_CAPTURE 2048
+#define PERIODS_CAPTURE 2
+#define BUFFER_SZ_CAPTURE (PERIODS_CAPTURE * PERIOD_SZ_CAPTURE)
+#define LATENCY_CAPTURE_MS ((BUFFER_SZ_CAPTURE * 1000 / DEFAULT_SAMPLE_RATE) * 1000)
+
namespace android
{
+
class AudioHardwareALSA;
// ----------------------------------------------------------------------------
@@ -143,10 +163,12 @@ namespace android
const char * devicePrefix;
snd_pcm_stream_t direction; // playback or capture
snd_pcm_format_t format;
- int channels;
+ int channelCount;
uint32_t sampleRate;
+ uint32_t smpRateShift;
unsigned int latency; // Delay in usec
unsigned int bufferSize; // Size of sample buffer
+ unsigned int periodSize; // Size of sample buffer
};
ALSAStreamOps();
@@ -159,11 +181,12 @@ namespace android
status_t sampleRate(uint32_t rate);
virtual size_t bufferSize() const;
virtual int format() const;
- int getAndroidFormat(snd_pcm_format_t format);
+ int getAndroidFormat(snd_pcm_format_t format);
- virtual int channelCount() const;
- status_t channelCount(int channels);
- uint32_t getAndroidChannels(int channels);
+ virtual uint32_t channels() const;
+ int channelCount() const;
+ status_t channelCount(int channelCount);
+ uint32_t getAndroidChannels(int channelCount) const;
status_t open(int mode, uint32_t device);
void close();
@@ -201,14 +224,13 @@ namespace android
virtual ~AudioStreamOutALSA();
- status_t set(int *format,
- uint32_t *channelCount,
- uint32_t *sampleRate){
- return ALSAStreamOps::set(format, channelCount, sampleRate);
- }
+ status_t set(int *format,
+ uint32_t *channelCount,
+ uint32_t *sampleRate){
+ return ALSAStreamOps::set(format, channelCount, sampleRate);
+ }
- virtual uint32_t sampleRate() const
- {
+ virtual uint32_t sampleRate() const {
return ALSAStreamOps::sampleRate();
}
@@ -217,8 +239,10 @@ namespace android
return ALSAStreamOps::bufferSize();
}
- //virtual int channelCount() const;
- virtual uint32_t channels() const;
+ virtual uint32_t channels() const
+ {
+ return ALSAStreamOps::channels();
+ }
virtual int format() const
{
@@ -236,6 +260,7 @@ namespace android
status_t standby();
bool isStandby();
+ void setWakeLock();
virtual status_t setParameters(const String8& keyValuePairs);
virtual String8 getParameters(const String8& keys);
@@ -254,13 +279,12 @@ namespace android
AudioStreamInALSA(AudioHardwareALSA *parent);
virtual ~AudioStreamInALSA();
- status_t set(int *format,
- uint32_t *channelCount,
- uint32_t *sampleRate){
- return ALSAStreamOps::set(format, channelCount, sampleRate);
- }
+ status_t set(int *format,
+ uint32_t *channelCount,
+ uint32_t *sampleRate){
+ return ALSAStreamOps::set(format, channelCount, sampleRate);
+ }
- //virtual uint32_t sampleRate() {
virtual uint32_t sampleRate() const {
return ALSAStreamOps::sampleRate();
}
@@ -270,10 +294,9 @@ namespace android
return ALSAStreamOps::bufferSize();
}
- //virtual int channelCount() const
virtual uint32_t channels() const
{
- return ALSAStreamOps::channelCount();
+ return ALSAStreamOps::channels();
}
virtual int format() const
@@ -288,6 +311,8 @@ namespace android
virtual status_t setGain(float gain);
virtual status_t standby();
+ status_t standby_l();
+ void setWakeLock();
virtual status_t setParameters(const String8& keyValuePairs);
virtual String8 getParameters(const String8& keys);
@@ -297,6 +322,7 @@ namespace android
private:
AudioHardwareALSA *mParent;
bool mPowerLock;
+ int16_t mBuffer[2 * PERIOD_SZ_CAPTURE];
};
#if defined SEC_IPC
@@ -373,7 +399,8 @@ namespace android
AudioSystem::audio_in_acoustics acoustics);
virtual void closeInputStream(AudioStreamIn* in);
-
+ static uint32_t checkInputSampleRate(uint32_t sampleRate);
+ static const uint32_t inputSamplingRates[];
protected:
/**