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

Unified Diff: webrtc/media/engine/webrtcvideoengine2.cc

Issue 1766653002: Replace SetCapturer and SetCaptureDevice by SetSource. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Also revert VideoTrack test changes. Created 4 years, 9 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
Index: webrtc/media/engine/webrtcvideoengine2.cc
diff --git a/webrtc/media/engine/webrtcvideoengine2.cc b/webrtc/media/engine/webrtcvideoengine2.cc
index 3cff1e6fbd63778fa4a72721d0d4beac49f4a51e..d59113d15a0f36b00f27e47a57283cb5cf9c80e9 100644
--- a/webrtc/media/engine/webrtcvideoengine2.cc
+++ b/webrtc/media/engine/webrtcvideoengine2.cc
@@ -21,8 +21,6 @@
#include "webrtc/base/timeutils.h"
#include "webrtc/base/trace_event.h"
#include "webrtc/call.h"
-#include "webrtc/media/base/videocapturer.h"
-#include "webrtc/media/base/videorenderer.h"
#include "webrtc/media/engine/constants.h"
#include "webrtc/media/engine/simulcast.h"
#include "webrtc/media/engine/webrtcmediaengine.h"
@@ -999,6 +997,8 @@ bool WebRtcVideoChannel2::SetSend(bool send) {
return true;
}
+// TODO(nisse): Delete enable argument, was used for mute logic which
+// has been moved elsewhere.
bool WebRtcVideoChannel2::SetVideoSend(uint32_t ssrc, bool enable,
const VideoOptions* options) {
TRACE_EVENT0("webrtc", "SetVideoSend");
@@ -1006,11 +1006,6 @@ bool WebRtcVideoChannel2::SetVideoSend(uint32_t ssrc, bool enable,
<< "options: " << (options ? options->ToString() : "nullptr")
<< ").";
- // TODO(solenberg): The state change should be fully rolled back if any one of
- // these calls fail.
- if (!MuteStream(ssrc, !enable)) {
- return false;
- }
if (enable && options) {
SetOptions(ssrc, *options);
}
@@ -1328,22 +1323,22 @@ void WebRtcVideoChannel2::FillBandwidthEstimationStats(
video_media_info->bw_estimations.push_back(bwe_info);
}
-bool WebRtcVideoChannel2::SetCapturer(uint32_t ssrc, VideoCapturer* capturer) {
- LOG(LS_INFO) << "SetCapturer: " << ssrc << " -> "
- << (capturer != NULL ? "(capturer)" : "NULL");
- RTC_DCHECK(ssrc != 0);
- {
- rtc::CritScope stream_lock(&stream_crit_);
- const auto& kv = send_streams_.find(ssrc);
- if (kv == send_streams_.end()) {
- LOG(LS_ERROR) << "No sending stream on ssrc " << ssrc;
- return false;
- }
- if (!kv->second->SetCapturer(capturer)) {
- return false;
- }
+void WebRtcVideoChannel2::SetSource(
+ uint32_t ssrc,
+ rtc::VideoSourceInterface<cricket::VideoFrame>* source) {
+ LOG(LS_INFO) << "SetSource: " << ssrc << " -> "
+ << (source ? "(source)" : "NULL");
+ RTC_CHECK(ssrc != 0);
perkj_webrtc 2016/03/22 08:56:36 nit DCHECK
nisse-webrtc 2016/03/22 10:18:59 Done.
+
+ rtc::CritScope stream_lock(&stream_crit_);
+ const auto& kv = send_streams_.find(ssrc);
+ if (kv == send_streams_.end()) {
+ // Allow unknown ssrc only if source is null.
+ RTC_CHECK(source == nullptr);
+ }
+ else {
+ kv->second->SetSource(source);
}
- return true;
}
void WebRtcVideoChannel2::OnPacketReceived(
@@ -1424,21 +1419,6 @@ void WebRtcVideoChannel2::OnReadyToSend(bool ready) {
call_->SignalNetworkState(ready ? webrtc::kNetworkUp : webrtc::kNetworkDown);
}
-bool WebRtcVideoChannel2::MuteStream(uint32_t ssrc, bool mute) {
- LOG(LS_VERBOSE) << "MuteStream: " << ssrc << " -> "
- << (mute ? "mute" : "unmute");
- RTC_DCHECK(ssrc != 0);
- rtc::CritScope stream_lock(&stream_crit_);
- const auto& kv = send_streams_.find(ssrc);
- if (kv == send_streams_.end()) {
- LOG(LS_ERROR) << "No sending stream on ssrc " << ssrc;
- return false;
- }
-
- kv->second->MuteStream(mute);
- return true;
-}
-
// TODO(pbos): Remove SetOptions in favor of SetSendParameters.
void WebRtcVideoChannel2::SetOptions(uint32_t ssrc,
const VideoOptions& options) {
@@ -1545,7 +1525,7 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream(
call_(call),
cpu_restricted_counter_(0),
number_of_cpu_adapt_changes_(0),
- capturer_(nullptr),
+ source_(nullptr),
external_encoder_factory_(external_encoder_factory),
stream_(nullptr),
parameters_(config, options, max_bitrate_bps, codec_settings),
@@ -1553,7 +1533,6 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream(
pending_encoder_reconfiguration_(false),
allocated_encoder_(nullptr, webrtc::kVideoCodecUnknown, false),
sending_(false),
- muted_(false),
first_frame_timestamp_ms_(0),
last_frame_timestamp_ms_(0) {
parameters_.config.rtp.max_packet_size = kVideoMtu;
@@ -1579,7 +1558,7 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream(
}
WebRtcVideoChannel2::WebRtcVideoSendStream::~WebRtcVideoSendStream() {
- DisconnectCapturer();
+ DisconnectSource();
if (stream_ != NULL) {
call_->DestroyVideoSendStream(stream_);
}
@@ -1612,14 +1591,6 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::OnFrame(
return;
}
- if (muted_) {
- // Create a black frame to transmit instead.
- CreateBlackFrame(&video_frame,
- static_cast<int>(frame.GetWidth()),
- static_cast<int>(frame.GetHeight()),
- video_frame.rotation());
- }
-
int64_t frame_delta_ms = frame.GetTimeStamp() / rtc::kNumNanosecsPerMillisec;
// frame->GetTimeStamp() is essentially a delta, align to webrtc time
if (first_frame_timestamp_ms_ == 0) {
@@ -1642,13 +1613,14 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::OnFrame(
stream_->Input()->IncomingCapturedFrame(video_frame);
}
-bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetCapturer(
- VideoCapturer* capturer) {
- TRACE_EVENT0("webrtc", "WebRtcVideoSendStream::SetCapturer");
+void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSource(
+ rtc::VideoSourceInterface<cricket::VideoFrame>* source) {
+ TRACE_EVENT0("webrtc", "WebRtcVideoSendStream::SetSource");
RTC_DCHECK(thread_checker_.CalledOnValidThread());
- if (!DisconnectCapturer() && capturer == NULL) {
- return false;
- }
+
+ if (!source && !source_)
+ return;
+ DisconnectSource();
{
rtc::CritScope cs(&lock_);
@@ -1657,7 +1629,7 @@ bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetCapturer(
// new capturer may have a different timestamp delta than the previous one.
first_frame_timestamp_ms_ = 0;
- if (capturer == NULL) {
+ if (source == NULL) {
if (stream_ != NULL) {
LOG(LS_VERBOSE) << "Disabling capturer, sending black frame.";
webrtc::VideoFrame black_frame;
@@ -1674,39 +1646,33 @@ bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetCapturer(
black_frame.set_render_time_ms(last_frame_timestamp_ms_);
stream_->Input()->IncomingCapturedFrame(black_frame);
}
-
- capturer_ = NULL;
- return true;
}
+ // Clear the original dimensions, set it from first frame.
+ input_dimensions_.width = input_dimensions_.height = 0;
}
- capturer_ = capturer;
- // |capturer_->AddOrUpdateSink| may not be called while holding |lock_| since
+ source_ = source;
+ // |source_->AddOrUpdateSink| may not be called while holding |lock_| since
// that might cause a lock order inversion.
- capturer_->AddOrUpdateSink(this, sink_wants_);
- return true;
-}
-
-void WebRtcVideoChannel2::WebRtcVideoSendStream::MuteStream(bool mute) {
- rtc::CritScope cs(&lock_);
- muted_ = mute;
+ if (source_) {
+ source_->AddOrUpdateSink(this, sink_wants_);
+ }
}
-bool WebRtcVideoChannel2::WebRtcVideoSendStream::DisconnectCapturer() {
+void WebRtcVideoChannel2::WebRtcVideoSendStream::DisconnectSource() {
RTC_DCHECK(thread_checker_.CalledOnValidThread());
- if (capturer_ == NULL) {
- return false;
+ if (source_ == NULL) {
+ return;
}
- // |capturer_->RemoveSink| may not be called while holding |lock_| since
+ // |source_->RemoveSink| may not be called while holding |lock_| since
// that might cause a lock order inversion.
- capturer_->RemoveSink(this);
- capturer_ = NULL;
+ source_->RemoveSink(this);
+ source_ = NULL;
// Reset |cpu_restricted_counter_| if the capturer is changed. It is not
// possible to know if the video resolution is restricted by CPU usage after
// the capturer is changed since the next capturer might be screen capture
// with another resolution and frame rate.
cpu_restricted_counter_ = 0;
- return true;
}
const std::vector<uint32_t>&
@@ -1864,8 +1830,8 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSendParameters(
if (params.rtp_header_extensions) {
sink_wants_.rotation_applied = !ContainsHeaderExtension(
*params.rtp_header_extensions, kRtpVideoRotationHeaderExtension);
- if (capturer_) {
- capturer_->AddOrUpdateSink(this, sink_wants_);
+ if (source_) {
+ source_->AddOrUpdateSink(this, sink_wants_);
}
}
}
@@ -1966,6 +1932,10 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoderConfig(
void WebRtcVideoChannel2::WebRtcVideoSendStream::SetDimensions(
int width,
int height) {
+ if (input_dimensions_.width == 0 && input_dimensions_.height == 0) {
+ input_dimensions_.width = width;
+ input_dimensions_.height = height;
+ }
if (last_dimensions_.width == width && last_dimensions_.height == height &&
!pending_encoder_reconfiguration_) {
// Configured using the same parameters, do not reconfigure.
@@ -2018,7 +1988,7 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::OnLoadUpdate(Load load) {
return;
}
RTC_DCHECK(thread_checker_.CalledOnValidThread());
- if (!capturer_) {
+ if (!source_) {
return;
}
{
@@ -2065,9 +2035,9 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::OnLoadUpdate(Load load) {
sink_wants_.max_pixel_count = max_pixel_count;
sink_wants_.max_pixel_count_step_up = max_pixel_count_step_up;
}
- // |capturer_->AddOrUpdateSink| may not be called while holding |lock_| since
+ // |source_->AddOrUpdateSink| may not be called while holding |lock_| since
// that might cause a lock order inversion.
- capturer_->AddOrUpdateSink(this, sink_wants_);
+ source_->AddOrUpdateSink(this, sink_wants_);
}
VideoSenderInfo
@@ -2096,19 +2066,15 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::GetVideoSenderInfo() {
return info;
stats = stream_->GetStats();
+
+ info.input_frame_width = input_dimensions_.width;
+ info.input_frame_height = input_dimensions_.height;
}
info.adapt_changes = number_of_cpu_adapt_changes_;
info.adapt_reason = cpu_restricted_counter_ <= 0
? CoordinatedVideoAdapter::ADAPTREASON_NONE
: CoordinatedVideoAdapter::ADAPTREASON_CPU;
- if (capturer_) {
- VideoFormat last_captured_frame_format;
- capturer_->GetStats(&last_captured_frame_format);
- info.input_frame_width = last_captured_frame_format.width;
- info.input_frame_height = last_captured_frame_format.height;
- }
-
// Get bandwidth limitation info from stream_->GetStats().
// Input resolution (output from video_adapter) can be further scaled down or
// higher video layer(s) can be dropped due to bitrate constraints.

Powered by Google App Engine
This is Rietveld 408576698