1c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk/* 2c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * Copyright (C) 2017 The Android Open Source Project 3c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * 4c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * Licensed under the Apache License, Version 2.0 (the "License"); 5c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * you may not use this file except in compliance with the License. 6c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * You may obtain a copy of the License at 7c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * 8c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * http://www.apache.org/licenses/LICENSE-2.0 9c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * 10c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * Unless required by applicable law or agreed to in writing, software 11c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * distributed under the License is distributed on an "AS IS" BASIS, 12c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * See the License for the specific language governing permissions and 14c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * limitations under the License. 15c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk */ 16c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 17c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#ifndef AAUDIO_AAUDIO_MIXER_H 18c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#define AAUDIO_AAUDIO_MIXER_H 19c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 20c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#include <stdint.h> 21c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 22c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#include <aaudio/AAudio.h> 23c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#include <fifo/FifoBuffer.h> 24c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 25c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burkclass AAudioMixer { 26c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burkpublic: 27c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk AAudioMixer() {} 28c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ~AAudioMixer(); 29c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 30c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk void allocate(int32_t samplesPerFrame, int32_t framesPerBurst); 31c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 32c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk void clear(); 33c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 3471f35bb687476694882a617ba4a810a0bb56fe23Phil Burk /** 3571f35bb687476694882a617ba4a810a0bb56fe23Phil Burk * Mix from this FIFO 3671f35bb687476694882a617ba4a810a0bb56fe23Phil Burk * @param fifo 3771f35bb687476694882a617ba4a810a0bb56fe23Phil Burk * @param volume 3871f35bb687476694882a617ba4a810a0bb56fe23Phil Burk * @return true if underflowed 3971f35bb687476694882a617ba4a810a0bb56fe23Phil Burk */ 4071f35bb687476694882a617ba4a810a0bb56fe23Phil Burk bool mix(android::FifoBuffer *fifo, float volume); 41c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 42c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk void mixPart(float *destination, float *source, int32_t numFrames, float volume); 43c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 44c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk float *getOutputBuffer(); 45c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 46c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burkprivate: 47c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk float *mOutputBuffer = nullptr; 48c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk int32_t mSamplesPerFrame = 0; 49c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk int32_t mFramesPerBurst = 0; 50c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk int32_t mBufferSizeInBytes = 0; 51c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk}; 52c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 53c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 54c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#endif //AAUDIO_AAUDIO_MIXER_H 55