Fix frame rate selection for Android camera.
- Android camera supports multiple fps values for a single video
resolution - change video source default video format selection
to pick up best available fps.
- Change fps range calculation to better match target fps value.
BUG=2622
R=tkchin@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/15339004
git-svn-id: http://webrtc.googlecode.com/svn/trunk/talk@7142 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/app/webrtc/videosource.cc b/app/webrtc/videosource.cc
index 8770e6d..589341d 100644
--- a/app/webrtc/videosource.cc
+++ b/app/webrtc/videosource.cc
@@ -28,6 +28,7 @@
#include "talk/app/webrtc/videosource.h"
#include <vector>
+#include <cstdlib>
#include "talk/app/webrtc/mediaconstraintsinterface.h"
#include "talk/session/media/channelmanager.h"
@@ -254,11 +255,15 @@
std::vector<cricket::VideoFormat>::const_iterator it = formats.begin();
std::vector<cricket::VideoFormat>::const_iterator best_it = formats.begin();
- int best_diff = abs(default_area - it->width* it->height);
+ int best_diff_area = std::abs(default_area - it->width * it->height);
+ int64 best_diff_interval = kDefaultFormat.interval;
for (; it != formats.end(); ++it) {
- int diff = abs(default_area - it->width* it->height);
- if (diff < best_diff) {
- best_diff = diff;
+ int diff_area = std::abs(default_area - it->width * it->height);
+ int64 diff_interval = std::abs(kDefaultFormat.interval - it->interval);
+ if (diff_area < best_diff_area ||
+ (diff_area == best_diff_area && diff_interval < best_diff_interval)) {
+ best_diff_area = diff_area;
+ best_diff_interval = diff_interval;
best_it = it;
}
}