Bug 1286945 - modify the calculation of fitness distance to support down scaling. r?jib
MozReview-Commit-ID: IeBJOnzozrC
--- a/dom/media/webrtc/MediaTrackConstraints.cpp
+++ b/dom/media/webrtc/MediaTrackConstraints.cpp
@@ -402,24 +402,28 @@ MediaConstraintsHelper::GetMinimumFitnes
return FitnessDistance(aDeviceId, aConstraints.mDeviceId);
}
template<class ValueType, class NormalizedRange>
/* static */ uint32_t
MediaConstraintsHelper::FitnessDistance(ValueType aN,
const NormalizedRange& aRange)
{
- if (aRange.mMin > aN || aRange.mMax < aN) {
+ if (aRange.mMin > aN) {
return UINT32_MAX;
}
if (aN == aRange.mIdeal.valueOr(aN)) {
return 0;
+ } else if (aN > aRange.mIdeal.value()) {
+ return uint32_t(ValueType((std::abs(aN - aRange.mIdeal.value()) * 1000) /
+ std::max(std::abs(aN), std::abs(aRange.mIdeal.value()))));
+ } else {
+ return (UINT32_MAX / 2) + uint32_t(ValueType((std::abs(aN - aRange.mIdeal.value()) * 1000) /
+ std::max(std::abs(aN), std::abs(aRange.mIdeal.value()))));
}
- return uint32_t(ValueType((std::abs(aN - aRange.mIdeal.value()) * 1000) /
- std::max(std::abs(aN), std::abs(aRange.mIdeal.value()))));
}
// Fitness distance returned as integer math * 1000. Infinity = UINT32_MAX
/* static */ uint32_t
MediaConstraintsHelper::FitnessDistance(
nsString aN,
const NormalizedConstraintSet::StringRange& aParams)