/usr/include/sipxtapi/mp/MpPlcBase.h is in libsipxtapi-dev 3.3.0~test17-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 179 180 181 182 183 184 185 186 187 188 189 190 191 | //
// Copyright (C) 2008 SIPez LLC.
// Licensed to SIPfoundry under a Contributor Agreement.
//
// Copyright (C) 2008 SIPfoundry Inc.
// Licensed by SIPfoundry under the LGPL license.
//
// $$
///////////////////////////////////////////////////////////////////////////////
// Author: Sergey Kostanbaev <Sergey DOT Kostanbaev AT sipez DOT com>
#ifndef _MpPlcBase_h_
#define _MpPlcBase_h_
// SYSTEM INCLUDES
// APPLICATION INCLUDES
#include <utl/UtlDefs.h>
#include <os/OsStatus.h>
#include <utl/UtlString.h>
#include "mp/MpTypes.h"
// DEFINES
// MACROS
// EXTERNAL FUNCTIONS
// EXTERNAL VARIABLES
// CONSTANTS
// STRUCTS
// TYPEDEFS
// FORWARD DECLARATIONS
/**
* Base class for all PLC algorithms.
*
* To create concrete class you could directly instantiate it or use
* MpPlcBase::createPlc() static method for greater flexibility.
*
* @nosubgrouping
*/
class MpPlcBase
{
/* //////////////////////////// PUBLIC //////////////////////////////////// */
public:
/* ============================ CREATORS ================================== */
///@name Creators
//@{
/// Factory method for PLC algorithms creation.
static MpPlcBase *createPlc(const UtlString &name = "");
/**<
* @param[in] name - name of PLC algorithm to use. Use empty string
* to get default algorithm.
*
* @returns Method never returns NULL. If appropriate PLC algorithm is
* not found, default one is returned.
*/
/// Initialize PLC with given sample rate and frame size.
virtual OsStatus init(int samplesPerSec) = 0;
/**<
* Should be called before any other class methods.
*/
/// Virtual base destructor.
virtual ~MpPlcBase() {};
/// Reset
virtual void reset() = 0;
/// Full reset followed by init call
virtual void fullReset() = 0;
//@}
/* ============================ MANIPULATORS ============================== */
///@name Manipulators
//@{
/// Update PLC history with late/future frame.
virtual OsStatus insertToHistory(int frameNum,
const MpSpeechParams &speechParams,
MpAudioSample* pBuf,
unsigned inSamplesNum) = 0;
/**<
* @param[in] frameNum - position of passed data relative to current moment.
* E.g. \p frameNum<0 means late frame, \p frameNum>0 means
* future frame and \p frameNum==0 means current frame. Passing
* late and future frames may improve PLC quality if algorithm
* supports this. Passing late and future frames they should
* be in bounds set by of getMaxFutureFramesNum() and
* getMaxDelayedFramesNum().
* @param[in] speechParams - various parameters of speech.
* @param[in,out] pBuf - buffer with input data.
* @param[in] inSamplesNum - number of samples of actual data, passed to
* this function.
*/
/// Process next frame - do PLC and/or adjustment if needed.
virtual OsStatus processFrame(MpSpeechParams &speechParams,
MpAudioSample* pBuf,
unsigned bufferSize,
unsigned inSamplesNum,
unsigned outSamplesNum,
int wantedAdjustment,
int &madeAdjustment) = 0;
/**<
* @param[in] speechParams - various parameters of speech.
* @param[in,out] pBuf - buffer with input data and place for output data.
* Data is read from this buffer if \p numSamples>0. If any
* processing is needed, i.e. PLC or adjustment is requested,
* output data will also be written to this buffer.
* @param[in] bufferSize - size of \p pBuf buffer. This value is always
* greater or equal to \p numSamples. When algorithm needs to
* write data to buffer it must take this value into account.
* @param[in] inSamplesNum - number of samples of actual data, passed to
* this function. If we've got no data and PLC is needed,
* this parameter should be equal to 0. If \p inSamplesNum is
* not 0, it is equal to \p outSamplesNum.
* @param[in] outSamplesNum - output frame size. Together with
* \p wantedAdjustment this value sets bounds in which we want
* to fit output data length. See \p wantedAdjustment for more
* details. If \p inSamplesNum is not 0, \p outSamplesNum is
* equal to it.
* @param[in] wantedAdjustment - number of samples by which we want to
* adjust audio stream. Output number of samples must be in range
* [\p outSamplesNum; \p outSamplesNum + \p wantedAdjustment].
* Output lengths closer to \p outSamplesNum + \p wantedAdjustment
* are desired, but not required. Note, that output lengths
* not in this range are not allowed and may confuse upper levels.
* Positive values request stream extension (samples should be
* added), negative values request stream reduction (samples
* should be took off).
* @param[out] madeAdjustment - length of made adjustment. Shows how many
* samples were added to stream (if positive) or removed from
* stream (if negative).
*/
/// Set algorithm to be used by default.
static void setDefaultAlgorithm(const UtlString& name);
/**<
* Initially default algorithm is defined at compile time. Using this
* function you can change default algorithm at run-time or switch back to
* compile-time default.
*
* @param[in] name - name of algorithm to use by default. Reverts to
* compile-time default if empty.
*/
//@}
/* ============================ ACCESSORS ================================= */
///@name Accessors
//@{
/// Return maximum offset for delayed frame with respect to current
virtual int getMaxDelayedFramesNum() const = 0;
/**<
* If zero is returned, late packets are not allowed.
*/
/// Return maximum offset for future frame with respect to current
virtual int getMaxFutureFramesNum() const = 0;
/**<
* If zero is returned, future packets are not allowed.
*/
/// Return algorithmic delay in samples, should be called after init
virtual int getAlgorithmicDelay() const = 0;
//@}
/* ============================ INQUIRY =================================== */
///@name Inquiry
//@{
//@}
/* //////////////////////////// PROTECTED ///////////////////////////////// */
protected:
static UtlString smDefaultAlgorithm; ///< Name of algorithm to be used by default.
/* //////////////////////////// PRIVATE /////////////////////////////////// */
private:
};
/* ============================ INLINE METHODS ============================ */
#endif //_MpPlcBase_h_
|