OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/media/media_stream_constraints_util_video_source.h" | 5 #include "content/renderer/media/media_stream_constraints_util_video_source.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 #include <limits> | 9 #include <limits> |
10 #include <utility> | 10 #include <utility> |
11 #include <vector> | 11 #include <vector> |
12 | 12 |
13 #include "content/renderer/media/media_stream_video_source.h" | 13 #include "content/renderer/media/media_stream_video_source.h" |
| 14 #include "content/renderer/media/media_stream_video_track.h" |
14 #include "third_party/WebKit/public/platform/WebMediaConstraints.h" | 15 #include "third_party/WebKit/public/platform/WebMediaConstraints.h" |
15 #include "third_party/WebKit/public/platform/WebString.h" | 16 #include "third_party/WebKit/public/platform/WebString.h" |
16 | 17 |
17 namespace content { | 18 namespace content { |
18 | 19 |
19 namespace { | 20 namespace { |
20 | 21 |
21 // Number of default settings to be used as final tie-breaking criteria for | 22 // Number of default settings to be used as final tie-breaking criteria for |
22 // settings that are equally good at satisfying constraints: | 23 // settings that are equally good at satisfying constraints: |
23 // device ID, power-line frequency, resolution and frame rate. | 24 // device ID, power-line frequency, resolution and frame rate. |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
300 failed_constraint_name) + | 301 failed_constraint_name) + |
301 ResolutionConstraintSourceDistance(format.frame_size.width(), | 302 ResolutionConstraintSourceDistance(format.frame_size.width(), |
302 constraint_set.width, | 303 constraint_set.width, |
303 failed_constraint_name) + | 304 failed_constraint_name) + |
304 AspectRatioConstraintSourceDistance( | 305 AspectRatioConstraintSourceDistance( |
305 format.frame_size.height(), format.frame_size.width(), | 306 format.frame_size.height(), format.frame_size.width(), |
306 constraint_set.height, constraint_set.width, | 307 constraint_set.height, constraint_set.width, |
307 constraint_set.aspectRatio, failed_constraint_name) + | 308 constraint_set.aspectRatio, failed_constraint_name) + |
308 FrameRateConstraintSourceDistance(format.frame_rate, | 309 FrameRateConstraintSourceDistance(format.frame_rate, |
309 constraint_set.frameRate, | 310 constraint_set.frameRate, |
310 failed_constraint_name); | 311 failed_constraint_name) + |
| 312 StringConstraintSourceDistance(GetVideoKindForFormat(format), |
| 313 constraint_set.videoKind, |
| 314 failed_constraint_name); |
311 } | 315 } |
312 | 316 |
313 // Returns a custom distance between a set of candidate settings and a | 317 // Returns a custom distance between a set of candidate settings and a |
314 // constraint set. It is simply the sum of the distances for each individual | 318 // constraint set. It is simply the sum of the distances for each individual |
315 // setting in |candidate|. | 319 // setting in |candidate|. |
316 // If |candidate| cannot satisfy constraint, the distance is HUGE_VAL. | 320 // If |candidate| cannot satisfy constraint, the distance is HUGE_VAL. |
317 // Otherwise the distance is a finite value. Candidates with lower distance | 321 // Otherwise the distance is a finite value. Candidates with lower distance |
318 // satisfy |constraint_set| in a "better" way. | 322 // satisfy |constraint_set| in a "better" way. |
319 double CandidateSourceDistance( | 323 double CandidateSourceDistance( |
320 const VideoCaptureSourceSettings& candidate, | 324 const VideoCaptureSourceSettings& candidate, |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
470 double fitness = 0.0; | 474 double fitness = 0.0; |
471 fitness += AspectRatioConstraintFitnessDistance( | 475 fitness += AspectRatioConstraintFitnessDistance( |
472 candidate.GetHeight(), candidate.GetWidth(), constraint_set.height, | 476 candidate.GetHeight(), candidate.GetWidth(), constraint_set.height, |
473 constraint_set.width, constraint_set.aspectRatio); | 477 constraint_set.width, constraint_set.aspectRatio); |
474 fitness += StringConstraintFitnessDistance(candidate.GetDeviceId(), | 478 fitness += StringConstraintFitnessDistance(candidate.GetDeviceId(), |
475 constraint_set.deviceId); | 479 constraint_set.deviceId); |
476 fitness += StringConstraintFitnessDistance(candidate.GetFacingMode(), | 480 fitness += StringConstraintFitnessDistance(candidate.GetFacingMode(), |
477 constraint_set.facingMode); | 481 constraint_set.facingMode); |
478 fitness += FrameRateConstraintFitnessDistance(candidate.GetFrameRate(), | 482 fitness += FrameRateConstraintFitnessDistance(candidate.GetFrameRate(), |
479 constraint_set.frameRate); | 483 constraint_set.frameRate); |
| 484 fitness += StringConstraintFitnessDistance(candidate.GetVideoKind(), |
| 485 constraint_set.videoKind); |
480 fitness += PowerLineFrequencyConstraintFitnessDistance( | 486 fitness += PowerLineFrequencyConstraintFitnessDistance( |
481 candidate.GetPowerLineFrequency(), constraint_set.googPowerLineFrequency); | 487 candidate.GetPowerLineFrequency(), constraint_set.googPowerLineFrequency); |
482 fitness += ResolutionConstraintFitnessDistance(candidate.GetHeight(), | 488 fitness += ResolutionConstraintFitnessDistance(candidate.GetHeight(), |
483 constraint_set.height); | 489 constraint_set.height); |
484 fitness += ResolutionConstraintFitnessDistance(candidate.GetWidth(), | 490 fitness += ResolutionConstraintFitnessDistance(candidate.GetWidth(), |
485 constraint_set.width); | 491 constraint_set.width); |
486 | 492 |
487 return fitness; | 493 return fitness; |
488 } | 494 } |
489 | 495 |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
602 } | 608 } |
603 | 609 |
604 double VideoCaptureSourceSettings::GetFrameRate() const { | 610 double VideoCaptureSourceSettings::GetFrameRate() const { |
605 return format_.frame_rate; | 611 return format_.frame_rate; |
606 } | 612 } |
607 | 613 |
608 blink::WebString VideoCaptureSourceSettings::GetDeviceId() const { | 614 blink::WebString VideoCaptureSourceSettings::GetDeviceId() const { |
609 return blink::WebString::fromASCII(device_id_.data()); | 615 return blink::WebString::fromASCII(device_id_.data()); |
610 } | 616 } |
611 | 617 |
| 618 blink::WebString VideoCaptureSourceSettings::GetVideoKind() const { |
| 619 return GetVideoKindForFormat(format_); |
| 620 } |
| 621 |
612 const char kDefaultFailedConstraintName[] = ""; | 622 const char kDefaultFailedConstraintName[] = ""; |
613 | 623 |
614 VideoCaptureSourceSelectionResult::VideoCaptureSourceSelectionResult() | 624 VideoCaptureSourceSelectionResult::VideoCaptureSourceSelectionResult() |
615 : failed_constraint_name(kDefaultFailedConstraintName) {} | 625 : failed_constraint_name(kDefaultFailedConstraintName) {} |
616 VideoCaptureSourceSelectionResult::VideoCaptureSourceSelectionResult( | 626 VideoCaptureSourceSelectionResult::VideoCaptureSourceSelectionResult( |
617 const VideoCaptureSourceSelectionResult& other) = default; | 627 const VideoCaptureSourceSelectionResult& other) = default; |
618 VideoCaptureSourceSelectionResult::VideoCaptureSourceSelectionResult( | 628 VideoCaptureSourceSelectionResult::VideoCaptureSourceSelectionResult( |
619 VideoCaptureSourceSelectionResult&& other) = default; | 629 VideoCaptureSourceSelectionResult&& other) = default; |
620 VideoCaptureSourceSelectionResult::~VideoCaptureSourceSelectionResult() = | 630 VideoCaptureSourceSelectionResult::~VideoCaptureSourceSelectionResult() = |
621 default; | 631 default; |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
723 } | 733 } |
724 } | 734 } |
725 | 735 |
726 if (!result.has_value()) | 736 if (!result.has_value()) |
727 result.failed_constraint_name = failed_constraint_name; | 737 result.failed_constraint_name = failed_constraint_name; |
728 | 738 |
729 return result; | 739 return result; |
730 } | 740 } |
731 | 741 |
732 } // namespace content | 742 } // namespace content |
OLD | NEW |