| /* |
| ** |
| ** Copyright 2012, 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_AUDIO_STREAM_IN_H |
| #define ANDROID_AUDIO_STREAM_IN_H |
| |
| #include <audio_utils/resampler.h> |
| #include <hardware/audio.h> |
| #include <tinyalsa/asoundlib.h> |
| #include <utils/Errors.h> |
| #include <utils/threads.h> |
| |
| #include "AudioHotplugThread.h" |
| |
| namespace android { |
| |
| class AudioHardwareInput; |
| |
| class AudioStreamIn { |
| public: |
| AudioStreamIn(AudioHardwareInput& owner); |
| ~AudioStreamIn(); |
| |
| uint32_t getSampleRate(); |
| status_t setSampleRate(uint32_t rate); |
| size_t getBufferSize(); |
| uint32_t getChannelMask(); |
| audio_format_t getFormat(); |
| status_t setFormat(audio_format_t format); |
| status_t standby(); |
| status_t dump(int fd); |
| status_t setParameters(struct audio_stream* stream, |
| const char* kvpairs); |
| char* getParameters(const char* keys); |
| status_t setGain(float gain); |
| ssize_t read(void* buffer, size_t bytes); |
| uint32_t getInputFramesLost(); |
| status_t addAudioEffect(effect_handle_t effect); |
| status_t removeAudioEffect(effect_handle_t effect); |
| |
| status_t set(audio_format_t *pFormat, |
| uint32_t *pChannelMask, |
| uint32_t *pRate); |
| |
| const AudioHotplugThread::DeviceInfo* getDeviceInfo() { return mCurrentDeviceInfo; }; |
| |
| private: |
| static const uint32_t kChannelMask; |
| static const uint32_t kChannelCount; |
| static const audio_format_t kAudioFormat; |
| |
| static uint32_t getChannelCount() { |
| return audio_channel_count_from_in_mask(kChannelMask); |
| } |
| |
| static uint32_t getFrameSize() { |
| return getChannelCount() * audio_bytes_per_sample(kAudioFormat); |
| } |
| |
| void setRemoteControlMicEnabled(bool flag); |
| |
| status_t startInputStream_l(); |
| status_t standby_l(); |
| |
| ssize_t readFrames_l(void* buffer, ssize_t frames); |
| |
| // resampler buffer provider thunks |
| static int getNextBufferThunk( |
| struct resampler_buffer_provider* bufferProvider, |
| struct resampler_buffer* buffer); |
| static void releaseBufferThunk( |
| struct resampler_buffer_provider* bufferProvider, |
| struct resampler_buffer* buffer); |
| |
| // resampler buffer provider methods |
| int getNextBuffer(struct resampler_buffer* buffer); |
| void releaseBuffer(struct resampler_buffer* buffer); |
| |
| static const int kPeriodCount; |
| |
| AudioHardwareInput& mOwnerHAL; |
| const AudioHotplugThread::DeviceInfo* mCurrentDeviceInfo; |
| |
| Mutex mLock; |
| |
| uint32_t mRequestedSampleRate; |
| bool mStandby; |
| bool mDisabled; |
| |
| struct pcm* mPcm; |
| struct pcm_config mPcmConfig; |
| |
| struct resampler_itfe* mResampler; |
| struct ResamplerBufferProviderWrapper { |
| struct resampler_buffer_provider provider; |
| AudioStreamIn* thiz; |
| } mResamplerProviderWrapper; |
| |
| int16_t* mBuffer; |
| size_t mBufferSize; |
| int mInputSource; |
| int mReadStatus; |
| unsigned int mFramesIn; |
| }; |
| |
| }; // namespace android |
| |
| #endif // ANDROID_AUDIO_STREAM_IN_H |