Reland r8210 "Add a new parameter to ACMGenericCodec constructor""

This effectively reverts r8211.

The problem with r8210 was that the change in constructor signature was not done for other codec selections that then default one. That is, some code that was hidden under #ifdef did not get updated. This is now fixed.

BUG=4228
COAUTHOR=kwiberg@webrtc.org
TBR=minyue@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/37879004

Cr-Commit-Position: refs/heads/master@{#8215}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8215 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
henrik.lundin@webrtc.org 2015-01-30 12:29:25 +00:00
parent 4455f6243a
commit 3154a1cf9d
40 changed files with 170 additions and 101 deletions

View File

@ -46,8 +46,9 @@ namespace webrtc {
namespace acm2 {
#ifndef WEBRTC_CODEC_AMR
ACMAMR::ACMAMR(int16_t /* codec_id */)
: encoder_inst_ptr_(NULL),
ACMAMR::ACMAMR(int16_t /* codec_id */, bool enable_red)
: ACMGenericCodec(enable_red),
encoder_inst_ptr_(NULL),
encoding_mode_(-1), // Invalid value.
encoding_rate_(0), // Invalid value.
encoder_packing_format_(AMRBandwidthEfficient) {
@ -106,8 +107,9 @@ ACMAMRPackingFormat ACMAMR::AMRDecoderPackingFormat() const {
#define WEBRTC_AMR_MR102 6
#define WEBRTC_AMR_MR122 7
ACMAMR::ACMAMR(int16_t codec_id)
: encoder_inst_ptr_(NULL),
ACMAMR::ACMAMR(int16_t codec_id, bool enable_red)
: ACMGenericCodec(enable_red),
encoder_inst_ptr_(NULL),
encoding_mode_(-1), // invalid value
encoding_rate_(0) { // invalid value
codec_id_ = codec_id;

View File

@ -25,7 +25,7 @@ namespace acm2 {
class ACMAMR : public ACMGenericCodec {
public:
explicit ACMAMR(int16_t codec_id);
ACMAMR(int16_t codec_id, bool enable_red);
~ACMAMR();
// for FEC

View File

@ -43,11 +43,13 @@ namespace webrtc {
namespace acm2 {
#ifndef WEBRTC_CODEC_AMRWB
ACMAMRwb::ACMAMRwb(int16_t /* codec_id */)
: encoder_inst_ptr_(NULL),
ACMAMRwb::ACMAMRwb(int16_t /* codec_id */, bool enable_red)
: ACMGenericCodec(enable_red),
encoder_inst_ptr_(NULL),
encoding_mode_(-1), // invalid value
encoding_rate_(0), // invalid value
encoder_packing_format_(AMRBandwidthEfficient) {}
encoder_packing_format_(AMRBandwidthEfficient) {
}
ACMAMRwb::~ACMAMRwb() {}
@ -103,8 +105,9 @@ ACMAMRPackingFormat ACMAMRwb::AMRwbDecoderPackingFormat() const {
#define AMRWB_MODE_23k 7
#define AMRWB_MODE_24k 8
ACMAMRwb::ACMAMRwb(int16_t codec_id)
: encoder_inst_ptr_(NULL),
ACMAMRwb::ACMAMRwb(int16_t codec_id, bool enable_red)
: ACMGenericCodec(enable_red),
encoder_inst_ptr_(NULL),
encoding_mode_(-1), // invalid value
encoding_rate_(0) { // invalid value
codec_id_ = codec_id;

View File

@ -23,7 +23,7 @@ namespace acm2 {
class ACMAMRwb : public ACMGenericCodec {
public:
explicit ACMAMRwb(int16_t codec_id);
ACMAMRwb(int16_t codec_id, bool enable_red);
~ACMAMRwb();
// for FEC

View File

@ -19,7 +19,8 @@ namespace webrtc {
namespace acm2 {
ACMCNG::ACMCNG(int16_t codec_id) {
ACMCNG::ACMCNG(int16_t codec_id, bool enable_red)
: ACMGenericCodec(enable_red) {
encoder_inst_ptr_ = NULL;
codec_id_ = codec_id;
samp_freq_hz_ = ACMCodecDB::CodecFreq(codec_id_);

View File

@ -23,7 +23,7 @@ namespace acm2 {
class ACMCNG: public ACMGenericCodec {
public:
explicit ACMCNG(int16_t codec_id);
ACMCNG(int16_t codec_id, bool enable_red);
~ACMCNG();
// for FEC

View File

@ -572,38 +572,38 @@ ACMGenericCodec* ACMCodecDB::CreateCodecInstance(const CodecInst& codec_inst) {
// All we have support for right now.
if (!STR_CASE_CMP(codec_inst.plname, "ISAC")) {
#if (defined(WEBRTC_CODEC_ISAC) || defined(WEBRTC_CODEC_ISACFX))
return new ACMISAC(kISAC);
return new ACMISAC(kISAC, false);
#endif
} else if (!STR_CASE_CMP(codec_inst.plname, "PCMU")) {
if (codec_inst.channels == 1) {
return new ACMPCMU(kPCMU);
return new ACMPCMU(kPCMU, false);
} else {
return new ACMPCMU(kPCMU_2ch);
return new ACMPCMU(kPCMU_2ch, false);
}
} else if (!STR_CASE_CMP(codec_inst.plname, "PCMA")) {
if (codec_inst.channels == 1) {
return new ACMPCMA(kPCMA);
return new ACMPCMA(kPCMA, false);
} else {
return new ACMPCMA(kPCMA_2ch);
return new ACMPCMA(kPCMA_2ch, false);
}
} else if (!STR_CASE_CMP(codec_inst.plname, "ILBC")) {
#ifdef WEBRTC_CODEC_ILBC
return new ACMILBC(kILBC);
return new ACMILBC(kILBC, false);
#endif
} else if (!STR_CASE_CMP(codec_inst.plname, "AMR")) {
#ifdef WEBRTC_CODEC_AMR
return new ACMAMR(kGSMAMR);
return new ACMAMR(kGSMAMR, false);
#endif
} else if (!STR_CASE_CMP(codec_inst.plname, "AMR-WB")) {
#ifdef WEBRTC_CODEC_AMRWB
return new ACMAMRwb(kGSMAMRWB);
return new ACMAMRwb(kGSMAMRWB, false);
#endif
} else if (!STR_CASE_CMP(codec_inst.plname, "G722")) {
#ifdef WEBRTC_CODEC_G722
if (codec_inst.channels == 1) {
return new ACMG722(kG722);
return new ACMG722(kG722, false);
} else {
return new ACMG722(kG722_2ch);
return new ACMG722(kG722_2ch, false);
}
#endif
} else if (!STR_CASE_CMP(codec_inst.plname, "G7221")) {
@ -628,7 +628,7 @@ ACMGenericCodec* ACMCodecDB::CreateCodecInstance(const CodecInst& codec_inst) {
return NULL;
}
}
return new ACMG722_1(codec_id);
return new ACMG722_1(codec_id, false);
#endif
FALLTHROUGH();
}
@ -652,7 +652,7 @@ ACMGenericCodec* ACMCodecDB::CreateCodecInstance(const CodecInst& codec_inst) {
return NULL;
}
}
return new ACMG722_1C(codec_id);
return new ACMG722_1C(codec_id, false);
#endif
FALLTHROUGH();
}
@ -685,18 +685,18 @@ ACMGenericCodec* ACMCodecDB::CreateCodecInstance(const CodecInst& codec_inst) {
return NULL;
}
}
return new ACMCNG(codec_id);
return new ACMCNG(codec_id, false);
} else if (!STR_CASE_CMP(codec_inst.plname, "G729")) {
#ifdef WEBRTC_CODEC_G729
return new ACMG729(kG729);
return new ACMG729(kG729, false);
#endif
} else if (!STR_CASE_CMP(codec_inst.plname, "G7291")) {
#ifdef WEBRTC_CODEC_G729_1
return new ACMG729_1(kG729_1);
return new ACMG729_1(kG729_1, false);
#endif
} else if (!STR_CASE_CMP(codec_inst.plname, "opus")) {
#ifdef WEBRTC_CODEC_OPUS
return new ACMOpus(kOpus);
return new ACMOpus(kOpus, false);
#endif
} else if (!STR_CASE_CMP(codec_inst.plname, "speex")) {
#ifdef WEBRTC_CODEC_SPEEX
@ -714,7 +714,7 @@ ACMGenericCodec* ACMCodecDB::CreateCodecInstance(const CodecInst& codec_inst) {
return NULL;
}
}
return new ACMSPEEX(codec_id);
return new ACMSPEEX(codec_id, false);
#endif
} else if (!STR_CASE_CMP(codec_inst.plname, "CN")) {
// For CN we need to check sampling frequency to know what codec to create.
@ -742,7 +742,7 @@ ACMGenericCodec* ACMCodecDB::CreateCodecInstance(const CodecInst& codec_inst) {
return NULL;
}
}
return new ACMCNG(codec_id);
return new ACMCNG(codec_id, false);
} else if (!STR_CASE_CMP(codec_inst.plname, "L16")) {
#ifdef WEBRTC_CODEC_PCM16
// For L16 we need to check sampling frequency to know what codec to create.
@ -784,15 +784,15 @@ ACMGenericCodec* ACMCodecDB::CreateCodecInstance(const CodecInst& codec_inst) {
}
}
}
return new ACMPCM16B(codec_id);
return new ACMPCM16B(codec_id, false);
#endif
} else if (!STR_CASE_CMP(codec_inst.plname, "telephone-event")) {
#ifdef WEBRTC_CODEC_AVT
return new ACMDTMFPlayout(kAVT);
return new ACMDTMFPlayout(kAVT, false);
#endif
} else if (!STR_CASE_CMP(codec_inst.plname, "red")) {
#ifdef WEBRTC_CODEC_RED
return new ACMRED(kRED);
return new ACMRED(kRED, false);
#endif
}
return NULL;

View File

@ -22,7 +22,9 @@ namespace acm2 {
#ifndef WEBRTC_CODEC_AVT
ACMDTMFPlayout::ACMDTMFPlayout(int16_t /* codec_id */) { return; }
ACMDTMFPlayout::ACMDTMFPlayout(int16_t /* codec_id */, bool enable_red)
: ACMGenericCodec(enable_red) {
}
ACMDTMFPlayout::~ACMDTMFPlayout() { return; }
@ -46,7 +48,10 @@ void ACMDTMFPlayout::DestructEncoderSafe() {
#else //===================== Actual Implementation =======================
ACMDTMFPlayout::ACMDTMFPlayout(int16_t codec_id) { codec_id_ = codec_id; }
ACMDTMFPlayout::ACMDTMFPlayout(int16_t codec_id, bool enable_red)
: ACMGenericCodec(enable_red) {
codec_id_ = codec_id;
}
ACMDTMFPlayout::~ACMDTMFPlayout() { return; }

View File

@ -19,7 +19,7 @@ namespace acm2 {
class ACMDTMFPlayout : public ACMGenericCodec {
public:
explicit ACMDTMFPlayout(int16_t codec_id);
ACMDTMFPlayout(int16_t codec_id, bool enable_red);
~ACMDTMFPlayout();
// for FEC

View File

@ -23,10 +23,12 @@ namespace acm2 {
#ifndef WEBRTC_CODEC_G722
ACMG722::ACMG722(int16_t /* codec_id */)
: ptr_enc_str_(NULL),
ACMG722::ACMG722(int16_t /* codec_id */, bool enable_red)
: ACMGenericCodec(enable_red),
ptr_enc_str_(NULL),
encoder_inst_ptr_(NULL),
encoder_inst_ptr_right_(NULL) {}
encoder_inst_ptr_right_(NULL) {
}
ACMG722::~ACMG722() {}
@ -64,8 +66,10 @@ struct ACMG722DecStr {
G722DecInst* inst_right; // instance for right channel in case of stereo
};
ACMG722::ACMG722(int16_t codec_id)
: encoder_inst_ptr_(NULL), encoder_inst_ptr_right_(NULL) {
ACMG722::ACMG722(int16_t codec_id, bool enable_red)
: ACMGenericCodec(enable_red),
encoder_inst_ptr_(NULL),
encoder_inst_ptr_right_(NULL) {
ptr_enc_str_ = new ACMG722EncStr;
if (ptr_enc_str_ != NULL) {
ptr_enc_str_->inst = NULL;

View File

@ -27,7 +27,7 @@ struct ACMG722DecStr;
class ACMG722 : public ACMGenericCodec {
public:
explicit ACMG722(int16_t codec_id);
ACMG722(int16_t codec_id, bool enable_red);
~ACMG722();
// For FEC.

View File

@ -84,8 +84,9 @@ namespace acm2 {
#ifndef WEBRTC_CODEC_G722_1
ACMG722_1::ACMG722_1(int16_t /* codec_id */)
: operational_rate_(-1),
ACMG722_1::ACMG722_1(int16_t /* codec_id */, bool enable_red)
: ACMGenericCodec(enable_red),
operational_rate_(-1),
encoder_inst_ptr_(NULL),
encoder_inst_ptr_right_(NULL),
encoder_inst16_ptr_(NULL),
@ -116,8 +117,9 @@ int16_t ACMG722_1::InternalCreateEncoder() { return -1; }
void ACMG722_1::DestructEncoderSafe() { return; }
#else //===================== Actual Implementation =======================
ACMG722_1::ACMG722_1(int16_t codec_id)
: encoder_inst_ptr_(NULL),
ACMG722_1::ACMG722_1(int16_t codec_id, bool enable_red)
: ACMGenericCodec(enable_red),
encoder_inst_ptr_(NULL),
encoder_inst_ptr_right_(NULL),
encoder_inst16_ptr_(NULL),
encoder_inst16_ptr_right_(NULL),

View File

@ -28,7 +28,7 @@ namespace acm2 {
class ACMG722_1 : public ACMGenericCodec {
public:
explicit ACMG722_1(int16_t codec_id);
ACMG722_1(int16_t codec_id, bool enable_red);
~ACMG722_1();
// for FEC

View File

@ -84,8 +84,9 @@ namespace acm2 {
#ifndef WEBRTC_CODEC_G722_1C
ACMG722_1C::ACMG722_1C(int16_t /* codec_id */)
: operational_rate_(-1),
ACMG722_1C::ACMG722_1C(int16_t /* codec_id */, bool enable_red)
: ACMGenericCodec(enable_red),
operational_rate_(-1),
encoder_inst_ptr_(NULL),
encoder_inst_ptr_right_(NULL),
encoder_inst24_ptr_(NULL),
@ -116,8 +117,9 @@ int16_t ACMG722_1C::InternalCreateEncoder() { return -1; }
void ACMG722_1C::DestructEncoderSafe() { return; }
#else //===================== Actual Implementation =======================
ACMG722_1C::ACMG722_1C(int16_t codec_id)
: encoder_inst_ptr_(NULL),
ACMG722_1C::ACMG722_1C(int16_t codec_id, bool enable_red)
: ACMGenericCodec(enable_red),
encoder_inst_ptr_(NULL),
encoder_inst_ptr_right_(NULL),
encoder_inst24_ptr_(NULL),
encoder_inst24_ptr_right_(NULL),

View File

@ -28,7 +28,7 @@ namespace acm2 {
class ACMG722_1C : public ACMGenericCodec {
public:
explicit ACMG722_1C(int16_t codec_id);
ACMG722_1C(int16_t codec_id, bool enable_red);
~ACMG722_1C();
// for FEC

View File

@ -26,7 +26,9 @@ namespace acm2 {
#ifndef WEBRTC_CODEC_G729
ACMG729::ACMG729(int16_t /* codec_id */) : encoder_inst_ptr_(NULL) {}
ACMG729::ACMG729(int16_t /* codec_id */, bool enable_red)
: ACMGenericCodec(enable_red), encoder_inst_ptr_(NULL) {
}
ACMG729::~ACMG729() { return; }
@ -58,10 +60,12 @@ int16_t ACMG729::InternalCreateEncoder() { return -1; }
void ACMG729::DestructEncoderSafe() { return; }
#else //===================== Actual Implementation =======================
ACMG729::ACMG729(int16_t codec_id)
: codec_id_(codec_id),
ACMG729::ACMG729(int16_t codec_id, bool enable_red)
: ACMGenericCodec(enable_red),
codec_id_(codec_id),
has_internal_dtx_(),
encoder_inst_ptr_(NULL) {}
encoder_inst_ptr_(NULL) {
}
ACMG729::~ACMG729() {
if (encoder_inst_ptr_ != NULL) {

View File

@ -23,7 +23,7 @@ namespace acm2 {
class ACMG729 : public ACMGenericCodec {
public:
explicit ACMG729(int16_t codec_id);
ACMG729(int16_t codec_id, bool enable_red);
~ACMG729();
// for FEC

View File

@ -25,8 +25,9 @@ namespace acm2 {
#ifndef WEBRTC_CODEC_G729_1
ACMG729_1::ACMG729_1(int16_t /* codec_id */)
: encoder_inst_ptr_(NULL),
ACMG729_1::ACMG729_1(int16_t /* codec_id */, bool enable_red)
: ACMGenericCodec(enable_red),
encoder_inst_ptr_(NULL),
my_rate_(32000),
flag_8khz_(0),
flag_g729_mode_(0) {
@ -57,8 +58,9 @@ int16_t ACMG729_1::SetBitRateSafe(const int32_t /*rate*/) { return -1; }
struct G729_1_inst_t_;
ACMG729_1::ACMG729_1(int16_t codec_id)
: encoder_inst_ptr_(NULL),
ACMG729_1::ACMG729_1(int16_t codec_id, bool enable_red)
: ACMGenericCodec(enable_red),
encoder_inst_ptr_(NULL),
my_rate_(32000), // Default rate.
flag_8khz_(0),
flag_g729_mode_(0) {

View File

@ -23,7 +23,7 @@ namespace acm2 {
class ACMG729_1 : public ACMGenericCodec {
public:
explicit ACMG729_1(int16_t codec_id);
ACMG729_1(int16_t codec_id, bool enable_red);
~ACMG729_1();
// for FEC

View File

@ -37,7 +37,7 @@ enum {
// We set some of the variables to invalid values as a check point
// if a proper initialization has happened. Another approach is
// to initialize to a default codec that we are sure is always included.
ACMGenericCodec::ACMGenericCodec()
ACMGenericCodec::ACMGenericCodec(bool enable_red)
: in_audio_ix_write_(0),
in_audio_ix_read_(0),
in_timestamp_ix_write_(0),
@ -60,6 +60,7 @@ ACMGenericCodec::ACMGenericCodec()
sent_cn_previous_(false),
prev_frame_cng_(0),
has_internal_fec_(false),
copy_red_enabled_(enable_red),
codec_wrapper_lock_(*RWLockWrapper::CreateRWLock()),
last_timestamp_(0xD87F3F9F),
unique_id_(0) {
@ -202,6 +203,16 @@ int ACMGenericCodec::SetFEC(bool enable_fec) {
return 0;
}
void ACMGenericCodec::EnableCopyRed(bool enable, int /*red_payload_type*/) {
WriteLockScoped lockCodec(codec_wrapper_lock_);
copy_red_enabled_ = enable;
}
bool ACMGenericCodec::ExternalRedNeeded() {
ReadLockScoped lockCodec(codec_wrapper_lock_);
return copy_red_enabled_;
}
int16_t ACMGenericCodec::Encode(uint8_t* bitstream,
int16_t* bitstream_len_byte,
uint32_t* timestamp,

View File

@ -40,7 +40,7 @@ class ACMGenericCodec {
///////////////////////////////////////////////////////////////////////////
// Constructor of the class
//
ACMGenericCodec();
explicit ACMGenericCodec(bool enable_red);
///////////////////////////////////////////////////////////////////////////
// Destructor of the class.
@ -614,6 +614,13 @@ class ACMGenericCodec {
//
virtual int SetPacketLossRate(int /* loss_rate */) { return 0; }
// Sets if CopyRed should be enabled.
virtual void EnableCopyRed(bool enable, int red_payload_type);
// Returns true if the caller needs to produce RED data manually (that is, if
// RED has been enabled but the codec isn't able to produce the data itself).
virtual bool ExternalRedNeeded();
protected:
///////////////////////////////////////////////////////////////////////////
// All the functions with FunctionNameSafe(...) contain the actual
@ -953,6 +960,8 @@ class ACMGenericCodec {
// FEC.
bool has_internal_fec_ GUARDED_BY(codec_wrapper_lock_);
bool copy_red_enabled_ GUARDED_BY(codec_wrapper_lock_);
WebRtcACMCodecParams encoder_params_ GUARDED_BY(codec_wrapper_lock_);
// Used to lock wrapper internal data

View File

@ -25,7 +25,9 @@ namespace acm2 {
#ifndef WEBRTC_CODEC_GSMFR
ACMGSMFR::ACMGSMFR(int16_t /* codec_id */) : encoder_inst_ptr_(NULL) {}
ACMGSMFR::ACMGSMFR(int16_t /* codec_id */, bool enable_red)
: ACMGenericCodec(enable_red), encoder_inst_ptr_(NULL) {
}
ACMGSMFR::~ACMGSMFR() { return; }
@ -51,10 +53,12 @@ void ACMGSMFR::DestructEncoderSafe() { return; }
#else //===================== Actual Implementation =======================
ACMGSMFR::ACMGSMFR(int16_t codec_id)
: codec_id_(codec_id),
ACMGSMFR::ACMGSMFR(int16_t codec_id, bool enable_red)
: ACMGenericCodec(enable_red),
codec_id_(codec_id),
has_internal_dtx_(true),
encoder_inst_ptr_(NULL) {}
encoder_inst_ptr_(NULL) {
}
ACMGSMFR::~ACMGSMFR() {
if (encoder_inst_ptr_ != NULL) {

View File

@ -23,7 +23,7 @@ namespace acm2 {
class ACMGSMFR : public ACMGenericCodec {
public:
explicit ACMGSMFR(int16_t codec_id);
ACMGSMFR(int16_t codec_id, bool enable_red);
~ACMGSMFR();
// for FEC

View File

@ -21,7 +21,9 @@ namespace acm2 {
#ifndef WEBRTC_CODEC_ILBC
ACMILBC::ACMILBC(int16_t /* codec_id */) : encoder_inst_ptr_(NULL) {}
ACMILBC::ACMILBC(int16_t /* codec_id */, bool enable_red)
: ACMGenericCodec(enable_red), encoder_inst_ptr_(NULL) {
}
ACMILBC::~ACMILBC() { return; }
@ -44,7 +46,8 @@ int16_t ACMILBC::SetBitRateSafe(const int32_t /* rate */) { return -1; }
#else //===================== Actual Implementation =======================
ACMILBC::ACMILBC(int16_t codec_id) : encoder_inst_ptr_(NULL) {
ACMILBC::ACMILBC(int16_t codec_id, bool enable_red)
: ACMGenericCodec(enable_red), encoder_inst_ptr_(NULL) {
codec_id_ = codec_id;
return;
}

View File

@ -23,7 +23,7 @@ namespace acm2 {
class ACMILBC : public ACMGenericCodec {
public:
explicit ACMILBC(int16_t codec_id);
ACMILBC(int16_t codec_id, bool enable_red);
~ACMILBC();
// for FEC

View File

@ -59,8 +59,9 @@ static const int32_t kIsacRatesSwb[NR_ISAC_BANDWIDTHS] = {
#if (!defined(WEBRTC_CODEC_ISAC) && !defined(WEBRTC_CODEC_ISACFX))
ACMISAC::ACMISAC(int16_t /* codec_id */)
: codec_inst_crit_sect_(CriticalSectionWrapper::CreateCriticalSection()),
ACMISAC::ACMISAC(int16_t /* codec_id */, bool enable_red)
: ACMGenericCodec(enable_red),
codec_inst_crit_sect_(CriticalSectionWrapper::CreateCriticalSection()),
codec_inst_ptr_(NULL),
is_enc_initialized_(false),
isac_coding_mode_(CHANNEL_INDEPENDENT),
@ -261,8 +262,9 @@ static uint16_t ACMISACFixGetDecSampRate(ACM_ISAC_STRUCT* /* inst */) {
#endif
ACMISAC::ACMISAC(int16_t codec_id)
: codec_inst_crit_sect_(CriticalSectionWrapper::CreateCriticalSection()),
ACMISAC::ACMISAC(int16_t codec_id, bool enable_red)
: ACMGenericCodec(enable_red),
codec_inst_crit_sect_(CriticalSectionWrapper::CreateCriticalSection()),
is_enc_initialized_(false),
isac_coding_mode_(CHANNEL_INDEPENDENT),
enforce_frame_size_(false),

View File

@ -31,7 +31,7 @@ enum IsacCodingMode {
class ACMISAC : public ACMGenericCodec, AudioDecoder {
public:
explicit ACMISAC(int16_t codec_id);
ACMISAC(int16_t codec_id, bool enable_red);
~ACMISAC();
int16_t InternalInitDecoder(WebRtcACMCodecParams* codec_params)

View File

@ -23,8 +23,9 @@ namespace acm2 {
#ifndef WEBRTC_CODEC_OPUS
ACMOpus::ACMOpus(int16_t /* codec_id */)
: encoder_inst_ptr_(NULL),
ACMOpus::ACMOpus(int16_t /* codec_id */, bool enable_red)
: ACMGenericCodec(enable_red),
encoder_inst_ptr_(NULL),
sample_freq_(0),
bitrate_(0),
channels_(1),
@ -63,11 +64,12 @@ int16_t ACMOpus::SetBitRateSafe(const int32_t /*rate*/) {
#else //===================== Actual Implementation =======================
ACMOpus::ACMOpus(int16_t codec_id)
: encoder_inst_ptr_(NULL),
sample_freq_(32000), // Default sampling frequency.
bitrate_(20000), // Default bit-rate.
channels_(1), // Default mono.
ACMOpus::ACMOpus(int16_t codec_id, bool enable_red)
: ACMGenericCodec(enable_red),
encoder_inst_ptr_(NULL),
sample_freq_(32000), // Default sampling frequency.
bitrate_(20000), // Default bit-rate.
channels_(1), // Default mono.
packet_loss_rate_(0), // Initial packet loss rate.
application_(kVoip) { // Initial application mode.
codec_id_ = codec_id;

View File

@ -23,7 +23,7 @@ namespace acm2 {
class ACMOpus : public ACMGenericCodec {
public:
explicit ACMOpus(int16_t codec_id);
ACMOpus(int16_t codec_id, bool enable_red);
~ACMOpus();
ACMGenericCodec* CreateInstance(void);

View File

@ -31,8 +31,7 @@ namespace {
class AcmOpusTest : public ACMOpus {
public:
explicit AcmOpusTest(int16_t codec_id)
: ACMOpus(codec_id) {}
explicit AcmOpusTest(int16_t codec_id) : ACMOpus(codec_id, false) {}
~AcmOpusTest() {}
int packet_loss_rate() { return packet_loss_rate_; }
OpusApplicationMode application() { return application_; }

View File

@ -23,7 +23,9 @@ namespace acm2 {
#ifndef WEBRTC_CODEC_PCM16
ACMPCM16B::ACMPCM16B(int16_t /* codec_id */) { return; }
ACMPCM16B::ACMPCM16B(int16_t /* codec_id */, bool enable_red)
: ACMGenericCodec(enable_red) {
}
ACMPCM16B::~ACMPCM16B() { return; }
@ -44,7 +46,8 @@ int16_t ACMPCM16B::InternalCreateEncoder() { return -1; }
void ACMPCM16B::DestructEncoderSafe() { return; }
#else //===================== Actual Implementation =======================
ACMPCM16B::ACMPCM16B(int16_t codec_id) {
ACMPCM16B::ACMPCM16B(int16_t codec_id, bool enable_red)
: ACMGenericCodec(enable_red) {
codec_id_ = codec_id;
sampling_freq_hz_ = ACMCodecDB::CodecFreq(codec_id_);
}

View File

@ -19,7 +19,7 @@ namespace acm2 {
class ACMPCM16B : public ACMGenericCodec {
public:
explicit ACMPCM16B(int16_t codec_id);
ACMPCM16B(int16_t codec_id, bool enable_red);
~ACMPCM16B();
// For FEC.

View File

@ -20,7 +20,10 @@ namespace webrtc {
namespace acm2 {
ACMPCMA::ACMPCMA(int16_t codec_id) { codec_id_ = codec_id; }
ACMPCMA::ACMPCMA(int16_t codec_id, bool enable_red)
: ACMGenericCodec(enable_red) {
codec_id_ = codec_id;
}
ACMPCMA::~ACMPCMA() { return; }

View File

@ -19,7 +19,7 @@ namespace acm2 {
class ACMPCMA : public ACMGenericCodec {
public:
explicit ACMPCMA(int16_t codec_id);
ACMPCMA(int16_t codec_id, bool enable_red);
~ACMPCMA();
// For FEC.

View File

@ -20,7 +20,10 @@ namespace webrtc {
namespace acm2 {
ACMPCMU::ACMPCMU(int16_t codec_id) { codec_id_ = codec_id; }
ACMPCMU::ACMPCMU(int16_t codec_id, bool enable_red)
: ACMGenericCodec(enable_red) {
codec_id_ = codec_id;
}
ACMPCMU::~ACMPCMU() {}

View File

@ -19,7 +19,7 @@ namespace acm2 {
class ACMPCMU : public ACMGenericCodec {
public:
explicit ACMPCMU(int16_t codec_id);
ACMPCMU(int16_t codec_id, bool enable_red);
~ACMPCMU();
// For FEC.

View File

@ -17,7 +17,10 @@ namespace webrtc {
namespace acm2 {
ACMRED::ACMRED(int16_t codec_id) { codec_id_ = codec_id; }
ACMRED::ACMRED(int16_t codec_id, bool enable_red)
: ACMGenericCodec(enable_red) {
codec_id_ = codec_id;
}
ACMRED::~ACMRED() {}

View File

@ -19,7 +19,7 @@ namespace acm2 {
class ACMRED : public ACMGenericCodec {
public:
explicit ACMRED(int16_t codec_id);
ACMRED(int16_t codec_id, bool enable_red);
~ACMRED();
// For FEC.

View File

@ -24,8 +24,9 @@ namespace webrtc {
namespace acm2 {
#ifndef WEBRTC_CODEC_SPEEX
ACMSPEEX::ACMSPEEX(int16_t /* codec_id */)
: encoder_inst_ptr_(NULL),
ACMSPEEX::ACMSPEEX(int16_t /* codec_id */, bool enable_red)
: ACMGenericCodec(enable_red),
encoder_inst_ptr_(NULL),
compl_mode_(0),
vbr_enabled_(false),
encoding_rate_(-1),
@ -68,7 +69,8 @@ int16_t ACMSPEEX::SetComplMode(int16_t mode) { return -1; }
#else //===================== Actual Implementation =======================
ACMSPEEX::ACMSPEEX(int16_t codec_id) : encoder_inst_ptr_(NULL) {
ACMSPEEX::ACMSPEEX(int16_t codec_id, bool enable_red)
: ACMGenericCodec(enable_red), encoder_inst_ptr_(NULL) {
codec_id_ = codec_id;
// Set sampling frequency, frame size and rate Speex

View File

@ -23,7 +23,7 @@ namespace acm2 {
class ACMSPEEX : public ACMGenericCodec {
public:
explicit ACMSPEEX(int16_t codec_id);
ACMSPEEX(int16_t codec_id, bool enable_red);
~ACMSPEEX();
// For FEC.