Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(261)

Unified Diff: webrtc/modules/audio_mixer/source/new_audio_conference_mixer_impl.cc

Issue 2111293003: Removed callback between old AudioConferenceMixer and OutputMixer. The audio frame with mixed audio… (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@new_mixer_format
Patch Set: Renamed variables, removed DCHECK(false), changed back copyright years. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/audio_mixer/source/new_audio_conference_mixer_impl.cc
diff --git a/webrtc/modules/audio_mixer/source/new_audio_conference_mixer_impl.cc b/webrtc/modules/audio_mixer/source/new_audio_conference_mixer_impl.cc
index 36d70b217133e9f77643eadb4c02516b1f9109ca..57d4a9d56a27d333e0588d21fe7eefe2f6346174 100644
--- a/webrtc/modules/audio_mixer/source/new_audio_conference_mixer_impl.cc
+++ b/webrtc/modules/audio_mixer/source/new_audio_conference_mixer_impl.cc
@@ -22,15 +22,15 @@
namespace webrtc {
namespace {
-struct ParticipantFrameStruct {
- ParticipantFrameStruct(MixerAudioSource* p, AudioFrame* a, bool m)
- : participant(p), audioFrame(a), muted(m) {}
- MixerAudioSource* participant;
- AudioFrame* audioFrame;
+struct AudioSourceWithFrame {
+ AudioSourceWithFrame(MixerAudioSource* p, AudioFrame* a, bool m)
+ : audio_source(p), audio_frame(a), muted(m) {}
+ MixerAudioSource* audio_source;
+ AudioFrame* audio_frame;
bool muted;
};
-typedef std::list<ParticipantFrameStruct*> ParticipantFrameStructList;
+typedef std::list<AudioSourceWithFrame*> AudioSourceWithFrameList;
// Mix |frame| into |mixed_frame|, with saturation protection and upmixing.
// These effects are applied to |frame| itself prior to mixing. Assumes that
@@ -39,7 +39,7 @@ typedef std::list<ParticipantFrameStruct*> ParticipantFrameStructList;
//
// TODO(andrew): consider not modifying |frame| here.
void MixFrames(AudioFrame* mixed_frame, AudioFrame* frame, bool use_limiter) {
- assert(mixed_frame->num_channels_ >= frame->num_channels_);
+ RTC_DCHECK_GE(mixed_frame->num_channels_, frame->num_channels_);
if (use_limiter) {
// Divide by two to avoid saturation in the mixing.
// This is only meaningful if the limiter will be used.
@@ -47,7 +47,8 @@ void MixFrames(AudioFrame* mixed_frame, AudioFrame* frame, bool use_limiter) {
}
if (mixed_frame->num_channels_ > frame->num_channels_) {
// We only support mono-to-stereo.
- assert(mixed_frame->num_channels_ == 2 && frame->num_channels_ == 1);
+ RTC_DCHECK_EQ(mixed_frame->num_channels_, static_cast<size_t>(2));
+ RTC_DCHECK_EQ(frame->num_channels_, static_cast<size_t>(1));
AudioFrameOperations::MonoToStereo(frame);
}
@@ -111,13 +112,12 @@ NewAudioConferenceMixer* NewAudioConferenceMixer::Create(int id) {
NewAudioConferenceMixerImpl::NewAudioConferenceMixerImpl(int id)
: _id(id),
_minimumMixingFreq(kLowestPossible),
- _mixReceiver(NULL),
_outputFrequency(kDefaultFrequency),
_sampleSize(0),
_audioFramePool(NULL),
- _participantList(),
- _additionalParticipantList(),
- _numMixedParticipants(0),
+ audio_source_list_(),
+ additional_audio_source_list_(),
+ num_mixed_audio_sources_(0),
use_limiter_(true),
_timeStamp(0),
_timeScheduler(kProcessPeriodicityInMs),
@@ -171,7 +171,7 @@ bool NewAudioConferenceMixerImpl::Init() {
NewAudioConferenceMixerImpl::~NewAudioConferenceMixerImpl() {
MemoryPool<AudioFrame>::DeleteMemoryPool(_audioFramePool);
- assert(_audioFramePool == NULL);
+ RTC_DCHECK_EQ(_audioFramePool, static_cast<MemoryPool<AudioFrame>*>(nullptr));
}
// Process should be called every kProcessPeriodicityInMs ms
@@ -182,17 +182,22 @@ int64_t NewAudioConferenceMixerImpl::TimeUntilNextProcess() {
WEBRTC_TRACE(kTraceError, kTraceAudioMixerServer, _id,
"failed in TimeToNextUpdate() call");
// Sanity check
- assert(false);
+ RTC_NOTREACHED();
return -1;
}
return timeUntilNextProcess;
}
void NewAudioConferenceMixerImpl::Process() {
- size_t remainingParticipantsAllowedToMix = kMaximumAmountOfMixedParticipants;
+ // TODO(aleloi) Remove this method.
+ RTC_NOTREACHED();
+}
+
+void NewAudioConferenceMixerImpl::Mix(AudioFrame* audio_frame_for_mixing) {
+ size_t remainingAudioSourcesAllowedToMix = kMaximumAmountOfMixedAudioSources;
{
CriticalSectionScoped cs(_crit.get());
- assert(_processCalls == 0);
+ RTC_DCHECK_EQ(_processCalls, 0);
_processCalls++;
// Let the scheduler know that we are running one iteration.
@@ -202,7 +207,7 @@ void NewAudioConferenceMixerImpl::Process() {
AudioFrameList mixList;
AudioFrameList rampOutList;
AudioFrameList additionalFramesList;
- std::map<int, MixerAudioSource*> mixedParticipantsMap;
+ std::map<int, MixerAudioSource*> mixedAudioSourcesMap;
{
CriticalSectionScoped cs(_cbCrit.get());
@@ -210,7 +215,7 @@ void NewAudioConferenceMixerImpl::Process() {
// SILK can run in 12 kHz and 24 kHz. These frequencies are not
// supported so use the closest higher frequency to not lose any
// information.
- // TODO(henrike): this is probably more appropriate to do in
+ // TODO(aleloi): this is probably more appropriate to do in
// GetLowestMixingFrequency().
if (lowFreq == 12000) {
lowFreq = 16000;
@@ -244,7 +249,7 @@ void NewAudioConferenceMixerImpl::Process() {
}
break;
default:
- assert(false);
+ RTC_NOTREACHED();
CriticalSectionScoped cs(_crit.get());
_processCalls--;
@@ -252,69 +257,49 @@ void NewAudioConferenceMixerImpl::Process() {
}
}
- UpdateToMix(&mixList, &rampOutList, &mixedParticipantsMap,
- &remainingParticipantsAllowedToMix);
+ UpdateToMix(&mixList, &rampOutList, &mixedAudioSourcesMap,
+ &remainingAudioSourcesAllowedToMix);
GetAdditionalAudio(&additionalFramesList);
- UpdateMixedStatus(mixedParticipantsMap);
+ UpdateMixedStatus(mixedAudioSourcesMap);
}
- // Get an AudioFrame for mixing from the memory pool.
- AudioFrame* mixedAudio = NULL;
- if (_audioFramePool->PopMemory(mixedAudio) == -1) {
- WEBRTC_TRACE(kTraceMemory, kTraceAudioMixerServer, _id,
- "failed PopMemory() call");
- assert(false);
- return;
- }
+ // TODO(aleloi): it might be better to decide the number of channels
+ // with an API instead of dynamically.
- {
- CriticalSectionScoped cs(_crit.get());
-
- // TODO(henrike): it might be better to decide the number of channels
- // with an API instead of dynamically.
+ // Find the max channels over all mixing lists.
+ const size_t num_mixed_channels = std::max(
+ MaxNumChannels(&mixList), std::max(MaxNumChannels(&additionalFramesList),
+ MaxNumChannels(&rampOutList)));
- // Find the max channels over all mixing lists.
- const size_t num_mixed_channels =
- std::max(MaxNumChannels(&mixList),
- std::max(MaxNumChannels(&additionalFramesList),
- MaxNumChannels(&rampOutList)));
+ audio_frame_for_mixing->UpdateFrame(
+ -1, _timeStamp, NULL, 0, _outputFrequency, AudioFrame::kNormalSpeech,
+ AudioFrame::kVadPassive, num_mixed_channels);
- mixedAudio->UpdateFrame(-1, _timeStamp, NULL, 0, _outputFrequency,
- AudioFrame::kNormalSpeech, AudioFrame::kVadPassive,
- num_mixed_channels);
+ _timeStamp += static_cast<uint32_t>(_sampleSize);
- _timeStamp += static_cast<uint32_t>(_sampleSize);
+ use_limiter_ = num_mixed_audio_sources_ > 1 &&
+ _outputFrequency <= AudioProcessing::kMaxNativeSampleRateHz;
- // We only use the limiter if it supports the output sample rate and
- // we're actually mixing multiple streams.
- use_limiter_ = _numMixedParticipants > 1 &&
- _outputFrequency <= AudioProcessing::kMaxNativeSampleRateHz;
+ // We only use the limiter if it supports the output sample rate and
+ // we're actually mixing multiple streams.
+ MixFromList(audio_frame_for_mixing, mixList, _id, use_limiter_);
- MixFromList(mixedAudio, mixList);
- MixAnonomouslyFromList(mixedAudio, additionalFramesList);
- MixAnonomouslyFromList(mixedAudio, rampOutList);
+ {
+ CriticalSectionScoped cs(_crit.get());
+ MixAnonomouslyFromList(audio_frame_for_mixing, additionalFramesList);
+ MixAnonomouslyFromList(audio_frame_for_mixing, rampOutList);
- if (mixedAudio->samples_per_channel_ == 0) {
+ if (audio_frame_for_mixing->samples_per_channel_ == 0) {
// Nothing was mixed, set the audio samples to silence.
- mixedAudio->samples_per_channel_ = _sampleSize;
- mixedAudio->Mute();
+ audio_frame_for_mixing->samples_per_channel_ = _sampleSize;
+ audio_frame_for_mixing->Mute();
} else {
// Only call the limiter if we have something to mix.
- LimitMixedAudio(mixedAudio);
+ LimitMixedAudio(audio_frame_for_mixing);
}
}
- {
- CriticalSectionScoped cs(_cbCrit.get());
- if (_mixReceiver != NULL) {
- const AudioFrame** dummy = NULL;
- _mixReceiver->NewMixedAudio(_id, *mixedAudio, dummy, 0);
- }
- }
-
- // Reclaim all outstanding memory.
- _audioFramePool->PushMemory(mixedAudio);
ClearAudioFrameList(&mixList);
ClearAudioFrameList(&rampOutList);
ClearAudioFrameList(&additionalFramesList);
@@ -325,25 +310,6 @@ void NewAudioConferenceMixerImpl::Process() {
return;
}
-int32_t NewAudioConferenceMixerImpl::RegisterMixedStreamCallback(
- OldAudioMixerOutputReceiver* mixReceiver) {
- CriticalSectionScoped cs(_cbCrit.get());
- if (_mixReceiver != NULL) {
- return -1;
- }
- _mixReceiver = mixReceiver;
- return 0;
-}
-
-int32_t NewAudioConferenceMixerImpl::UnRegisterMixedStreamCallback() {
- CriticalSectionScoped cs(_cbCrit.get());
- if (_mixReceiver == NULL) {
- return -1;
- }
- _mixReceiver = NULL;
- return 0;
-}
-
int32_t NewAudioConferenceMixerImpl::SetOutputFrequency(
const Frequency& frequency) {
CriticalSectionScoped cs(_crit.get());
@@ -362,17 +328,17 @@ NewAudioConferenceMixerImpl::OutputFrequency() const {
}
int32_t NewAudioConferenceMixerImpl::SetMixabilityStatus(
- MixerAudioSource* participant,
+ MixerAudioSource* audio_source,
bool mixable) {
if (!mixable) {
- // Anonymous participants are in a separate list. Make sure that the
- // participant is in the _participantList if it is being mixed.
- SetAnonymousMixabilityStatus(participant, false);
+ // Anonymous audio sources are in a separate list. Make sure that the
+ // audio source is in the _audioSourceList if it is being mixed.
+ SetAnonymousMixabilityStatus(audio_source, false);
}
- size_t numMixedParticipants;
+ size_t numMixedAudioSources;
{
CriticalSectionScoped cs(_cbCrit.get());
- const bool isMixed = IsParticipantInList(*participant, _participantList);
+ const bool isMixed = IsAudioSourceInList(*audio_source, audio_source_list_);
// API must be called with a new state.
if (!(mixable ^ isMixed)) {
WEBRTC_TRACE(kTraceWarning, kTraceAudioMixerServer, _id,
@@ -381,75 +347,77 @@ int32_t NewAudioConferenceMixerImpl::SetMixabilityStatus(
}
bool success = false;
if (mixable) {
- success = AddParticipantToList(participant, &_participantList);
+ success = AddAudioSourceToList(audio_source, &audio_source_list_);
} else {
- success = RemoveParticipantFromList(participant, &_participantList);
+ success = RemoveAudioSourceFromList(audio_source, &audio_source_list_);
}
if (!success) {
WEBRTC_TRACE(kTraceError, kTraceAudioMixerServer, _id,
- "failed to %s participant", mixable ? "add" : "remove");
- assert(false);
+ "failed to %s audio_source", mixable ? "add" : "remove");
+ RTC_NOTREACHED();
return -1;
}
- size_t numMixedNonAnonymous = _participantList.size();
- if (numMixedNonAnonymous > kMaximumAmountOfMixedParticipants) {
- numMixedNonAnonymous = kMaximumAmountOfMixedParticipants;
+ size_t numMixedNonAnonymous = audio_source_list_.size();
+ if (numMixedNonAnonymous > kMaximumAmountOfMixedAudioSources) {
+ numMixedNonAnonymous = kMaximumAmountOfMixedAudioSources;
}
- numMixedParticipants =
- numMixedNonAnonymous + _additionalParticipantList.size();
+ numMixedAudioSources =
+ numMixedNonAnonymous + additional_audio_source_list_.size();
}
// A MixerAudioSource was added or removed. Make sure the scratch
// buffer is updated if necessary.
// Note: The scratch buffer may only be updated in Process().
CriticalSectionScoped cs(_crit.get());
- _numMixedParticipants = numMixedParticipants;
+ num_mixed_audio_sources_ = numMixedAudioSources;
return 0;
}
bool NewAudioConferenceMixerImpl::MixabilityStatus(
- const MixerAudioSource& participant) const {
+ const MixerAudioSource& audio_source) const {
CriticalSectionScoped cs(_cbCrit.get());
- return IsParticipantInList(participant, _participantList);
+ return IsAudioSourceInList(audio_source, audio_source_list_);
}
int32_t NewAudioConferenceMixerImpl::SetAnonymousMixabilityStatus(
- MixerAudioSource* participant,
+ MixerAudioSource* audio_source,
bool anonymous) {
CriticalSectionScoped cs(_cbCrit.get());
- if (IsParticipantInList(*participant, _additionalParticipantList)) {
+ if (IsAudioSourceInList(*audio_source, additional_audio_source_list_)) {
if (anonymous) {
return 0;
}
- if (!RemoveParticipantFromList(participant, &_additionalParticipantList)) {
+ if (!RemoveAudioSourceFromList(audio_source,
+ &additional_audio_source_list_)) {
WEBRTC_TRACE(kTraceError, kTraceAudioMixerServer, _id,
- "unable to remove participant from anonymous list");
- assert(false);
+ "unable to remove audio_source from anonymous list");
+ RTC_NOTREACHED();
return -1;
}
- return AddParticipantToList(participant, &_participantList) ? 0 : -1;
+ return AddAudioSourceToList(audio_source, &audio_source_list_) ? 0 : -1;
}
if (!anonymous) {
return 0;
}
const bool mixable =
- RemoveParticipantFromList(participant, &_participantList);
+ RemoveAudioSourceFromList(audio_source, &audio_source_list_);
if (!mixable) {
WEBRTC_TRACE(
kTraceWarning, kTraceAudioMixerServer, _id,
- "participant must be registered before turning it into anonymous");
+ "audio_source must be registered before turning it into anonymous");
// Setting anonymous status is only possible if MixerAudioSource is
// already registered.
return -1;
}
- return AddParticipantToList(participant, &_additionalParticipantList) ? 0
- : -1;
+ return AddAudioSourceToList(audio_source, &additional_audio_source_list_)
+ ? 0
+ : -1;
}
bool NewAudioConferenceMixerImpl::AnonymousMixabilityStatus(
- const MixerAudioSource& participant) const {
+ const MixerAudioSource& audio_source) const {
CriticalSectionScoped cs(_cbCrit.get());
- return IsParticipantInList(participant, _additionalParticipantList);
+ return IsAudioSourceInList(audio_source, additional_audio_source_list_);
}
int32_t NewAudioConferenceMixerImpl::SetMinimumMixingFrequency(Frequency freq) {
@@ -468,7 +436,7 @@ int32_t NewAudioConferenceMixerImpl::SetMinimumMixingFrequency(Frequency freq) {
} else {
WEBRTC_TRACE(kTraceError, kTraceAudioMixerServer, _id,
"SetMinimumMixingFrequency incorrect frequency: %i", freq);
- assert(false);
+ RTC_NOTREACHED();
return -1;
}
}
@@ -476,12 +444,12 @@ int32_t NewAudioConferenceMixerImpl::SetMinimumMixingFrequency(Frequency freq) {
// Check all AudioFrames that are to be mixed. The highest sampling frequency
// found is the lowest that can be used without losing information.
int32_t NewAudioConferenceMixerImpl::GetLowestMixingFrequency() const {
- const int participantListFrequency =
- GetLowestMixingFrequencyFromList(_participantList);
+ const int audioSourceListFrequency =
+ GetLowestMixingFrequencyFromList(audio_source_list_);
const int anonymousListFrequency =
- GetLowestMixingFrequencyFromList(_additionalParticipantList);
- const int highestFreq = (participantListFrequency > anonymousListFrequency)
- ? participantListFrequency
+ GetLowestMixingFrequencyFromList(additional_audio_source_list_);
+ const int highestFreq = (audioSourceListFrequency > anonymousListFrequency)
+ ? audioSourceListFrequency
: anonymousListFrequency;
// Check if the user specified a lowest mixing frequency.
if (_minimumMixingFreq != kLowestPossible) {
@@ -508,58 +476,58 @@ int32_t NewAudioConferenceMixerImpl::GetLowestMixingFrequencyFromList(
void NewAudioConferenceMixerImpl::UpdateToMix(
AudioFrameList* mixList,
AudioFrameList* rampOutList,
- std::map<int, MixerAudioSource*>* mixParticipantList,
+ std::map<int, MixerAudioSource*>* mixAudioSourceList,
size_t* maxAudioFrameCounter) const {
WEBRTC_TRACE(kTraceStream, kTraceAudioMixerServer, _id,
- "UpdateToMix(mixList,rampOutList,mixParticipantList,%d)",
+ "UpdateToMix(mixList,rampOutList,mixAudioSourceList,%d)",
*maxAudioFrameCounter);
const size_t mixListStartSize = mixList->size();
AudioFrameList activeList;
// Struct needed by the passive lists to keep track of which AudioFrame
// belongs to which MixerAudioSource.
- ParticipantFrameStructList passiveWasNotMixedList;
- ParticipantFrameStructList passiveWasMixedList;
- for (MixerAudioSourceList::const_iterator participant =
- _participantList.begin();
- participant != _participantList.end(); ++participant) {
- // Stop keeping track of passive participants if there are already
- // enough participants available (they wont be mixed anyway).
+ AudioSourceWithFrameList passiveWasNotMixedList;
+ AudioSourceWithFrameList passiveWasMixedList;
+ for (MixerAudioSourceList::const_iterator audio_source =
+ audio_source_list_.begin();
+ audio_source != audio_source_list_.end(); ++audio_source) {
+ // Stop keeping track of passive audioSources if there are already
+ // enough audio sources available (they wont be mixed anyway).
bool mustAddToPassiveList =
(*maxAudioFrameCounter >
(activeList.size() + passiveWasMixedList.size() +
passiveWasNotMixedList.size()));
bool wasMixed = false;
- wasMixed = (*participant)->_mixHistory->WasMixed();
+ wasMixed = (*audio_source)->_mixHistory->WasMixed();
AudioFrame* audioFrame = NULL;
if (_audioFramePool->PopMemory(audioFrame) == -1) {
WEBRTC_TRACE(kTraceMemory, kTraceAudioMixerServer, _id,
"failed PopMemory() call");
- assert(false);
+ RTC_NOTREACHED();
return;
}
audioFrame->sample_rate_hz_ = _outputFrequency;
- auto ret = (*participant)->GetAudioFrameWithMuted(_id, audioFrame);
+ auto ret = (*audio_source)->GetAudioFrameWithMuted(_id, audioFrame);
if (ret == MixerAudioSource::AudioFrameInfo::kError) {
WEBRTC_TRACE(kTraceWarning, kTraceAudioMixerServer, _id,
- "failed to GetAudioFrameWithMuted() from participant");
+ "failed to GetAudioFrameWithMuted() from audio source");
_audioFramePool->PushMemory(audioFrame);
continue;
}
const bool muted = (ret == MixerAudioSource::AudioFrameInfo::kMuted);
- if (_participantList.size() != 1) {
- // TODO(wu): Issue 3390, add support for multiple participants case.
+ if (audio_source_list_.size() != 1) {
+ // TODO(wu): Issue 3390, add support for multiple audio sources case.
audioFrame->ntp_time_ms_ = -1;
}
- // TODO(henrike): this assert triggers in some test cases where SRTP is
+ // TODO(aleloi): this assert triggers in some test cases where SRTP is
// used which prevents NetEQ from making a VAD. Temporarily disable this
// assert until the problem is fixed on a higher level.
- // assert(audioFrame->vad_activity_ != AudioFrame::kVadUnknown);
+ // RTC_DCHECK_NE(audioFrame->vad_activity_, AudioFrame::kVadUnknown);
if (audioFrame->vad_activity_ == AudioFrame::kVadUnknown) {
WEBRTC_TRACE(kTraceWarning, kTraceAudioMixerServer, _id,
- "invalid VAD state from participant");
+ "invalid VAD state from audio source");
}
if (audioFrame->vad_activity_ == AudioFrame::kVadActive) {
@@ -568,7 +536,7 @@ void NewAudioConferenceMixerImpl::UpdateToMix(
}
if (activeList.size() >= *maxAudioFrameCounter) {
- // There are already more active participants than should be
+ // There are already more active audio sources than should be
// mixed. Only keep the ones with the highest energy.
AudioFrameList::iterator replaceItem;
uint32_t lowestEnergy = muted ? 0 : CalculateEnergy(*audioFrame);
@@ -589,28 +557,30 @@ void NewAudioConferenceMixerImpl::UpdateToMix(
bool replaceWasMixed = false;
std::map<int, MixerAudioSource*>::const_iterator it =
- mixParticipantList->find(replaceFrame.frame->id_);
+ mixAudioSourceList->find(replaceFrame.frame->id_);
// When a frame is pushed to |activeList| it is also pushed
- // to mixParticipantList with the frame's id. This means
+ // to mixAudioSourceList with the frame's id. This means
// that the Find call above should never fail.
- assert(it != mixParticipantList->end());
+ RTC_DCHECK(it != mixAudioSourceList->end());
replaceWasMixed = it->second->_mixHistory->WasMixed();
- mixParticipantList->erase(replaceFrame.frame->id_);
+ mixAudioSourceList->erase(replaceFrame.frame->id_);
activeList.erase(replaceItem);
activeList.push_front(FrameAndMuteInfo(audioFrame, muted));
- (*mixParticipantList)[audioFrame->id_] = *participant;
- assert(mixParticipantList->size() <=
- kMaximumAmountOfMixedParticipants);
+ (*mixAudioSourceList)[audioFrame->id_] = *audio_source;
+ RTC_DCHECK_LE(mixAudioSourceList->size(),
+ static_cast<size_t>(kMaximumAmountOfMixedAudioSources));
if (replaceWasMixed) {
if (!replaceFrame.muted) {
RampOut(*replaceFrame.frame);
}
rampOutList->push_back(replaceFrame);
- assert(rampOutList->size() <= kMaximumAmountOfMixedParticipants);
+ RTC_DCHECK_LE(
+ rampOutList->size(),
+ static_cast<size_t>(kMaximumAmountOfMixedAudioSources));
} else {
_audioFramePool->PushMemory(replaceFrame.frame);
}
@@ -620,35 +590,38 @@ void NewAudioConferenceMixerImpl::UpdateToMix(
RampOut(*audioFrame);
}
rampOutList->push_back(FrameAndMuteInfo(audioFrame, muted));
- assert(rampOutList->size() <= kMaximumAmountOfMixedParticipants);
+ RTC_DCHECK_LE(
+ rampOutList->size(),
+ static_cast<size_t>(kMaximumAmountOfMixedAudioSources));
} else {
_audioFramePool->PushMemory(audioFrame);
}
}
} else {
activeList.push_front(FrameAndMuteInfo(audioFrame, muted));
- (*mixParticipantList)[audioFrame->id_] = *participant;
- assert(mixParticipantList->size() <= kMaximumAmountOfMixedParticipants);
+ (*mixAudioSourceList)[audioFrame->id_] = *audio_source;
+ RTC_DCHECK_LE(mixAudioSourceList->size(),
+ static_cast<size_t>(kMaximumAmountOfMixedAudioSources));
}
} else {
if (wasMixed) {
- ParticipantFrameStruct* part_struct =
- new ParticipantFrameStruct(*participant, audioFrame, muted);
+ AudioSourceWithFrame* part_struct =
+ new AudioSourceWithFrame(*audio_source, audioFrame, muted);
passiveWasMixedList.push_back(part_struct);
} else if (mustAddToPassiveList) {
if (!muted) {
RampIn(*audioFrame);
}
- ParticipantFrameStruct* part_struct =
- new ParticipantFrameStruct(*participant, audioFrame, muted);
+ AudioSourceWithFrame* part_struct =
+ new AudioSourceWithFrame(*audio_source, audioFrame, muted);
passiveWasNotMixedList.push_back(part_struct);
} else {
_audioFramePool->PushMemory(audioFrame);
}
}
}
- assert(activeList.size() <= *maxAudioFrameCounter);
- // At this point it is known which participants should be mixed. Transfer
+ RTC_DCHECK_LE(activeList.size(), *maxAudioFrameCounter);
+ // At this point it is known which audio sources should be mixed. Transfer
// this information to this functions output parameters.
for (AudioFrameList::const_iterator iter = activeList.begin();
iter != activeList.end(); ++iter) {
@@ -656,34 +629,38 @@ void NewAudioConferenceMixerImpl::UpdateToMix(
}
activeList.clear();
// Always mix a constant number of AudioFrames. If there aren't enough
- // active participants mix passive ones. Starting with those that was mixed
+ // active audio sources mix passive ones. Starting with those that was mixed
// last iteration.
- for (ParticipantFrameStructList::const_iterator iter =
+ for (AudioSourceWithFrameList::const_iterator iter =
passiveWasMixedList.begin();
iter != passiveWasMixedList.end(); ++iter) {
if (mixList->size() < *maxAudioFrameCounter + mixListStartSize) {
- mixList->push_back(FrameAndMuteInfo((*iter)->audioFrame, (*iter)->muted));
- (*mixParticipantList)[(*iter)->audioFrame->id_] = (*iter)->participant;
- assert(mixParticipantList->size() <= kMaximumAmountOfMixedParticipants);
+ mixList->push_back(
+ FrameAndMuteInfo((*iter)->audio_frame, (*iter)->muted));
+ (*mixAudioSourceList)[(*iter)->audio_frame->id_] = (*iter)->audio_source;
+ RTC_DCHECK_LE(mixAudioSourceList->size(),
+ static_cast<size_t>(kMaximumAmountOfMixedAudioSources));
} else {
- _audioFramePool->PushMemory((*iter)->audioFrame);
+ _audioFramePool->PushMemory((*iter)->audio_frame);
}
delete *iter;
}
// And finally the ones that have not been mixed for a while.
- for (ParticipantFrameStructList::const_iterator iter =
+ for (AudioSourceWithFrameList::const_iterator iter =
passiveWasNotMixedList.begin();
iter != passiveWasNotMixedList.end(); ++iter) {
if (mixList->size() < *maxAudioFrameCounter + mixListStartSize) {
- mixList->push_back(FrameAndMuteInfo((*iter)->audioFrame, (*iter)->muted));
- (*mixParticipantList)[(*iter)->audioFrame->id_] = (*iter)->participant;
- assert(mixParticipantList->size() <= kMaximumAmountOfMixedParticipants);
+ mixList->push_back(
+ FrameAndMuteInfo((*iter)->audio_frame, (*iter)->muted));
+ (*mixAudioSourceList)[(*iter)->audio_frame->id_] = (*iter)->audio_source;
+ RTC_DCHECK_LE(mixAudioSourceList->size(),
+ static_cast<size_t>(kMaximumAmountOfMixedAudioSources));
} else {
- _audioFramePool->PushMemory((*iter)->audioFrame);
+ _audioFramePool->PushMemory((*iter)->audio_frame);
}
delete *iter;
}
- assert(*maxAudioFrameCounter + mixListStartSize >= mixList->size());
+ RTC_DCHECK_GE(*maxAudioFrameCounter + mixListStartSize, mixList->size());
*maxAudioFrameCounter += mixListStartSize - mixList->size();
}
@@ -691,30 +668,30 @@ void NewAudioConferenceMixerImpl::GetAdditionalAudio(
AudioFrameList* additionalFramesList) const {
WEBRTC_TRACE(kTraceStream, kTraceAudioMixerServer, _id,
"GetAdditionalAudio(additionalFramesList)");
- // The GetAudioFrameWithMuted() callback may result in the participant being
- // removed from additionalParticipantList_. If that happens it will
- // invalidate any iterators. Create a copy of the participants list such
- // that the list of participants can be traversed safely.
- MixerAudioSourceList additionalParticipantList;
- additionalParticipantList.insert(additionalParticipantList.begin(),
- _additionalParticipantList.begin(),
- _additionalParticipantList.end());
-
- for (MixerAudioSourceList::const_iterator participant =
- additionalParticipantList.begin();
- participant != additionalParticipantList.end(); ++participant) {
+ // The GetAudioFrameWithMuted() callback may result in the audio source being
+ // removed from additionalAudioSourceList_. If that happens it will
+ // invalidate any iterators. Create a copy of the audio sources list such
+ // that the list of audio sources can be traversed safely.
+ MixerAudioSourceList additionalAudioSourceList;
+ additionalAudioSourceList.insert(additionalAudioSourceList.begin(),
+ additional_audio_source_list_.begin(),
+ additional_audio_source_list_.end());
+
+ for (MixerAudioSourceList::const_iterator audio_source =
+ additionalAudioSourceList.begin();
+ audio_source != additionalAudioSourceList.end(); ++audio_source) {
AudioFrame* audioFrame = NULL;
if (_audioFramePool->PopMemory(audioFrame) == -1) {
WEBRTC_TRACE(kTraceMemory, kTraceAudioMixerServer, _id,
"failed PopMemory() call");
- assert(false);
+ RTC_NOTREACHED();
return;
}
audioFrame->sample_rate_hz_ = _outputFrequency;
- auto ret = (*participant)->GetAudioFrameWithMuted(_id, audioFrame);
+ auto ret = (*audio_source)->GetAudioFrameWithMuted(_id, audioFrame);
if (ret == MixerAudioSource::AudioFrameInfo::kError) {
WEBRTC_TRACE(kTraceWarning, kTraceAudioMixerServer, _id,
- "failed to GetAudioFrameWithMuted() from participant");
+ "failed to GetAudioFrameWithMuted() from audio_source");
_audioFramePool->PushMemory(audioFrame);
continue;
}
@@ -729,26 +706,27 @@ void NewAudioConferenceMixerImpl::GetAdditionalAudio(
}
void NewAudioConferenceMixerImpl::UpdateMixedStatus(
- const std::map<int, MixerAudioSource*>& mixedParticipantsMap) const {
+ const std::map<int, MixerAudioSource*>& mixedAudioSourcesMap) const {
WEBRTC_TRACE(kTraceStream, kTraceAudioMixerServer, _id,
- "UpdateMixedStatus(mixedParticipantsMap)");
- assert(mixedParticipantsMap.size() <= kMaximumAmountOfMixedParticipants);
+ "UpdateMixedStatus(mixedAudioSourcesMap)");
+ RTC_DCHECK_LE(mixedAudioSourcesMap.size(),
+ static_cast<size_t>(kMaximumAmountOfMixedAudioSources));
- // Loop through all participants. If they are in the mix map they
+ // Loop through all audio_sources. If they are in the mix map they
// were mixed.
- for (MixerAudioSourceList::const_iterator participant =
- _participantList.begin();
- participant != _participantList.end(); ++participant) {
+ for (MixerAudioSourceList::const_iterator audio_source =
+ audio_source_list_.begin();
+ audio_source != audio_source_list_.end(); ++audio_source) {
bool isMixed = false;
for (std::map<int, MixerAudioSource*>::const_iterator it =
- mixedParticipantsMap.begin();
- it != mixedParticipantsMap.end(); ++it) {
- if (it->second == *participant) {
+ mixedAudioSourcesMap.begin();
+ it != mixedAudioSourcesMap.end(); ++it) {
+ if (it->second == *audio_source) {
isMixed = true;
break;
}
}
- (*participant)->_mixHistory->SetIsMixed(isMixed);
+ (*audio_source)->_mixHistory->SetIsMixed(isMixed);
}
}
@@ -763,42 +741,42 @@ void NewAudioConferenceMixerImpl::ClearAudioFrameList(
audioFrameList->clear();
}
-bool NewAudioConferenceMixerImpl::IsParticipantInList(
- const MixerAudioSource& participant,
- const MixerAudioSourceList& participantList) const {
+bool NewAudioConferenceMixerImpl::IsAudioSourceInList(
+ const MixerAudioSource& audio_source,
+ const MixerAudioSourceList& audioSourceList) const {
WEBRTC_TRACE(kTraceStream, kTraceAudioMixerServer, _id,
- "IsParticipantInList(participant,participantList)");
- for (MixerAudioSourceList::const_iterator iter = participantList.begin();
- iter != participantList.end(); ++iter) {
- if (&participant == *iter) {
+ "IsAudioSourceInList(audio_source,audioSourceList)");
+ for (MixerAudioSourceList::const_iterator iter = audioSourceList.begin();
+ iter != audioSourceList.end(); ++iter) {
+ if (&audio_source == *iter) {
return true;
}
}
return false;
}
-bool NewAudioConferenceMixerImpl::AddParticipantToList(
- MixerAudioSource* participant,
- MixerAudioSourceList* participantList) const {
+bool NewAudioConferenceMixerImpl::AddAudioSourceToList(
+ MixerAudioSource* audio_source,
+ MixerAudioSourceList* audioSourceList) const {
WEBRTC_TRACE(kTraceStream, kTraceAudioMixerServer, _id,
- "AddParticipantToList(participant, participantList)");
- participantList->push_back(participant);
+ "AddAudioSourceToList(audio_source, audioSourceList)");
+ audioSourceList->push_back(audio_source);
// Make sure that the mixed status is correct for new MixerAudioSource.
- participant->_mixHistory->ResetMixedStatus();
+ audio_source->_mixHistory->ResetMixedStatus();
return true;
}
-bool NewAudioConferenceMixerImpl::RemoveParticipantFromList(
- MixerAudioSource* participant,
- MixerAudioSourceList* participantList) const {
+bool NewAudioConferenceMixerImpl::RemoveAudioSourceFromList(
+ MixerAudioSource* audio_source,
+ MixerAudioSourceList* audioSourceList) const {
WEBRTC_TRACE(kTraceStream, kTraceAudioMixerServer, _id,
- "RemoveParticipantFromList(participant, participantList)");
- for (MixerAudioSourceList::iterator iter = participantList->begin();
- iter != participantList->end(); ++iter) {
- if (*iter == participant) {
- participantList->erase(iter);
- // Participant is no longer mixed, reset to default.
- participant->_mixHistory->ResetMixedStatus();
+ "RemoveAudioSourceFromList(audio_source, audioSourceList)");
+ for (MixerAudioSourceList::iterator iter = audioSourceList->begin();
+ iter != audioSourceList->end(); ++iter) {
+ if (*iter == audio_source) {
+ audioSourceList->erase(iter);
+ // AudioSource is no longer mixed, reset to default.
+ audio_source->_mixHistory->ResetMixedStatus();
return true;
}
}
@@ -807,15 +785,17 @@ bool NewAudioConferenceMixerImpl::RemoveParticipantFromList(
int32_t NewAudioConferenceMixerImpl::MixFromList(
AudioFrame* mixedAudio,
- const AudioFrameList& audioFrameList) const {
- WEBRTC_TRACE(kTraceStream, kTraceAudioMixerServer, _id,
+ const AudioFrameList& audioFrameList,
+ int32_t id,
+ bool use_limiter) {
+ WEBRTC_TRACE(kTraceStream, kTraceAudioMixerServer, id,
"MixFromList(mixedAudio, audioFrameList)");
if (audioFrameList.empty())
return 0;
uint32_t position = 0;
- if (_numMixedParticipants == 1) {
+ if (audioFrameList.size() == 1) {
mixedAudio->timestamp_ = audioFrameList.front().frame->timestamp_;
mixedAudio->elapsed_time_ms_ =
audioFrameList.front().frame->elapsed_time_ms_;
@@ -828,17 +808,17 @@ int32_t NewAudioConferenceMixerImpl::MixFromList(
for (AudioFrameList::const_iterator iter = audioFrameList.begin();
iter != audioFrameList.end(); ++iter) {
- if (position >= kMaximumAmountOfMixedParticipants) {
+ if (position >= kMaximumAmountOfMixedAudioSources) {
WEBRTC_TRACE(
- kTraceMemory, kTraceAudioMixerServer, _id,
- "Trying to mix more than max amount of mixed participants:%d!",
- kMaximumAmountOfMixedParticipants);
+ kTraceMemory, kTraceAudioMixerServer, id,
+ "Trying to mix more than max amount of mixed audio sources:%d!",
+ kMaximumAmountOfMixedAudioSources);
// Assert and avoid crash
- assert(false);
+ RTC_NOTREACHED();
position = 0;
}
if (!iter->muted) {
- MixFrames(mixedAudio, iter->frame, use_limiter_);
+ MixFrames(mixedAudio, iter->frame, use_limiter);
}
position++;
@@ -880,7 +860,7 @@ bool NewAudioConferenceMixerImpl::LimitMixedAudio(
//
// It's possible to apply the gain in the AGC (with a target level of 0 dbFS
// and compression gain of 6 dB). However, in the transition frame when this
- // is enabled (moving from one to two participants) it has the potential to
+ // is enabled (moving from one to two audio sources) it has the potential to
// create discontinuities in the mixed frame.
//
// Instead we double the frame (with addition since left-shifting a
@@ -890,7 +870,7 @@ bool NewAudioConferenceMixerImpl::LimitMixedAudio(
if (error != _limiter->kNoError) {
WEBRTC_TRACE(kTraceError, kTraceAudioMixerServer, _id,
"Error from AudioProcessing: %d", error);
- assert(false);
+ RTC_NOTREACHED();
return false;
}
return true;

Powered by Google App Engine
This is Rietveld 408576698