diff options
Diffstat (limited to 'src/com/android/camera/SettingsManager.java')
-rwxr-xr-x | src/com/android/camera/SettingsManager.java | 56 |
1 files changed, 19 insertions, 37 deletions
diff --git a/src/com/android/camera/SettingsManager.java b/src/com/android/camera/SettingsManager.java index c5795a248..cc0555f1e 100755 --- a/src/com/android/camera/SettingsManager.java +++ b/src/com/android/camera/SettingsManager.java @@ -177,6 +177,8 @@ public class SettingsManager implements ListMenu.SettingsListener { private JSONObject mDependency; private int mCameraId; private Set<String> mFilteredKeys; + private int[] mExtendedHFRSize;//An array of pairs (fps, maxW, maxH) + private static Map<String, Set<String>> VIDEO_ENCODER_PROFILE_TABLE = new HashMap<>(); public Map<String, Values> getValuesMap() { @@ -317,6 +319,12 @@ public class SettingsManager implements ListMenu.SettingsListener { mValuesMap = new HashMap<>(); mDependendsOnMap = new HashMap<>(); mFilteredKeys = new HashSet<>(); + try { + mExtendedHFRSize = mCharacteristics.get(cameraId).get(CaptureModule.hfrFpsTable); + }catch(IllegalArgumentException exception) { + exception.printStackTrace(); + } + filterPreferences(cameraId); initDependencyTable(); initializeValueMap(); @@ -1027,7 +1035,6 @@ public class SettingsManager implements ListMenu.SettingsListener { private List<String> getSupportedHighFrameRate() { ArrayList<String> supported = new ArrayList<String>(); supported.add("off"); - ListPreference videoQuality = mPreferenceGroup.findPreference(KEY_VIDEO_QUALITY); if (videoQuality == null) return supported; String videoSizeStr = videoQuality.getValue(); @@ -1046,11 +1053,17 @@ public class SettingsManager implements ListMenu.SettingsListener { } catch (IllegalArgumentException ex) { Log.w(TAG, "HFR is not supported for this resolution " + ex); } - - // 60 fps goes through normal sesssion if it is supported by device - int maxFpsForNormalSession = getSupportedMaximumVideoFPSForNormalSession(mCameraId, videoSize); - supported.add("hfr" + maxFpsForNormalSession); - supported.add("hsr" + maxFpsForNormalSession); + if ( mExtendedHFRSize != null && mExtendedHFRSize.length >= 3 ) { + for( int i=0; i < mExtendedHFRSize.length; i+=3 ) { + String item = "hfr" + mExtendedHFRSize[i+2]; + if ( !supported.contains(item) + && videoSize.getWidth() <= mExtendedHFRSize[i] + && videoSize.getHeight() <= mExtendedHFRSize[i+1] ) { + supported.add(item); + supported.add("hsr"+mExtendedHFRSize[i+2]); + } + } + } } return supported; @@ -1208,37 +1221,6 @@ public class SettingsManager implements ListMenu.SettingsListener { return res; } - private boolean checkAeAvailableTargetFpsRanges(int cameraId, int fps) { - boolean supported = false; - Range[] aeFpsRanges = mCharacteristics.get(cameraId).get(CameraCharacteristics - .CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES); - - for (Range r : aeFpsRanges) { - Log.d(TAG, "["+r.getLower()+", "+r.getUpper()+"]"); - if ((fps <= (int)r.getUpper()) && - (fps >= (int)r.getLower())) { - supported = true; - break; - } - } - return supported; - } - - private int getSupportedMaximumVideoFPSForNormalSession(int cameraId, Size videoSize) { - StreamConfigurationMap map = mCharacteristics.get(cameraId).get( - CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); - long duration = map.getOutputMinFrameDuration(MediaRecorder.class, videoSize); - int fps = (int)(1000000000.0/duration); - if (!checkAeAvailableTargetFpsRanges(cameraId, fps)) { - Log.d(TAG, "FPS="+fps+" is not in available target FPS range"); - fps = 0; - } - Log.d(TAG, "Size="+videoSize.getWidth()+"x"+videoSize.getHeight()+ - ", Min Duration ="+duration+", Max fps=" + fps); - return fps; - } - - public Size[] getSupportedThumbnailSizes(int cameraId) { return mCharacteristics.get(cameraId).get( CameraCharacteristics.JPEG_AVAILABLE_THUMBNAIL_SIZES); |