Index: webrtc/video_engine/vie_channel.cc |
diff --git a/webrtc/video_engine/vie_channel.cc b/webrtc/video_engine/vie_channel.cc |
index b8664cecc8d1b9001e38a2eb4debc4ec9b224cab..29b9efe6d359d992692b33417e714828e5eb7d91 100644 |
--- a/webrtc/video_engine/vie_channel.cc |
+++ b/webrtc/video_engine/vie_channel.cc |
@@ -105,16 +105,14 @@ ViEChannel::ViEChannel(int32_t channel_id, |
vie_receiver_(channel_id, vcm_, remote_bitrate_estimator, this), |
vie_sync_(vcm_), |
stats_observer_(new ChannelStatsObserver(this)), |
- vcm_receive_stats_callback_(NULL), |
+ receive_stats_callback_(nullptr), |
incoming_video_stream_(nullptr), |
- codec_observer_(NULL), |
intra_frame_observer_(intra_frame_observer), |
rtt_stats_(rtt_stats), |
paced_sender_(paced_sender), |
packet_router_(packet_router), |
bandwidth_observer_(bandwidth_observer), |
send_time_observer_(send_time_observer), |
- decoder_reset_(true), |
nack_history_size_sender_(kSendSidePacketHistorySize), |
max_nack_reordering_threshold_(kMaxPacketAgeToNack), |
pre_render_callback_(NULL), |
@@ -437,20 +435,6 @@ int32_t ViEChannel::SetReceiveCodec(const VideoCodec& video_codec) { |
return 0; |
} |
-int32_t ViEChannel::RegisterCodecObserver(ViEDecoderObserver* observer) { |
- CriticalSectionScoped cs(crit_.get()); |
- if (observer) { |
- if (codec_observer_) { |
- LOG_F(LS_ERROR) << "Observer already registered."; |
- return -1; |
- } |
- codec_observer_ = observer; |
- } else { |
- codec_observer_ = NULL; |
- } |
- return 0; |
-} |
- |
int32_t ViEChannel::RegisterExternalDecoder(const uint8_t pl_type, |
VideoDecoder* decoder, |
bool buffered_rendering, |
@@ -1042,18 +1026,6 @@ CallStatsObserver* ViEChannel::GetStatsObserver() { |
int32_t ViEChannel::FrameToRender(VideoFrame& video_frame) { // NOLINT |
CriticalSectionScoped cs(crit_.get()); |
- if (decoder_reset_) { |
- // Trigger a callback to the user if the incoming codec has changed. |
- if (codec_observer_) { |
- // The codec set by RegisterReceiveCodec might not be the size we're |
- // actually decoding. |
- receive_codec_.width = static_cast<uint16_t>(video_frame.width()); |
- receive_codec_.height = static_cast<uint16_t>(video_frame.height()); |
- codec_observer_->IncomingCodecChanged(channel_id_, receive_codec_); |
- } |
- decoder_reset_ = false; |
- } |
- |
if (pre_render_callback_ != NULL) |
pre_render_callback_->FrameCallback(&video_frame); |
@@ -1066,28 +1038,29 @@ int32_t ViEChannel::ReceivedDecodedReferenceFrame( |
return rtp_rtcp_modules_[0]->SendRTCPReferencePictureSelection(picture_id); |
} |
-void ViEChannel::IncomingCodecChanged(const VideoCodec& codec) { |
+void ViEChannel::OnIncomingPayloadType(int payload_type) { |
CriticalSectionScoped cs(crit_.get()); |
- receive_codec_ = codec; |
+ if (receive_stats_callback_) |
+ receive_stats_callback_->OnIncomingPayloadType(payload_type); |
} |
void ViEChannel::OnReceiveRatesUpdated(uint32_t bit_rate, uint32_t frame_rate) { |
CriticalSectionScoped cs(crit_.get()); |
- if (codec_observer_) |
- codec_observer_->IncomingRate(channel_id_, frame_rate, bit_rate); |
+ if (receive_stats_callback_) |
+ receive_stats_callback_->OnIncomingRate(frame_rate, bit_rate); |
} |
void ViEChannel::OnDiscardedPacketsUpdated(int discarded_packets) { |
CriticalSectionScoped cs(crit_.get()); |
- if (vcm_receive_stats_callback_ != NULL) |
- vcm_receive_stats_callback_->OnDiscardedPacketsUpdated(discarded_packets); |
+ if (receive_stats_callback_) |
+ receive_stats_callback_->OnDiscardedPacketsUpdated(discarded_packets); |
} |
void ViEChannel::OnFrameCountsUpdated(const FrameCounts& frame_counts) { |
CriticalSectionScoped cs(crit_.get()); |
receive_frame_counts_ = frame_counts; |
- if (vcm_receive_stats_callback_ != NULL) |
- vcm_receive_stats_callback_->OnFrameCountsUpdated(frame_counts); |
+ if (receive_stats_callback_) |
+ receive_stats_callback_->OnFrameCountsUpdated(frame_counts); |
} |
void ViEChannel::OnDecoderTiming(int decode_ms, |
@@ -1098,15 +1071,11 @@ void ViEChannel::OnDecoderTiming(int decode_ms, |
int min_playout_delay_ms, |
int render_delay_ms) { |
CriticalSectionScoped cs(crit_.get()); |
- if (!codec_observer_) |
+ if (!receive_stats_callback_) |
return; |
- codec_observer_->DecoderTiming(decode_ms, |
- max_decode_ms, |
- current_delay_ms, |
- target_delay_ms, |
- jitter_buffer_ms, |
- min_playout_delay_ms, |
- render_delay_ms); |
+ receive_stats_callback_->OnDecoderTiming( |
+ decode_ms, max_decode_ms, current_delay_ms, target_delay_ms, |
+ jitter_buffer_ms, min_playout_delay_ms, render_delay_ms); |
} |
int32_t ViEChannel::RequestKeyFrame() { |
@@ -1261,6 +1230,8 @@ void ViEChannel::RegisterPreDecodeImageCallback( |
vcm_->RegisterPreDecodeImageCallback(pre_decode_callback); |
} |
+// TODO(pbos): Remove OnInitializeDecoder which is called from the RTP module, |
+// any decoder resetting should be handled internally within the VCM. |
int32_t ViEChannel::OnInitializeDecoder( |
const int32_t id, |
const int8_t payload_type, |
@@ -1272,8 +1243,6 @@ int32_t ViEChannel::OnInitializeDecoder( |
<< " " << payload_name; |
vcm_->ResetDecoder(); |
- CriticalSectionScoped cs(crit_.get()); |
- decoder_reset_ = true; |
return 0; |
} |
@@ -1297,7 +1266,7 @@ void ViEChannel::RegisterSendFrameCountObserver( |
void ViEChannel::RegisterReceiveStatisticsProxy( |
ReceiveStatisticsProxy* receive_statistics_proxy) { |
CriticalSectionScoped cs(crit_.get()); |
- vcm_receive_stats_callback_ = receive_statistics_proxy; |
+ receive_stats_callback_ = receive_statistics_proxy; |
} |
void ViEChannel::SetIncomingVideoStream( |