AAudioMixer.h revision 71f35bb687476694882a617ba4a810a0bb56fe23
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