Bug 1162412 - Part 1: Don't treat plain facingMode constraint as required. r=jesup, a=lmandel

This commit is contained in:
Jan-Ivar Bruaroey
2015-05-07 13:15:35 -04:00
parent f7e433d434
commit 6445427e23

View File

@@ -435,22 +435,31 @@ uint32_t
VideoDevice::GetBestFitnessDistance(
const nsTArray<const MediaTrackConstraintSet*>& aConstraintSets)
{
// TODO: Minimal kludge to fix plain and ideal facingMode regression, for
// smooth landing and uplift. Proper cleanup is forthcoming (1037389).
uint64_t distance = 0;
// Interrogate device-inherent properties first.
for (size_t i = 0; i < aConstraintSets.Length(); i++) {
auto& c = *aConstraintSets[i];
if (!c.mFacingMode.IsConstrainDOMStringParameters() ||
c.mFacingMode.GetAsConstrainDOMStringParameters().mIdeal.WasPassed() ||
c.mFacingMode.GetAsConstrainDOMStringParameters().mExact.WasPassed()) {
nsString deviceFacingMode;
GetFacingMode(deviceFacingMode);
if (c.mFacingMode.IsString()) {
if (c.mFacingMode.GetAsString() != deviceFacingMode) {
return UINT32_MAX;
if (i == 0) {
distance = 1000;
}
}
} else if (c.mFacingMode.IsStringSequence()) {
if (!c.mFacingMode.GetAsStringSequence().Contains(deviceFacingMode)) {
return UINT32_MAX;
if (i == 0) {
distance = 1000;
}
}
} else {
} else if (c.mFacingMode.GetAsConstrainDOMStringParameters().mExact.WasPassed()) {
auto& exact = c.mFacingMode.GetAsConstrainDOMStringParameters().mExact.Value();
if (exact.IsString()) {
if (exact.GetAsString() != deviceFacingMode) {
@@ -459,6 +468,19 @@ VideoDevice::GetBestFitnessDistance(
} else if (!exact.GetAsStringSequence().Contains(deviceFacingMode)) {
return UINT32_MAX;
}
} else if (c.mFacingMode.GetAsConstrainDOMStringParameters().mIdeal.WasPassed()) {
auto& ideal = c.mFacingMode.GetAsConstrainDOMStringParameters().mIdeal.Value();
if (ideal.IsString()) {
if (ideal.GetAsString() != deviceFacingMode) {
if (i == 0) {
distance = 1000;
}
}
} else if (!ideal.GetAsStringSequence().Contains(deviceFacingMode)) {
if (i == 0) {
distance = 1000;
}
}
}
}
nsString s;
@@ -468,7 +490,8 @@ VideoDevice::GetBestFitnessDistance(
}
}
// Forward request to underlying object to interrogate per-mode capabilities.
return GetSource()->GetBestFitnessDistance(aConstraintSets);
distance += uint64_t(GetSource()->GetBestFitnessDistance(aConstraintSets));
return uint32_t(std::min(distance, uint64_t(UINT32_MAX)));
}
AudioDevice::AudioDevice(MediaEngineAudioSource* aSource)