NetEqImpl::GetDecoderFormat: Return RTP clockrate, not codec sample rate
Well, in fact we need to return both. But return codec sample rate separately and let the SdpAudioFormat contain the RTP clockrate, otherwise we're essentially lying to our callers. Bug: webrtc:11028 Change-Id: I40f36cb9db6b9824404ade6b0515a8312ff97009 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/156307 Commit-Queue: Karl Wiberg <kwiberg@webrtc.org> Reviewed-by: Ivo Creusen <ivoc@webrtc.org> Cr-Commit-Position: refs/heads/master@{#29444}
This commit is contained in:
@ -73,7 +73,7 @@ absl::optional<int> AcmReceiver::last_packet_sample_rate_hz() const {
|
||||
if (!last_decoder_) {
|
||||
return absl::nullopt;
|
||||
}
|
||||
return last_decoder_->second.clockrate_hz;
|
||||
return last_decoder_->sample_rate_hz;
|
||||
}
|
||||
|
||||
int AcmReceiver::last_output_sample_rate_hz() const {
|
||||
@ -89,7 +89,7 @@ int AcmReceiver::InsertPacket(const RTPHeader& rtp_header,
|
||||
|
||||
int payload_type = rtp_header.payloadType;
|
||||
auto format = neteq_->GetDecoderFormat(payload_type);
|
||||
if (format && absl::EqualsIgnoreCase(format->name, "red")) {
|
||||
if (format && absl::EqualsIgnoreCase(format->sdp_format.name, "red")) {
|
||||
// This is a RED packet. Get the format of the audio codec.
|
||||
payload_type = incoming_payload[0] & 0x7f;
|
||||
format = neteq_->GetDecoderFormat(payload_type);
|
||||
@ -102,15 +102,17 @@ int AcmReceiver::InsertPacket(const RTPHeader& rtp_header,
|
||||
|
||||
{
|
||||
rtc::CritScope lock(&crit_sect_);
|
||||
if (absl::EqualsIgnoreCase(format->name, "cn")) {
|
||||
if (last_decoder_ && last_decoder_->second.num_channels > 1) {
|
||||
if (absl::EqualsIgnoreCase(format->sdp_format.name, "cn")) {
|
||||
if (last_decoder_ && last_decoder_->num_channels > 1) {
|
||||
// This is a CNG and the audio codec is not mono, so skip pushing in
|
||||
// packets into NetEq.
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
RTC_DCHECK(format);
|
||||
last_decoder_ = std::make_pair(payload_type, *format);
|
||||
last_decoder_ = DecoderInfo{/*payload_type=*/payload_type,
|
||||
/*sample_rate_hz=*/format->sample_rate_hz,
|
||||
/*num_channels=*/format->num_channels,
|
||||
/*sdp_format=*/std::move(format->sdp_format)};
|
||||
}
|
||||
} // |crit_sect_| is released.
|
||||
|
||||
@ -221,8 +223,8 @@ absl::optional<std::pair<int, SdpAudioFormat>> AcmReceiver::LastDecoder()
|
||||
if (!last_decoder_) {
|
||||
return absl::nullopt;
|
||||
}
|
||||
RTC_DCHECK_NE(-1, last_decoder_->first); // Payload type should be valid.
|
||||
return last_decoder_;
|
||||
RTC_DCHECK_NE(-1, last_decoder_->payload_type);
|
||||
return std::make_pair(last_decoder_->payload_type, last_decoder_->sdp_format);
|
||||
}
|
||||
|
||||
void AcmReceiver::GetNetworkStatistics(NetworkStatistics* acm_stat) const {
|
||||
|
||||
Reference in New Issue
Block a user