/*
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef VE_BACKGROUND_AUDIO_PROC_H
#define VE_BACKGROUND_AUDIO_PROC_H
#include "M4OSA_Error.h"
#include "M4OSA_Types.h"
#include "M4OSA_Memory.h"
#include "M4OSA_Export.h"
#include "M4OSA_CoreID.h"
namespace android {
typedef struct {
M4OSA_UInt16* m_dataAddress; // Android SRC needs a Int16 pointer
M4OSA_UInt32 m_bufferSize;
} M4AM_Buffer16; // Structure contains Int16_t pointer
enum AudioFormat {
MONO_16_BIT,
STEREO_16_BIT
};
// Following struct will be used by app to supply the PT and BT properties
// along with ducking values
typedef struct {
M4OSA_Int32 lvInSampleRate; // Sampling audio freq (8000,16000 or more )
M4OSA_Int32 lvOutSampleRate; //Sampling audio freq (8000,16000 or more )
AudioFormat lvBTFormat;
M4OSA_Int32 lvInDucking_threshold;
M4OSA_Float lvInDucking_lowVolume;
M4OSA_Bool lvInDucking_enable;
M4OSA_Float lvPTVolLevel;
M4OSA_Float lvBTVolLevel;
M4OSA_Int32 lvBTChannelCount;
M4OSA_Int32 lvPTChannelCount;
} AudioMixSettings;
// This class is defined to get SF SRC access
class VideoEditorBGAudioProcessing {
public:
VideoEditorBGAudioProcessing();
~VideoEditorBGAudioProcessing() {}
void setMixParams(const AudioMixSettings& params);
M4OSA_Int32 mixAndDuck(
void* primaryTrackBuffer,
void* backgroundTrackBuffer,
void* mixedOutputBuffer);
private:
enum {
kProcessingWindowSize = 10,
};
M4OSA_Int32 mInSampleRate;
M4OSA_Int32 mOutSampleRate;
AudioFormat mBTFormat;
M4OSA_Bool mIsSSRCneeded;
M4OSA_Int32 mBTChannelCount;
M4OSA_Int32 mPTChannelCount;
M4OSA_UInt8 mChannelConversion;
M4OSA_UInt32 mDucking_threshold;
M4OSA_Float mDucking_lowVolume;
M4OSA_Float mDuckingFactor ;
M4OSA_Bool mDucking_enable;
M4OSA_Int32 mAudioVolumeArray[kProcessingWindowSize];
M4OSA_Int32 mAudVolArrIndex;
M4OSA_Bool mDoDucking;
M4OSA_Float mPTVolLevel;
M4OSA_Float mBTVolLevel;
M4AM_Buffer16 mBTBuffer;
M4OSA_Int32 getDecibelSound(M4OSA_UInt32 value);
M4OSA_Bool isThresholdBreached(M4OSA_Int32* averageValue,
M4OSA_Int32 storeCount, M4OSA_Int32 thresholdValue);
// This returns the size of buffer which needs to allocated
// before resampling is called
M4OSA_Int32 calculateOutResampleBufSize();
// Don't call me.
VideoEditorBGAudioProcessing(const VideoEditorBGAudioProcessing&);
VideoEditorBGAudioProcessing& operator=(
const VideoEditorBGAudioProcessing&);
};
} // namespace android
#endif // VE_BACKGROUND_AUDIO_PROC_H