NetEq4: Making a few more members scoped_ptrs
This CL converts a few members in NetEqImpl form regular pointers to scoped_ptrs. R=andrew@webrtc.org Review URL: https://webrtc-codereview.appspot.com/2245004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@4783 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
@@ -117,19 +117,13 @@ NetEqImpl::NetEqImpl(int fs,
|
|||||||
|
|
||||||
NetEqImpl::~NetEqImpl() {
|
NetEqImpl::~NetEqImpl() {
|
||||||
LOG(LS_INFO) << "Deleting NetEqImpl object.";
|
LOG(LS_INFO) << "Deleting NetEqImpl object.";
|
||||||
delete algorithm_buffer_;
|
|
||||||
delete sync_buffer_;
|
|
||||||
delete background_noise_;
|
|
||||||
delete expand_;
|
|
||||||
delete comfort_noise_;
|
|
||||||
delete crit_sect_;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int NetEqImpl::InsertPacket(const WebRtcRTPHeader& rtp_header,
|
int NetEqImpl::InsertPacket(const WebRtcRTPHeader& rtp_header,
|
||||||
const uint8_t* payload,
|
const uint8_t* payload,
|
||||||
int length_bytes,
|
int length_bytes,
|
||||||
uint32_t receive_timestamp) {
|
uint32_t receive_timestamp) {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
NETEQ_LOG_VERBOSE << "InsertPacket: ts=" << rtp_header.header.timestamp <<
|
NETEQ_LOG_VERBOSE << "InsertPacket: ts=" << rtp_header.header.timestamp <<
|
||||||
", sn=" << rtp_header.header.sequenceNumber <<
|
", sn=" << rtp_header.header.sequenceNumber <<
|
||||||
", pt=" << static_cast<int>(rtp_header.header.payloadType) <<
|
", pt=" << static_cast<int>(rtp_header.header.payloadType) <<
|
||||||
@@ -148,7 +142,7 @@ int NetEqImpl::InsertPacket(const WebRtcRTPHeader& rtp_header,
|
|||||||
int NetEqImpl::GetAudio(size_t max_length, int16_t* output_audio,
|
int NetEqImpl::GetAudio(size_t max_length, int16_t* output_audio,
|
||||||
int* samples_per_channel, int* num_channels,
|
int* samples_per_channel, int* num_channels,
|
||||||
NetEqOutputType* type) {
|
NetEqOutputType* type) {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
NETEQ_LOG_VERBOSE << "GetAudio";
|
NETEQ_LOG_VERBOSE << "GetAudio";
|
||||||
int error = GetAudioInternal(max_length, output_audio, samples_per_channel,
|
int error = GetAudioInternal(max_length, output_audio, samples_per_channel,
|
||||||
num_channels);
|
num_channels);
|
||||||
@@ -167,7 +161,7 @@ int NetEqImpl::GetAudio(size_t max_length, int16_t* output_audio,
|
|||||||
|
|
||||||
int NetEqImpl::RegisterPayloadType(enum NetEqDecoder codec,
|
int NetEqImpl::RegisterPayloadType(enum NetEqDecoder codec,
|
||||||
uint8_t rtp_payload_type) {
|
uint8_t rtp_payload_type) {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
LOG_API2(static_cast<int>(rtp_payload_type), codec);
|
LOG_API2(static_cast<int>(rtp_payload_type), codec);
|
||||||
int ret = decoder_database_->RegisterPayload(rtp_payload_type, codec);
|
int ret = decoder_database_->RegisterPayload(rtp_payload_type, codec);
|
||||||
if (ret != DecoderDatabase::kOK) {
|
if (ret != DecoderDatabase::kOK) {
|
||||||
@@ -194,7 +188,7 @@ int NetEqImpl::RegisterExternalDecoder(AudioDecoder* decoder,
|
|||||||
enum NetEqDecoder codec,
|
enum NetEqDecoder codec,
|
||||||
int sample_rate_hz,
|
int sample_rate_hz,
|
||||||
uint8_t rtp_payload_type) {
|
uint8_t rtp_payload_type) {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
LOG_API2(static_cast<int>(rtp_payload_type), codec);
|
LOG_API2(static_cast<int>(rtp_payload_type), codec);
|
||||||
if (!decoder) {
|
if (!decoder) {
|
||||||
LOG(LS_ERROR) << "Cannot register external decoder with NULL pointer";
|
LOG(LS_ERROR) << "Cannot register external decoder with NULL pointer";
|
||||||
@@ -230,7 +224,7 @@ int NetEqImpl::RegisterExternalDecoder(AudioDecoder* decoder,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int NetEqImpl::RemovePayloadType(uint8_t rtp_payload_type) {
|
int NetEqImpl::RemovePayloadType(uint8_t rtp_payload_type) {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
LOG_API1(static_cast<int>(rtp_payload_type));
|
LOG_API1(static_cast<int>(rtp_payload_type));
|
||||||
int ret = decoder_database_->Remove(rtp_payload_type);
|
int ret = decoder_database_->Remove(rtp_payload_type);
|
||||||
if (ret == DecoderDatabase::kOK) {
|
if (ret == DecoderDatabase::kOK) {
|
||||||
@@ -245,7 +239,7 @@ int NetEqImpl::RemovePayloadType(uint8_t rtp_payload_type) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool NetEqImpl::SetMinimumDelay(int delay_ms) {
|
bool NetEqImpl::SetMinimumDelay(int delay_ms) {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
if (delay_ms >= 0 && delay_ms < 10000) {
|
if (delay_ms >= 0 && delay_ms < 10000) {
|
||||||
assert(delay_manager_.get());
|
assert(delay_manager_.get());
|
||||||
return delay_manager_->SetMinimumDelay(delay_ms);
|
return delay_manager_->SetMinimumDelay(delay_ms);
|
||||||
@@ -254,7 +248,7 @@ bool NetEqImpl::SetMinimumDelay(int delay_ms) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool NetEqImpl::SetMaximumDelay(int delay_ms) {
|
bool NetEqImpl::SetMaximumDelay(int delay_ms) {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
if (delay_ms >= 0 && delay_ms < 10000) {
|
if (delay_ms >= 0 && delay_ms < 10000) {
|
||||||
assert(delay_manager_.get());
|
assert(delay_manager_.get());
|
||||||
return delay_manager_->SetMaximumDelay(delay_ms);
|
return delay_manager_->SetMaximumDelay(delay_ms);
|
||||||
@@ -263,13 +257,13 @@ bool NetEqImpl::SetMaximumDelay(int delay_ms) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int NetEqImpl::LeastRequiredDelayMs() const {
|
int NetEqImpl::LeastRequiredDelayMs() const {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
assert(delay_manager_.get());
|
assert(delay_manager_.get());
|
||||||
return delay_manager_->least_required_delay_ms();
|
return delay_manager_->least_required_delay_ms();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetEqImpl::SetPlayoutMode(NetEqPlayoutMode mode) {
|
void NetEqImpl::SetPlayoutMode(NetEqPlayoutMode mode) {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
if (!decision_logic_.get() || mode != decision_logic_->playout_mode()) {
|
if (!decision_logic_.get() || mode != decision_logic_->playout_mode()) {
|
||||||
// The reset() method calls delete for the old object.
|
// The reset() method calls delete for the old object.
|
||||||
decision_logic_.reset(DecisionLogic::Create(fs_hz_, output_size_samples_,
|
decision_logic_.reset(DecisionLogic::Create(fs_hz_, output_size_samples_,
|
||||||
@@ -282,13 +276,13 @@ void NetEqImpl::SetPlayoutMode(NetEqPlayoutMode mode) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
NetEqPlayoutMode NetEqImpl::PlayoutMode() const {
|
NetEqPlayoutMode NetEqImpl::PlayoutMode() const {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
assert(decision_logic_.get());
|
assert(decision_logic_.get());
|
||||||
return decision_logic_->playout_mode();
|
return decision_logic_->playout_mode();
|
||||||
}
|
}
|
||||||
|
|
||||||
int NetEqImpl::NetworkStatistics(NetEqNetworkStatistics* stats) {
|
int NetEqImpl::NetworkStatistics(NetEqNetworkStatistics* stats) {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
assert(decoder_database_.get());
|
assert(decoder_database_.get());
|
||||||
const int total_samples_in_buffers = packet_buffer_->NumSamplesInBuffer(
|
const int total_samples_in_buffers = packet_buffer_->NumSamplesInBuffer(
|
||||||
decoder_database_.get(), decoder_frame_length_) +
|
decoder_database_.get(), decoder_frame_length_) +
|
||||||
@@ -302,57 +296,57 @@ int NetEqImpl::NetworkStatistics(NetEqNetworkStatistics* stats) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void NetEqImpl::WaitingTimes(std::vector<int>* waiting_times) {
|
void NetEqImpl::WaitingTimes(std::vector<int>* waiting_times) {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
stats_.WaitingTimes(waiting_times);
|
stats_.WaitingTimes(waiting_times);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetEqImpl::GetRtcpStatistics(RtcpStatistics* stats) {
|
void NetEqImpl::GetRtcpStatistics(RtcpStatistics* stats) {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
if (stats) {
|
if (stats) {
|
||||||
rtcp_.GetStatistics(false, stats);
|
rtcp_.GetStatistics(false, stats);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetEqImpl::GetRtcpStatisticsNoReset(RtcpStatistics* stats) {
|
void NetEqImpl::GetRtcpStatisticsNoReset(RtcpStatistics* stats) {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
if (stats) {
|
if (stats) {
|
||||||
rtcp_.GetStatistics(true, stats);
|
rtcp_.GetStatistics(true, stats);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetEqImpl::EnableVad() {
|
void NetEqImpl::EnableVad() {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
assert(vad_.get());
|
assert(vad_.get());
|
||||||
vad_->Enable();
|
vad_->Enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetEqImpl::DisableVad() {
|
void NetEqImpl::DisableVad() {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
assert(vad_.get());
|
assert(vad_.get());
|
||||||
vad_->Disable();
|
vad_->Disable();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t NetEqImpl::PlayoutTimestamp() {
|
uint32_t NetEqImpl::PlayoutTimestamp() {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
return timestamp_scaler_->ToExternal(playout_timestamp_);
|
return timestamp_scaler_->ToExternal(playout_timestamp_);
|
||||||
}
|
}
|
||||||
|
|
||||||
int NetEqImpl::LastError() {
|
int NetEqImpl::LastError() {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
return error_code_;
|
return error_code_;
|
||||||
}
|
}
|
||||||
|
|
||||||
int NetEqImpl::LastDecoderError() {
|
int NetEqImpl::LastDecoderError() {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
return decoder_error_code_;
|
return decoder_error_code_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetEqImpl::FlushBuffers() {
|
void NetEqImpl::FlushBuffers() {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
LOG_API0();
|
LOG_API0();
|
||||||
packet_buffer_->Flush();
|
packet_buffer_->Flush();
|
||||||
assert(sync_buffer_);
|
assert(sync_buffer_.get());
|
||||||
assert(expand_);
|
assert(expand_.get());
|
||||||
sync_buffer_->Flush();
|
sync_buffer_->Flush();
|
||||||
sync_buffer_->set_next_index(sync_buffer_->next_index() -
|
sync_buffer_->set_next_index(sync_buffer_->next_index() -
|
||||||
expand_->overlap_length());
|
expand_->overlap_length());
|
||||||
@@ -364,13 +358,13 @@ void NetEqImpl::PacketBufferStatistics(int* current_num_packets,
|
|||||||
int* max_num_packets,
|
int* max_num_packets,
|
||||||
int* current_memory_size_bytes,
|
int* current_memory_size_bytes,
|
||||||
int* max_memory_size_bytes) const {
|
int* max_memory_size_bytes) const {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
packet_buffer_->BufferStat(current_num_packets, max_num_packets,
|
packet_buffer_->BufferStat(current_num_packets, max_num_packets,
|
||||||
current_memory_size_bytes, max_memory_size_bytes);
|
current_memory_size_bytes, max_memory_size_bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
int NetEqImpl::DecodedRtpInfo(int* sequence_number, uint32_t* timestamp) {
|
int NetEqImpl::DecodedRtpInfo(int* sequence_number, uint32_t* timestamp) {
|
||||||
CriticalSectionScoped lock(crit_sect_);
|
CriticalSectionScoped lock(crit_sect_.get());
|
||||||
if (decoded_packet_sequence_number_ < 0)
|
if (decoded_packet_sequence_number_ < 0)
|
||||||
return -1;
|
return -1;
|
||||||
*sequence_number = decoded_packet_sequence_number_;
|
*sequence_number = decoded_packet_sequence_number_;
|
||||||
@@ -799,7 +793,7 @@ int NetEqImpl::GetDecision(Operations* operation,
|
|||||||
packet_buffer_->IncrementWaitingTimes();
|
packet_buffer_->IncrementWaitingTimes();
|
||||||
stats_.IncreaseCounter(output_size_samples_, fs_hz_);
|
stats_.IncreaseCounter(output_size_samples_, fs_hz_);
|
||||||
|
|
||||||
assert(sync_buffer_);
|
assert(sync_buffer_.get());
|
||||||
uint32_t end_timestamp = sync_buffer_->end_timestamp();
|
uint32_t end_timestamp = sync_buffer_->end_timestamp();
|
||||||
if (!new_codec_) {
|
if (!new_codec_) {
|
||||||
packet_buffer_->DiscardOldPackets(end_timestamp);
|
packet_buffer_->DiscardOldPackets(end_timestamp);
|
||||||
@@ -826,7 +820,7 @@ int NetEqImpl::GetDecision(Operations* operation,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(expand_);
|
assert(expand_.get());
|
||||||
const int samples_left = sync_buffer_->FutureLength() -
|
const int samples_left = sync_buffer_->FutureLength() -
|
||||||
expand_->overlap_length();
|
expand_->overlap_length();
|
||||||
if (last_mode_ == kModeAccelerateSuccess ||
|
if (last_mode_ == kModeAccelerateSuccess ||
|
||||||
@@ -845,8 +839,8 @@ int NetEqImpl::GetDecision(Operations* operation,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get instruction.
|
// Get instruction.
|
||||||
assert(sync_buffer_);
|
assert(sync_buffer_.get());
|
||||||
assert(expand_);
|
assert(expand_.get());
|
||||||
*operation = decision_logic_->GetDecision(*sync_buffer_,
|
*operation = decision_logic_->GetDecision(*sync_buffer_,
|
||||||
*expand_,
|
*expand_,
|
||||||
decoder_frame_length_,
|
decoder_frame_length_,
|
||||||
@@ -1223,7 +1217,7 @@ void NetEqImpl::DoNormal(const int16_t* decoded_buffer, size_t decoded_length,
|
|||||||
assert(normal_.get());
|
assert(normal_.get());
|
||||||
assert(mute_factor_array_.get());
|
assert(mute_factor_array_.get());
|
||||||
normal_->Process(decoded_buffer, decoded_length, last_mode_,
|
normal_->Process(decoded_buffer, decoded_length, last_mode_,
|
||||||
mute_factor_array_.get(), algorithm_buffer_);
|
mute_factor_array_.get(), algorithm_buffer_.get());
|
||||||
if (decoded_length != 0) {
|
if (decoded_length != 0) {
|
||||||
last_mode_ = kModeNormal;
|
last_mode_ = kModeNormal;
|
||||||
}
|
}
|
||||||
@@ -1246,7 +1240,8 @@ void NetEqImpl::DoMerge(int16_t* decoded_buffer, size_t decoded_length,
|
|||||||
assert(mute_factor_array_.get());
|
assert(mute_factor_array_.get());
|
||||||
assert(merge_.get());
|
assert(merge_.get());
|
||||||
int new_length = merge_->Process(decoded_buffer, decoded_length,
|
int new_length = merge_->Process(decoded_buffer, decoded_length,
|
||||||
mute_factor_array_.get(), algorithm_buffer_);
|
mute_factor_array_.get(),
|
||||||
|
algorithm_buffer_.get());
|
||||||
|
|
||||||
// Update in-call and post-call statistics.
|
// Update in-call and post-call statistics.
|
||||||
if (expand_->MuteFactor(0) == 0) {
|
if (expand_->MuteFactor(0) == 0) {
|
||||||
@@ -1272,7 +1267,7 @@ int NetEqImpl::DoExpand(bool play_dtmf) {
|
|||||||
while ((sync_buffer_->FutureLength() - expand_->overlap_length()) <
|
while ((sync_buffer_->FutureLength() - expand_->overlap_length()) <
|
||||||
static_cast<size_t>(output_size_samples_)) {
|
static_cast<size_t>(output_size_samples_)) {
|
||||||
algorithm_buffer_->Clear();
|
algorithm_buffer_->Clear();
|
||||||
int return_value = expand_->Process(algorithm_buffer_);
|
int return_value = expand_->Process(algorithm_buffer_.get());
|
||||||
int length = algorithm_buffer_->Size();
|
int length = algorithm_buffer_->Size();
|
||||||
|
|
||||||
// Update in-call and post-call statistics.
|
// Update in-call and post-call statistics.
|
||||||
@@ -1319,10 +1314,9 @@ int NetEqImpl::DoAccelerate(int16_t* decoded_buffer, size_t decoded_length,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int16_t samples_removed;
|
int16_t samples_removed;
|
||||||
Accelerate::ReturnCodes return_code = accelerate_->Process(decoded_buffer,
|
Accelerate::ReturnCodes return_code = accelerate_->Process(
|
||||||
decoded_length,
|
decoded_buffer, decoded_length, algorithm_buffer_.get(),
|
||||||
algorithm_buffer_,
|
&samples_removed);
|
||||||
&samples_removed);
|
|
||||||
stats_.AcceleratedSamples(samples_removed);
|
stats_.AcceleratedSamples(samples_removed);
|
||||||
switch (return_code) {
|
switch (return_code) {
|
||||||
case Accelerate::kSuccess:
|
case Accelerate::kSuccess:
|
||||||
@@ -1401,7 +1395,7 @@ int NetEqImpl::DoPreemptiveExpand(int16_t* decoded_buffer,
|
|||||||
int16_t samples_added;
|
int16_t samples_added;
|
||||||
PreemptiveExpand::ReturnCodes return_code = preemptive_expand_->Process(
|
PreemptiveExpand::ReturnCodes return_code = preemptive_expand_->Process(
|
||||||
decoded_buffer, decoded_length, old_borrowed_samples_per_channel,
|
decoded_buffer, decoded_length, old_borrowed_samples_per_channel,
|
||||||
algorithm_buffer_, &samples_added);
|
algorithm_buffer_.get(), &samples_added);
|
||||||
stats_.PreemptiveExpandedSamples(samples_added);
|
stats_.PreemptiveExpandedSamples(samples_added);
|
||||||
switch (return_code) {
|
switch (return_code) {
|
||||||
case PreemptiveExpand::kSuccess:
|
case PreemptiveExpand::kSuccess:
|
||||||
@@ -1478,7 +1472,7 @@ int NetEqImpl::DoRfc3389Cng(PacketList* packet_list, bool play_dtmf) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
int cn_return = comfort_noise_->Generate(output_size_samples_,
|
int cn_return = comfort_noise_->Generate(output_size_samples_,
|
||||||
algorithm_buffer_);
|
algorithm_buffer_.get());
|
||||||
expand_->Reset();
|
expand_->Reset();
|
||||||
last_mode_ = kModeRfc3389Cng;
|
last_mode_ = kModeRfc3389Cng;
|
||||||
if (!play_dtmf) {
|
if (!play_dtmf) {
|
||||||
@@ -1507,7 +1501,7 @@ void NetEqImpl::DoCodecInternalCng() {
|
|||||||
}
|
}
|
||||||
assert(mute_factor_array_.get());
|
assert(mute_factor_array_.get());
|
||||||
normal_->Process(decoded_buffer, length, last_mode_, mute_factor_array_.get(),
|
normal_->Process(decoded_buffer, length, last_mode_, mute_factor_array_.get(),
|
||||||
algorithm_buffer_);
|
algorithm_buffer_.get());
|
||||||
last_mode_ = kModeCodecInternalCng;
|
last_mode_ = kModeCodecInternalCng;
|
||||||
expand_->Reset();
|
expand_->Reset();
|
||||||
}
|
}
|
||||||
@@ -1540,7 +1534,7 @@ int NetEqImpl::DoDtmf(const DtmfEvent& dtmf_event, bool* play_dtmf) {
|
|||||||
if (dtmf_return_value == 0) {
|
if (dtmf_return_value == 0) {
|
||||||
// Generate DTMF signal.
|
// Generate DTMF signal.
|
||||||
dtmf_return_value = dtmf_tone_generator_->Generate(output_size_samples_,
|
dtmf_return_value = dtmf_tone_generator_->Generate(output_size_samples_,
|
||||||
algorithm_buffer_);
|
algorithm_buffer_.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dtmf_return_value < 0) {
|
if (dtmf_return_value < 0) {
|
||||||
@@ -1756,49 +1750,34 @@ void NetEqImpl::SetSampleRateAndChannels(int fs_hz, size_t channels) {
|
|||||||
vad_->Init();
|
vad_->Init();
|
||||||
|
|
||||||
// Delete algorithm buffer and create a new one.
|
// Delete algorithm buffer and create a new one.
|
||||||
if (algorithm_buffer_) {
|
algorithm_buffer_.reset(new AudioMultiVector<int16_t>(channels));
|
||||||
delete algorithm_buffer_;
|
|
||||||
}
|
|
||||||
algorithm_buffer_ = new AudioMultiVector<int16_t>(channels);
|
|
||||||
|
|
||||||
// Delete sync buffer and create a new one.
|
// Delete sync buffer and create a new one.
|
||||||
if (sync_buffer_) {
|
sync_buffer_.reset(new SyncBuffer(channels, kSyncBufferSize * fs_mult_));
|
||||||
delete sync_buffer_;
|
|
||||||
}
|
|
||||||
sync_buffer_ = new SyncBuffer(channels, kSyncBufferSize * fs_mult_);
|
|
||||||
|
|
||||||
// Delete BackgroundNoise object and create a new one.
|
// Delete BackgroundNoise object and create a new one.
|
||||||
if (background_noise_) {
|
background_noise_.reset(new BackgroundNoise(channels));
|
||||||
delete background_noise_;
|
|
||||||
}
|
|
||||||
background_noise_ = new BackgroundNoise(channels);
|
|
||||||
|
|
||||||
// Reset random vector.
|
// Reset random vector.
|
||||||
random_vector_.Reset();
|
random_vector_.Reset();
|
||||||
|
|
||||||
// Delete Expand object and create a new one.
|
// Delete Expand object and create a new one.
|
||||||
if (expand_) {
|
expand_.reset(new Expand(background_noise_.get(), sync_buffer_.get(),
|
||||||
delete expand_;
|
&random_vector_, fs_hz, channels));
|
||||||
}
|
|
||||||
expand_ = new Expand(background_noise_, sync_buffer_, &random_vector_, fs_hz,
|
|
||||||
channels);
|
|
||||||
// Move index so that we create a small set of future samples (all 0).
|
// Move index so that we create a small set of future samples (all 0).
|
||||||
sync_buffer_->set_next_index(sync_buffer_->next_index() -
|
sync_buffer_->set_next_index(sync_buffer_->next_index() -
|
||||||
expand_->overlap_length());
|
expand_->overlap_length());
|
||||||
|
|
||||||
normal_.reset(new Normal(fs_hz, decoder_database_.get(), *background_noise_,
|
normal_.reset(new Normal(fs_hz, decoder_database_.get(), *background_noise_,
|
||||||
expand_));
|
expand_.get()));
|
||||||
merge_.reset(new Merge(fs_hz, channels, expand_, sync_buffer_));
|
merge_.reset(new Merge(fs_hz, channels, expand_.get(), sync_buffer_.get()));
|
||||||
accelerate_.reset(new Accelerate(fs_hz, channels, *background_noise_));
|
accelerate_.reset(new Accelerate(fs_hz, channels, *background_noise_));
|
||||||
preemptive_expand_.reset(new PreemptiveExpand(fs_hz, channels,
|
preemptive_expand_.reset(new PreemptiveExpand(fs_hz, channels,
|
||||||
*background_noise_));
|
*background_noise_));
|
||||||
|
|
||||||
// Delete ComfortNoise object and create a new one.
|
// Delete ComfortNoise object and create a new one.
|
||||||
if (comfort_noise_) {
|
comfort_noise_.reset(new ComfortNoise(fs_hz, decoder_database_.get(),
|
||||||
delete comfort_noise_;
|
sync_buffer_.get()));
|
||||||
}
|
|
||||||
comfort_noise_ = new ComfortNoise(fs_hz, decoder_database_.get(),
|
|
||||||
sync_buffer_);
|
|
||||||
|
|
||||||
// Verify that |decoded_buffer_| is long enough.
|
// Verify that |decoded_buffer_| is long enough.
|
||||||
if (decoded_buffer_length_ < kMaxFrameSize * channels) {
|
if (decoded_buffer_length_ < kMaxFrameSize * channels) {
|
||||||
@@ -1814,7 +1793,7 @@ void NetEqImpl::SetSampleRateAndChannels(int fs_hz, size_t channels) {
|
|||||||
|
|
||||||
NetEqOutputType NetEqImpl::LastOutputType() {
|
NetEqOutputType NetEqImpl::LastOutputType() {
|
||||||
assert(vad_.get());
|
assert(vad_.get());
|
||||||
assert(expand_);
|
assert(expand_.get());
|
||||||
if (last_mode_ == kModeCodecInternalCng || last_mode_ == kModeRfc3389Cng) {
|
if (last_mode_ == kModeCodecInternalCng || last_mode_ == kModeRfc3389Cng) {
|
||||||
return kOutputCNG;
|
return kOutputCNG;
|
||||||
} else if (vad_->running() && !vad_->active_speech()) {
|
} else if (vad_->running() && !vad_->active_speech()) {
|
||||||
|
|||||||
@@ -288,7 +288,7 @@ class NetEqImpl : public webrtc::NetEq {
|
|||||||
// GetAudio().
|
// GetAudio().
|
||||||
NetEqOutputType LastOutputType();
|
NetEqOutputType LastOutputType();
|
||||||
|
|
||||||
BackgroundNoise* background_noise_;
|
scoped_ptr<BackgroundNoise> background_noise_;
|
||||||
scoped_ptr<BufferLevelFilter> buffer_level_filter_;
|
scoped_ptr<BufferLevelFilter> buffer_level_filter_;
|
||||||
scoped_ptr<DecoderDatabase> decoder_database_;
|
scoped_ptr<DecoderDatabase> decoder_database_;
|
||||||
scoped_ptr<DelayManager> delay_manager_;
|
scoped_ptr<DelayManager> delay_manager_;
|
||||||
@@ -300,15 +300,15 @@ class NetEqImpl : public webrtc::NetEq {
|
|||||||
scoped_ptr<TimestampScaler> timestamp_scaler_;
|
scoped_ptr<TimestampScaler> timestamp_scaler_;
|
||||||
scoped_ptr<DecisionLogic> decision_logic_;
|
scoped_ptr<DecisionLogic> decision_logic_;
|
||||||
scoped_ptr<PostDecodeVad> vad_;
|
scoped_ptr<PostDecodeVad> vad_;
|
||||||
AudioMultiVector<int16_t>* algorithm_buffer_;
|
scoped_ptr<AudioMultiVector<int16_t> > algorithm_buffer_;
|
||||||
SyncBuffer* sync_buffer_;
|
scoped_ptr<SyncBuffer> sync_buffer_;
|
||||||
Expand* expand_;
|
scoped_ptr<Expand> expand_;
|
||||||
scoped_ptr<Normal> normal_;
|
scoped_ptr<Normal> normal_;
|
||||||
scoped_ptr<Merge> merge_;
|
scoped_ptr<Merge> merge_;
|
||||||
scoped_ptr<Accelerate> accelerate_;
|
scoped_ptr<Accelerate> accelerate_;
|
||||||
scoped_ptr<PreemptiveExpand> preemptive_expand_;
|
scoped_ptr<PreemptiveExpand> preemptive_expand_;
|
||||||
RandomVector random_vector_;
|
RandomVector random_vector_;
|
||||||
ComfortNoise* comfort_noise_;
|
scoped_ptr<ComfortNoise> comfort_noise_;
|
||||||
Rtcp rtcp_;
|
Rtcp rtcp_;
|
||||||
StatisticsCalculator stats_;
|
StatisticsCalculator stats_;
|
||||||
int fs_hz_;
|
int fs_hz_;
|
||||||
@@ -329,7 +329,7 @@ class NetEqImpl : public webrtc::NetEq {
|
|||||||
bool first_packet_;
|
bool first_packet_;
|
||||||
int error_code_; // Store last error code.
|
int error_code_; // Store last error code.
|
||||||
int decoder_error_code_;
|
int decoder_error_code_;
|
||||||
CriticalSectionWrapper* crit_sect_;
|
scoped_ptr<CriticalSectionWrapper> crit_sect_;
|
||||||
|
|
||||||
// These values are used by NACK module to estimate time-to-play of
|
// These values are used by NACK module to estimate time-to-play of
|
||||||
// a missing packet. Occasionally, NetEq might decide to decode more
|
// a missing packet. Occasionally, NetEq might decide to decode more
|
||||||
|
|||||||
Reference in New Issue
Block a user