AudioReceiveStream: Clean up ConfigureStream.
Increases readability of configuration setup by separating first time configuration setup and reconfiguration. Bug: None Change-Id: Ifee29c31bce505a971ab5993cb862a72db94725a Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/220700 Reviewed-by: Henrik Andreassson <henrika@webrtc.org> Commit-Queue: Markus Handell <handellm@webrtc.org> Cr-Commit-Position: refs/heads/master@{#34159}
This commit is contained in:

committed by
WebRTC LUCI CQ

parent
c81afe365d
commit
acd16af8c6
@ -18,6 +18,7 @@
|
|||||||
#include "api/audio_codecs/audio_format.h"
|
#include "api/audio_codecs/audio_format.h"
|
||||||
#include "api/call/audio_sink.h"
|
#include "api/call/audio_sink.h"
|
||||||
#include "api/rtp_parameters.h"
|
#include "api/rtp_parameters.h"
|
||||||
|
#include "api/sequence_checker.h"
|
||||||
#include "audio/audio_send_stream.h"
|
#include "audio/audio_send_stream.h"
|
||||||
#include "audio/audio_state.h"
|
#include "audio/audio_state.h"
|
||||||
#include "audio/channel_receive.h"
|
#include "audio/channel_receive.h"
|
||||||
@ -118,7 +119,8 @@ AudioReceiveStream::AudioReceiveStream(
|
|||||||
const rtc::scoped_refptr<webrtc::AudioState>& audio_state,
|
const rtc::scoped_refptr<webrtc::AudioState>& audio_state,
|
||||||
webrtc::RtcEventLog* event_log,
|
webrtc::RtcEventLog* event_log,
|
||||||
std::unique_ptr<voe::ChannelReceiveInterface> channel_receive)
|
std::unique_ptr<voe::ChannelReceiveInterface> channel_receive)
|
||||||
: audio_state_(audio_state),
|
: config_(config),
|
||||||
|
audio_state_(audio_state),
|
||||||
source_tracker_(clock),
|
source_tracker_(clock),
|
||||||
channel_receive_(std::move(channel_receive)) {
|
channel_receive_(std::move(channel_receive)) {
|
||||||
RTC_LOG(LS_INFO) << "AudioReceiveStream: " << config.rtp.remote_ssrc;
|
RTC_LOG(LS_INFO) << "AudioReceiveStream: " << config.rtp.remote_ssrc;
|
||||||
@ -140,7 +142,15 @@ AudioReceiveStream::AudioReceiveStream(
|
|||||||
// Register with transport.
|
// Register with transport.
|
||||||
rtp_stream_receiver_ = receiver_controller->CreateReceiver(
|
rtp_stream_receiver_ = receiver_controller->CreateReceiver(
|
||||||
config.rtp.remote_ssrc, channel_receive_.get());
|
config.rtp.remote_ssrc, channel_receive_.get());
|
||||||
ConfigureStream(this, config, true);
|
|
||||||
|
// Complete configuration.
|
||||||
|
// TODO(solenberg): Config NACK history window (which is a packet count),
|
||||||
|
// using the actual packet size for the configured codec.
|
||||||
|
channel_receive_->SetNACKStatus(config.rtp.nack.rtp_history_ms != 0,
|
||||||
|
config.rtp.nack.rtp_history_ms / 20);
|
||||||
|
channel_receive_->SetReceiveCodecs(config.decoder_map);
|
||||||
|
channel_receive_->SetDepacketizerToDecoderFrameTransformer(
|
||||||
|
config.frame_transformer);
|
||||||
}
|
}
|
||||||
|
|
||||||
AudioReceiveStream::~AudioReceiveStream() {
|
AudioReceiveStream::~AudioReceiveStream() {
|
||||||
@ -154,7 +164,34 @@ AudioReceiveStream::~AudioReceiveStream() {
|
|||||||
void AudioReceiveStream::Reconfigure(
|
void AudioReceiveStream::Reconfigure(
|
||||||
const webrtc::AudioReceiveStream::Config& config) {
|
const webrtc::AudioReceiveStream::Config& config) {
|
||||||
RTC_DCHECK(worker_thread_checker_.IsCurrent());
|
RTC_DCHECK(worker_thread_checker_.IsCurrent());
|
||||||
ConfigureStream(this, config, false);
|
|
||||||
|
// Configuration parameters which cannot be changed.
|
||||||
|
RTC_DCHECK(config_.rtp.remote_ssrc == config.rtp.remote_ssrc);
|
||||||
|
RTC_DCHECK(config_.rtcp_send_transport == config.rtcp_send_transport);
|
||||||
|
// Decoder factory cannot be changed because it is configured at
|
||||||
|
// voe::Channel construction time.
|
||||||
|
RTC_DCHECK(config_.decoder_factory == config.decoder_factory);
|
||||||
|
|
||||||
|
// SSRC can't be changed mid-stream.
|
||||||
|
RTC_DCHECK_EQ(config_.rtp.local_ssrc, config.rtp.local_ssrc);
|
||||||
|
RTC_DCHECK_EQ(config_.rtp.remote_ssrc, config.rtp.remote_ssrc);
|
||||||
|
|
||||||
|
// TODO(solenberg): Config NACK history window (which is a packet count),
|
||||||
|
// using the actual packet size for the configured codec.
|
||||||
|
if (config_.rtp.nack.rtp_history_ms != config.rtp.nack.rtp_history_ms) {
|
||||||
|
channel_receive_->SetNACKStatus(config.rtp.nack.rtp_history_ms != 0,
|
||||||
|
config.rtp.nack.rtp_history_ms / 20);
|
||||||
|
}
|
||||||
|
if (config_.decoder_map != config.decoder_map) {
|
||||||
|
channel_receive_->SetReceiveCodecs(config.decoder_map);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config_.frame_transformer != config.frame_transformer) {
|
||||||
|
channel_receive_->SetDepacketizerToDecoderFrameTransformer(
|
||||||
|
config.frame_transformer);
|
||||||
|
}
|
||||||
|
|
||||||
|
config_ = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioReceiveStream::Start() {
|
void AudioReceiveStream::Start() {
|
||||||
@ -384,50 +421,5 @@ internal::AudioState* AudioReceiveStream::audio_state() const {
|
|||||||
RTC_DCHECK(audio_state);
|
RTC_DCHECK(audio_state);
|
||||||
return audio_state;
|
return audio_state;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioReceiveStream::ConfigureStream(AudioReceiveStream* stream,
|
|
||||||
const Config& new_config,
|
|
||||||
bool first_time) {
|
|
||||||
RTC_LOG(LS_INFO) << "AudioReceiveStream::ConfigureStream: "
|
|
||||||
<< new_config.ToString();
|
|
||||||
RTC_DCHECK(stream);
|
|
||||||
const auto& channel_receive = stream->channel_receive_;
|
|
||||||
const auto& old_config = stream->config_;
|
|
||||||
|
|
||||||
// Configuration parameters which cannot be changed.
|
|
||||||
RTC_DCHECK(first_time ||
|
|
||||||
old_config.rtp.remote_ssrc == new_config.rtp.remote_ssrc);
|
|
||||||
RTC_DCHECK(first_time ||
|
|
||||||
old_config.rtcp_send_transport == new_config.rtcp_send_transport);
|
|
||||||
// Decoder factory cannot be changed because it is configured at
|
|
||||||
// voe::Channel construction time.
|
|
||||||
RTC_DCHECK(first_time ||
|
|
||||||
old_config.decoder_factory == new_config.decoder_factory);
|
|
||||||
|
|
||||||
if (!first_time) {
|
|
||||||
// SSRC can't be changed mid-stream.
|
|
||||||
RTC_DCHECK_EQ(old_config.rtp.local_ssrc, new_config.rtp.local_ssrc);
|
|
||||||
RTC_DCHECK_EQ(old_config.rtp.remote_ssrc, new_config.rtp.remote_ssrc);
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO(solenberg): Config NACK history window (which is a packet count),
|
|
||||||
// using the actual packet size for the configured codec.
|
|
||||||
if (first_time || old_config.rtp.nack.rtp_history_ms !=
|
|
||||||
new_config.rtp.nack.rtp_history_ms) {
|
|
||||||
channel_receive->SetNACKStatus(new_config.rtp.nack.rtp_history_ms != 0,
|
|
||||||
new_config.rtp.nack.rtp_history_ms / 20);
|
|
||||||
}
|
|
||||||
if (first_time || old_config.decoder_map != new_config.decoder_map) {
|
|
||||||
channel_receive->SetReceiveCodecs(new_config.decoder_map);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (first_time ||
|
|
||||||
old_config.frame_transformer != new_config.frame_transformer) {
|
|
||||||
channel_receive->SetDepacketizerToDecoderFrameTransformer(
|
|
||||||
new_config.frame_transformer);
|
|
||||||
}
|
|
||||||
|
|
||||||
stream->config_ = new_config;
|
|
||||||
}
|
|
||||||
} // namespace internal
|
} // namespace internal
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
@ -102,10 +102,6 @@ class AudioReceiveStream final : public webrtc::AudioReceiveStream,
|
|||||||
const AudioSendStream* GetAssociatedSendStreamForTesting() const;
|
const AudioSendStream* GetAssociatedSendStreamForTesting() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void ConfigureStream(AudioReceiveStream* stream,
|
|
||||||
const Config& new_config,
|
|
||||||
bool first_time);
|
|
||||||
|
|
||||||
AudioState* audio_state() const;
|
AudioState* audio_state() const;
|
||||||
|
|
||||||
SequenceChecker worker_thread_checker_;
|
SequenceChecker worker_thread_checker_;
|
||||||
|
Reference in New Issue
Block a user