mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2026-01-14 16:46:22 +00:00
2.1
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
#include "logging.h"
|
||||
#include "VoIPServerConfig.h"
|
||||
|
||||
tgvoip::OpusEncoder::OpusEncoder(MediaStreamItf *source):queue(11), bufferPool(960*2, 10){
|
||||
tgvoip::OpusEncoder::OpusEncoder(MediaStreamItf *source, bool needSecondary):queue(11), bufferPool(960*2, 10){
|
||||
this->source=source;
|
||||
source->SetCallback(tgvoip::OpusEncoder::Callback, this);
|
||||
enc=opus_encoder_create(48000, 1, OPUS_APPLICATION_VOIP, NULL);
|
||||
@@ -29,10 +29,30 @@ tgvoip::OpusEncoder::OpusEncoder(MediaStreamItf *source):queue(11), bufferPool(9
|
||||
strongCorrectionBitrate=ServerConfig::GetSharedInstance()->GetInt("audio_strong_fec_bitrate", 8000);
|
||||
mediumCorrectionMultiplier=ServerConfig::GetSharedInstance()->GetDouble("audio_medium_fec_multiplier", 1.5);
|
||||
strongCorrectionMultiplier=ServerConfig::GetSharedInstance()->GetDouble("audio_strong_fec_multiplier", 2.0);
|
||||
secondaryEncoderEnabled=false;
|
||||
|
||||
if(needSecondary){
|
||||
secondaryEncoder=opus_encoder_create(48000, 1, OPUS_APPLICATION_VOIP, NULL);
|
||||
opus_encoder_ctl(secondaryEncoder, OPUS_SET_COMPLEXITY(10));
|
||||
opus_encoder_ctl(secondaryEncoder, OPUS_SET_SIGNAL(OPUS_SIGNAL_VOICE));
|
||||
opus_encoder_ctl(secondaryEncoder, OPUS_SET_VBR(0));
|
||||
opus_encoder_ctl(secondaryEncoder, OPUS_SET_BANDWIDTH(OPUS_BANDWIDTH_FULLBAND));
|
||||
opus_encoder_ctl(secondaryEncoder, OPUS_SET_BITRATE(8000));
|
||||
opus_encoder_ctl(secondaryEncoder, OPUS_SET_INBAND_FEC(1));
|
||||
opus_encoder_ctl(secondaryEncoder, OPUS_SET_PACKET_LOSS_PERC(15));
|
||||
|
||||
opus_int32 delay, ecDelay;
|
||||
opus_encoder_ctl(secondaryEncoder, OPUS_GET_LOOKAHEAD(&ecDelay));
|
||||
opus_encoder_ctl(enc, OPUS_GET_LOOKAHEAD(&delay));
|
||||
}else{
|
||||
secondaryEncoder=NULL;
|
||||
}
|
||||
}
|
||||
|
||||
tgvoip::OpusEncoder::~OpusEncoder(){
|
||||
opus_encoder_destroy(enc);
|
||||
if(secondaryEncoder)
|
||||
opus_encoder_destroy(secondaryEncoder);
|
||||
}
|
||||
|
||||
void tgvoip::OpusEncoder::Start(){
|
||||
@@ -74,7 +94,13 @@ void tgvoip::OpusEncoder::Encode(unsigned char *data, size_t len){
|
||||
LOGW("DTX");
|
||||
}else if(running){
|
||||
//LOGV("Packet size = %d", r);
|
||||
InvokeCallback(buffer, (size_t)r);
|
||||
int32_t secondaryLen=0;
|
||||
unsigned char secondaryBuffer[128];
|
||||
if(secondaryEncoderEnabled && secondaryEncoder){
|
||||
secondaryLen=opus_encode(secondaryEncoder, (int16_t*)data, len/2, secondaryBuffer, sizeof(secondaryBuffer));
|
||||
//LOGV("secondaryLen %d", secondaryLen);
|
||||
}
|
||||
InvokeCallback(buffer, (size_t)r, secondaryBuffer, (size_t)secondaryLen);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -166,3 +192,16 @@ void tgvoip::OpusEncoder::SetDTX(bool enable){
|
||||
void tgvoip::OpusEncoder::SetLevelMeter(tgvoip::AudioLevelMeter *levelMeter){
|
||||
this->levelMeter=levelMeter;
|
||||
}
|
||||
|
||||
void tgvoip::OpusEncoder::SetCallback(void (*f)(unsigned char *, size_t, unsigned char *, size_t, void *), void *param){
|
||||
callback=f;
|
||||
callbackParam=param;
|
||||
}
|
||||
|
||||
void tgvoip::OpusEncoder::InvokeCallback(unsigned char *data, size_t length, unsigned char *secondaryData, size_t secondaryLength){
|
||||
callback(data, length, secondaryData, secondaryLength, callbackParam);
|
||||
}
|
||||
|
||||
void tgvoip::OpusEncoder::SetSecondaryEncoderEnabled(bool enabled){
|
||||
secondaryEncoderEnabled=enabled;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user