/usr/include/sipxtapi/mp/MpBridgeAlgBase.h is in libsipxtapi-dev 3.3.0~test17-2.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 | //
// Copyright (C) 2008 SIPfoundry Inc.
// Licensed by SIPfoundry under the LGPL license.
//
// Copyright (C) 2008 SIPez LLC.
// Licensed to SIPfoundry under a Contributor Agreement.
//
// $$
//////////////////////////////////////////////////////////////////////////////
// Author: Alexander Chemeris <Alexander DOT Chemeris AT SIPez DOT com>
#ifndef _MpBridgeAlgBase_h_
#define _MpBridgeAlgBase_h_
// SYSTEM INCLUDES
// APPLICATION INCLUDES
#include "mp/MpTypes.h"
#include "mp/MpAudioBuf.h"
#include "mp/MpDspUtils.h"
// DEFINES
// MACROS
// Use Q5.10 (signed) values when fixed point is enabled.
#define MP_BRIDGE_INT_LENGTH INT16_C(5)
#define MP_BRIDGE_FRAC_LENGTH INT16_C(10)
#define MPF_BRIDGE_FLOAT(num) ((MpBridgeGain)MPF_FLOAT((num), MP_BRIDGE_INT_LENGTH, MP_BRIDGE_FRAC_LENGTH))
#define MPF_BRIDGE_MAX ((MpBridgeGain)MPF_MAX(MP_BRIDGE_INT_LENGTH, MP_BRIDGE_FRAC_LENGTH))
#define MPF_BRIDGE_STEP ((MpBridgeGain)MPF_STEP(MP_BRIDGE_INT_LENGTH, MP_BRIDGE_FRAC_LENGTH))
#define MP_BRIDGE_GAIN_UNDEFINED INT16_MAX
#define MP_BRIDGE_GAIN_MAX MPF_BRIDGE_MAX
#define MP_BRIDGE_GAIN_MIN MPF_BRIDGE_FLOAT(0.0f)
#define MP_BRIDGE_GAIN_STEP MPF_BRIDGE_STEP
#define MP_BRIDGE_GAIN_MUTED MP_BRIDGE_GAIN_MIN
#define MP_BRIDGE_GAIN_PASSTHROUGH MPF_BRIDGE_FLOAT(1.0f)
#define MAX_AMPLITUDE_ROUND (1<<(MP_AUDIO_SAMPLE_SIZE-1))
// EXTERNAL FUNCTIONS
// EXTERNAL VARIABLES
// STRUCTS
// TYPEDEFS
#ifdef MP_FIXED_POINT // [
typedef int32_t MpBridgeAccum;
#else // MP_FIXED_POINT ][
typedef float MpBridgeAccum;
#endif // MP_FIXED_POINT ]
#ifdef MP_FIXED_POINT // [
typedef int16_t MpBridgeGain;
#else // MP_FIXED_POINT ][
typedef float MpBridgeGain;
#endif // MP_FIXED_POINT ]
// FORWARD DECLARATIONS
/**
* @brief Base class for the Bridge mixing algorithms.
*/
class MpBridgeAlgBase
{
/* //////////////////////////////// PUBLIC //////////////////////////////// */
public:
/* =============================== CREATORS =============================== */
///@name Creators
//@{
/// Constructor.
MpBridgeAlgBase(int maxInputs, int maxOutputs, UtlBoolean mixSilence)
: mMaxInputs(maxInputs)
, mMaxOutputs(maxOutputs)
, mMixSilence(mixSilence)
, mpPrevAmplitudes(new MpAudioSample[mMaxInputs])
{
// Save magic value to the array to tell that it hasn't been initialized yet.
for (int i=0; i<mMaxInputs; i++)
{
mpPrevAmplitudes[i]= -1;
}
}
/// Destructor.
virtual ~MpBridgeAlgBase()
{
delete[] mpPrevAmplitudes;
};
//@}
/* ============================= MANIPULATORS ============================= */
///@name Manipulators
//@{
/// @brief Mix together inputs onto outputs according to mpGainMatrix matrix.
virtual UtlBoolean doMix(MpBufPtr inBufs[], int inBufsSize,
MpBufPtr outBufs[], int outBufsSize,
int samplesPerFrame) =0;
/// Set selected gain to the given value.
virtual void setGainMatrixValue(int column, int row, MpBridgeGain val) =0;
/// Set selected gain row to the given value.
virtual void setGainMatrixRow(int row, int numValues, const MpBridgeGain val[]) =0;
/// Set selected gain column to the given value.
virtual void setGainMatrixColumn(int column, int numValues, const MpBridgeGain val[]) =0;
/// Save buffers amplitudes to internal array.
inline void saveAmplitudes(MpBufPtr inBufs[], int inBufsSize);
//@}
/* ============================== ACCESSORS =============================== */
///@name Accessors
//@{
/// Get maximum number of inputs.
inline
int maxInputs() const;
/// Get maximum number of outputs.
inline
int maxOutputs() const;
//@}
/* =============================== INQUIRY ================================ */
///@name Inquiry
//@{
//@}
/* ////////////////////////////// PROTECTED /////////////////////////////// */
protected:
int mMaxInputs; ///< Number of possible bridge inputs.
int mMaxOutputs; ///< Number of possible bridge outputs.
UtlBoolean mMixSilence; ///< Should Bridge ignore or mix frames marked as silence?
MpAudioSample *mpPrevAmplitudes; ///< Saved amplitude of the inputs from
///< the previous frame processing interval.
/* /////////////////////////////// PRIVATE //////////////////////////////// */
private:
};
/* ============================ INLINE METHODS ============================ */
int MpBridgeAlgBase::maxInputs() const
{
return mMaxInputs;
}
int MpBridgeAlgBase::maxOutputs() const
{
return mMaxOutputs;
}
void MpBridgeAlgBase::saveAmplitudes(MpBufPtr inBufs[], int inBufsSize)
{
assert(inBufsSize <= mMaxInputs);
for (int i=0; i<inBufsSize; i++)
{
if (inBufs[i].isValid())
{
MpAudioBufPtr pAudioBuf = inBufs[i];
MpAudioSample amplitude = pAudioBuf->getAmplitude();
mpPrevAmplitudes[i] = amplitude == 0 ? 1 : amplitude;
}
}
}
#endif // _MpBridgeAlgBase_h_
|