| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2004 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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 | 85 |
| 86 // Opus bitrate should be in the range between 6000 and 510000. | 86 // Opus bitrate should be in the range between 6000 and 510000. |
| 87 const int kOpusMinBitrate = 6000; | 87 const int kOpusMinBitrate = 6000; |
| 88 const int kOpusMaxBitrate = 510000; | 88 const int kOpusMaxBitrate = 510000; |
| 89 | 89 |
| 90 // Default audio dscp value. | 90 // Default audio dscp value. |
| 91 // See http://tools.ietf.org/html/rfc2474 for details. | 91 // See http://tools.ietf.org/html/rfc2474 for details. |
| 92 // See also http://tools.ietf.org/html/draft-jennings-rtcweb-qos-00 | 92 // See also http://tools.ietf.org/html/draft-jennings-rtcweb-qos-00 |
| 93 const rtc::DiffServCodePoint kAudioDscpValue = rtc::DSCP_EF; | 93 const rtc::DiffServCodePoint kAudioDscpValue = rtc::DSCP_EF; |
| 94 | 94 |
| 95 // Ensure we open the file in a writeable path on ChromeOS and Android. This | |
| 96 // workaround can be removed when it's possible to specify a filename for audio | |
| 97 // option based AEC dumps. | |
| 98 // | |
| 99 // TODO(grunell): Use a string in the options instead of hardcoding it here | |
| 100 // and let the embedder choose the filename (crbug.com/264223). | |
| 101 // | |
| 102 // NOTE(ajm): Don't use hardcoded paths on platforms not explicitly specified | |
| 103 // below. | |
| 104 #if defined(CHROMEOS) | |
| 105 const char kAecDumpByAudioOptionFilename[] = "/tmp/audio.aecdump"; | |
| 106 #elif defined(ANDROID) | |
| 107 const char kAecDumpByAudioOptionFilename[] = "/sdcard/audio.aecdump"; | |
| 108 #else | |
| 109 const char kAecDumpByAudioOptionFilename[] = "audio.aecdump"; | |
| 110 #endif | |
| 111 | |
| 112 // Constants from voice_engine_defines.h. | 95 // Constants from voice_engine_defines.h. |
| 113 const int kMinTelephoneEventCode = 0; // RFC4733 (Section 2.3.1) | 96 const int kMinTelephoneEventCode = 0; // RFC4733 (Section 2.3.1) |
| 114 const int kMaxTelephoneEventCode = 255; | 97 const int kMaxTelephoneEventCode = 255; |
| 115 const int kMinTelephoneEventDuration = 100; | 98 const int kMinTelephoneEventDuration = 100; |
| 116 const int kMaxTelephoneEventDuration = 60000; // Actual limit is 2^16 | 99 const int kMaxTelephoneEventDuration = 60000; // Actual limit is 2^16 |
| 117 | 100 |
| 118 class ProxySink : public webrtc::AudioSinkInterface { | 101 class ProxySink : public webrtc::AudioSinkInterface { |
| 119 public: | 102 public: |
| 120 ProxySink(AudioSinkInterface* sink) : sink_(sink) { RTC_DCHECK(sink); } | 103 ProxySink(AudioSinkInterface* sink) : sink_(sink) { RTC_DCHECK(sink); } |
| 121 | 104 |
| (...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 608 options.highpass_filter = rtc::Optional<bool>(true); | 591 options.highpass_filter = rtc::Optional<bool>(true); |
| 609 options.stereo_swapping = rtc::Optional<bool>(false); | 592 options.stereo_swapping = rtc::Optional<bool>(false); |
| 610 options.audio_jitter_buffer_max_packets = rtc::Optional<int>(50); | 593 options.audio_jitter_buffer_max_packets = rtc::Optional<int>(50); |
| 611 options.audio_jitter_buffer_fast_accelerate = rtc::Optional<bool>(false); | 594 options.audio_jitter_buffer_fast_accelerate = rtc::Optional<bool>(false); |
| 612 options.typing_detection = rtc::Optional<bool>(true); | 595 options.typing_detection = rtc::Optional<bool>(true); |
| 613 options.adjust_agc_delta = rtc::Optional<int>(0); | 596 options.adjust_agc_delta = rtc::Optional<int>(0); |
| 614 options.experimental_agc = rtc::Optional<bool>(false); | 597 options.experimental_agc = rtc::Optional<bool>(false); |
| 615 options.extended_filter_aec = rtc::Optional<bool>(false); | 598 options.extended_filter_aec = rtc::Optional<bool>(false); |
| 616 options.delay_agnostic_aec = rtc::Optional<bool>(false); | 599 options.delay_agnostic_aec = rtc::Optional<bool>(false); |
| 617 options.experimental_ns = rtc::Optional<bool>(false); | 600 options.experimental_ns = rtc::Optional<bool>(false); |
| 618 options.aec_dump = rtc::Optional<bool>(false); | |
| 619 if (!ApplyOptions(options)) { | 601 if (!ApplyOptions(options)) { |
| 620 return false; | 602 return false; |
| 621 } | 603 } |
| 622 } | 604 } |
| 623 | 605 |
| 624 // Print our codec list again for the call diagnostic log | 606 // Print our codec list again for the call diagnostic log |
| 625 LOG(LS_INFO) << "WebRtc VoiceEngine codecs:"; | 607 LOG(LS_INFO) << "WebRtc VoiceEngine codecs:"; |
| 626 for (const AudioCodec& codec : codecs_) { | 608 for (const AudioCodec& codec : codecs_) { |
| 627 LOG(LS_INFO) << ToString(codec); | 609 LOG(LS_INFO) << ToString(codec); |
| 628 } | 610 } |
| (...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 861 } | 843 } |
| 862 } | 844 } |
| 863 | 845 |
| 864 if (options.adjust_agc_delta) { | 846 if (options.adjust_agc_delta) { |
| 865 LOG(LS_INFO) << "Adjust agc delta is " << *options.adjust_agc_delta; | 847 LOG(LS_INFO) << "Adjust agc delta is " << *options.adjust_agc_delta; |
| 866 if (!AdjustAgcLevel(*options.adjust_agc_delta)) { | 848 if (!AdjustAgcLevel(*options.adjust_agc_delta)) { |
| 867 return false; | 849 return false; |
| 868 } | 850 } |
| 869 } | 851 } |
| 870 | 852 |
| 871 if (options.aec_dump) { | |
| 872 LOG(LS_INFO) << "Aec dump is enabled? " << *options.aec_dump; | |
| 873 if (*options.aec_dump) | |
| 874 StartAecDump(kAecDumpByAudioOptionFilename); | |
| 875 else | |
| 876 StopAecDump(); | |
| 877 } | |
| 878 | |
| 879 webrtc::Config config; | 853 webrtc::Config config; |
| 880 | 854 |
| 881 if (options.delay_agnostic_aec) | 855 if (options.delay_agnostic_aec) |
| 882 delay_agnostic_aec_ = options.delay_agnostic_aec; | 856 delay_agnostic_aec_ = options.delay_agnostic_aec; |
| 883 if (delay_agnostic_aec_) { | 857 if (delay_agnostic_aec_) { |
| 884 LOG(LS_INFO) << "Delay agnostic aec is enabled? " << *delay_agnostic_aec_; | 858 LOG(LS_INFO) << "Delay agnostic aec is enabled? " << *delay_agnostic_aec_; |
| 885 config.Set<webrtc::DelayAgnostic>( | 859 config.Set<webrtc::DelayAgnostic>( |
| 886 new webrtc::DelayAgnostic(*delay_agnostic_aec_)); | 860 new webrtc::DelayAgnostic(*delay_agnostic_aec_)); |
| 887 } | 861 } |
| 888 | 862 |
| (...skipping 1657 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2546 } | 2520 } |
| 2547 } else { | 2521 } else { |
| 2548 LOG(LS_INFO) << "Stopping playout for channel #" << channel; | 2522 LOG(LS_INFO) << "Stopping playout for channel #" << channel; |
| 2549 engine()->voe()->base()->StopPlayout(channel); | 2523 engine()->voe()->base()->StopPlayout(channel); |
| 2550 } | 2524 } |
| 2551 return true; | 2525 return true; |
| 2552 } | 2526 } |
| 2553 } // namespace cricket | 2527 } // namespace cricket |
| 2554 | 2528 |
| 2555 #endif // HAVE_WEBRTC_VOICE | 2529 #endif // HAVE_WEBRTC_VOICE |
| OLD | NEW |