Revert of WebRtcVoiceMediaChannel::AddRecvStream: Don't call SetRecPayloadType (patchset #13 id:260001 of https://codereview.webrtc.org/2686043006/ )
Reason for revert:
Makes perf and Chromium FYI bots unhappy.
Original issue's description:
> WebRtcVoiceMediaChannel::AddRecvStream: Don't call SetRecPayloadType
>
> This removes one more place where we were unable to handle codecs not
> in the built-in set.
>
> BUG=webrtc:5805
>
> Review-Url: https://codereview.webrtc.org/2686043006
> Cr-Commit-Position: refs/heads/master@{#17370}
> Committed: 1724cfbdba
TBR=ossu@webrtc.org,solenberg@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:5805
Review-Url: https://codereview.webrtc.org/2772043002
Cr-Commit-Position: refs/heads/master@{#17374}
This commit is contained in:
@ -179,10 +179,6 @@ int AcmReceiver::GetAudio(int desired_freq_hz,
|
||||
return 0;
|
||||
}
|
||||
|
||||
void AcmReceiver::SetCodecs(const std::map<int, SdpAudioFormat>& codecs) {
|
||||
neteq_->SetCodecs(codecs);
|
||||
}
|
||||
|
||||
int32_t AcmReceiver::AddCodec(int acm_codec_id,
|
||||
uint8_t payload_type,
|
||||
size_t channels,
|
||||
|
||||
@ -79,9 +79,6 @@ class AcmReceiver {
|
||||
//
|
||||
int GetAudio(int desired_freq_hz, AudioFrame* audio_frame, bool* muted);
|
||||
|
||||
// Replace the current set of decoders with the specified set.
|
||||
void SetCodecs(const std::map<int, SdpAudioFormat>& codecs);
|
||||
|
||||
//
|
||||
// Adds a new codec to the NetEq codec database.
|
||||
//
|
||||
|
||||
@ -121,8 +121,6 @@ class AudioCodingModuleImpl final : public AudioCodingModule {
|
||||
// Get current playout frequency.
|
||||
int PlayoutFrequency() const override;
|
||||
|
||||
void SetReceiveCodecs(const std::map<int, SdpAudioFormat>& codecs) override;
|
||||
|
||||
bool RegisterReceiveCodec(int rtp_payload_type,
|
||||
const SdpAudioFormat& audio_format) override;
|
||||
|
||||
@ -320,6 +318,16 @@ void UpdateCodecTypeHistogram(size_t codec_type) {
|
||||
webrtc::AudioEncoder::CodecType::kMaxLoggedAudioCodecTypes));
|
||||
}
|
||||
|
||||
// TODO(turajs): the same functionality is used in NetEq. If both classes
|
||||
// need them, make it a static function in ACMCodecDB.
|
||||
bool IsCodecRED(const CodecInst& codec) {
|
||||
return (STR_CASE_CMP(codec.plname, "RED") == 0);
|
||||
}
|
||||
|
||||
bool IsCodecCN(const CodecInst& codec) {
|
||||
return (STR_CASE_CMP(codec.plname, "CN") == 0);
|
||||
}
|
||||
|
||||
// Stereo-to-mono can be used as in-place.
|
||||
int DownMix(const AudioFrame& frame,
|
||||
size_t length_out_buff,
|
||||
@ -948,6 +956,19 @@ int AudioCodingModuleImpl::InitializeReceiverSafe() {
|
||||
receiver_.SetMaximumDelay(0);
|
||||
receiver_.FlushBuffers();
|
||||
|
||||
// Register RED and CN.
|
||||
auto db = acm2::RentACodec::Database();
|
||||
for (size_t i = 0; i < db.size(); i++) {
|
||||
if (IsCodecRED(db[i]) || IsCodecCN(db[i])) {
|
||||
if (receiver_.AddCodec(static_cast<int>(i),
|
||||
static_cast<uint8_t>(db[i].pltype), 1,
|
||||
db[i].plfreq, nullptr, db[i].plname) < 0) {
|
||||
WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceAudioCoding, id_,
|
||||
"Cannot register master codec.");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
receiver_initialized_ = true;
|
||||
return 0;
|
||||
}
|
||||
@ -966,12 +987,6 @@ int AudioCodingModuleImpl::PlayoutFrequency() const {
|
||||
return receiver_.last_output_sample_rate_hz();
|
||||
}
|
||||
|
||||
void AudioCodingModuleImpl::SetReceiveCodecs(
|
||||
const std::map<int, SdpAudioFormat>& codecs) {
|
||||
rtc::CritScope lock(&acm_crit_sect_);
|
||||
receiver_.SetCodecs(codecs);
|
||||
}
|
||||
|
||||
bool AudioCodingModuleImpl::RegisterReceiveCodec(
|
||||
int rtp_payload_type,
|
||||
const SdpAudioFormat& audio_format) {
|
||||
|
||||
@ -485,10 +485,6 @@ class AudioCodingModule {
|
||||
//
|
||||
virtual int32_t PlayoutFrequency() const = 0;
|
||||
|
||||
// Replace any existing decoders with the given payload type -> decoder map.
|
||||
virtual void SetReceiveCodecs(
|
||||
const std::map<int, SdpAudioFormat>& codecs) = 0;
|
||||
|
||||
// Registers a decoder for the given payload type. Returns true iff
|
||||
// successful.
|
||||
virtual bool RegisterReceiveCodec(int rtp_payload_type,
|
||||
|
||||
@ -123,38 +123,6 @@ void DecoderDatabase::Reset() {
|
||||
active_cng_decoder_type_ = -1;
|
||||
}
|
||||
|
||||
std::vector<int> DecoderDatabase::SetCodecs(
|
||||
const std::map<int, SdpAudioFormat>& codecs) {
|
||||
// First collect all payload types that we'll remove or reassign, then remove
|
||||
// them from the database.
|
||||
std::vector<int> changed_payload_types;
|
||||
for (const std::pair<uint8_t, const DecoderInfo&> kv : decoders_) {
|
||||
auto i = codecs.find(kv.first);
|
||||
if (i == codecs.end() || i->second != kv.second.GetFormat()) {
|
||||
changed_payload_types.push_back(kv.first);
|
||||
}
|
||||
}
|
||||
for (int pl_type : changed_payload_types) {
|
||||
Remove(pl_type);
|
||||
}
|
||||
|
||||
// Enter the new and changed payload type mappings into the database.
|
||||
for (const auto& kv : codecs) {
|
||||
const int& rtp_payload_type = kv.first;
|
||||
const SdpAudioFormat& audio_format = kv.second;
|
||||
RTC_DCHECK_GE(rtp_payload_type, 0);
|
||||
RTC_DCHECK_LE(rtp_payload_type, 0x7f);
|
||||
if (decoders_.count(rtp_payload_type) == 0) {
|
||||
decoders_.insert(std::make_pair(
|
||||
rtp_payload_type, DecoderInfo(audio_format, decoder_factory_.get())));
|
||||
} else {
|
||||
// The mapping for this payload type hasn't changed.
|
||||
}
|
||||
}
|
||||
|
||||
return changed_payload_types;
|
||||
}
|
||||
|
||||
int DecoderDatabase::RegisterPayload(uint8_t rtp_payload_type,
|
||||
NetEqDecoder codec_type,
|
||||
const std::string& name) {
|
||||
|
||||
@ -149,11 +149,6 @@ class DecoderDatabase {
|
||||
// using InsertExternal().
|
||||
virtual void Reset();
|
||||
|
||||
// Replaces the existing set of decoders with the given set. Returns the
|
||||
// payload types that were reassigned or removed while doing so.
|
||||
virtual std::vector<int> SetCodecs(
|
||||
const std::map<int, SdpAudioFormat>& codecs);
|
||||
|
||||
// Registers |rtp_payload_type| as a decoder of type |codec_type|. The |name|
|
||||
// is only used to populate the name field in the DecoderInfo struct in the
|
||||
// database, and can be arbitrary (including empty). Returns kOK on success;
|
||||
|
||||
@ -157,9 +157,6 @@ class NetEq {
|
||||
// Returns kOK on success, or kFail in case of an error.
|
||||
virtual int GetAudio(AudioFrame* audio_frame, bool* muted) = 0;
|
||||
|
||||
// Replaces the current set of decoders with the given one.
|
||||
virtual void SetCodecs(const std::map<int, SdpAudioFormat>& codecs) = 0;
|
||||
|
||||
// Associates |rtp_payload_type| with |codec| and |codec_name|, and stores the
|
||||
// information in the codec database. Returns 0 on success, -1 on failure.
|
||||
// The name is only used to provide information back to the caller about the
|
||||
|
||||
@ -212,15 +212,6 @@ int NetEqImpl::GetAudio(AudioFrame* audio_frame, bool* muted) {
|
||||
return kOK;
|
||||
}
|
||||
|
||||
void NetEqImpl::SetCodecs(const std::map<int, SdpAudioFormat>& codecs) {
|
||||
rtc::CritScope lock(&crit_sect_);
|
||||
const std::vector<int> changed_payload_types =
|
||||
decoder_database_->SetCodecs(codecs);
|
||||
for (const int pt : changed_payload_types) {
|
||||
packet_buffer_->DiscardPacketsWithPayloadType(pt);
|
||||
}
|
||||
}
|
||||
|
||||
int NetEqImpl::RegisterPayloadType(NetEqDecoder codec,
|
||||
const std::string& name,
|
||||
uint8_t rtp_payload_type) {
|
||||
|
||||
@ -111,8 +111,6 @@ class NetEqImpl : public webrtc::NetEq {
|
||||
|
||||
int GetAudio(AudioFrame* audio_frame, bool* muted) override;
|
||||
|
||||
void SetCodecs(const std::map<int, SdpAudioFormat>& codecs) override;
|
||||
|
||||
int RegisterPayloadType(NetEqDecoder codec,
|
||||
const std::string& codec_name,
|
||||
uint8_t rtp_payload_type) override;
|
||||
|
||||
Reference in New Issue
Block a user