Home | History | Annotate | Download | only in lvpp
      1 /*
      2  * Copyright (C) 2011 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 #ifndef VE_BACKGROUND_AUDIO_PROC_H
     18 #define VE_BACKGROUND_AUDIO_PROC_H
     19 
     20 #include "M4OSA_Error.h"
     21 #include "M4OSA_Types.h"
     22 #include "M4OSA_Memory.h"
     23 #include "M4OSA_Export.h"
     24 #include "M4OSA_CoreID.h"
     25 
     26 
     27 namespace android {
     28 
     29 typedef struct {
     30     M4OSA_UInt16*   m_dataAddress; // Android SRC needs a Int16 pointer
     31     M4OSA_UInt32    m_bufferSize;
     32 } M4AM_Buffer16;    // Structure contains Int16_t pointer
     33 
     34 enum AudioFormat {
     35     MONO_16_BIT,
     36     STEREO_16_BIT
     37 };
     38 
     39 // Following struct will be used by app to supply the PT and BT properties
     40 // along with ducking values
     41 typedef struct {
     42     M4OSA_Int32 lvInSampleRate; // Sampling audio freq (8000,16000 or more )
     43     M4OSA_Int32 lvOutSampleRate; //Sampling audio freq (8000,16000 or more )
     44     AudioFormat lvBTFormat;
     45 
     46     M4OSA_Int32 lvInDucking_threshold;
     47     M4OSA_Float lvInDucking_lowVolume;
     48     M4OSA_Bool lvInDucking_enable;
     49     M4OSA_Float lvPTVolLevel;
     50     M4OSA_Float lvBTVolLevel;
     51     M4OSA_Int32 lvBTChannelCount;
     52     M4OSA_Int32 lvPTChannelCount;
     53 } AudioMixSettings;
     54 
     55 // This class is defined to get SF SRC access
     56 class VideoEditorBGAudioProcessing {
     57 public:
     58     VideoEditorBGAudioProcessing();
     59     ~VideoEditorBGAudioProcessing() {}
     60 
     61     void setMixParams(const AudioMixSettings& params);
     62 
     63     M4OSA_Int32 mixAndDuck(
     64                     void* primaryTrackBuffer,
     65                     void* backgroundTrackBuffer,
     66                     void* mixedOutputBuffer);
     67 
     68 private:
     69     enum {
     70         kProcessingWindowSize = 10,
     71     };
     72 
     73     M4OSA_Int32 mInSampleRate;
     74     M4OSA_Int32 mOutSampleRate;
     75     AudioFormat mBTFormat;
     76 
     77     M4OSA_Bool mIsSSRCneeded;
     78     M4OSA_Int32 mBTChannelCount;
     79     M4OSA_Int32 mPTChannelCount;
     80     M4OSA_UInt8 mChannelConversion;
     81 
     82     M4OSA_UInt32 mDucking_threshold;
     83     M4OSA_Float mDucking_lowVolume;
     84     M4OSA_Float mDuckingFactor ;
     85     M4OSA_Bool mDucking_enable;
     86     M4OSA_Int32 mAudioVolumeArray[kProcessingWindowSize];
     87     M4OSA_Int32 mAudVolArrIndex;
     88     M4OSA_Bool mDoDucking;
     89     M4OSA_Float mPTVolLevel;
     90     M4OSA_Float mBTVolLevel;
     91 
     92     M4AM_Buffer16 mBTBuffer;
     93 
     94     M4OSA_Int32 getDecibelSound(M4OSA_UInt32 value);
     95     M4OSA_Bool  isThresholdBreached(M4OSA_Int32* averageValue,
     96                     M4OSA_Int32 storeCount, M4OSA_Int32 thresholdValue);
     97 
     98     // This returns the size of buffer which needs to allocated
     99     // before resampling is called
    100     M4OSA_Int32 calculateOutResampleBufSize();
    101 
    102     // Don't call me.
    103     VideoEditorBGAudioProcessing(const VideoEditorBGAudioProcessing&);
    104     VideoEditorBGAudioProcessing& operator=(
    105             const VideoEditorBGAudioProcessing&);
    106 };
    107 
    108 }  // namespace android
    109 
    110 #endif // VE_BACKGROUND_AUDIO_PROC_H
    111