Home | History | Annotate | Download | only in audio
      1 /*
      2  * Copyright (C) 2012 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
      5  * use this file except in compliance with the License. You may obtain a copy of
      6  * the License at
      7  *
      8  * http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     13  * License for the specific language governing permissions and limitations under
     14  * the License.
     15  */
     16 
     17 #ifndef CTSAUDIO_AUDIOHARDWARE_H
     18 #define CTSAUDIO_AUDIOHARDWARE_H
     19 
     20 #include <utils/StrongPointer.h>
     21 #include <utils/RefBase.h>
     22 #include "Buffer.h"
     23 
     24 class TaskCase;
     25 /**
     26  * Utility class for H/W detection
     27  */
     28 class AudioHardware : virtual public android::RefBase {
     29 public:
     30     /** audio length should be multiple of this */
     31     static const int SAMPLES_PER_ONE_GO = 4096;
     32 
     33     enum SamplingRate {
     34         ESamplingRateInvald = 0,
     35         ESampleRate_16000 = 16000,
     36         ESampleRate_44100 = 44100
     37     };
     38     enum BytesPerSample {
     39         E2BPS = 2
     40     };
     41     enum AudioMode {
     42         EModeVoice = 0,
     43         EModeMusic = 1
     44     };
     45 
     46     /**
     47      * detect supported audio H/W
     48      * @return card number of detected H/W. -1 if not found.
     49      */
     50     static int detectAudioHw();
     51 
     52     /**
     53      * Factory method
     54      * options are : local or remote, playback or recording
     55      * can return NULL(sp.get() == NULL) if H/W not found
     56      */
     57     static android::sp<AudioHardware> createAudioHw(bool local, bool playback,
     58             TaskCase* testCase = NULL);
     59 
     60     virtual ~AudioHardware();
     61     /**
     62      * prepare playback or recording
     63      */
     64     virtual bool prepare(SamplingRate samplingRate, int volume, int mode = EModeVoice) = 0;
     65 
     66     /**
     67      * Convenience API to pass buffer ID. The buffer can be either present in testCase
     68      * or in remote device (when testCase is NULL)
     69      */
     70     virtual bool startPlaybackOrRecordById(const android::String8& id, TaskCase* testCase = NULL);
     71 
     72     /**
     73      *  Playback / Record with given buffer
     74      *  @param buffer buffer to play / record
     75      *  @param numberRepetition How many times to repeat playback / record for given buffer.
     76      *         For record, it does not have much meaning as the last recording will always
     77      *         override.
     78      */
     79     virtual bool startPlaybackOrRecord(android::sp<Buffer>& buffer,
     80             int numberRepetition = 1) = 0;
     81     /**
     82      * Wait for the playback / recording to complete. return true when successfully finished.
     83      * Calling waitForCompletion after calling stopPlaybackOrRecord will lead into blocking
     84      * the calling thread for some time.
     85      */
     86     virtual bool waitForCompletion() = 0;
     87     /// stops the on-going action. The active task can be canceled.
     88     virtual void stopPlaybackOrRecord() = 0;
     89 
     90 protected:
     91     static int mHwId;
     92 };
     93 
     94 
     95 #endif // CTSAUDIO_AUDIOHARDWARE_H
     96