Home | History | Annotate | Download | only in audio_loopback
      1 /*
      2  * Copyright (C) 2015 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of 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,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #include <SLES/OpenSLES.h>
     18 #include <SLES/OpenSLES_Android.h>
     19 #include <pthread.h>
     20 #include <android/log.h>
     21 
     22 #ifndef _Included_org_drrickorang_loopback_sles
     23 #define _Included_org_drrickorang_loopback_sles
     24 
     25 //struct audio_utils_fifo;
     26 #define SLES_PRINTF(...)  __android_log_print(ANDROID_LOG_INFO, "sles_jni", __VA_ARGS__);
     27 
     28 
     29 #ifdef __cplusplus
     30 extern "C" {
     31 #endif
     32 #include <audio_utils/fifo.h>
     33 
     34 typedef struct {
     35     SLuint32 rxBufCount;     // -r#
     36     SLuint32 txBufCount;     // -t#
     37     SLuint32 bufSizeInFrames;  // -f#
     38     SLuint32 channels;       // -c#
     39     SLuint32 sampleRate; // -s#
     40     SLuint32 exitAfterSeconds; // -e#
     41     SLuint32 freeBufCount;   // calculated
     42     SLuint32 bufSizeInBytes; // calculated
     43     int injectImpulse; // -i#i
     44     SLuint32 numFramesToIgnore;
     45 
     46     // Storage area for the buffer queues
     47     char **rxBuffers;
     48     char **txBuffers;
     49     char **freeBuffers;
     50 
     51     // Buffer indices
     52     SLuint32 rxFront;    // oldest recording
     53     SLuint32 rxRear;     // next to be recorded
     54     SLuint32 txFront;    // oldest playing
     55     SLuint32 txRear;     // next to be played
     56     SLuint32 freeFront;  // oldest free
     57     SLuint32 freeRear;   // next to be freed
     58 
     59     struct audio_utils_fifo fifo; //(*)
     60     struct audio_utils_fifo fifo2;
     61     short *fifo2Buffer;
     62     short *fifoBuffer;
     63     SLAndroidSimpleBufferQueueItf recorderBufferQueue;
     64     SLBufferQueueItf playerBufferQueue;
     65 
     66     pthread_mutex_t mutex;// = PTHREAD_MUTEX_INITIALIZER;
     67 
     68     //other things that belong here
     69     SLObjectItf playerObject;
     70     SLObjectItf recorderObject;
     71     SLObjectItf outputmixObject;
     72     SLObjectItf engineObject;
     73 } sles_data;
     74 
     75 enum {
     76     SLES_SUCCESS = 0,
     77     SLES_FAIL = 1,
     78 } SLES_STATUS_ENUM;
     79 
     80 int slesInit(sles_data ** ppSles, int samplingRate, int frameCount,
     81              int micSource, int numFramesToIgnore);
     82 
     83 //note the double pointer to properly free the memory of the structure
     84 int slesDestroy(sles_data ** ppSles);
     85 
     86 ///full
     87 int slesFull(sles_data *pSles);
     88 
     89 int slesCreateServer(sles_data *pSles, int samplingRate, int frameCount, int micSource, int numFramesToIgnore);
     90 int slesProcessNext(sles_data *pSles, double *pSamples, long maxSamples);
     91 int slesDestroyServer(sles_data *pSles);
     92 
     93 #ifdef __cplusplus
     94 }
     95 #endif
     96 #endif //_Included_org_drrickorang_loopback_sles
     97