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

Unified Diff: webrtc/video/vie_encoder.cc

Issue 1912653002: Remove PayloadRouter dependency from ViEEncoder (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Addressed comments. Created 4 years, 8 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/video/vie_encoder.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/video/vie_encoder.cc
diff --git a/webrtc/video/vie_encoder.cc b/webrtc/video/vie_encoder.cc
index b0f62724ef1e9c8ee3e8624ba9e5bf242585bf99..89cbb5285f9c43030605705f80827001ce5d20a9 100644
--- a/webrtc/video/vie_encoder.cc
+++ b/webrtc/video/vie_encoder.cc
@@ -38,28 +38,6 @@ namespace webrtc {
static const float kStopPaddingThresholdMs = 2000;
static const int kMinKeyFrameRequestIntervalMs = 300;
-std::vector<uint32_t> AllocateStreamBitrates(
- uint32_t total_bitrate,
- const SimulcastStream* stream_configs,
- size_t number_of_streams) {
- if (number_of_streams == 0) {
- std::vector<uint32_t> stream_bitrates(1, 0);
- stream_bitrates[0] = total_bitrate;
- return stream_bitrates;
- }
- std::vector<uint32_t> stream_bitrates(number_of_streams, 0);
- uint32_t bitrate_remainder = total_bitrate;
- for (size_t i = 0; i < stream_bitrates.size() && bitrate_remainder > 0; ++i) {
- if (stream_configs[i].maxBitrate * 1000 > bitrate_remainder) {
- stream_bitrates[i] = bitrate_remainder;
- } else {
- stream_bitrates[i] = stream_configs[i].maxBitrate * 1000;
- }
- bitrate_remainder -= stream_bitrates[i];
- }
- return stream_bitrates;
-}
-
class QMVideoSettingsCallback : public VCMQMSettingsCallback {
public:
explicit QMVideoSettingsCallback(VideoProcessing* vpm);
@@ -81,9 +59,7 @@ ViEEncoder::ViEEncoder(uint32_t number_of_cores,
SendStatisticsProxy* stats_proxy,
rtc::VideoSinkInterface<VideoFrame>* pre_encode_callback,
OveruseFrameDetector* overuse_detector,
- PacedSender* pacer,
- PayloadRouter* payload_router,
- EncodedImageCallback* post_encode_callback)
+ PacedSender* pacer)
: number_of_cores_(number_of_cores),
ssrcs_(ssrcs),
vp_(VideoProcessing::Create()),
@@ -93,14 +69,12 @@ ViEEncoder::ViEEncoder(uint32_t number_of_cores,
pre_encode_callback_(pre_encode_callback),
overuse_detector_(overuse_detector),
pacer_(pacer),
- send_payload_router_(payload_router),
- post_encode_callback_(post_encode_callback),
time_of_last_frame_activity_ms_(0),
encoder_config_(),
min_transmit_bitrate_bps_(0),
last_observed_bitrate_bps_(0),
network_is_transmitting_(true),
- encoder_paused_(false),
+ encoder_paused_(true),
encoder_paused_and_dropped_frame_(false),
time_last_intra_request_ms_(ssrcs.size(), -1),
module_process_thread_(module_process_thread),
@@ -149,7 +123,7 @@ void ViEEncoder::Pause() {
encoder_paused_ = true;
}
-void ViEEncoder::Restart() {
+void ViEEncoder::Start() {
rtc::CritScope lock(&data_cs_);
encoder_paused_ = false;
}
@@ -166,8 +140,9 @@ int32_t ViEEncoder::DeRegisterExternalEncoder(uint8_t pl_type) {
return 0;
}
void ViEEncoder::SetEncoder(const webrtc::VideoCodec& video_codec,
- int min_transmit_bitrate_bps) {
- RTC_DCHECK(send_payload_router_);
+ int min_transmit_bitrate_bps,
+ size_t max_data_payload_length,
+ EncodedImageCallback* sink) {
// Setting target width and height for VPM.
RTC_CHECK_EQ(VPM_OK,
vp_->SetTargetResolution(video_codec.width, video_codec.height,
@@ -178,11 +153,13 @@ void ViEEncoder::SetEncoder(const webrtc::VideoCodec& video_codec,
{
rtc::CritScope lock(&data_cs_);
encoder_config_ = video_codec;
- encoder_paused_ = true;
min_transmit_bitrate_bps_ = min_transmit_bitrate_bps;
}
+ {
+ rtc::CritScope lock(&sink_cs_);
+ sink_ = sink;
+ }
- size_t max_data_payload_length = send_payload_router_->MaxPayloadLength();
bool success = video_sender_.RegisterSendCodec(
&video_codec, number_of_cores_,
static_cast<uint32_t>(max_data_payload_length)) == VCM_OK;
@@ -191,11 +168,6 @@ void ViEEncoder::SetEncoder(const webrtc::VideoCodec& video_codec,
RTC_DCHECK(success);
}
- send_payload_router_->SetSendingRtpModules(
- video_codec.numberOfSimulcastStreams);
-
- // Restart the media flow
- Restart();
if (stats_proxy_) {
// Clear stats for disabled layers.
for (size_t i = video_codec.numberOfSimulcastStreams; i < ssrcs_.size();
@@ -307,11 +279,6 @@ void ViEEncoder::TraceFrameDropEnd() {
}
void ViEEncoder::EncodeVideoFrame(const VideoFrame& video_frame) {
- if (!send_payload_router_->active()) {
- // We've paused or we have no channels attached, don't waste resources on
- // encoding.
- return;
- }
VideoCodecType codec_type;
{
rtc::CritScope lock(&data_cs_);
@@ -394,25 +361,21 @@ void ViEEncoder::OnEncoderImplementationName(const char* implementation_name) {
int32_t ViEEncoder::Encoded(const EncodedImage& encoded_image,
const CodecSpecificInfo* codec_specific_info,
const RTPFragmentationHeader* fragmentation) {
- RTC_DCHECK(send_payload_router_);
-
{
rtc::CritScope lock(&data_cs_);
time_of_last_frame_activity_ms_ = TickTime::MillisecondTimestamp();
}
-
- if (post_encode_callback_) {
- post_encode_callback_->Encoded(encoded_image, codec_specific_info,
- fragmentation);
- }
-
if (stats_proxy_) {
stats_proxy_->OnSendEncodedImage(encoded_image, codec_specific_info);
}
- int success = send_payload_router_->Encoded(
- encoded_image, codec_specific_info, fragmentation);
- overuse_detector_->FrameSent(encoded_image._timeStamp);
+ int success = 0;
+ {
+ rtc::CritScope lock(&sink_cs_);
+ success = sink_->Encoded(encoded_image, codec_specific_info, fragmentation);
+ }
+
+ overuse_detector_->FrameSent(encoded_image._timeStamp);
if (kEnableFrameRecording) {
int layer = codec_specific_info->codecType == kVideoCodecVP8
? codec_specific_info->codecSpecific.VP8.simulcastIdx
@@ -489,26 +452,17 @@ void ViEEncoder::OnBitrateUpdated(uint32_t bitrate_bps,
LOG(LS_VERBOSE) << "OnBitrateUpdated, bitrate" << bitrate_bps
<< " packet loss " << static_cast<int>(fraction_lost)
<< " rtt " << round_trip_time_ms;
- RTC_DCHECK(send_payload_router_);
video_sender_.SetChannelParameters(bitrate_bps, fraction_lost,
round_trip_time_ms);
bool video_is_suspended = video_sender_.VideoSuspended();
bool video_suspension_changed;
- VideoCodec send_codec;
{
rtc::CritScope lock(&data_cs_);
last_observed_bitrate_bps_ = bitrate_bps;
video_suspension_changed = video_suspended_ != video_is_suspended;
video_suspended_ = video_is_suspended;
- send_codec = encoder_config_;
}
- SimulcastStream* stream_configs = send_codec.simulcastStream;
- // Allocate the bandwidth between the streams.
- std::vector<uint32_t> stream_bitrates = AllocateStreamBitrates(
- bitrate_bps, stream_configs, send_codec.numberOfSimulcastStreams);
- send_payload_router_->SetTargetSendBitrates(stream_bitrates);
-
if (!video_suspension_changed)
return;
// Video suspend-state changed, inform codec observer.
« no previous file with comments | « webrtc/video/vie_encoder.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698