| /* |
| * Copyright (C) 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 CTSAUDIO_AUDIOHARDWARE_H |
| #define CTSAUDIO_AUDIOHARDWARE_H |
| |
| #include <utils/StrongPointer.h> |
| #include <utils/RefBase.h> |
| #include "Buffer.h" |
| |
| class TaskCase; |
| /** |
| * Utility class for H/W detection |
| */ |
| class AudioHardware : virtual public android::RefBase { |
| public: |
| /** audio length should be multiple of this */ |
| static const int SAMPLES_PER_ONE_GO = 4096; |
| |
| enum SamplingRate { |
| ESamplingRateInvald = 0, |
| ESampleRate_16000 = 16000, |
| ESampleRate_44100 = 44100 |
| }; |
| enum BytesPerSample { |
| E2BPS = 2 |
| }; |
| enum AudioMode { |
| EModeVoice = 0, |
| EModeMusic = 1 |
| }; |
| |
| /** |
| * detect supported audio H/W |
| * @return card number of detected H/W. -1 if not found. |
| */ |
| static int detectAudioHw(); |
| |
| /** |
| * Factory method |
| * options are : local or remote, playback or recording |
| * can return NULL(sp.get() == NULL) if H/W not found |
| */ |
| static android::sp<AudioHardware> createAudioHw(bool local, bool playback, |
| TaskCase* testCase = NULL); |
| |
| virtual ~AudioHardware(); |
| /** |
| * prepare playback or recording |
| */ |
| virtual bool prepare(SamplingRate samplingRate, int volume, int mode = EModeVoice) = 0; |
| |
| /** |
| * Convenience API to pass buffer ID. The buffer can be either present in testCase |
| * or in remote device (when testCase is NULL) |
| */ |
| virtual bool startPlaybackOrRecordById(const android::String8& id, TaskCase* testCase = NULL); |
| |
| /** |
| * Playback / Record with given buffer |
| * @param buffer buffer to play / record |
| * @param numberRepetition How many times to repeat playback / record for given buffer. |
| * For record, it does not have much meaning as the last recording will always |
| * override. |
| */ |
| virtual bool startPlaybackOrRecord(android::sp<Buffer>& buffer, |
| int numberRepetition = 1) = 0; |
| /** |
| * Wait for the playback / recording to complete. return true when successfully finished. |
| * Calling waitForCompletion after calling stopPlaybackOrRecord will lead into blocking |
| * the calling thread for some time. |
| */ |
| virtual bool waitForCompletion() = 0; |
| /// stops the on-going action. The active task can be canceled. |
| virtual void stopPlaybackOrRecord() = 0; |
| |
| protected: |
| static int mHwId; |
| }; |
| |
| |
| #endif // CTSAUDIO_AUDIOHARDWARE_H |