summaryrefslogtreecommitdiffstats
path: root/libaudio/AudioHardware.h
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2011-08-17 18:56:52 -0700
committerEric Laurent <elaurent@google.com>2011-08-24 10:32:26 -0700
commita8e27288327ec78928f590688ecab94c99f88004 (patch)
tree8f8acbb93d3c3f04d4b4b3c82c3398c94733b6a9 /libaudio/AudioHardware.h
parent1d25835df08ed26f4c54b7a78666a015cda565dc (diff)
downloaddevice_samsung_crespo-a8e27288327ec78928f590688ecab94c99f88004.zip
device_samsung_crespo-a8e27288327ec78928f590688ecab94c99f88004.tar.gz
device_samsung_crespo-a8e27288327ec78928f590688ecab94c99f88004.tar.bz2
audio HAL: C interface to libaudioutils.
Modifications for new C interface to echo reference and resampler. Also release echo reference if needed when closing an output stream. Change-Id: I9e8b524effad66798a61e80b5fec1779558cce1e
Diffstat (limited to 'libaudio/AudioHardware.h')
-rw-r--r--libaudio/AudioHardware.h44
1 files changed, 28 insertions, 16 deletions
diff --git a/libaudio/AudioHardware.h b/libaudio/AudioHardware.h
index 64d80ec..1148478 100644
--- a/libaudio/AudioHardware.h
+++ b/libaudio/AudioHardware.h
@@ -29,8 +29,8 @@
#include "secril-client.h"
-#include <audio_utils/ReSampler.h>
-#include <audio_utils/EchoReference.h>
+#include <audio_utils/resampler.h>
+#include <audio_utils/echo_reference.h>
extern "C" {
struct pcm;
@@ -141,10 +141,10 @@ public:
sp <AudioStreamOutALSA> output() { return mOutput; }
- EchoReference *getEchoReference(audio_format_t format,
+ struct echo_reference_itfe *getEchoReference(audio_format_t format,
uint32_t channelCount,
uint32_t samplingRate);
- void releaseEchoReference(EchoReference *reference);
+ void releaseEchoReference(struct echo_reference_itfe *reference);
protected:
virtual status_t dump(int fd, const Vector<String16>& args);
@@ -187,7 +187,7 @@ private:
int (*setCallClockSync)(HRilClient, SoundClockCondition);
void loadRILD(void);
status_t connectRILDIfRequired(void);
- EchoReference* mEchoReference;
+ struct echo_reference_itfe *mEchoReference;
// trace driver operations for dump
int mDriverOp;
@@ -248,13 +248,13 @@ private:
void lock();
void unlock();
- void addEchoReference(EchoReference *reference);
- void removeEchoReference(EchoReference *reference);
+ void addEchoReference(struct echo_reference_itfe *reference);
+ void removeEchoReference(struct echo_reference_itfe *reference);
private:
int computeEchoReferenceDelay(size_t frames, struct timespec *echoRefRenderTime);
- int getPlaybackDelay(size_t frames, EchoReference::Buffer *buffer);
+ int getPlaybackDelay(size_t frames, struct echo_reference_buffer *buffer);
Mutex mLock;
AudioHardware* mHardware;
@@ -271,10 +271,10 @@ private:
int mDriverOp;
int mStandbyCnt;
bool mSleepReq;
- EchoReference *mEchoReference;
+ struct echo_reference_itfe *mEchoReference;
};
- class AudioStreamInALSA : public AudioStreamIn, public ReSampler::BufferProvider, public RefBase
+ class AudioStreamInALSA : public AudioStreamIn, public RefBase
{
public:
@@ -309,9 +309,11 @@ private:
static size_t getBufferSize(uint32_t sampleRate, int channelCount);
- // BufferProvider
- virtual status_t getNextBuffer(ReSampler::BufferProvider::Buffer* buffer);
- virtual void releaseBuffer(ReSampler::BufferProvider::Buffer* buffer);
+ // resampler_buffer_provider
+ static int getNextBufferStatic(struct resampler_buffer_provider *provider,
+ struct resampler_buffer* buffer);
+ static void releaseBufferStatic(struct resampler_buffer_provider *provider,
+ struct resampler_buffer* buffer);
int prepareLock();
void lock();
@@ -319,15 +321,24 @@ private:
private:
+ struct ResamplerBufferProvider {
+ struct resampler_buffer_provider mProvider;
+ AudioStreamInALSA *mInputStream;
+ };
+
ssize_t readFrames(void* buffer, ssize_t frames);
ssize_t processFrames(void* buffer, ssize_t frames);
int32_t updateEchoReference(size_t frames);
void pushEchoReference(size_t frames);
void updateEchoDelay(size_t frames, struct timespec *echoRefRenderTime);
- void getCaptureDelay(size_t frames, EchoReference::Buffer *buffer);
+ void getCaptureDelay(size_t frames, struct echo_reference_buffer *buffer);
status_t setPreProcessorEchoDelay(effect_handle_t handle, int32_t delayUs);
status_t setPreprocessorParam(effect_handle_t handle, effect_param_t *param);
+ // BufferProvider
+ status_t getNextBuffer(struct resampler_buffer* buffer);
+ void releaseBuffer(struct resampler_buffer* buffer);
+
Mutex mLock;
AudioHardware* mHardware;
struct pcm *mPcm;
@@ -340,7 +351,8 @@ private:
uint32_t mChannelCount;
uint32_t mSampleRate;
size_t mBufferSize;
- ReSampler *mDownSampler;
+ struct resampler_itfe *mDownSampler;
+ struct ResamplerBufferProvider mBufferProvider;
status_t mReadStatus;
size_t mInputFramesIn;
int16_t *mInputBuf;
@@ -355,7 +367,7 @@ private:
int16_t *mRefBuf;
size_t mRefBufSize;
size_t mRefFramesIn;
- EchoReference *mEchoReference;
+ struct echo_reference_itfe *mEchoReference;
bool mNeedEchoReference;
};