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

Side by Side Diff: webrtc/modules/audio_conference_mixer/source/audio_conference_mixer_impl.cc

Issue 1980343002: Add FrameAndMuteInfo to AudioConferenceMixer (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@mixer-mod-1
Patch Set: Don't create zero-samples for muted frames Created 4 years, 7 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 unified diff | Download patch
« no previous file with comments | « webrtc/modules/audio_conference_mixer/source/audio_conference_mixer_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 51
52 *mixed_frame += *frame; 52 *mixed_frame += *frame;
53 } 53 }
54 54
55 // Return the max number of channels from a |list| composed of AudioFrames. 55 // Return the max number of channels from a |list| composed of AudioFrames.
56 size_t MaxNumChannels(const AudioFrameList* list) { 56 size_t MaxNumChannels(const AudioFrameList* list) {
57 size_t max_num_channels = 1; 57 size_t max_num_channels = 1;
58 for (AudioFrameList::const_iterator iter = list->begin(); 58 for (AudioFrameList::const_iterator iter = list->begin();
59 iter != list->end(); 59 iter != list->end();
60 ++iter) { 60 ++iter) {
61 max_num_channels = std::max(max_num_channels, (*iter)->num_channels_); 61 max_num_channels = std::max(max_num_channels, (*iter).frame->num_channels_);
62 } 62 }
63 return max_num_channels; 63 return max_num_channels;
64 } 64 }
65 65
66 } // namespace 66 } // namespace
67 67
68 MixerParticipant::MixerParticipant() 68 MixerParticipant::MixerParticipant()
69 : _mixHistory(new MixHistory()) { 69 : _mixHistory(new MixHistory()) {
70 } 70 }
71 71
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 wasMixed = (*participant)->_mixHistory->WasMixed(); 548 wasMixed = (*participant)->_mixHistory->WasMixed();
549 AudioFrame* audioFrame = NULL; 549 AudioFrame* audioFrame = NULL;
550 if(_audioFramePool->PopMemory(audioFrame) == -1) { 550 if(_audioFramePool->PopMemory(audioFrame) == -1) {
551 WEBRTC_TRACE(kTraceMemory, kTraceAudioMixerServer, _id, 551 WEBRTC_TRACE(kTraceMemory, kTraceAudioMixerServer, _id,
552 "failed PopMemory() call"); 552 "failed PopMemory() call");
553 assert(false); 553 assert(false);
554 return; 554 return;
555 } 555 }
556 audioFrame->sample_rate_hz_ = _outputFrequency; 556 audioFrame->sample_rate_hz_ = _outputFrequency;
557 557
558 bool muted = false;
558 if((*participant)->GetAudioFrame(_id, audioFrame) != 0) { 559 if((*participant)->GetAudioFrame(_id, audioFrame) != 0) {
559 WEBRTC_TRACE(kTraceWarning, kTraceAudioMixerServer, _id, 560 WEBRTC_TRACE(kTraceWarning, kTraceAudioMixerServer, _id,
560 "failed to GetAudioFrame() from participant"); 561 "failed to GetAudioFrame() from participant");
561 _audioFramePool->PushMemory(audioFrame); 562 _audioFramePool->PushMemory(audioFrame);
562 continue; 563 continue;
563 } 564 }
564 if (_participantList.size() != 1) { 565 if (_participantList.size() != 1) {
565 // TODO(wu): Issue 3390, add support for multiple participants case. 566 // TODO(wu): Issue 3390, add support for multiple participants case.
566 audioFrame->ntp_time_ms_ = -1; 567 audioFrame->ntp_time_ms_ = -1;
567 } 568 }
(...skipping 15 matching lines...) Expand all
583 if(activeList.size() >= *maxAudioFrameCounter) { 584 if(activeList.size() >= *maxAudioFrameCounter) {
584 // There are already more active participants than should be 585 // There are already more active participants than should be
585 // mixed. Only keep the ones with the highest energy. 586 // mixed. Only keep the ones with the highest energy.
586 AudioFrameList::iterator replaceItem; 587 AudioFrameList::iterator replaceItem;
587 uint32_t lowestEnergy = CalculateEnergy(*audioFrame); 588 uint32_t lowestEnergy = CalculateEnergy(*audioFrame);
588 589
589 bool found_replace_item = false; 590 bool found_replace_item = false;
590 for (AudioFrameList::iterator iter = activeList.begin(); 591 for (AudioFrameList::iterator iter = activeList.begin();
591 iter != activeList.end(); 592 iter != activeList.end();
592 ++iter) { 593 ++iter) {
593 const uint32_t energy = CalculateEnergy(**iter); 594 const uint32_t energy = CalculateEnergy(*iter->frame);
594 if(energy < lowestEnergy) { 595 if(energy < lowestEnergy) {
595 replaceItem = iter; 596 replaceItem = iter;
596 lowestEnergy = energy; 597 lowestEnergy = energy;
597 found_replace_item = true; 598 found_replace_item = true;
598 } 599 }
599 } 600 }
600 if(found_replace_item) { 601 if(found_replace_item) {
601 AudioFrame* replaceFrame = *replaceItem; 602 FrameAndMuteInfo replaceFrame = *replaceItem;
602 603
603 bool replaceWasMixed = false; 604 bool replaceWasMixed = false;
604 std::map<int, MixerParticipant*>::const_iterator it = 605 std::map<int, MixerParticipant*>::const_iterator it =
605 mixParticipantList->find(replaceFrame->id_); 606 mixParticipantList->find(replaceFrame.frame->id_);
606 607
607 // When a frame is pushed to |activeList| it is also pushed 608 // When a frame is pushed to |activeList| it is also pushed
608 // to mixParticipantList with the frame's id. This means 609 // to mixParticipantList with the frame's id. This means
609 // that the Find call above should never fail. 610 // that the Find call above should never fail.
610 assert(it != mixParticipantList->end()); 611 assert(it != mixParticipantList->end());
611 replaceWasMixed = it->second->_mixHistory->WasMixed(); 612 replaceWasMixed = it->second->_mixHistory->WasMixed();
612 613
613 mixParticipantList->erase(replaceFrame->id_); 614 mixParticipantList->erase(replaceFrame.frame->id_);
614 activeList.erase(replaceItem); 615 activeList.erase(replaceItem);
615 616
616 activeList.push_front(audioFrame); 617 activeList.push_front(FrameAndMuteInfo(audioFrame, muted));
617 (*mixParticipantList)[audioFrame->id_] = *participant; 618 (*mixParticipantList)[audioFrame->id_] = *participant;
618 assert(mixParticipantList->size() <= 619 assert(mixParticipantList->size() <=
619 kMaximumAmountOfMixedParticipants); 620 kMaximumAmountOfMixedParticipants);
620 621
621 if (replaceWasMixed) { 622 if (replaceWasMixed) {
622 RampOut(*replaceFrame); 623 RampOut(*replaceFrame.frame);
623 rampOutList->push_back(replaceFrame); 624 rampOutList->push_back(replaceFrame);
624 assert(rampOutList->size() <= 625 assert(rampOutList->size() <=
625 kMaximumAmountOfMixedParticipants); 626 kMaximumAmountOfMixedParticipants);
626 } else { 627 } else {
627 _audioFramePool->PushMemory(replaceFrame); 628 _audioFramePool->PushMemory(replaceFrame.frame);
628 } 629 }
629 } else { 630 } else {
630 if(wasMixed) { 631 if(wasMixed) {
631 RampOut(*audioFrame); 632 RampOut(*audioFrame);
632 rampOutList->push_back(audioFrame); 633 rampOutList->push_back(FrameAndMuteInfo(audioFrame,
634 muted));
633 assert(rampOutList->size() <= 635 assert(rampOutList->size() <=
634 kMaximumAmountOfMixedParticipants); 636 kMaximumAmountOfMixedParticipants);
635 } else { 637 } else {
636 _audioFramePool->PushMemory(audioFrame); 638 _audioFramePool->PushMemory(audioFrame);
637 } 639 }
638 } 640 }
639 } else { 641 } else {
640 activeList.push_front(audioFrame); 642 activeList.push_front(FrameAndMuteInfo(audioFrame, muted));
641 (*mixParticipantList)[audioFrame->id_] = *participant; 643 (*mixParticipantList)[audioFrame->id_] = *participant;
642 assert(mixParticipantList->size() <= 644 assert(mixParticipantList->size() <=
643 kMaximumAmountOfMixedParticipants); 645 kMaximumAmountOfMixedParticipants);
644 } 646 }
645 } else { 647 } else {
646 if(wasMixed) { 648 if(wasMixed) {
647 ParticipantFrameStruct* part_struct = 649 ParticipantFrameStruct* part_struct =
648 new ParticipantFrameStruct(*participant, audioFrame, false); 650 new ParticipantFrameStruct(*participant, audioFrame, muted);
649 passiveWasMixedList.push_back(part_struct); 651 passiveWasMixedList.push_back(part_struct);
650 } else if(mustAddToPassiveList) { 652 } else if(mustAddToPassiveList) {
651 RampIn(*audioFrame); 653 RampIn(*audioFrame);
652 ParticipantFrameStruct* part_struct = 654 ParticipantFrameStruct* part_struct =
653 new ParticipantFrameStruct(*participant, audioFrame, false); 655 new ParticipantFrameStruct(*participant, audioFrame, muted);
654 passiveWasNotMixedList.push_back(part_struct); 656 passiveWasNotMixedList.push_back(part_struct);
655 } else { 657 } else {
656 _audioFramePool->PushMemory(audioFrame); 658 _audioFramePool->PushMemory(audioFrame);
657 } 659 }
658 } 660 }
659 } 661 }
660 assert(activeList.size() <= *maxAudioFrameCounter); 662 assert(activeList.size() <= *maxAudioFrameCounter);
661 // At this point it is known which participants should be mixed. Transfer 663 // At this point it is known which participants should be mixed. Transfer
662 // this information to this functions output parameters. 664 // this information to this functions output parameters.
663 for (AudioFrameList::const_iterator iter = activeList.begin(); 665 for (AudioFrameList::const_iterator iter = activeList.begin();
664 iter != activeList.end(); 666 iter != activeList.end();
665 ++iter) { 667 ++iter) {
666 mixList->push_back(*iter); 668 mixList->push_back(*iter);
667 } 669 }
668 activeList.clear(); 670 activeList.clear();
669 // Always mix a constant number of AudioFrames. If there aren't enough 671 // Always mix a constant number of AudioFrames. If there aren't enough
670 // active participants mix passive ones. Starting with those that was mixed 672 // active participants mix passive ones. Starting with those that was mixed
671 // last iteration. 673 // last iteration.
672 for (ParticipantFrameStructList::const_iterator 674 for (ParticipantFrameStructList::const_iterator
673 iter = passiveWasMixedList.begin(); iter != passiveWasMixedList.end(); 675 iter = passiveWasMixedList.begin(); iter != passiveWasMixedList.end();
674 ++iter) { 676 ++iter) {
675 if(mixList->size() < *maxAudioFrameCounter + mixListStartSize) { 677 if(mixList->size() < *maxAudioFrameCounter + mixListStartSize) {
676 mixList->push_back((*iter)->audioFrame); 678 mixList->push_back(FrameAndMuteInfo((*iter)->audioFrame,
679 (*iter)->muted));
677 (*mixParticipantList)[(*iter)->audioFrame->id_] = 680 (*mixParticipantList)[(*iter)->audioFrame->id_] =
678 (*iter)->participant; 681 (*iter)->participant;
679 assert(mixParticipantList->size() <= 682 assert(mixParticipantList->size() <=
680 kMaximumAmountOfMixedParticipants); 683 kMaximumAmountOfMixedParticipants);
681 } else { 684 } else {
682 _audioFramePool->PushMemory((*iter)->audioFrame); 685 _audioFramePool->PushMemory((*iter)->audioFrame);
683 } 686 }
684 delete *iter; 687 delete *iter;
685 } 688 }
686 // And finally the ones that have not been mixed for a while. 689 // And finally the ones that have not been mixed for a while.
687 for (ParticipantFrameStructList::const_iterator iter = 690 for (ParticipantFrameStructList::const_iterator iter =
688 passiveWasNotMixedList.begin(); 691 passiveWasNotMixedList.begin();
689 iter != passiveWasNotMixedList.end(); 692 iter != passiveWasNotMixedList.end();
690 ++iter) { 693 ++iter) {
691 if(mixList->size() < *maxAudioFrameCounter + mixListStartSize) { 694 if(mixList->size() < *maxAudioFrameCounter + mixListStartSize) {
692 mixList->push_back((*iter)->audioFrame); 695 mixList->push_back(FrameAndMuteInfo((*iter)->audioFrame,
696 (*iter)->muted));
693 (*mixParticipantList)[(*iter)->audioFrame->id_] = 697 (*mixParticipantList)[(*iter)->audioFrame->id_] =
694 (*iter)->participant; 698 (*iter)->participant;
695 assert(mixParticipantList->size() <= 699 assert(mixParticipantList->size() <=
696 kMaximumAmountOfMixedParticipants); 700 kMaximumAmountOfMixedParticipants);
697 } else { 701 } else {
698 _audioFramePool->PushMemory((*iter)->audioFrame); 702 _audioFramePool->PushMemory((*iter)->audioFrame);
699 } 703 }
700 delete *iter; 704 delete *iter;
701 } 705 }
702 assert(*maxAudioFrameCounter + mixListStartSize >= mixList->size()); 706 assert(*maxAudioFrameCounter + mixListStartSize >= mixList->size());
(...skipping 18 matching lines...) Expand all
721 participant != additionalParticipantList.end(); 725 participant != additionalParticipantList.end();
722 ++participant) { 726 ++participant) {
723 AudioFrame* audioFrame = NULL; 727 AudioFrame* audioFrame = NULL;
724 if(_audioFramePool->PopMemory(audioFrame) == -1) { 728 if(_audioFramePool->PopMemory(audioFrame) == -1) {
725 WEBRTC_TRACE(kTraceMemory, kTraceAudioMixerServer, _id, 729 WEBRTC_TRACE(kTraceMemory, kTraceAudioMixerServer, _id,
726 "failed PopMemory() call"); 730 "failed PopMemory() call");
727 assert(false); 731 assert(false);
728 return; 732 return;
729 } 733 }
730 audioFrame->sample_rate_hz_ = _outputFrequency; 734 audioFrame->sample_rate_hz_ = _outputFrequency;
735 bool muted = false;
731 if((*participant)->GetAudioFrame(_id, audioFrame) != 0) { 736 if((*participant)->GetAudioFrame(_id, audioFrame) != 0) {
732 WEBRTC_TRACE(kTraceWarning, kTraceAudioMixerServer, _id, 737 WEBRTC_TRACE(kTraceWarning, kTraceAudioMixerServer, _id,
733 "failed to GetAudioFrame() from participant"); 738 "failed to GetAudioFrame() from participant");
734 _audioFramePool->PushMemory(audioFrame); 739 _audioFramePool->PushMemory(audioFrame);
735 continue; 740 continue;
736 } 741 }
737 if(audioFrame->samples_per_channel_ == 0) { 742 if(audioFrame->samples_per_channel_ == 0) {
738 // Empty frame. Don't use it. 743 // Empty frame. Don't use it.
739 _audioFramePool->PushMemory(audioFrame); 744 _audioFramePool->PushMemory(audioFrame);
740 continue; 745 continue;
741 } 746 }
742 additionalFramesList->push_back(audioFrame); 747 additionalFramesList->push_back(FrameAndMuteInfo(audioFrame, muted));
743 } 748 }
744 } 749 }
745 750
746 void AudioConferenceMixerImpl::UpdateMixedStatus( 751 void AudioConferenceMixerImpl::UpdateMixedStatus(
747 const std::map<int, MixerParticipant*>& mixedParticipantsMap) const { 752 const std::map<int, MixerParticipant*>& mixedParticipantsMap) const {
748 WEBRTC_TRACE(kTraceStream, kTraceAudioMixerServer, _id, 753 WEBRTC_TRACE(kTraceStream, kTraceAudioMixerServer, _id,
749 "UpdateMixedStatus(mixedParticipantsMap)"); 754 "UpdateMixedStatus(mixedParticipantsMap)");
750 assert(mixedParticipantsMap.size() <= kMaximumAmountOfMixedParticipants); 755 assert(mixedParticipantsMap.size() <= kMaximumAmountOfMixedParticipants);
751 756
752 // Loop through all participants. If they are in the mix map they 757 // Loop through all participants. If they are in the mix map they
(...skipping 16 matching lines...) Expand all
769 } 774 }
770 } 775 }
771 776
772 void AudioConferenceMixerImpl::ClearAudioFrameList( 777 void AudioConferenceMixerImpl::ClearAudioFrameList(
773 AudioFrameList* audioFrameList) const { 778 AudioFrameList* audioFrameList) const {
774 WEBRTC_TRACE(kTraceStream, kTraceAudioMixerServer, _id, 779 WEBRTC_TRACE(kTraceStream, kTraceAudioMixerServer, _id,
775 "ClearAudioFrameList(audioFrameList)"); 780 "ClearAudioFrameList(audioFrameList)");
776 for (AudioFrameList::iterator iter = audioFrameList->begin(); 781 for (AudioFrameList::iterator iter = audioFrameList->begin();
777 iter != audioFrameList->end(); 782 iter != audioFrameList->end();
778 ++iter) { 783 ++iter) {
779 _audioFramePool->PushMemory(*iter); 784 _audioFramePool->PushMemory(iter->frame);
780 } 785 }
781 audioFrameList->clear(); 786 audioFrameList->clear();
782 } 787 }
783 788
784 bool AudioConferenceMixerImpl::IsParticipantInList( 789 bool AudioConferenceMixerImpl::IsParticipantInList(
785 const MixerParticipant& participant, 790 const MixerParticipant& participant,
786 const MixerParticipantList& participantList) const { 791 const MixerParticipantList& participantList) const {
787 WEBRTC_TRACE(kTraceStream, kTraceAudioMixerServer, _id, 792 WEBRTC_TRACE(kTraceStream, kTraceAudioMixerServer, _id,
788 "IsParticipantInList(participant,participantList)"); 793 "IsParticipantInList(participant,participantList)");
789 for (MixerParticipantList::const_iterator iter = participantList.begin(); 794 for (MixerParticipantList::const_iterator iter = participantList.begin();
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
828 int32_t AudioConferenceMixerImpl::MixFromList( 833 int32_t AudioConferenceMixerImpl::MixFromList(
829 AudioFrame* mixedAudio, 834 AudioFrame* mixedAudio,
830 const AudioFrameList& audioFrameList) const { 835 const AudioFrameList& audioFrameList) const {
831 WEBRTC_TRACE(kTraceStream, kTraceAudioMixerServer, _id, 836 WEBRTC_TRACE(kTraceStream, kTraceAudioMixerServer, _id,
832 "MixFromList(mixedAudio, audioFrameList)"); 837 "MixFromList(mixedAudio, audioFrameList)");
833 if(audioFrameList.empty()) return 0; 838 if(audioFrameList.empty()) return 0;
834 839
835 uint32_t position = 0; 840 uint32_t position = 0;
836 841
837 if (_numMixedParticipants == 1) { 842 if (_numMixedParticipants == 1) {
838 mixedAudio->timestamp_ = audioFrameList.front()->timestamp_; 843 mixedAudio->timestamp_ = audioFrameList.front().frame->timestamp_;
839 mixedAudio->elapsed_time_ms_ = audioFrameList.front()->elapsed_time_ms_; 844 mixedAudio->elapsed_time_ms_ =
845 audioFrameList.front().frame->elapsed_time_ms_;
840 } else { 846 } else {
841 // TODO(wu): Issue 3390. 847 // TODO(wu): Issue 3390.
842 // Audio frame timestamp is only supported in one channel case. 848 // Audio frame timestamp is only supported in one channel case.
843 mixedAudio->timestamp_ = 0; 849 mixedAudio->timestamp_ = 0;
844 mixedAudio->elapsed_time_ms_ = -1; 850 mixedAudio->elapsed_time_ms_ = -1;
845 } 851 }
846 852
847 for (AudioFrameList::const_iterator iter = audioFrameList.begin(); 853 for (AudioFrameList::const_iterator iter = audioFrameList.begin();
848 iter != audioFrameList.end(); 854 iter != audioFrameList.end();
849 ++iter) { 855 ++iter) {
850 if(position >= kMaximumAmountOfMixedParticipants) { 856 if(position >= kMaximumAmountOfMixedParticipants) {
851 WEBRTC_TRACE( 857 WEBRTC_TRACE(
852 kTraceMemory, 858 kTraceMemory,
853 kTraceAudioMixerServer, 859 kTraceAudioMixerServer,
854 _id, 860 _id,
855 "Trying to mix more than max amount of mixed participants:%d!", 861 "Trying to mix more than max amount of mixed participants:%d!",
856 kMaximumAmountOfMixedParticipants); 862 kMaximumAmountOfMixedParticipants);
857 // Assert and avoid crash 863 // Assert and avoid crash
858 assert(false); 864 assert(false);
859 position = 0; 865 position = 0;
860 } 866 }
861 MixFrames(mixedAudio, (*iter), use_limiter_); 867 if (!iter->muted) {
868 MixFrames(mixedAudio, iter->frame, use_limiter_);
869 }
862 870
863 position++; 871 position++;
864 } 872 }
865 873
866 return 0; 874 return 0;
867 } 875 }
868 876
869 // TODO(andrew): consolidate this function with MixFromList. 877 // TODO(andrew): consolidate this function with MixFromList.
870 int32_t AudioConferenceMixerImpl::MixAnonomouslyFromList( 878 int32_t AudioConferenceMixerImpl::MixAnonomouslyFromList(
871 AudioFrame* mixedAudio, 879 AudioFrame* mixedAudio,
872 const AudioFrameList& audioFrameList) const { 880 const AudioFrameList& audioFrameList) const {
873 WEBRTC_TRACE(kTraceStream, kTraceAudioMixerServer, _id, 881 WEBRTC_TRACE(kTraceStream, kTraceAudioMixerServer, _id,
874 "MixAnonomouslyFromList(mixedAudio, audioFrameList)"); 882 "MixAnonomouslyFromList(mixedAudio, audioFrameList)");
875 883
876 if(audioFrameList.empty()) return 0; 884 if(audioFrameList.empty()) return 0;
877 885
878 for (AudioFrameList::const_iterator iter = audioFrameList.begin(); 886 for (AudioFrameList::const_iterator iter = audioFrameList.begin();
879 iter != audioFrameList.end(); 887 iter != audioFrameList.end();
880 ++iter) { 888 ++iter) {
881 MixFrames(mixedAudio, *iter, use_limiter_); 889 if (!iter->muted) {
890 MixFrames(mixedAudio, iter->frame, use_limiter_);
891 }
882 } 892 }
883 return 0; 893 return 0;
884 } 894 }
885 895
886 bool AudioConferenceMixerImpl::LimitMixedAudio(AudioFrame* mixedAudio) const { 896 bool AudioConferenceMixerImpl::LimitMixedAudio(AudioFrame* mixedAudio) const {
887 if (!use_limiter_) { 897 if (!use_limiter_) {
888 return true; 898 return true;
889 } 899 }
890 900
891 // Smoothly limit the mixed frame. 901 // Smoothly limit the mixed frame.
(...skipping 13 matching lines...) Expand all
905 915
906 if(error != _limiter->kNoError) { 916 if(error != _limiter->kNoError) {
907 WEBRTC_TRACE(kTraceError, kTraceAudioMixerServer, _id, 917 WEBRTC_TRACE(kTraceError, kTraceAudioMixerServer, _id,
908 "Error from AudioProcessing: %d", error); 918 "Error from AudioProcessing: %d", error);
909 assert(false); 919 assert(false);
910 return false; 920 return false;
911 } 921 }
912 return true; 922 return true;
913 } 923 }
914 } // namespace webrtc 924 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/audio_conference_mixer/source/audio_conference_mixer_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698