Chromium Code Reviews| 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 are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * 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 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 179 return false; | 179 return false; |
| 180 } | 180 } |
| 181 return true; | 181 return true; |
| 182 } | 182 } |
| 183 | 183 |
| 184 bool LongConstraint::isEmpty() const | 184 bool LongConstraint::isEmpty() const |
| 185 { | 185 { |
| 186 return !m_hasMin && !m_hasMax && !m_hasExact && !m_hasIdeal; | 186 return !m_hasMin && !m_hasMax && !m_hasExact && !m_hasIdeal; |
| 187 } | 187 } |
| 188 | 188 |
| 189 bool LongConstraint::hasMandatory() const | |
| 190 { | |
| 191 return m_hasMin || m_hasMax || m_hasExact; | |
| 192 } | |
| 193 | |
| 189 double DoubleConstraint::kConstraintEpsilon = 0.00001; | 194 double DoubleConstraint::kConstraintEpsilon = 0.00001; |
| 190 | 195 |
| 191 DoubleConstraint::DoubleConstraint(const char* name) | 196 DoubleConstraint::DoubleConstraint(const char* name) |
| 192 : BaseConstraint(name) | 197 : BaseConstraint(name) |
| 193 , m_min() | 198 , m_min() |
| 194 , m_max() | 199 , m_max() |
| 195 , m_exact() | 200 , m_exact() |
| 196 , m_ideal() | 201 , m_ideal() |
| 197 , m_hasMin(false) | 202 , m_hasMin(false) |
| 198 , m_hasMax(false) | 203 , m_hasMax(false) |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 213 return false; | 218 return false; |
| 214 } | 219 } |
| 215 return true; | 220 return true; |
| 216 } | 221 } |
| 217 | 222 |
| 218 bool DoubleConstraint::isEmpty() const | 223 bool DoubleConstraint::isEmpty() const |
| 219 { | 224 { |
| 220 return !m_hasMin && !m_hasMax && !m_hasExact && !m_hasIdeal; | 225 return !m_hasMin && !m_hasMax && !m_hasExact && !m_hasIdeal; |
| 221 } | 226 } |
| 222 | 227 |
| 228 bool DoubleConstraint::hasMandatory() const | |
| 229 { | |
| 230 return m_hasMin || m_hasMax || m_hasExact; | |
| 231 } | |
| 232 | |
| 223 StringConstraint::StringConstraint(const char* name) | 233 StringConstraint::StringConstraint(const char* name) |
| 224 : BaseConstraint(name) | 234 : BaseConstraint(name) |
| 225 , m_exact() | 235 , m_exact() |
| 226 , m_ideal() | 236 , m_ideal() |
| 227 { | 237 { |
| 228 } | 238 } |
| 229 | 239 |
| 230 bool StringConstraint::matches(WebString value) const | 240 bool StringConstraint::matches(WebString value) const |
| 231 { | 241 { |
| 232 if (m_exact.isEmpty()) { | 242 if (m_exact.isEmpty()) { |
| 233 return true; | 243 return true; |
| 234 } | 244 } |
| 235 for (const auto& choice : m_exact) { | 245 for (const auto& choice : m_exact) { |
| 236 if (value == choice) { | 246 if (value == choice) { |
| 237 return true; | 247 return true; |
| 238 } | 248 } |
| 239 } | 249 } |
| 240 return false; | 250 return false; |
| 241 } | 251 } |
| 242 | 252 |
| 243 bool StringConstraint::isEmpty() const | 253 bool StringConstraint::isEmpty() const |
| 244 { | 254 { |
| 245 return m_exact.isEmpty() && m_ideal.isEmpty(); | 255 return m_exact.isEmpty() && m_ideal.isEmpty(); |
| 246 } | 256 } |
| 247 | 257 |
| 258 bool StringConstraint::hasMandatory() const | |
| 259 { | |
| 260 return !m_exact.isEmpty(); | |
| 261 } | |
| 262 | |
| 248 const WebVector<WebString>& StringConstraint::exact() const | 263 const WebVector<WebString>& StringConstraint::exact() const |
| 249 { | 264 { |
| 250 return m_exact; | 265 return m_exact; |
| 251 } | 266 } |
| 252 | 267 |
| 253 const WebVector<WebString>& StringConstraint::ideal() const | 268 const WebVector<WebString>& StringConstraint::ideal() const |
| 254 { | 269 { |
| 255 return m_ideal; | 270 return m_ideal; |
| 256 } | 271 } |
| 257 | 272 |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 270 return false; | 285 return false; |
| 271 } | 286 } |
| 272 return true; | 287 return true; |
| 273 } | 288 } |
| 274 | 289 |
| 275 bool BooleanConstraint::isEmpty() const | 290 bool BooleanConstraint::isEmpty() const |
| 276 { | 291 { |
| 277 return !m_hasIdeal && !m_hasExact; | 292 return !m_hasIdeal && !m_hasExact; |
| 278 } | 293 } |
| 279 | 294 |
| 295 bool BooleanConstraint::hasMandatory() const | |
| 296 { | |
| 297 return m_hasExact; | |
| 298 } | |
| 299 | |
| 280 WebMediaTrackConstraintSet::WebMediaTrackConstraintSet() | 300 WebMediaTrackConstraintSet::WebMediaTrackConstraintSet() |
| 281 : width("width") | 301 : width("width") |
| 282 , height("height") | 302 , height("height") |
| 283 , aspectRatio("aspectRatio") | 303 , aspectRatio("aspectRatio") |
| 284 , frameRate("frameRate") | 304 , frameRate("frameRate") |
| 285 , facingMode("facingMode") | 305 , facingMode("facingMode") |
| 286 , volume("volume") | 306 , volume("volume") |
| 287 , sampleRate("sampleRate") | 307 , sampleRate("sampleRate") |
| 288 , sampleSize("sampleSize") | 308 , sampleSize("sampleSize") |
| 289 , echoCancellation("echoCancellation") | 309 , echoCancellation("echoCancellation") |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 325 , googCpuUnderuseThreshold("googCpuUnderuseThreshold") | 345 , googCpuUnderuseThreshold("googCpuUnderuseThreshold") |
| 326 , googCpuOveruseThreshold("googCpuOveruseThreshold") | 346 , googCpuOveruseThreshold("googCpuOveruseThreshold") |
| 327 , googCpuUnderuseEncodeRsdThreshold("googCpuUnderuseEncodeRsdThreshold") | 347 , googCpuUnderuseEncodeRsdThreshold("googCpuUnderuseEncodeRsdThreshold") |
| 328 , googCpuOveruseEncodeRsdThreshold("googCpuOveruseEncodeRsdThreshold") | 348 , googCpuOveruseEncodeRsdThreshold("googCpuOveruseEncodeRsdThreshold") |
| 329 , googCpuOveruseEncodeUsage("googCpuOveruseEncodeUsage") | 349 , googCpuOveruseEncodeUsage("googCpuOveruseEncodeUsage") |
| 330 , googHighStartBitrate("googHighStartBitrate") | 350 , googHighStartBitrate("googHighStartBitrate") |
| 331 , googPayloadPadding("googPayloadPadding") | 351 , googPayloadPadding("googPayloadPadding") |
| 332 { | 352 { |
| 333 } | 353 } |
| 334 | 354 |
| 355 std::vector<const BaseConstraint*> WebMediaTrackConstraintSet::allConstraints() const | |
| 356 { | |
| 357 const BaseConstraint* temp[] = { | |
| 358 &width, &height, &aspectRatio, &frameRate, &facingMode, &volume, | |
| 359 &sampleRate, &sampleSize, &echoCancellation, &latency, &channelCount, | |
| 360 &deviceId, &groupId, &mediaStreamSource, &renderToAssociatedSink, | |
| 361 &hotwordEnabled, &googEchoCancellation, | |
| 362 &googExperimentalEchoCancellation, &googAutoGainControl, | |
| 363 &googExperimentalAutoGainControl, &googNoiseSuppression, | |
| 364 &googHighpassFilter, &googTypingNoiseDetection, | |
| 365 &googExperimentalNoiseSuppression, &googBeamforming, | |
| 366 &googArrayGeometry, &googAudioMirroring, &googDAEchoCancellation, | |
| 367 &googAecDump, &googNoiseReduction, &offerToReceiveAudio, | |
| 368 &offerToReceiveVideo, &voiceActivityDetection, &iceRestart, | |
| 369 &googUseRtpMux, &enableDtlsSrtp, &enableRtpDataChannels, | |
| 370 &enableDscp, &enableIPv6, &googEnableVideoSuspendBelowMinBitrate, | |
| 371 &googNumUnsignalledRecvStreams, &googCombinedAudioVideoBwe, | |
| 372 &googScreencastMinBitrate, &googCpuOveruseDetection, | |
| 373 &googCpuUnderuseThreshold, &googCpuOveruseThreshold, | |
| 374 &googCpuUnderuseEncodeRsdThreshold, &googCpuOveruseEncodeRsdThreshold, | |
| 375 &googCpuOveruseEncodeUsage, &googHighStartBitrate, &googPayloadPadding | |
| 376 }; | |
| 377 const int elementCount = sizeof(temp) / sizeof(temp[0]); | |
| 378 return std::vector<const BaseConstraint*>(&temp[0], &temp[elementCount]); | |
| 379 } | |
| 380 | |
| 335 bool WebMediaTrackConstraintSet::isEmpty() const | 381 bool WebMediaTrackConstraintSet::isEmpty() const |
| 336 { | 382 { |
| 337 return width.isEmpty() && height.isEmpty() && aspectRatio.isEmpty() | 383 for (const auto& constraint : allConstraints()) { |
| 338 && frameRate.isEmpty() && facingMode.isEmpty() && volume.isEmpty() | 384 if (!constraint->isEmpty()) |
| 339 && sampleRate.isEmpty() && sampleSize.isEmpty() | 385 return false; |
| 340 && echoCancellation.isEmpty() && latency.isEmpty() | 386 } |
| 341 && channelCount.isEmpty() && deviceId.isEmpty() && groupId.isEmpty() | 387 return true; |
| 342 && mediaStreamSource.isEmpty() && renderToAssociatedSink.isEmpty() | 388 } |
| 343 && hotwordEnabled.isEmpty() && googEchoCancellation.isEmpty() | 389 |
| 344 && googExperimentalEchoCancellation.isEmpty() | 390 bool WebMediaTrackConstraintSet::hasMandatoryOutsideSet(const std::vector<std::s tring>& goodNames, std::string& foundName) const |
| 345 && googAutoGainControl.isEmpty() | 391 { |
| 346 && googExperimentalAutoGainControl.isEmpty() | 392 for (const auto& constraint : allConstraints()) { |
| 347 && googNoiseSuppression.isEmpty() | 393 if (constraint->hasMandatory()) { |
| 348 && googHighpassFilter.isEmpty() | 394 const auto& result = std::find(goodNames.begin(), goodNames.end(), c onstraint->name()); |
| 349 && googTypingNoiseDetection.isEmpty() | 395 if (result == goodNames.end()) { |
|
mcasas
2016/01/26 16:08:02
No need for |result|?
hta - Chromium
2016/01/26 19:35:25
I thought so, but it turned out not to be the case
| |
| 350 && googExperimentalNoiseSuppression.isEmpty() | 396 foundName = constraint->name(); |
| 351 && googBeamforming.isEmpty() && googArrayGeometry.isEmpty() | 397 return true; |
| 352 && googAudioMirroring.isEmpty(); | 398 } |
| 399 } | |
| 400 } | |
| 401 return false; | |
| 402 } | |
| 403 | |
| 404 bool WebMediaTrackConstraintSet::hasMandatory() const | |
| 405 { | |
| 406 std::string dummyString; | |
| 407 return hasMandatoryOutsideSet(std::vector<std::string>(), dummyString); | |
| 353 } | 408 } |
| 354 | 409 |
| 355 // WebMediaConstraints | 410 // WebMediaConstraints |
| 356 | 411 |
| 357 void WebMediaConstraints::assign(const WebMediaConstraints& other) | 412 void WebMediaConstraints::assign(const WebMediaConstraints& other) |
| 358 { | 413 { |
| 359 m_private = other.m_private; | 414 m_private = other.m_private; |
| 360 } | 415 } |
| 361 | 416 |
| 362 void WebMediaConstraints::reset() | 417 void WebMediaConstraints::reset() |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 417 return m_private->basic(); | 472 return m_private->basic(); |
| 418 } | 473 } |
| 419 | 474 |
| 420 const WebVector<WebMediaTrackConstraintSet>& WebMediaConstraints::advanced() con st | 475 const WebVector<WebMediaTrackConstraintSet>& WebMediaConstraints::advanced() con st |
| 421 { | 476 { |
| 422 ASSERT(!isNull()); | 477 ASSERT(!isNull()); |
| 423 return m_private->advanced(); | 478 return m_private->advanced(); |
| 424 } | 479 } |
| 425 | 480 |
| 426 } // namespace blink | 481 } // namespace blink |
| OLD | NEW |