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:
parent
4455f6243a
commit
3154a1cf9d
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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_);
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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; }
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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.
|
||||
|
@ -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),
|
||||
|
@ -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
|
||||
|
@ -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),
|
||||
|
@ -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
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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),
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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_; }
|
||||
|
@ -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_);
|
||||
}
|
||||
|
@ -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.
|
||||
|
@ -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; }
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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() {}
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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() {}
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user