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

Unified Diff: content/renderer/media/webrtc/media_stream_video_webrtc_sink.cc

Issue 2790823002: Spec compliant video constraints for getUserMedia behind flag. (Closed)
Patch Set: rebase Created 3 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
Index: content/renderer/media/webrtc/media_stream_video_webrtc_sink.cc
diff --git a/content/renderer/media/webrtc/media_stream_video_webrtc_sink.cc b/content/renderer/media/webrtc/media_stream_video_webrtc_sink.cc
index a2c0a70e314dfe4299a36f5eb50a4c2df7480f36..aa67078660dce5cec2ad19e90c57d356249a7917 100644
--- a/content/renderer/media/webrtc/media_stream_video_webrtc_sink.cc
+++ b/content/renderer/media/webrtc/media_stream_video_webrtc_sink.cc
@@ -4,6 +4,11 @@
#include "content/renderer/media/webrtc/media_stream_video_webrtc_sink.h"
+#include <algorithm>
+#include <memory>
+#include <string>
+
+#include "base/feature_list.h"
#include "base/location.h"
#include "base/numerics/safe_conversions.h"
#include "base/single_thread_task_runner.h"
@@ -12,6 +17,7 @@
#include "base/threading/thread_task_runner_handle.h"
#include "base/timer/timer.h"
#include "content/common/media/media_stream_options.h"
+#include "content/public/common/content_features.h"
#include "content/public/renderer/media_stream_utils.h"
#include "content/renderer/media/media_stream_constraints_util.h"
#include "content/renderer/media/media_stream_video_track.h"
@@ -22,6 +28,14 @@
namespace content {
+namespace {
+
+rtc::Optional<bool> ToRtcOptional(const base::Optional<bool>& value) {
+ return value ? rtc::Optional<bool>(*value) : rtc::Optional<bool>();
+}
+
+} // namespace
+
class MediaStreamVideoWebRtcSink::WebRtcVideoSource
: public webrtc::VideoTrackSource {
public:
@@ -249,27 +263,45 @@ MediaStreamVideoWebRtcSink::MediaStreamVideoWebRtcSink(
const blink::WebMediaStreamTrack& track,
PeerConnectionDependencyFactory* factory)
: weak_factory_(this) {
- DCHECK(MediaStreamVideoTrack::GetVideoTrack(track));
- const blink::WebMediaConstraints& constraints =
- MediaStreamVideoTrack::GetVideoTrack(track)->constraints();
-
- // Check for presence of mediaStreamSource constraint. The value is ignored.
- std::string value;
- bool is_screencast = GetConstraintValueAsString(
- constraints, &blink::WebMediaTrackConstraintSet::mediaStreamSource,
- &value);
-
- // Extract denoising preference, if no value is set this currently falls back
- // to a codec-specific default inside webrtc, hence the tri-state of {on, off
- // unset}.
- // TODO(pbos): Add tests that make sure that googNoiseReduction has properly
- // propagated from getUserMedia down to a VideoTrackSource.
+ MediaStreamVideoTrack* video_track =
+ MediaStreamVideoTrack::GetVideoTrack(track);
+ DCHECK(video_track);
rtc::Optional<bool> needs_denoising;
- bool denoising_value;
- if (GetConstraintValueAsBoolean(
- constraints, &blink::WebMediaTrackConstraintSet::googNoiseReduction,
- &denoising_value)) {
- needs_denoising = rtc::Optional<bool>(denoising_value);
+ bool is_screencast = false;
+ double min_frame_rate = 0.0;
+ double max_frame_rate = 0.0;
+
+ if (IsOldVideoConstraints()) {
+ const blink::WebMediaConstraints& constraints = video_track->constraints();
+
+ // Check for presence of mediaStreamSource constraint. The value is ignored.
+ std::string value;
+ is_screencast = GetConstraintValueAsString(
+ constraints, &blink::WebMediaTrackConstraintSet::mediaStreamSource,
+ &value);
+
+ // Extract denoising preference, if no value is set this currently falls
+ // back to a codec-specific default inside webrtc, hence the tri-state of
+ // {on, off unset}.
+ // TODO(pbos): Add tests that make sure that googNoiseReduction has properly
+ // propagated from getUserMedia down to a VideoTrackSource.
+ bool denoising_value;
+ if (GetConstraintValueAsBoolean(
+ constraints, &blink::WebMediaTrackConstraintSet::googNoiseReduction,
+ &denoising_value)) {
+ needs_denoising = rtc::Optional<bool>(denoising_value);
+ }
+ GetConstraintMinAsDouble(constraints,
+ &blink::WebMediaTrackConstraintSet::frameRate,
+ &min_frame_rate);
+ GetConstraintMaxAsDouble(constraints,
+ &blink::WebMediaTrackConstraintSet::frameRate,
+ &max_frame_rate);
+ } else {
+ needs_denoising = ToRtcOptional(video_track->noise_reduction());
+ is_screencast = video_track->is_screencast();
+ min_frame_rate = video_track->min_frame_rate();
+ max_frame_rate = video_track->adapter_settings().max_frame_rate;
}
// Enable automatic frame refreshes for the screen capture sources, which will
@@ -282,22 +314,15 @@ MediaStreamVideoWebRtcSink::MediaStreamVideoWebRtcSink(
// Start with the default refresh interval, and refine based on constraints.
refresh_interval =
base::TimeDelta::FromMicroseconds(kDefaultRefreshIntervalMicros);
- double value = 0.0;
- if (GetConstraintMinAsDouble(
- constraints, &blink::WebMediaTrackConstraintSet::frameRate,
- &value) &&
- value > 0.0) {
+ if (min_frame_rate > 0.0) {
refresh_interval =
base::TimeDelta::FromMicroseconds(base::saturated_cast<int64_t>(
- base::Time::kMicrosecondsPerSecond / value));
+ base::Time::kMicrosecondsPerSecond / min_frame_rate));
}
- if (GetConstraintMaxAsDouble(
- constraints, &blink::WebMediaTrackConstraintSet::frameRate,
- &value) &&
- value > 0.0) {
+ if (max_frame_rate > 0.0) {
const base::TimeDelta alternate_refresh_interval =
base::TimeDelta::FromMicroseconds(base::saturated_cast<int64_t>(
- base::Time::kMicrosecondsPerSecond / value));
+ base::Time::kMicrosecondsPerSecond / max_frame_rate));
refresh_interval = std::max(refresh_interval, alternate_refresh_interval);
}
if (refresh_interval.InMicroseconds() < kLowerBoundRefreshIntervalMicros) {

Powered by Google App Engine
This is Rietveld 408576698