summaryrefslogtreecommitdiffstats
path: root/libaudio/ReSampler.h
diff options
context:
space:
mode:
Diffstat (limited to 'libaudio/ReSampler.h')
-rw-r--r--libaudio/ReSampler.h80
1 files changed, 80 insertions, 0 deletions
diff --git a/libaudio/ReSampler.h b/libaudio/ReSampler.h
new file mode 100644
index 0000000..f531900
--- /dev/null
+++ b/libaudio/ReSampler.h
@@ -0,0 +1,80 @@
+/*
+** Copyright 2008, The Android Open-Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+#ifndef ANDROID_RESAMPLER_H
+#define ANDROID_RESAMPLER_H
+
+#include <stdint.h>
+#include <sys/types.h>
+#include <hardware_legacy/AudioSystemLegacy.h>
+#include "speex/speex_resampler.h"
+
+namespace android_audio_legacy {
+
+class ReSampler {
+public:
+
+ class BufferProvider
+ {
+ public:
+
+ struct Buffer {
+ union {
+ void* raw;
+ short* i16;
+ int8_t* i8;
+ };
+ size_t frameCount;
+ };
+
+ virtual ~BufferProvider() {}
+
+ virtual status_t getNextBuffer(Buffer* buffer) = 0;
+ virtual void releaseBuffer(Buffer* buffer) = 0;
+ };
+
+ ReSampler(uint32_t inSampleRate,
+ uint32_t outSampleRate,
+ uint32_t channelCount,
+ BufferProvider* provider);
+
+ virtual ~ReSampler();
+
+ status_t initCheck() { return mStatus; }
+ void reset();
+ int resample(int16_t* out, size_t *outFrameCount);
+ int32_t delayNs();
+
+
+private:
+ status_t mStatus; // init status
+ SpeexResamplerState *mSpeexResampler; // handle on speex resampler
+ BufferProvider* mProvider; // buffer provider installed by client
+ uint32_t mInSampleRate; // input sampling rate
+ uint32_t mOutSampleRate; // output sampling rate
+ uint32_t mChannelCount; // number of channels
+ int16_t *mInBuf; // input buffer
+ size_t mInBufSize; // input buffer size
+ size_t mFramesIn; // number of frames in input buffer
+ size_t mFramesRq; // cached number of output frames
+ size_t mFramesNeeded; // minimum number of input frames to produce mFramesRq
+ // output frames
+ int32_t mSpeexDelayNs; // delay introduced by speex resampler in ns
+};
+
+}; // namespace android_audio_legacy
+
+#endif // ANDROID_RESAMPLER_H