Reland "Removing webrtc::AudioFrame::energy_."

Some WebRTC client had a problem with the change "Removing webrtc::AudioFrame::energy_". Now it is solved.

This reverts commit 2bdcfadc8abd418a30dd5cdf54ba45a429d3d9bf.

BUG=webrtc:3315

Review URL: https://codereview.webrtc.org/1638553003

Cr-Commit-Position: refs/heads/master@{#11448}
This commit is contained in:
minyue 2016-02-01 10:02:40 -08:00 committed by Commit bot
parent d8de1154c9
commit e37a2d1802
5 changed files with 13 additions and 39 deletions

View File

@ -583,17 +583,16 @@ void AudioConferenceMixerImpl::UpdateToMix(
// There are already more active participants than should be
// mixed. Only keep the ones with the highest energy.
AudioFrameList::iterator replaceItem;
CalculateEnergy(*audioFrame);
uint32_t lowestEnergy = audioFrame->energy_;
uint32_t lowestEnergy = CalculateEnergy(*audioFrame);
bool found_replace_item = false;
for (AudioFrameList::iterator iter = activeList.begin();
iter != activeList.end();
++iter) {
CalculateEnergy(**iter);
if((*iter)->energy_ < lowestEnergy) {
const uint32_t energy = CalculateEnergy(**iter);
if(energy < lowestEnergy) {
replaceItem = iter;
lowestEnergy = (*iter)->energy_;
lowestEnergy = energy;
found_replace_item = true;
}
}
@ -783,18 +782,6 @@ void AudioConferenceMixerImpl::ClearAudioFrameList(
audioFrameList->clear();
}
void AudioConferenceMixerImpl::UpdateVADPositiveParticipants(
AudioFrameList* mixList) const {
WEBRTC_TRACE(kTraceStream, kTraceAudioMixerServer, _id,
"UpdateVADPositiveParticipants(mixList)");
for (AudioFrameList::const_iterator iter = mixList->begin();
iter != mixList->end();
++iter) {
CalculateEnergy(**iter);
}
}
bool AudioConferenceMixerImpl::IsParticipantInList(
const MixerParticipant& participant,
const MixerParticipantList& participantList) const {

View File

@ -116,10 +116,6 @@ private:
// Clears audioFrameList and reclaims all memory associated with it.
void ClearAudioFrameList(AudioFrameList* audioFrameList) const;
// Update the list of MixerParticipants who have a positive VAD. mixList
// should be a list of AudioFrames
void UpdateVADPositiveParticipants(AudioFrameList* mixList) const;
// This function returns true if it finds the MixerParticipant in the
// specified list of MixerParticipants.
bool IsParticipantInList(const MixerParticipant& participant,

View File

@ -39,16 +39,16 @@ const size_t rampSize = sizeof(rampArray)/sizeof(rampArray[0]);
} // namespace
namespace webrtc {
void CalculateEnergy(AudioFrame& audioFrame)
uint32_t CalculateEnergy(const AudioFrame& audioFrame)
{
audioFrame.energy_ = 0;
uint32_t energy = 0;
for(size_t position = 0; position < audioFrame.samples_per_channel_;
position++)
{
// TODO(andrew): this can easily overflow.
audioFrame.energy_ += audioFrame.data_[position] *
audioFrame.data_[position];
energy += audioFrame.data_[position] * audioFrame.data_[position];
}
return energy;
}
void RampIn(AudioFrame& audioFrame)

View File

@ -11,11 +11,13 @@
#ifndef WEBRTC_MODULES_AUDIO_CONFERENCE_MIXER_SOURCE_AUDIO_FRAME_MANIPULATOR_H_
#define WEBRTC_MODULES_AUDIO_CONFERENCE_MIXER_SOURCE_AUDIO_FRAME_MANIPULATOR_H_
#include "webrtc/typedefs.h"
namespace webrtc {
class AudioFrame;
// Updates the audioFrame's energy (based on its samples).
void CalculateEnergy(AudioFrame& audioFrame);
uint32_t CalculateEnergy(const AudioFrame& audioFrame);
// Apply linear step function that ramps in/out the audio samples in audioFrame
void RampIn(AudioFrame& audioFrame);

View File

@ -508,7 +508,7 @@ class AudioFrame {
void UpdateFrame(int id, uint32_t timestamp, const int16_t* data,
size_t samples_per_channel, int sample_rate_hz,
SpeechType speech_type, VADActivity vad_activity,
size_t num_channels = 1, uint32_t energy = -1);
size_t num_channels = 1);
AudioFrame& Append(const AudioFrame& rhs);
@ -535,11 +535,6 @@ class AudioFrame {
size_t num_channels_;
SpeechType speech_type_;
VADActivity vad_activity_;
// Note that there is no guarantee that |energy_| is correct. Any user of this
// member must verify that the value is correct.
// TODO(henrike) Remove |energy_|.
// See https://code.google.com/p/webrtc/issues/detail?id=3315.
uint32_t energy_;
bool interleaved_;
private:
@ -563,7 +558,6 @@ inline void AudioFrame::Reset() {
num_channels_ = 0;
speech_type_ = kUndefined;
vad_activity_ = kVadUnknown;
energy_ = 0xffffffff;
interleaved_ = true;
}
@ -574,8 +568,7 @@ inline void AudioFrame::UpdateFrame(int id,
int sample_rate_hz,
SpeechType speech_type,
VADActivity vad_activity,
size_t num_channels,
uint32_t energy) {
size_t num_channels) {
id_ = id;
timestamp_ = timestamp;
samples_per_channel_ = samples_per_channel;
@ -583,7 +576,6 @@ inline void AudioFrame::UpdateFrame(int id,
speech_type_ = speech_type;
vad_activity_ = vad_activity;
num_channels_ = num_channels;
energy_ = energy;
const size_t length = samples_per_channel * num_channels;
assert(length <= kMaxDataSizeSamples);
@ -606,7 +598,6 @@ inline void AudioFrame::CopyFrom(const AudioFrame& src) {
speech_type_ = src.speech_type_;
vad_activity_ = src.vad_activity_;
num_channels_ = src.num_channels_;
energy_ = src.energy_;
interleaved_ = src.interleaved_;
const size_t length = samples_per_channel_ * num_channels_;
@ -701,7 +692,6 @@ inline AudioFrame& AudioFrame::operator+=(const AudioFrame& rhs) {
data_[i] = ClampToInt16(wrap_guard);
}
}
energy_ = 0xffffffff;
return *this;
}
@ -725,7 +715,6 @@ inline AudioFrame& AudioFrame::operator-=(const AudioFrame& rhs) {
static_cast<int32_t>(data_[i]) - static_cast<int32_t>(rhs.data_[i]);
data_[i] = ClampToInt16(wrap_guard);
}
energy_ = 0xffffffff;
return *this;
}