19969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang/*
29969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * Copyright (C) 2011 The Android Open Source Project
39969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang *
49969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * Licensed under the Apache License, Version 2.0 (the "License");
59969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * you may not use this file except in compliance with the License.
69969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * You may obtain a copy of the License at
79969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang *
89969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang *      http://www.apache.org/licenses/LICENSE-2.0
99969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang *
109969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * Unless required by applicable law or agreed to in writing, software
119969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * distributed under the License is distributed on an "AS IS" BASIS,
129969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * See the License for the specific language governing permissions and
149969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * limitations under the License.
159969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang */
169969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
173bd45591402b94ed4481ea0ee0a9140840979c84James Dong#ifndef VE_BACKGROUND_AUDIO_PROC_H
183bd45591402b94ed4481ea0ee0a9140840979c84James Dong#define VE_BACKGROUND_AUDIO_PROC_H
193bd45591402b94ed4481ea0ee0a9140840979c84James Dong
209969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include "M4OSA_Error.h"
219969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include "M4OSA_Types.h"
229969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include "M4OSA_Memory.h"
239969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include "M4OSA_Export.h"
249969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include "M4OSA_CoreID.h"
259969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
269969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
273bd45591402b94ed4481ea0ee0a9140840979c84James Dongnamespace android {
289969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
299969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changtypedef struct {
309969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_UInt16*   m_dataAddress; // Android SRC needs a Int16 pointer
319969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_UInt32    m_bufferSize;
329969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang} M4AM_Buffer16;    // Structure contains Int16_t pointer
339969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
343bd45591402b94ed4481ea0ee0a9140840979c84James Dongenum AudioFormat {
353bd45591402b94ed4481ea0ee0a9140840979c84James Dong    MONO_16_BIT,
363bd45591402b94ed4481ea0ee0a9140840979c84James Dong    STEREO_16_BIT
373bd45591402b94ed4481ea0ee0a9140840979c84James Dong};
383bd45591402b94ed4481ea0ee0a9140840979c84James Dong
399969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang// Following struct will be used by app to supply the PT and BT properties
409969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang// along with ducking values
419969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changtypedef struct {
429969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Int32 lvInSampleRate; // Sampling audio freq (8000,16000 or more )
439969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Int32 lvOutSampleRate; //Sampling audio freq (8000,16000 or more )
443bd45591402b94ed4481ea0ee0a9140840979c84James Dong    AudioFormat lvBTFormat;
459969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
469969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Int32 lvInDucking_threshold;
479969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Float lvInDucking_lowVolume;
489969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Bool lvInDucking_enable;
499969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Float lvPTVolLevel;
509969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Float lvBTVolLevel;
519969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Int32 lvBTChannelCount;
529969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Int32 lvPTChannelCount;
533bd45591402b94ed4481ea0ee0a9140840979c84James Dong} AudioMixSettings;
549969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
559969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang// This class is defined to get SF SRC access
569969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changclass VideoEditorBGAudioProcessing {
579969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changpublic:
589969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    VideoEditorBGAudioProcessing();
593bd45591402b94ed4481ea0ee0a9140840979c84James Dong    ~VideoEditorBGAudioProcessing() {}
609969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
613bd45591402b94ed4481ea0ee0a9140840979c84James Dong    void setMixParams(const AudioMixSettings& params);
623bd45591402b94ed4481ea0ee0a9140840979c84James Dong
633bd45591402b94ed4481ea0ee0a9140840979c84James Dong    M4OSA_Int32 mixAndDuck(
649969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang                    void* primaryTrackBuffer,
659969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang                    void* backgroundTrackBuffer,
669969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang                    void* mixedOutputBuffer);
679969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
689969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changprivate:
693bd45591402b94ed4481ea0ee0a9140840979c84James Dong    enum {
703bd45591402b94ed4481ea0ee0a9140840979c84James Dong        kProcessingWindowSize = 10,
713bd45591402b94ed4481ea0ee0a9140840979c84James Dong    };
723bd45591402b94ed4481ea0ee0a9140840979c84James Dong
739969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Int32 mInSampleRate;
749969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Int32 mOutSampleRate;
753bd45591402b94ed4481ea0ee0a9140840979c84James Dong    AudioFormat mBTFormat;
769969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
779969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Bool mIsSSRCneeded;
789969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Int32 mBTChannelCount;
799969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Int32 mPTChannelCount;
809969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_UInt8 mChannelConversion;
819969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
829969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_UInt32 mDucking_threshold;
839969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Float mDucking_lowVolume;
849969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Float mDuckingFactor ;
859969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Bool mDucking_enable;
863bd45591402b94ed4481ea0ee0a9140840979c84James Dong    M4OSA_Int32 mAudioVolumeArray[kProcessingWindowSize];
879969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Int32 mAudVolArrIndex;
889969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Bool mDoDucking;
899969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Float mPTVolLevel;
909969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Float mBTVolLevel;
919969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
929969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4AM_Buffer16 mBTBuffer;
939969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
949969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Int32 getDecibelSound(M4OSA_UInt32 value);
959969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Bool  isThresholdBreached(M4OSA_Int32* averageValue,
969969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang                    M4OSA_Int32 storeCount, M4OSA_Int32 thresholdValue);
979969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
989969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    // This returns the size of buffer which needs to allocated
999969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    // before resampling is called
1009969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Int32 calculateOutResampleBufSize();
101ed6269fd78eb57dce865279f4b777a9dd096cdccJames Dong
102ed6269fd78eb57dce865279f4b777a9dd096cdccJames Dong    // Don't call me.
103ed6269fd78eb57dce865279f4b777a9dd096cdccJames Dong    VideoEditorBGAudioProcessing(const VideoEditorBGAudioProcessing&);
104ed6269fd78eb57dce865279f4b777a9dd096cdccJames Dong    VideoEditorBGAudioProcessing& operator=(
105ed6269fd78eb57dce865279f4b777a9dd096cdccJames Dong            const VideoEditorBGAudioProcessing&);
1069969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang};
1073bd45591402b94ed4481ea0ee0a9140840979c84James Dong
1083bd45591402b94ed4481ea0ee0a9140840979c84James Dong}  // namespace android
1093bd45591402b94ed4481ea0ee0a9140840979c84James Dong
1103bd45591402b94ed4481ea0ee0a9140840979c84James Dong#endif // VE_BACKGROUND_AUDIO_PROC_H
111