Reland of Android: Change camera fps range selection (patchset #1 id:1 of https://codereview.webrtc.org/2021233002/ )
Reason for revert: Fixed gyp bug. Original issue's description: > Revert of Android: Change camera fps range selection (patchset #4 id:100001 of https://codereview.webrtc.org/2013413002/ ) > > Reason for revert: > Breaks chromium fyi: > https://build.chromium.org/p/chromium.webrtc.fyi/builders/Mac%20Builder/builds/13565 > on step 'generate_build_files': > gyp: /b/build/slave/Mac_Builder/build/src/third_party/build/android/test_runner.gypi not found > > Original issue's description: > > Android: Change camera fps range selection > > > > This CL changes the logic in > > CameraEnumerationAndroid.getClosestSupportedFramerateRange() to prefer > > fps ranges with a low lower bound so the camera can adjust for > > brightness conditions. > > > > To test the functionality of the fps range selection, JUnit tests are > > added. This required a new target in api_tests.gyp. JUnit tests are > > preferable over instrumentation tests > > (libjingle_peerconnection_android_unittest) because they are faster and > > simpler. > > > > R=kjellander@webrtc.org, sakal@webrtc.org > > > > Committed: https://crrev.com/b4ddb5c3d3706b1c02437f6a538576f3552ab908 > > Cr-Commit-Position: refs/heads/master@{#12964} > > TBR=sakal@webrtc.org,kjellander@webrtc.org > # Skipping CQ checks because original CL landed less than 1 days ago. > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > > Committed: https://crrev.com/b3f208d0ba45f140272e3e705b5cdadc3c76514b > Cr-Commit-Position: refs/heads/master@{#12966} TBR=sakal@webrtc.org,kjellander@webrtc.org # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Review-Url: https://codereview.webrtc.org/2028583002 Cr-Commit-Position: refs/heads/master@{#12980}
This commit is contained in:
@ -181,15 +181,37 @@ public class CameraEnumerationAndroid {
|
||||
}
|
||||
}
|
||||
|
||||
// Prefer a fps range with an upper bound close to |framerate|. Also prefer a fps range with a low
|
||||
// lower bound, to allow the framerate to fluctuate based on lightning conditions.
|
||||
public static CaptureFormat.FramerateRange getClosestSupportedFramerateRange(
|
||||
List<CaptureFormat.FramerateRange> supportedFramerates, final int requestedFps) {
|
||||
return Collections.min(supportedFramerates,
|
||||
new ClosestComparator<CaptureFormat.FramerateRange>() {
|
||||
private static final int MAX_FPS_WEIGHT = 10;
|
||||
// Progressive penalty if the upper bound is further away than |MAX_FPS_DIFF_THRESHOLD|
|
||||
// from requested.
|
||||
private static final int MAX_FPS_DIFF_THRESHOLD = 5000;
|
||||
private static final int MAX_FPS_LOW_DIFF_WEIGHT = 1;
|
||||
private static final int MAX_FPS_HIGH_DIFF_WEIGHT = 3;
|
||||
|
||||
// Progressive penalty if the lower bound is bigger than |MIN_FPS_THRESHOLD|.
|
||||
private static final int MIN_FPS_THRESHOLD = 8000;
|
||||
private static final int MIN_FPS_LOW_VALUE_WEIGHT = 1;
|
||||
private static final int MIN_FPS_HIGH_VALUE_WEIGHT = 4;
|
||||
|
||||
// Use one weight for small |value| less than |threshold|, and another weight above.
|
||||
private int progressivePenalty(int value, int threshold, int lowWeight, int highWeight) {
|
||||
return (value < threshold)
|
||||
? value * lowWeight
|
||||
: threshold * lowWeight + (value - threshold) * highWeight;
|
||||
}
|
||||
|
||||
@Override
|
||||
int diff(CaptureFormat.FramerateRange range) {
|
||||
return range.min + MAX_FPS_WEIGHT * abs(requestedFps * 1000 - range.max);
|
||||
final int minFpsError = progressivePenalty(range.min,
|
||||
MIN_FPS_THRESHOLD, MIN_FPS_LOW_VALUE_WEIGHT, MIN_FPS_HIGH_VALUE_WEIGHT);
|
||||
final int maxFpsError = progressivePenalty(Math.abs(requestedFps * 1000 - range.max),
|
||||
MAX_FPS_DIFF_THRESHOLD, MAX_FPS_LOW_DIFF_WEIGHT, MAX_FPS_HIGH_DIFF_WEIGHT);
|
||||
return minFpsError + maxFpsError;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user