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

Side by Side Diff: webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc

Issue 1412683006: RentACodec: New class that takes over part of ACMCodecDB's job (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: review fixes Created 5 years, 1 month 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
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 18 matching lines...) Expand all
29 #include "webrtc/typedefs.h" 29 #include "webrtc/typedefs.h"
30 30
31 namespace webrtc { 31 namespace webrtc {
32 32
33 namespace acm2 { 33 namespace acm2 {
34 34
35 namespace { 35 namespace {
36 36
37 // TODO(turajs): the same functionality is used in NetEq. If both classes 37 // TODO(turajs): the same functionality is used in NetEq. If both classes
38 // need them, make it a static function in ACMCodecDB. 38 // need them, make it a static function in ACMCodecDB.
39 bool IsCodecRED(const CodecInst* codec) { 39 bool IsCodecRED(const CodecInst& codec) {
40 return (STR_CASE_CMP(codec->plname, "RED") == 0); 40 return (STR_CASE_CMP(codec.plname, "RED") == 0);
41 } 41 }
42 42
43 bool IsCodecRED(int index) { 43 bool IsCodecCN(const CodecInst& codec) {
44 return (IsCodecRED(&ACMCodecDB::database_[index])); 44 return (STR_CASE_CMP(codec.plname, "CN") == 0);
45 }
46
47 bool IsCodecCN(const CodecInst* codec) {
48 return (STR_CASE_CMP(codec->plname, "CN") == 0);
49 }
50
51 bool IsCodecCN(int index) {
52 return (IsCodecCN(&ACMCodecDB::database_[index]));
53 } 45 }
54 46
55 // Stereo-to-mono can be used as in-place. 47 // Stereo-to-mono can be used as in-place.
56 int DownMix(const AudioFrame& frame, 48 int DownMix(const AudioFrame& frame,
57 size_t length_out_buff, 49 size_t length_out_buff,
58 int16_t* out_buff) { 50 int16_t* out_buff) {
59 if (length_out_buff < frame.samples_per_channel_) { 51 if (length_out_buff < frame.samples_per_channel_) {
60 return -1; 52 return -1;
61 } 53 }
62 for (size_t n = 0; n < frame.samples_per_channel_; ++n) 54 for (size_t n = 0; n < frame.samples_per_channel_; ++n)
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 if (receiver_.RemoveAllCodecs() < 0) 498 if (receiver_.RemoveAllCodecs() < 0)
507 return -1; 499 return -1;
508 } 500 }
509 receiver_.set_id(id_); 501 receiver_.set_id(id_);
510 receiver_.ResetInitialDelay(); 502 receiver_.ResetInitialDelay();
511 receiver_.SetMinimumDelay(0); 503 receiver_.SetMinimumDelay(0);
512 receiver_.SetMaximumDelay(0); 504 receiver_.SetMaximumDelay(0);
513 receiver_.FlushBuffers(); 505 receiver_.FlushBuffers();
514 506
515 // Register RED and CN. 507 // Register RED and CN.
516 for (int i = 0; i < ACMCodecDB::kNumCodecs; i++) { 508 auto db = RentACodec::Database();
517 if (IsCodecRED(i) || IsCodecCN(i)) { 509 for (size_t i = 0; i < db.size(); i++) {
518 uint8_t pl_type = static_cast<uint8_t>(ACMCodecDB::database_[i].pltype); 510 if (IsCodecRED(db[i]) || IsCodecCN(db[i])) {
519 int fs = ACMCodecDB::database_[i].plfreq; 511 if (receiver_.AddCodec(static_cast<int>(i),
520 if (receiver_.AddCodec(i, pl_type, 1, fs, NULL) < 0) { 512 static_cast<uint8_t>(db[i].pltype), 1,
513 db[i].plfreq, nullptr) < 0) {
521 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceAudioCoding, id_, 514 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceAudioCoding, id_,
522 "Cannot register master codec."); 515 "Cannot register master codec.");
523 return -1; 516 return -1;
524 } 517 }
525 } 518 }
526 } 519 }
527 receiver_initialized_ = true; 520 receiver_initialized_ = true;
528 return 0; 521 return 0;
529 } 522 }
530 523
(...skipping 23 matching lines...) Expand all
554 // Register possible receive codecs, can be called multiple times, 547 // Register possible receive codecs, can be called multiple times,
555 // for codecs, CNG (NB, WB and SWB), DTMF, RED. 548 // for codecs, CNG (NB, WB and SWB), DTMF, RED.
556 int AudioCodingModuleImpl::RegisterReceiveCodec(const CodecInst& codec) { 549 int AudioCodingModuleImpl::RegisterReceiveCodec(const CodecInst& codec) {
557 CriticalSectionScoped lock(acm_crit_sect_.get()); 550 CriticalSectionScoped lock(acm_crit_sect_.get());
558 RTC_DCHECK(receiver_initialized_); 551 RTC_DCHECK(receiver_initialized_);
559 if (codec.channels > 2 || codec.channels < 0) { 552 if (codec.channels > 2 || codec.channels < 0) {
560 LOG_F(LS_ERROR) << "Unsupported number of channels: " << codec.channels; 553 LOG_F(LS_ERROR) << "Unsupported number of channels: " << codec.channels;
561 return -1; 554 return -1;
562 } 555 }
563 556
564 int codec_id = ACMCodecDB::ReceiverCodecNumber(codec); 557 auto codec_id =
565 if (codec_id < 0 || codec_id >= ACMCodecDB::kNumCodecs) { 558 RentACodec::CodecIdByParams(codec.plname, codec.plfreq, codec.channels);
559 if (!codec_id) {
566 LOG_F(LS_ERROR) << "Wrong codec params to be registered as receive codec"; 560 LOG_F(LS_ERROR) << "Wrong codec params to be registered as receive codec";
567 return -1; 561 return -1;
568 } 562 }
563 auto codec_index = RentACodec::CodecIndexFromId(*codec_id);
564 RTC_CHECK(codec_index) << "Invalid codec ID: " << static_cast<int>(*codec_id);
569 565
570 // Check if the payload-type is valid. 566 // Check if the payload-type is valid.
571 if (!ACMCodecDB::ValidPayloadType(codec.pltype)) { 567 if (!ACMCodecDB::ValidPayloadType(codec.pltype)) {
572 LOG_F(LS_ERROR) << "Invalid payload type " << codec.pltype << " for " 568 LOG_F(LS_ERROR) << "Invalid payload type " << codec.pltype << " for "
573 << codec.plname; 569 << codec.plname;
574 return -1; 570 return -1;
575 } 571 }
576 572
577 // Get |decoder| associated with |codec|. |decoder| is NULL if |codec| does 573 // Get |decoder| associated with |codec|. |decoder| is NULL if |codec| does
578 // not own its decoder. 574 // not own its decoder.
579 return receiver_.AddCodec(codec_id, codec.pltype, codec.channels, 575 return receiver_.AddCodec(*codec_index, codec.pltype, codec.channels,
580 codec.plfreq, 576 codec.plfreq,
581 codec_manager_.GetAudioDecoder(codec)); 577 codec_manager_.GetAudioDecoder(codec));
582 } 578 }
583 579
584 int AudioCodingModuleImpl::RegisterExternalReceiveCodec( 580 int AudioCodingModuleImpl::RegisterExternalReceiveCodec(
585 int rtp_payload_type, 581 int rtp_payload_type,
586 AudioDecoder* external_decoder, 582 AudioDecoder* external_decoder,
587 int sample_rate_hz, 583 int sample_rate_hz,
588 int num_channels) { 584 int num_channels) {
589 CriticalSectionScoped lock(acm_crit_sect_.get()); 585 CriticalSectionScoped lock(acm_crit_sect_.get());
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
797 return receiver_.LeastRequiredDelayMs(); 793 return receiver_.LeastRequiredDelayMs();
798 } 794 }
799 795
800 void AudioCodingModuleImpl::GetDecodingCallStatistics( 796 void AudioCodingModuleImpl::GetDecodingCallStatistics(
801 AudioDecodingCallStats* call_stats) const { 797 AudioDecodingCallStats* call_stats) const {
802 receiver_.GetDecodingCallStatistics(call_stats); 798 receiver_.GetDecodingCallStatistics(call_stats);
803 } 799 }
804 800
805 } // namespace acm2 801 } // namespace acm2
806 } // namespace webrtc 802 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/audio_coding/main/acm2/audio_coding_module.cc ('k') | webrtc/modules/audio_coding/main/acm2/codec_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698