Skip to content

Commit 2d4174c

Browse files
committed
allow setting max video resolution, closes #7
1 parent 5a87bed commit 2d4174c

11 files changed

Lines changed: 117 additions & 28 deletions

File tree

app/src/main/java/com/simplemobiletools/camera/Config.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,22 @@ public void setForceRatioEnabled(boolean enabled) {
5454
mPrefs.edit().putBoolean(Constants.FORCE_RATIO, enabled).apply();
5555
}
5656

57-
public int getMaxResolution() {
57+
public int getMaxPhotoResolution() {
5858
return mPrefs.getInt(Constants.MAX_RESOLUTION, 1);
5959
}
6060

61-
public void setMaxResolution(int maxRes) {
61+
public void setMaxPhotoResolution(int maxRes) {
6262
mPrefs.edit().putInt(Constants.MAX_RESOLUTION, maxRes).apply();
6363
}
6464

65+
public int getMaxVideoResolution() {
66+
return mPrefs.getInt(Constants.MAX_VIDEO_RESOLUTION, 1);
67+
}
68+
69+
public void setMaxVideoResolution(int maxRes) {
70+
mPrefs.edit().putInt(Constants.MAX_VIDEO_RESOLUTION, maxRes).apply();
71+
}
72+
6573
public boolean getIsSoundEnabled() {
6674
return mPrefs.getBoolean(Constants.SOUND, true);
6775
}

app/src/main/java/com/simplemobiletools/camera/Constants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@ public class Constants {
1414
public static final String SOUND = "sound";
1515
public static final String FORCE_RATIO = "force_ratio";
1616
public static final String MAX_RESOLUTION = "max_resolution";
17+
public static final String MAX_VIDEO_RESOLUTION = "max_video_resolution";
1718
}

app/src/main/java/com/simplemobiletools/camera/Preview.java

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -260,12 +260,12 @@ public void run() {
260260
};
261261

262262
private Camera.Size getOptimalPictureSize() {
263-
final int maxResolution = getMaxResolution();
263+
final int maxResolution = getMaxPhotoResolution();
264264
final List<Camera.Size> sizes = mParameters.getSupportedPictureSizes();
265265
Collections.sort(sizes, new SizesComparator());
266266
Camera.Size maxSize = sizes.get(0);
267267
for (Camera.Size size : sizes) {
268-
final boolean isProperRatio = isProperRatio(size);
268+
final boolean isProperRatio = !mForceAspectRatio || isProperRatio(size);
269269
final boolean isProperResolution = isProperResolution(size, maxResolution);
270270
if (isProperResolution && isProperRatio) {
271271
maxSize = size;
@@ -275,8 +275,8 @@ private Camera.Size getOptimalPictureSize() {
275275
return maxSize;
276276
}
277277

278-
private int getMaxResolution() {
279-
final int maxRes = Config.newInstance(getContext()).getMaxResolution();
278+
private int getMaxPhotoResolution() {
279+
final int maxRes = Config.newInstance(getContext()).getMaxPhotoResolution();
280280
switch (maxRes) {
281281
case 0:
282282
return 6000000;
@@ -291,6 +291,20 @@ private boolean isProperResolution(Camera.Size size, int maxRes) {
291291
return maxRes == 0 || size.width * size.height < maxRes;
292292
}
293293

294+
private int getMaxVideoResolution() {
295+
final int maxRes = Config.newInstance(getContext()).getMaxVideoResolution();
296+
switch (maxRes) {
297+
case 0:
298+
return 400000;
299+
case 1:
300+
return 1000000;
301+
case 2:
302+
return 2100000;
303+
default:
304+
return 0;
305+
}
306+
}
307+
294308
private boolean isProperRatio(Camera.Size size) {
295309
final float currRatio = (float) size.height / size.width;
296310
float wantedRatio = (float) 3 / 4;
@@ -301,15 +315,23 @@ private boolean isProperRatio(Camera.Size size) {
301315
}
302316

303317
private Camera.Size getOptimalVideoSize() {
318+
final int maxResolution = getMaxVideoResolution();
304319
final List<Camera.Size> sizes = getSupportedVideoSizes();
305320
Collections.sort(sizes, new SizesComparator());
306321
Camera.Size maxSize = sizes.get(0);
307-
for (Camera.Size size : sizes) {
308-
final boolean isProperRatio = isProperRatio(size);
309-
if (isProperRatio) {
322+
final int cnt = sizes.size();
323+
for (int i = 0; i < cnt; i++) {
324+
Camera.Size size = sizes.get(i);
325+
final boolean isProperRatio = !mForceAspectRatio || isProperRatio(size);
326+
final boolean isProperResolution = isProperResolution(size, maxResolution);
327+
if (isProperResolution && isProperRatio) {
310328
maxSize = size;
311329
break;
312330
}
331+
332+
if (i == cnt - 1) {
333+
Utils.showToast(getContext(), R.string.no_valid_resolution_found);
334+
}
313335
}
314336
return maxSize;
315337
}
@@ -508,7 +530,9 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
508530

509531
if (mSetupPreviewAfterMeasure) {
510532
mSetupPreviewAfterMeasure = false;
511-
mCamera.stopPreview();
533+
if (mCamera != null)
534+
mCamera.stopPreview();
535+
512536
setupPreview();
513537
}
514538
}
@@ -559,6 +583,7 @@ public boolean initRecorder() {
559583

560584
mSwitchToVideoAsap = false;
561585
Camera.Size preferred = mParameters.getPreferredPreviewSizeForVideo();
586+
562587
if (preferred == null) {
563588
final List<Camera.Size> previewSizes = mParameters.getSupportedPreviewSizes();
564589
Collections.sort(previewSizes, new SizesComparator());

app/src/main/java/com/simplemobiletools/camera/activities/SettingsActivity.java

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ public class SettingsActivity extends SimpleActivity {
1919
@BindView(R.id.settings_focus_before_capture) SwitchCompat mFocusBeforeCaptureSwitch;
2020
@BindView(R.id.settings_sound) SwitchCompat mSoundSwitch;
2121
@BindView(R.id.settings_force_ratio) SwitchCompat mForceRatioSwitch;
22-
@BindView(R.id.settings_max_resolution) AppCompatSpinner mMaxResolutionSpinner;
22+
@BindView(R.id.settings_max_photo_resolution) AppCompatSpinner mMaxPhotoResolutionSpinner;
23+
@BindView(R.id.settings_max_video_resolution) AppCompatSpinner mMaxVideoResolutionSpinner;
2324

2425
private static Config mConfig;
2526

@@ -35,7 +36,8 @@ protected void onCreate(Bundle savedInstanceState) {
3536
setupFocusBeforeCapture();
3637
setupSound();
3738
setupForceRatio();
38-
setupMaxResolution();
39+
setupMaxPhotoResolution();
40+
setupMaxVideoResolution();
3941
}
4042

4143
private void setupDarkTheme() {
@@ -58,8 +60,12 @@ private void setupForceRatio() {
5860
mForceRatioSwitch.setChecked(mConfig.getForceRatioEnabled());
5961
}
6062

61-
private void setupMaxResolution() {
62-
mMaxResolutionSpinner.setSelection(mConfig.getMaxResolution());
63+
private void setupMaxPhotoResolution() {
64+
mMaxPhotoResolutionSpinner.setSelection(mConfig.getMaxPhotoResolution());
65+
}
66+
67+
private void setupMaxVideoResolution() {
68+
mMaxVideoResolutionSpinner.setSelection(mConfig.getMaxVideoResolution());
6369
}
6470

6571
@OnClick(R.id.settings_dark_theme_holder)
@@ -93,9 +99,14 @@ public void handleForceRatio() {
9399
mConfig.setForceRatioEnabled(mForceRatioSwitch.isChecked());
94100
}
95101

96-
@OnItemSelected(R.id.settings_max_resolution)
97-
public void handleMaxResolution() {
98-
mConfig.setMaxResolution(mMaxResolutionSpinner.getSelectedItemPosition());
102+
@OnItemSelected(R.id.settings_max_photo_resolution)
103+
public void handleMaxPhotoResolution() {
104+
mConfig.setMaxPhotoResolution(mMaxPhotoResolutionSpinner.getSelectedItemPosition());
105+
}
106+
107+
@OnItemSelected(R.id.settings_max_video_resolution)
108+
public void handleMaxVideoResolution() {
109+
mConfig.setMaxVideoResolution(mMaxVideoResolutionSpinner.getSelectedItemPosition());
99110
}
100111

101112
private void restartActivity() {

app/src/main/res/layout/activity_settings.xml

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@
143143
</RelativeLayout>
144144

145145
<RelativeLayout
146-
android:id="@+id/settings_max_resolution_holder"
146+
android:id="@+id/settings_max_photo_resolution_holder"
147147
android:layout_width="match_parent"
148148
android:layout_height="wrap_content"
149149
android:layout_marginTop="@dimen/settings_padding"
@@ -153,19 +153,46 @@
153153
android:paddingTop="@dimen/activity_margin">
154154

155155
<TextView
156-
android:id="@+id/settings_max_resolution_label"
156+
android:id="@+id/settings_max_photo_resolution_label"
157157
android:layout_width="wrap_content"
158158
android:layout_height="wrap_content"
159159
android:layout_centerVertical="true"
160160
android:paddingLeft="@dimen/settings_padding"
161-
android:text="@string/max_size"/>
161+
android:text="@string/max_photo_size"/>
162162

163163
<android.support.v7.widget.AppCompatSpinner
164-
android:id="@+id/settings_max_resolution"
164+
android:id="@+id/settings_max_photo_resolution"
165165
android:layout_width="wrap_content"
166166
android:layout_height="wrap_content"
167167
android:layout_alignParentRight="true"
168-
android:entries="@array/max_resolutions"/>
168+
android:entries="@array/max_photo_resolutions"/>
169+
170+
</RelativeLayout>
171+
172+
<RelativeLayout
173+
android:id="@+id/settings_max_video_resolution_holder"
174+
android:layout_width="match_parent"
175+
android:layout_height="wrap_content"
176+
android:layout_marginTop="@dimen/settings_padding"
177+
android:paddingBottom="@dimen/activity_margin"
178+
android:paddingLeft="@dimen/activity_margin"
179+
android:paddingRight="@dimen/settings_padding"
180+
android:paddingTop="@dimen/activity_margin">
181+
182+
<TextView
183+
android:id="@+id/settings_max_video_resolution_label"
184+
android:layout_width="wrap_content"
185+
android:layout_height="wrap_content"
186+
android:layout_centerVertical="true"
187+
android:paddingLeft="@dimen/settings_padding"
188+
android:text="@string/max_video_size"/>
189+
190+
<android.support.v7.widget.AppCompatSpinner
191+
android:id="@+id/settings_max_video_resolution"
192+
android:layout_width="wrap_content"
193+
android:layout_height="wrap_content"
194+
android:layout_alignParentRight="true"
195+
android:entries="@array/max_video_resolutions"/>
169196

170197
</RelativeLayout>
171198
</LinearLayout>

app/src/main/res/values-it/strings.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,16 @@
1212
<string name="no_permissions">Non c\'è molto da fare senza l\'accesso alla fotocamera e all\'archiviazione</string>
1313
<string name="no_audio_permissions">È necessario l\'accesso al microfono per registrare i video</string>
1414
<string name="no_gallery_app_available">Nessuna app galleria disponibile</string>
15+
<string name="no_valid_resolution_found">No valid resolution with selected aspect ratio found, using max resolution</string>
1516

1617
<!-- Settings -->
1718
<string name="settings">Impostazioni</string>
1819
<string name="dark_theme">Tema scuro</string>
1920
<string name="long_tap_capture">Tocco prolungato per la cattura</string>
2021
<string name="focus_before_capture">Messa a fuoco prima della cattura</string>
2122
<string name="force_ratio">Forza proporzione 16:9</string>
22-
<string name="max_size">Limite risoluzione foto</string>
23+
<string name="max_photo_size">Limite risoluzione foto</string>
24+
<string name="max_video_size">Video resolution limit</string>
2325
<string name="no_limit">nessuno</string>
2426
<string name="shutter_sound">Suono otturatore</string>
2527

app/src/main/res/values-ja/strings.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,16 @@
1212
<string name="no_permissions">お使いのカメラやストレージにアクセスしないと、ほとんど行うことはありません</string>
1313
<string name="no_audio_permissions">ビデオを記録するためにオーディオのアクセス許可が必要です</string>
1414
<string name="no_gallery_app_available">利用可能なギャラリーアプリがありません</string>
15+
<string name="no_valid_resolution_found">No valid resolution with selected aspect ratio found, using max resolution</string>
1516

1617
<!-- Settings -->
1718
<string name="settings">設定</string>
1819
<string name="dark_theme">ダークテーマ</string>
1920
<string name="long_tap_capture">長押ししてキャプチャする</string>
2021
<string name="focus_before_capture">キャプチャ前に再度焦点を合わせる</string>
2122
<string name="force_ratio">強制的に 16:9 レシオにする</string>
22-
<string name="max_size">写真解像度の限度</string>
23+
<string name="max_photo_size">写真解像度の限度</string>
24+
<string name="max_video_size">Video resolution limit</string>
2325
<string name="no_limit">なし</string>
2426
<string name="shutter_sound">シャッター音</string>
2527

app/src/main/res/values-ru/strings.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,16 @@
1212
<string name="no_permissions">Не так много можно сделать без доступа к камере и хранилищу</string>
1313
<string name="no_audio_permissions">Нам нужно аудио разрешение для записи видео</string>
1414
<string name="no_gallery_app_available">Нет доступного приложения-галереи</string>
15+
<string name="no_valid_resolution_found">No valid resolution with selected aspect ratio found, using max resolution</string>
1516

1617
<!-- Settings -->
1718
<string name="settings">Настройки</string>
1819
<string name="dark_theme">темная тема</string>
1920
<string name="long_tap_capture">Длинное нажатие для захвата</string>
2021
<string name="focus_before_capture">Перефокусировка перед захватом</string>
2122
<string name="force_ratio">Принудительное соотношение сторон 16:9</string>
22-
<string name="max_size">Лимит разрешения фото</string>
23+
<string name="max_photo_size">Лимит разрешения фото</string>
24+
<string name="max_video_size">Video resolution limit</string>
2325
<string name="no_limit">нет</string>
2426
<string name="shutter_sound">Звук затвора</string>
2527

app/src/main/res/values-sv/strings.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,16 @@
1212
<string name="no_permissions">Inte mycket att göra utan tillgång till din kamera och lagring</string>
1313
<string name="no_audio_permissions">För att spela in video krävs ljudrättigheter</string>
1414
<string name="no_gallery_app_available">Ingen galleri-app finns tillgänglig</string>
15+
<string name="no_valid_resolution_found">No valid resolution with selected aspect ratio found, using max resolution</string>
1516

1617
<!-- Settings -->
1718
<string name="settings">Inställningar</string>
1819
<string name="dark_theme">Mörkt tema</string>
1920
<string name="long_tap_capture">Långtryck för bildtagning</string>
2021
<string name="focus_before_capture">Fokusera om innan bildtagning</string>
2122
<string name="force_ratio">Tvinga 16:9-förhållande</string>
22-
<string name="max_size">Bildupplösningsgräns</string>
23+
<string name="max_photo_size">Bildupplösningsgräns</string>
24+
<string name="max_video_size">Video resolution limit</string>
2325
<string name="no_limit">inga</string>
2426
<string name="shutter_sound">Slutarljud</string>
2527

app/src/main/res/values/array.xml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<resources>
3-
<string-array name="max_resolutions" translatable="false">
3+
<string-array name="max_photo_resolutions" translatable="false">
44
<item>5 MP</item>
55
<item>8 MP</item>
66
<item>@string/no_limit</item>
77
</string-array>
8+
9+
<string-array name="max_video_resolutions" translatable="false">
10+
<item>480p</item>
11+
<item>720p</item>
12+
<item>1080p</item>
13+
<item>@string/no_limit</item>
14+
</string-array>
815
</resources>

0 commit comments

Comments
 (0)