OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 // From webrtc_audio_capturer | 142 // From webrtc_audio_capturer |
143 const char kAudioLatency[] = "latencyMs"; | 143 const char kAudioLatency[] = "latencyMs"; |
144 // From media_stream_video_capturer_source | 144 // From media_stream_video_capturer_source |
145 | 145 |
146 // End of names from libjingle | 146 // End of names from libjingle |
147 // Names that have been used in the past, but should now be ignored. | 147 // Names that have been used in the past, but should now be ignored. |
148 // Kept around for backwards compatibility. | 148 // Kept around for backwards compatibility. |
149 // https://crbug.com/579729 | 149 // https://crbug.com/579729 |
150 const char kGoogLeakyBucket[] = "googLeakyBucket"; | 150 const char kGoogLeakyBucket[] = "googLeakyBucket"; |
151 const char kPowerLineFrequency[] = "googPowerLineFrequency"; | 151 const char kPowerLineFrequency[] = "googPowerLineFrequency"; |
| 152 // mediacapture-depth: videoKind key and VideoKindEnum values. |
| 153 const char kVideoKind[] = "videoKind"; |
| 154 const char kVideoKindColor[] = "color"; |
| 155 const char kVideoKindDepth[] = "depth"; |
152 // Names used for testing. | 156 // Names used for testing. |
153 const char kTestConstraint1[] = "valid_and_supported_1"; | 157 const char kTestConstraint1[] = "valid_and_supported_1"; |
154 const char kTestConstraint2[] = "valid_and_supported_2"; | 158 const char kTestConstraint2[] = "valid_and_supported_2"; |
155 | 159 |
156 static bool parseMandatoryConstraintsDictionary( | 160 static bool parseMandatoryConstraintsDictionary( |
157 const Dictionary& mandatoryConstraintsDictionary, | 161 const Dictionary& mandatoryConstraintsDictionary, |
158 Vector<NameValueStringConstraint>& mandatory) { | 162 Vector<NameValueStringConstraint>& mandatory) { |
159 DummyExceptionStateForTesting exceptionState; | 163 DummyExceptionStateForTesting exceptionState; |
160 const HashMap<String, String>& mandatoryConstraintsHashMap = | 164 const HashMap<String, String>& mandatoryConstraintsHashMap = |
161 mandatoryConstraintsDictionary.getOwnPropertiesAsStringHashMap( | 165 mandatoryConstraintsDictionary.getOwnPropertiesAsStringHashMap( |
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
419 } else if (constraint.m_name.equals(kAudioLatency)) { | 423 } else if (constraint.m_name.equals(kAudioLatency)) { |
420 result.googLatencyMs.setExact(atoi(constraint.m_value.utf8().c_str())); | 424 result.googLatencyMs.setExact(atoi(constraint.m_value.utf8().c_str())); |
421 } else if (constraint.m_name.equals(kPowerLineFrequency)) { | 425 } else if (constraint.m_name.equals(kPowerLineFrequency)) { |
422 result.googPowerLineFrequency.setExact( | 426 result.googPowerLineFrequency.setExact( |
423 atoi(constraint.m_value.utf8().c_str())); | 427 atoi(constraint.m_value.utf8().c_str())); |
424 } else if (constraint.m_name.equals(kGoogLeakyBucket)) { | 428 } else if (constraint.m_name.equals(kGoogLeakyBucket)) { |
425 context->addConsoleMessage(ConsoleMessage::create( | 429 context->addConsoleMessage(ConsoleMessage::create( |
426 DeprecationMessageSource, WarningMessageLevel, | 430 DeprecationMessageSource, WarningMessageLevel, |
427 "Obsolete constraint named " + String(constraint.m_name) + | 431 "Obsolete constraint named " + String(constraint.m_name) + |
428 " is ignored. Please stop using it.")); | 432 " is ignored. Please stop using it.")); |
| 433 } else if (constraint.m_name.equals(kVideoKind)) { |
| 434 if (!constraint.m_value.equals(kVideoKindColor) && |
| 435 !constraint.m_value.equals(kVideoKindDepth)) { |
| 436 errorState.throwConstraintError("Illegal value for constraint", |
| 437 constraint.m_name); |
| 438 } else { |
| 439 result.videoKind.setExact(constraint.m_value); |
| 440 } |
429 } else if (constraint.m_name.equals(kTestConstraint1) || | 441 } else if (constraint.m_name.equals(kTestConstraint1) || |
430 constraint.m_name.equals(kTestConstraint2)) { | 442 constraint.m_name.equals(kTestConstraint2)) { |
431 // These constraints are only for testing parsing. | 443 // These constraints are only for testing parsing. |
432 // Values 0 and 1 are legal, all others are a ConstraintError. | 444 // Values 0 and 1 are legal, all others are a ConstraintError. |
433 if (!constraint.m_value.equals("0") && !constraint.m_value.equals("1")) { | 445 if (!constraint.m_value.equals("0") && !constraint.m_value.equals("1")) { |
434 errorState.throwConstraintError("Illegal value for constraint", | 446 errorState.throwConstraintError("Illegal value for constraint", |
435 constraint.m_name); | 447 constraint.m_name); |
436 } | 448 } |
437 } else { | 449 } else { |
438 if (reportUnknownNames) { | 450 if (reportUnknownNames) { |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
663 constraintBuffer.channelCount); | 675 constraintBuffer.channelCount); |
664 } | 676 } |
665 if (constraintsIn.hasDeviceId()) { | 677 if (constraintsIn.hasDeviceId()) { |
666 copyStringConstraint(constraintsIn.deviceId(), nakedTreatment, | 678 copyStringConstraint(constraintsIn.deviceId(), nakedTreatment, |
667 constraintBuffer.deviceId); | 679 constraintBuffer.deviceId); |
668 } | 680 } |
669 if (constraintsIn.hasGroupId()) { | 681 if (constraintsIn.hasGroupId()) { |
670 copyStringConstraint(constraintsIn.groupId(), nakedTreatment, | 682 copyStringConstraint(constraintsIn.groupId(), nakedTreatment, |
671 constraintBuffer.groupId); | 683 constraintBuffer.groupId); |
672 } | 684 } |
| 685 if (constraintsIn.hasVideoKind()) { |
| 686 copyStringConstraint(constraintsIn.videoKind(), nakedTreatment, |
| 687 constraintBuffer.videoKind); |
| 688 } |
673 } | 689 } |
674 | 690 |
675 WebMediaConstraints convertConstraintsToWeb( | 691 WebMediaConstraints convertConstraintsToWeb( |
676 const MediaTrackConstraints& constraintsIn) { | 692 const MediaTrackConstraints& constraintsIn) { |
677 WebMediaConstraints constraints; | 693 WebMediaConstraints constraints; |
678 WebMediaTrackConstraintSet constraintBuffer; | 694 WebMediaTrackConstraintSet constraintBuffer; |
679 Vector<WebMediaTrackConstraintSet> advancedBuffer; | 695 Vector<WebMediaTrackConstraintSet> advancedBuffer; |
680 copyConstraintSet(constraintsIn, NakedValueDisposition::kTreatAsIdeal, | 696 copyConstraintSet(constraintsIn, NakedValueDisposition::kTreatAsIdeal, |
681 constraintBuffer); | 697 constraintBuffer); |
682 if (constraintsIn.hasAdvanced()) { | 698 if (constraintsIn.hasAdvanced()) { |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
888 convertBoolean(input.echoCancellation, nakedTreatment)); | 904 convertBoolean(input.echoCancellation, nakedTreatment)); |
889 } | 905 } |
890 if (!input.latency.isEmpty()) | 906 if (!input.latency.isEmpty()) |
891 output.setLatency(convertDouble(input.latency, nakedTreatment)); | 907 output.setLatency(convertDouble(input.latency, nakedTreatment)); |
892 if (!input.channelCount.isEmpty()) | 908 if (!input.channelCount.isEmpty()) |
893 output.setChannelCount(convertLong(input.channelCount, nakedTreatment)); | 909 output.setChannelCount(convertLong(input.channelCount, nakedTreatment)); |
894 if (!input.deviceId.isEmpty()) | 910 if (!input.deviceId.isEmpty()) |
895 output.setDeviceId(convertString(input.deviceId, nakedTreatment)); | 911 output.setDeviceId(convertString(input.deviceId, nakedTreatment)); |
896 if (!input.groupId.isEmpty()) | 912 if (!input.groupId.isEmpty()) |
897 output.setGroupId(convertString(input.groupId, nakedTreatment)); | 913 output.setGroupId(convertString(input.groupId, nakedTreatment)); |
| 914 if (!input.videoKind.isEmpty()) |
| 915 output.setVideoKind(convertString(input.videoKind, nakedTreatment)); |
898 // TODO(hta): Decide the future of the nonstandard constraints. | 916 // TODO(hta): Decide the future of the nonstandard constraints. |
899 // If they go forward, they need to be added here. | 917 // If they go forward, they need to be added here. |
900 // https://crbug.com/605673 | 918 // https://crbug.com/605673 |
901 } | 919 } |
902 | 920 |
903 void convertConstraints(const WebMediaConstraints& input, | 921 void convertConstraints(const WebMediaConstraints& input, |
904 MediaTrackConstraints& output) { | 922 MediaTrackConstraints& output) { |
905 if (input.isNull()) | 923 if (input.isNull()) |
906 return; | 924 return; |
907 convertConstraintSet(input.basic(), NakedValueDisposition::kTreatAsIdeal, | 925 convertConstraintSet(input.basic(), NakedValueDisposition::kTreatAsIdeal, |
908 output); | 926 output); |
909 HeapVector<MediaTrackConstraintSet> advancedVector; | 927 HeapVector<MediaTrackConstraintSet> advancedVector; |
910 for (const auto& it : input.advanced()) { | 928 for (const auto& it : input.advanced()) { |
911 MediaTrackConstraintSet element; | 929 MediaTrackConstraintSet element; |
912 convertConstraintSet(it, NakedValueDisposition::kTreatAsExact, element); | 930 convertConstraintSet(it, NakedValueDisposition::kTreatAsExact, element); |
913 advancedVector.push_back(element); | 931 advancedVector.push_back(element); |
914 } | 932 } |
915 if (!advancedVector.isEmpty()) | 933 if (!advancedVector.isEmpty()) |
916 output.setAdvanced(advancedVector); | 934 output.setAdvanced(advancedVector); |
917 } | 935 } |
918 | 936 |
919 } // namespace MediaConstraintsImpl | 937 } // namespace MediaConstraintsImpl |
920 } // namespace blink | 938 } // namespace blink |
OLD | NEW |