Open Camera requires Android 4.0.3 or better. Some features may only be available
on some devices (it may depend on Android version, or require specific support from the camera/device).
@@ -178,17 +178,17 @@ your wedding etc :)
Date: Fri, 8 Nov 2019 00:21:22 +0000
Subject: [PATCH 006/243] Minor changes.
---
_docs/help.html | 8 +-------
_docs/index.html | 5 +++--
2 files changed, 4 insertions(+), 9 deletions(-)
diff --git a/_docs/help.html b/_docs/help.html
index f1e5e37d2..716dc6c44 100644
--- a/_docs/help.html
+++ b/_docs/help.html
@@ -56,11 +56,6 @@
-More of my Free software:
-Vibrance HDR ~
-
-
-
Open Camera Help
@@ -212,8 +207,7 @@ will be available which instead work by making the screen light up (note, front
Expo {} - Enables Auto Exposure Bracketing (AEB) mode. Takes multiple images at different exposure
levels. See Settings/"Photo settings" for options to control the number of images and stops. These images can
be processed in other applications to create HDR images. For Android, you can try my own
- Vibrance HDR. For
- PC platforms, try Luminance HDR.
+ Vibrance HDR.
Focus {} - Enables Focus Bracketing
mode. (Only available on some devices, and if Camera2 API is
used.) This mode takes a series of photos each with a different focus distance. Two sliders appear, allowing you
diff --git a/_docs/index.html b/_docs/index.html
index cd1bec446..77226b252 100644
--- a/_docs/index.html
+++ b/_docs/index.html
@@ -145,7 +145,7 @@ browsers -->
Support me!
Credits
Privacy policy
-Licence
+Licence and Terms of Service
History
@@ -188,9 +188,10 @@ your wedding etc :)
See my privacy policy for details.
-
+
+
Open Camera is released under the GPL v3 or later. The source code is
available from
--
GitLab
From eacd440f52c7cc47f0e9fa119787e479e5e7267c Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Sun, 10 Nov 2019 17:55:45 +0000
Subject: [PATCH 007/243] Reword.
---
_docs/info.html | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/_docs/info.html b/_docs/info.html
index 9bb7fac11..9336d9539 100644
--- a/_docs/info.html
+++ b/_docs/info.html
@@ -58,7 +58,11 @@
-Open Camera is completely free, however if you wish you can show your appreciation and support me by making an optional payment. Please note that this is not required (and that I also receive income via website ads), and that doing so will not provide any additional features (or remove ads). However for those who wish to make a contribution to me, this is greatly appreciated!
+
+
+Open Camera is completely free, however if you wish you can show your appreciation to me by making an optional payment.
+ Please note that this is not required, and that doing so will not provide any additional features (or remove the ads I have on the
+ website). However for those who wish to make a contribution to me, this is greatly appreciated!
You can contribute through PayPal, simply click the "Buy Now" button, and enter the amount you wish to give me:
--
GitLab
From fbb1969af2219e2a287c0130efe23548f22508de Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Sun, 10 Nov 2019 18:12:38 +0000
Subject: [PATCH 008/243] Corrections, and "Select remote device" wasn't in
strings.
---
app/src/main/res/values/strings.xml | 4 +++-
app/src/main/res/xml/preferences.xml | 4 +++-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e2dbef4d9..55f1f0b75 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -886,7 +886,7 @@
Select the file format used for saving photos. This affects \"standard\" (not RAW) photos. Note that PNG format is not truly lossless, instead it is converted from a JPEG at 100%% quality.\n%s
Camera API
- Select Camera2 API to enables extra feature such as manual modes for exposure, focus, white balance, along with RAW (if supported by the device), but may not work properly on all devices. Changing the API will cause a restart.\n%s
+ Select Camera2 API to enable extra features such as manual modes for exposure, focus, white balance, along with RAW (if supported by the device). Changing the API will cause a restart.\n%s
Original camera API
Camera2 API
@@ -908,6 +908,8 @@
For more help, click \"Online help\" from Settings.
+ Select remote device
+
Privacy policy
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 64457526b..20d3c230d 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -202,8 +202,10 @@
+ android:title="@string/preference_select_remote">
+
+
Date: Sun, 10 Nov 2019 18:12:45 +0000
Subject: [PATCH 009/243] Update.
---
app/src/main/res/values-de/strings.xml | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index c4a14399f..489a01db1 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -812,4 +812,15 @@
Schattierter Text
Normaler Text
+ Suchfeld zur Änderung der Belichtungskorrektur
+
+ Wähle das Dateiformat zum Speichern der Fotos. Das wirkt sich nur auf \"Standard-\" (nicht RAW-) Fotos aus. Merke: Das PNG-Format ist nicht verlustlos, es wird aus einem JPEG mit 100%%iger Qualität konvertiert.\n%s
+
+ Camera-API
+ Wähle das Camera2-API um extra Features wie manuelle Modi für Belichtung, Fokus, Weißabgleich sowie RAW-Format (falls vom Gerät unterstützt) zu nutzen. Die Änderung des API verursacht einen Neustart der App.\n%s
+ Original Camera-API
+ Camera2-API
+
+ Wähle eine Fernsteuerung
+
--
GitLab
From 7f60300d4fec80b447636957300c9ced6e1f3685 Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Sat, 16 Nov 2019 16:06:26 +0000
Subject: [PATCH 010/243] Fix case typo.
---
app/src/main/res/values-ru/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index d141c4056..3f2978880 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -858,7 +858,7 @@
Обычный текст
Текст с тенью фона
- СОхранение изображений…
+ Сохранение изображений…
Закончить панораму
Отменить панораму
--
GitLab
From e795c3ca622f6c827b23b1ecef0f5162504310b1 Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Sun, 1 Dec 2019 12:57:42 +0000
Subject: [PATCH 011/243] Force a BLE scan upcon BLE connection attempt
---
.../remotecontrol/BluetoothLeService.java | 24 ++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/net/sourceforge/opencamera/remotecontrol/BluetoothLeService.java b/app/src/main/java/net/sourceforge/opencamera/remotecontrol/BluetoothLeService.java
index f2c6d5338..fd8f0b3e6 100644
--- a/app/src/main/java/net/sourceforge/opencamera/remotecontrol/BluetoothLeService.java
+++ b/app/src/main/java/net/sourceforge/opencamera/remotecontrol/BluetoothLeService.java
@@ -38,6 +38,7 @@ public class BluetoothLeService extends Service {
private String device_address;
private BluetoothGatt bluetoothGatt;
private String remote_device_type;
+ private final Handler bluetoothHandler = new Handler();
private final HashMap subscribed_characteristics = new HashMap<>();
private final List charsToSubscribe = new ArrayList<>();
@@ -73,6 +74,21 @@ public class BluetoothLeService extends Service {
public final static int COMMAND_UP = 64;
public final static int COMMAND_DOWN = 80;
+ /* This forces a gratuitous BLE scan to help the device
+ * connect to the remote faster. This is due to limitations of the
+ * Android BLE stack and API (just knowing the MAC is not enough on
+ * many phones).*/
+ private void triggerScan() {
+ // Stops scanning after a pre-defined scan period.
+ bluetoothHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ bluetoothAdapter.stopLeScan(null);
+ }
+ }, 10000);
+ bluetoothAdapter.startLeScan(null);
+ }
+
public void setRemoteDeviceType(String remote_device_type) {
if( MyDebug.LOG )
Log.d(TAG, "Setting remote type: " + remote_device_type);
@@ -346,7 +362,13 @@ public class BluetoothLeService extends Service {
return false;
}
- bluetoothGatt = device.connectGatt(this, false, mGattCallback);
+ // It looks like Android won't connect to BLE devices properly without scanning
+ // for them first, even when connecting by explicit MAC address. Since we're using
+ // BLE for underwater housings and we want rock solid connectivity, we trigger
+ // a scan for 10 seconds
+ triggerScan();
+
+ bluetoothGatt = device.connectGatt(this, true, mGattCallback);
device_address = address;
return true;
}
--
GitLab
From fc4ce004d5c6b32b26a9351ee53fe95042541403 Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Sun, 8 Dec 2019 21:43:53 +0000
Subject: [PATCH 012/243] Add gyro sensors support to about debug info.
---
.../main/java/net/sourceforge/opencamera/MainActivity.java | 1 +
.../net/sourceforge/opencamera/MyPreferenceFragment.java | 6 ++++++
2 files changed, 7 insertions(+)
diff --git a/app/src/main/java/net/sourceforge/opencamera/MainActivity.java b/app/src/main/java/net/sourceforge/opencamera/MainActivity.java
index 9850b80d8..2c93ca282 100644
--- a/app/src/main/java/net/sourceforge/opencamera/MainActivity.java
+++ b/app/src/main/java/net/sourceforge/opencamera/MainActivity.java
@@ -1672,6 +1672,7 @@ public class MainActivity extends Activity {
bundle.putBoolean("supports_hdr", this.supportsHDR());
bundle.putBoolean("supports_nr", this.supportsNoiseReduction());
bundle.putBoolean("supports_panorama", this.supportsPanorama());
+ bundle.putBoolean("has_gyro_sensors", applicationInterface.getGyroSensor().hasSensors());
bundle.putBoolean("supports_expo_bracketing", this.supportsExpoBracketing());
bundle.putBoolean("supports_preview_bitmaps", this.supportsPreviewBitmaps());
bundle.putInt("max_expo_bracketing_n_images", this.maxExpoBracketingNImages());
diff --git a/app/src/main/java/net/sourceforge/opencamera/MyPreferenceFragment.java b/app/src/main/java/net/sourceforge/opencamera/MyPreferenceFragment.java
index b533801cc..295180e86 100644
--- a/app/src/main/java/net/sourceforge/opencamera/MyPreferenceFragment.java
+++ b/app/src/main/java/net/sourceforge/opencamera/MyPreferenceFragment.java
@@ -383,6 +383,10 @@ public class MyPreferenceFragment extends PreferenceFragment implements OnShared
pg.removePreference(pref);
}
+ final boolean has_gyro_sensors = bundle.getBoolean("has_gyro_sensors");
+ if( MyDebug.LOG )
+ Log.d(TAG, "has_gyro_sensors: " + has_gyro_sensors);
+
final boolean supports_expo_bracketing = bundle.getBoolean("supports_expo_bracketing");
if( MyDebug.LOG )
Log.d(TAG, "supports_expo_bracketing: " + supports_expo_bracketing);
@@ -1186,6 +1190,8 @@ public class MyPreferenceFragment extends PreferenceFragment implements OnShared
about_string.append(getString(supports_hdr ? R.string.about_available : R.string.about_not_available));
about_string.append("\nPanorama?: ");
about_string.append(getString(supports_panorama ? R.string.about_available : R.string.about_not_available));
+ about_string.append("\nGyro sensors?: ");
+ about_string.append(getString(has_gyro_sensors ? R.string.about_available : R.string.about_not_available));
about_string.append("\nExpo?: ");
about_string.append(getString(supports_expo_bracketing ? R.string.about_available : R.string.about_not_available));
about_string.append("\nExpo compensation?: ");
--
GitLab
From 008d9bce3c1fb5f5b1037c8055454bf8f46cef29 Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Sun, 8 Dec 2019 21:44:02 +0000
Subject: [PATCH 013/243] Fix typo in comment.
---
app/src/main/java/net/sourceforge/opencamera/MainActivity.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/java/net/sourceforge/opencamera/MainActivity.java b/app/src/main/java/net/sourceforge/opencamera/MainActivity.java
index 2c93ca282..7958ab7a1 100644
--- a/app/src/main/java/net/sourceforge/opencamera/MainActivity.java
+++ b/app/src/main/java/net/sourceforge/opencamera/MainActivity.java
@@ -3415,7 +3415,7 @@ public class MainActivity extends Activity {
if( preview.getCameraController() == null )
return false;
if( preview.isVideoHighSpeed() ) {
- // manuai ISO/exposure not supported for high speed video mode
+ // manual ISO/exposure not supported for high speed video mode
// it's safer not to allow opening the panel at all (otherwise the user could open it, and switch to manual)
return false;
}
--
GitLab
From 27e10196d91af3910cf69488ddcf7e0aec5909f6 Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Sun, 8 Dec 2019 21:44:15 +0000
Subject: [PATCH 014/243] Fix typo in comment.
---
.../main/java/net/sourceforge/opencamera/preview/Preview.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java b/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java
index 219942f59..bb729714d 100644
--- a/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java
+++ b/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java
@@ -3082,7 +3082,7 @@ public class Preview implements SurfaceHolder.Callback, TextureView.SurfaceTextu
}
}
else if( capture_rate_factor > 1.0 ) {
- // resultant framerate remains the same, instead adjst the capture rate
+ // resultant framerate remains the same, instead adjust the capture rate
video_profile.videoCaptureRate = video_profile.videoCaptureRate / (double)capture_rate_factor;
if( MyDebug.LOG )
Log.d(TAG, "scaled capture rate to: " + video_profile.videoCaptureRate);
--
GitLab
From 0f8882a96c927c18a6c650b1da25d347f3364ee5 Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Sun, 8 Dec 2019 21:44:31 +0000
Subject: [PATCH 015/243] Update licence text string.
---
app/src/main/res/values/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 55f1f0b75..bedfa3055 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -937,7 +937,7 @@
Open Source licences
Open Camera
- Open Camera is © 2013–2019 Mark Harman, released under the GPL v3 or later. Tap here for full licence text.
+ Open Camera is © 2013–2019 Mark Harman, released under the GPL v3 or later. Tap here for full licence text and terms of service.
Google\'s Material Design icons
Open Camera uses icons from Google\'s Material Design icons
(https://developer.android.com/design/downloads/index.html ,
--
GitLab
From 2d86dceec8b8a177c04a6659cd707738336839ff Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Sun, 8 Dec 2019 22:23:50 +0000
Subject: [PATCH 016/243] Simplify some strings, make some translations
consistent.
---
app/src/main/res/values-az/strings.xml | 4 ++--
app/src/main/res/values-be/strings.xml | 6 +++---
app/src/main/res/values-cs/strings.xml | 6 +++---
app/src/main/res/values-de/strings.xml | 4 ++--
app/src/main/res/values-el/strings.xml | 4 ++--
app/src/main/res/values-es/strings.xml | 4 ++--
app/src/main/res/values-fr/strings.xml | 6 +++---
app/src/main/res/values-hu/strings.xml | 4 ++--
app/src/main/res/values-it/strings.xml | 6 +++---
app/src/main/res/values-ja/strings.xml | 6 +++---
app/src/main/res/values-nb/strings.xml | 4 ++--
app/src/main/res/values-pl/strings.xml | 4 ++--
app/src/main/res/values-pt-rBR/strings.xml | 2 +-
app/src/main/res/values-pt-rPT/strings.xml | 4 ++--
app/src/main/res/values-ru/strings.xml | 6 +++---
app/src/main/res/values-sl/strings.xml | 4 ++--
app/src/main/res/values-tr/strings.xml | 6 +++---
app/src/main/res/values-uk/strings.xml | 6 +++---
app/src/main/res/values-vi/strings.xml | 2 +-
app/src/main/res/values-zh-rCN/strings.xml | 6 +++---
app/src/main/res/values-zh-rTW/strings.xml | 6 +++---
app/src/main/res/values/strings.xml | 2 +-
22 files changed, 51 insertions(+), 51 deletions(-)
diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml
index db80beadc..248066342 100644
--- a/app/src/main/res/values-az/strings.xml
+++ b/app/src/main/res/values-az/strings.xml
@@ -91,7 +91,7 @@
Çəkilişdən sonra fasilə
Şəkil çəkildikdən sonra paylaşma və ya silinmə imkanları yaradan fasilə
Çəkiliş səsi
- Şəkil çəkilən zaman eşidilən səs (bağlanması üçün Android 4.2+ tələb olunur)
+ Şəkil çəkilən zaman eşidilən səs
Səs səviyyəsi düyməsi
Saxlanma yeri
Şəkil və videonun saxlanması üçün qovluq adı
@@ -182,7 +182,7 @@
Dəstək üçün İanə
Əgər bu proqram xoşunuza gəlirsə, lütfən ianə vermək haqqında düşünün. Siz bunu Proqram üçün ianə - toxunaraq almaqla edə bilərsiniz, bu funksiya proqrama ianə vermək üçün səhifəni açacaq. Təşəkkürlər!
Camera2 API istifadəsi
- Android 5 Camera2 API işə salınması - əlavə funksiyalar təqdim edir, amma hazırda bu ekperimentaldır (yenidənbaşlamalara səbəb ola bilər)
+ Camera2 API işə salınması - əlavə funksiyalar təqdim edir, amma hazırda bu ekperimentaldır (yenidənbaşlamalara səbəb ola bilər)
Haqqında
Proqram məlumatları
Parametrləri sıfırla
diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml
index 47c68e2c5..057339b09 100644
--- a/app/src/main/res/values-be/strings.xml
+++ b/app/src/main/res/values-be/strings.xml
@@ -103,12 +103,12 @@
Паўза пасля фатаграфавання
Паўза пасля фатаграфавання, падчас якой магчыма падзяліцца або выдаліць фота
Гук засаўкі
- Прайграванне гуку пры фатаграфаванні (патрабуецца Android 4.2 або вышэй, каб адключыць)
+ Прайграванне гуку пры фатаграфаванні
Клавішы рэгулявання гучнасці
Захаваць месца
Тэчка для захавання фота / відэа файлаў
Выкарыстоўваць сховішча Access Framework
- Ці варта выкарыстоўваць сховішча Android 5 Access Framework для захавання фотаздымкаў і відэазапісаў
+ Ці варта выкарыстоўваць сховішча Access Framework для захавання фотаздымкаў і відэазапісаў
Захаваць фотапрэфікс
Выкарыстоўваць прэфікс для захавання фотаздымкаў
Захаваць відэапрэфікс
@@ -210,7 +210,7 @@
Ахвяруйце на распрацоўку
Калі вам падабаецца гэты дадатак, калі ласка, падтрымайце распрацоўку . Вы можаце зрабіць гэта, купіўшы мой дадатак .Абярыце гэты параметр і адкрыецца старонка для ахвяравання . Дзякую!
Выкарыстоўваць Camera2 API
- Дазваляе выкарыстоўваць Camera2 API Android 5
+ Дазваляе выкарыстоўваць Camera2 API
Інфармацыя
Інфармацыя
Скід налад
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 839818b47..dd0d3c086 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -103,13 +103,13 @@
Pauza po pořízení fotografie
Zobrazit fotografii po pořízení s možností sdílení nebo vymazání fotografie
Zvuk závěrky
- Přehrát zvuk při pořizování fotografie (vyžaduje Android 4.2 a vyšší pro vypnutí)
+ Přehrát zvuk při pořizování fotografie
Tlačítka hlasitosti
Uložit polohu
Složka pro uložení fotek/videa
Použít Storage Access Framework
- Zdali použít Android 5\'s Storage Access Framework pro uložení fotek a videí
+ Zdali použít Storage Access Framework pro uložení fotek a videí
Uložit předponu pro fotografie
Předpona používaná při ukládání fotografií
Uložit předponu pro videa
@@ -214,7 +214,7 @@
Přispět na podporu vývoje
Pokud se Vám tato aplikace líbí, prosím zvažte přispění koupí mé "darovací aplikace" - tato volba otevře stránku mé darovací aplikace. Díky!
Použít Camera2 API
- Zapne Camera2 API Androidu 5 - nabízí možnosti navíc, ale je v současné době experimentální (způsobí restart aplikace)
+ Zapne Camera2 API - nabízí možnosti navíc, ale je v současné době experimentální (způsobí restart aplikace)
O programu
Informace aplikace a ladění
Obnovit nastavení
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 489a01db1..b8c0d70be 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -104,7 +104,7 @@
Pause nach der Fotoaufnahme
Nach der Aufnahme pausieren mit der Möglichkeit, das Foto zu teilen oder zu löschen
Auslöseton
- Abspielen eines Tones bei der Aufnahme (benötigt Android 4.2 oder höher zum Deaktivieren)
+ Abspielen eines Tones bei der Aufnahme
Lautstärketasten
Audio Steuerungsoptionen
Audio Steuerung Empfindlichkeit
@@ -229,7 +229,7 @@
Spende
Wenn Ihnen diese App gefällt, würde ich mich über eine Spende freuen, indem Sie meine Spenden-App kaufen. Dazu brauchen Sie nur diese Option anzuklicken. Danke!
Camera2-API verwenden
- Aktiviert die Android-5-Camera2-API mit Zusatzfunktionen (experimentell, Neustart erforderlich)
+ Aktiviert die Camera2-API mit Zusatzfunktionen (experimentell, Neustart erforderlich)
Über
Anwendungs- und Debug-Informationen
Einstellungen zurücksetzen
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index b95b6cf8d..5416e4cab 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -111,7 +111,7 @@
Χώρος αποθήκευσης
Φάκελος για αποθήκευση φωτογραφίας/βίντεο
Χρήση αποθήκευσης πρόσβασης πλαισίου
- Αν θέλετε χρησιμοποιήστε την Android 5\'s Πρόσβαση αποθήκευσης πλαισίου για την αποθήκευση φωτογραφιών και βίντεο
+ Αν θέλετε χρησιμοποιήστε την Πρόσβαση αποθήκευσης πλαισίου για την αποθήκευση φωτογραφιών και βίντεο
Αποθήκευση προθέματος φωτογραφιών
Πρόθεμα για την αποθήκευση αρχείων φωτογραφιών
Αποθήκευση βίντεο προθέματος
@@ -227,7 +227,7 @@
Δωρεά για υποστήριξη της ανάπτυξης
Αν σας αρέσει αυτή η εφαρμογή, παρακαλούμε κάντε μια δωρεά για υποστήριξη της ανάπτυξης. Μπορείτε να το κάνετε αυτό μέσω της επιλογής "Δωρεά" - κάντε αυτή την επιλογή για να ανοίξει η σελίδα δωρεών. Ευχαριστούμε!
Χρήση τού Camera2 API
- Ενεργοποίηση του Camera2 API σε συσκεύες Android 5 - προσφέρει επιπλέον χαρακτηριστικά, αλλά ενδέχεται να μην λειτουργούν σωστά σε όλες τις συσκευές (θα προκαλέσει μια επανεκκίνηση)
+ Ενεργοποίηση του Camera2 API - προσφέρει επιπλέον χαρακτηριστικά, αλλά ενδέχεται να μην λειτουργούν σωστά σε όλες τις συσκευές (θα προκαλέσει μια επανεκκίνηση)
Σχετικά με
Εφαρμογή και πληροφορίες εντοπισμού σφαλμάτων
Ρυθμίσεις επαναφοράς
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 3d73d06e4..354b9966f 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -112,7 +112,7 @@
Carpeta de almacenamiento
Carpeta para guardar los archivos de foto/video
Utilizar el Framework de Acceso del Almacenamiento
- Utilice el Framework de Acceso del Almacenamiento de Android 5 para guardar fotos y videos
+ Utilice el Framework de Acceso del Almacenamiento para guardar fotos y videos
Prefijo de foto
Prefijo utilizado para el nombre de las fotos
Prefijo de video
@@ -228,7 +228,7 @@
Done para apoyar el proyecto
Si te gusta esta aplicación, por favor considera hacer una donación para apoyar el proyecto. Puedes hacerlo comprando mi "aplicación de donación" - haz clic en esta opción para abrir la página de mi aplicación de donación. ¡Gracias!
Utiliza Camera2 API
- Utiliza la Camara2 de Android 5 - ofrece funcionalidades extra, pero esta en fase experimental (causara un reseteo de la aplicación)
+ Utiliza la Camara2 - ofrece funcionalidades extra, pero esta en fase experimental (causara un reseteo de la aplicación)
Acerca de
Información de aplicación y depuración
Restablecer ajustes
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 2ae73e666..61d56343d 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -103,7 +103,7 @@
Mettre en pause après la prise de photo
Mettre en pause l\'écran après avoir pris une photo, avec la possibilité de partager ou supprimer la photo
Son de l\'obturateur
- Jouer un son lorsque vous prenez une photo (nécessite Android 4.2 ou supérieur pour désactiver)
+ Jouer un son lorsque vous prenez une photo
Touches de volumes
Option contrôle audio
Sensibilité contrôle audio
@@ -111,7 +111,7 @@
Dossier de stockage
Dossier où sont stockés les fichiers photo/vidéo
Utilisation «\u00A0Storage Access Framework\u00A0»
- Utilise le Storage Access Framework d\'Android 5 pour enregistrer les photos et vidéos
+ Utilise le Storage Access Framework pour enregistrer les photos et vidéos
Préfixe du nom de photo
Le préfixe est utilisé pour le nom de fichier des photos
Préfixe du nom de la vidéo
@@ -224,7 +224,7 @@
Faire un don pour soutenir le développement
Si vous aimez ce logiciel, n\'hésitez pas à faire un don. Vous pouvez le faire via l\'achat de mon «\u00A0application de don\u00A0» - Cliquer sur cette option va ouvrir la page de l\'application de don. Merci\u00A0!
Utiliser l\'API Camera2
- Active l\'API Camera2 d\'Android 5 - permet d\'utiliser des fonctionnalités supplémentaires, mais reste encore expérimental (peut provoquer un redémarrage)
+ Active l\'API Camera2 - permet d\'utiliser des fonctionnalités supplémentaires, mais reste encore expérimental (peut provoquer un redémarrage)
À propos
Informations de l\'application et de debug
Réinitialiser les paramètres
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 67c57ebef..fd2c10055 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -112,7 +112,7 @@
Mentés helye
Fotók, videofájlok mentésének könyvtára
Storage Access Framework használata
- Használja-e az Android 5 Storage Access Frameworkjét a fotók és videók mentéséhez
+ Használja-e az Storage Access Frameworkjét a fotók és videók mentéséhez
Fotó fájlnév előtag
A fényképek mentésekor használt fájlnév előtag
Videó fájlnév előtag
@@ -228,7 +228,7 @@
Támogasd a fejlesztést adománnyal
A tetszik az alkalmazás, fontold meg adomány küldését a fejlesztés támogatására. Ezt a „támogatói alkalmazás” megvásárlásával teheted meg – kattints ide, hogy megnyisd a támogató alkalmazás oldalát. Köszönjük!
Camera2 API használata
- Lehetővé teszi az Android 5-ös Camera2 API használatát - extra funkciókat kínál, de nem minden eszközön működik megfelelően (újraindulást eredményez)
+ Lehetővé teszi az Camera2 API használatát - extra funkciókat kínál, de nem minden eszközön működik megfelelően (újraindulást eredményez)
Névjegy
App és hibakeresési információk
Beállítások visszaállítása
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index f94aea7f7..5378761f3 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -103,7 +103,7 @@
Pausa dopo aver scattato la foto
Mette in pausa lo schermo dopo aver scattato la foto, permettendo inoltre di condividere o cancellare la foto
Suono otturatore
- Emette un suono quando scatta una foto (richiede Android 4.2 o versioni superiori per disabilitarlo)
+ Emette un suono quando scatta una foto
Tasti volume
Opzioni controllo Audio
Sensibilità controllo Audio
@@ -111,7 +111,7 @@
Posizione di salvataggio
Cartella in cui salvare foto e video
Usa Storage Access Framework
- Quando utilizzare Storage Access Framework di Android 5 per il salvataggio di foto e video
+ Quando utilizzare Storage Access Framework per il salvataggio di foto e video
Salva prefisso per foto
Prefisso da usare per il filename di salvataggio delle foto
Salva prefisso per video
@@ -223,7 +223,7 @@
Dona per supportare lo sviluppo
Se questa applicazione ti piace, puoi sempre pensare di fare una donazione. Puoi farlo premendo sul relativo bottone - cliccando su quel tasto aprirai la pagina per la donazione. Grazie mille!
Usa le API Camera2
- Abilita API Camera2 di Android 5 - offre caratteristiche extra, ma potrebbe non funzionare correttamente su tutti i modelli (potrebbe causare un riavvio)
+ Abilita API Camera2 - offre caratteristiche extra, ma potrebbe non funzionare correttamente su tutti i modelli (potrebbe causare un riavvio)
Informazioni
App e informazioni di debug
Reset settings
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 3ef71b1e5..1dd4281d5 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -103,13 +103,13 @@
撮影の後に一時停止する
一時停止した画面上で写真の共有もしくは削除ができます
シャッター音
- 撮影時に音を再生する (無効にする場合はAndroid 4.2以上が必要です)
+ 撮影時に音を再生する
音量キー
保存場所
写真/ビデオを保存するフォルダを決めます
ストレージへのフレームワークを使用する
- 写真やビデオを保存する際にAndroid 5.0以降のフレームワークを使用するかどうかを選択します
+ 写真やビデオを保存する際にStorage Accessフレームワークを使用するかどうかを選択します
保存する写真の命名ルール
保存する写真のファイル名の手前につける内容を設定します
保存するビデオの命名ルール
@@ -214,7 +214,7 @@
サポートのために寄付をする
このアプリが気に入りましたら寄付をお願いします。この項目を押すと寄付への窓口が開きます。寄付権を購入する事で寄付ができます。寄付してくれたらありがとう!
Camera2 APIを使う
- 有効にするとAndroid 5.0以降に搭載のCamera2 APIを使用します。この設定は試験的に提供しています (再起動が必要です)
+ 有効にするとCamera2 APIを使用します。この設定は試験的に提供しています (再起動が必要です)
このアプリについて
アプリとデバッグの情報を表示します
設定をリセットする
diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml
index 7ed0295b1..c9aadae57 100644
--- a/app/src/main/res/values-nb/strings.xml
+++ b/app/src/main/res/values-nb/strings.xml
@@ -112,7 +112,7 @@
Lagringsplasseringen
Mappen som bildene/videoen skal lagres i.
Bruk lagringstilgangsrammeverket
- Hvorvidt Android 5.x sin lagringstilgangsrammeverk skal brukes til å lagre bilder og videoer.
+ Hvorvidt lagringstilgangsrammeverk skal brukes til å lagre bilder og videoer.
Forstavelsen til fotolagring
Forstavelsen som skal brukes til lagringsfilnavnene til bildene.
Forstavelsen til videolagring
@@ -228,7 +228,7 @@
Doner for å støtte utviklingen.
Hvis du liker denne appen, så tenk gjerne på om du vil gi meg en donasjon for å støtte utviklingen. Du kan gjøre dette ved å kjøpe min "donasjonsapp" — Klikk på denne innstillingen for å gå til siden for min donasjonsapp. Takk!
Bruk Camera2-APIen
- Aktiverer Android 5.x sin Camera2-API - Den tilbyr ekstra egenskaper, men kan kanskje ikke virke riktig på alle enheter (Vil føre til en omstart).
+ Aktiverer Camera2-API - Den tilbyr ekstra egenskaper, men kan kanskje ikke virke riktig på alle enheter (Vil føre til en omstart).
Om Open Camera
App- og avlusings-informasjon
Tilbakestill innstillinger
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 7cf003bf3..88036b933 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -111,7 +111,7 @@
Lokalizacja zapisu
Folder, do którego będą zapisywane pliki
Używaj SAF (systemowa obsługa dostępu do pamięci)
- Używa Storage Access Framework Androida 5 do zapisu plików zdjęć i filmów
+ Używa Storage Access Framework do zapisu plików zdjęć i filmów
Przedrostek nazw zdjęć
Przedrostek używany w nazwach plików zdjęć
Przedrostek nazw filmów
@@ -227,7 +227,7 @@
Przekaż darowiznę
Jeśli spodobała Ci się ta aplikacja rozważ przekazanie darowizny, która wesprze rozwój aplikacji. Możesz to zrobić poprzez zakup specjalnej aplikacji - dotknij tutaj aby otworzyć stronę. Dzięki!
Używaj Camera2 API
- Włącza Camera2 API Androida 5, które oferuje wiele dodatkowych funkcji, ale może działać niepoprawnie na niektórych urządzeniach (może spowodować restart)
+ Włącza Camera2 API, które oferuje wiele dodatkowych funkcji, ale może działać niepoprawnie na niektórych urządzeniach (może spowodować restart)
O aplikacji
Informacje o aplikacji i debugowanie
Reset ustawień
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 33fdc4dc3..8b62133df 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -99,7 +99,7 @@
Pausar depois de tirar foto
Pausar a tela depois de tirar uma foto, com a opção para compartilhar ou deletar foto
Som de captura
- Toca um som quando tira uma foto (requer Android 4.2+ para desabilitar)
+ Toca um som quando tira uma foto
Teclas de volume
Local de armazenamento
Escolha a pasta para salvar os arquivos de foto/vídeo
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index 2a9b9a7e7..84cbc11ab 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -112,7 +112,7 @@
Local de armazenamento
Pasta para guardar os ficheiros das fotografias/vídeos
Usar Storage Access Framework
- Optar por usar o Storage Access Framework do Android 5 para guardar fotografias e vídeos
+ Optar por usar o Storage Access Framework para guardar fotografias e vídeos
Prefixo das fotografias guardadas
O prefixo usado para guardar o nome dos ficheiros das fotografias
Prefixo dos vídeos guardados
@@ -228,7 +228,7 @@
Doar para apoiar o desenvolvimento
Se gosta desta aplicação, por favor concidere fazer um donativo para apoiar o desenvolvimento. Pode fazê-lo ao comprar a minha "aplicação de donativo" - clique nesta opção para abrir a página da minha aplicação de donativo. Obrigado!
Usar API Camera2
- Ativa a API Camera2 do Android 5 - oferece funcionalidades extra, mas é atualmente experimental (causará reinício)
+ Ativa a API Camera2 - oferece funcionalidades extra, mas é atualmente experimental (causará reinício)
Sobre
Informações da aplicação e de depuração
Repor definições
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 3f2978880..0f7e97a3e 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -104,7 +104,7 @@
Пауза после съёмки
Пауза после снятия фото, с возможностью поделиться или удалить фотографию
Звук затвора
- Воспроизведение звука при съемке фотографии (требуется Android 4.2+ для отключения)
+ Воспроизведение звука при съемке фотографии
Клавиши громкости
Настройки управления звуком
Чувствительность управления звуком
@@ -112,7 +112,7 @@
Папка сохранения
Имя папки для сохранения фото и видео (также может быть полный путь)
Использовать Storage Access Framework
- Для Android 5 использовать Storage Access Framework для сохранения фото и видео
+ Использовать Storage Access Framework для сохранения фото и видео
Префикс для фото
Префикс имен файлов для сохраняемых фото
Префикс для видео
@@ -228,7 +228,7 @@
Пожертвовать
Если вам нравится это приложение, киньте мне копейку. Вы можете сделать это, купив мое приложение. Спасибо!
Использовать Camera2 API
- Разрешает использование Camera2 API для Android 5 - дополнительные, но экспериментальные возможности (требуется перезапуск)
+ Разрешает использование Camera2 API - дополнительные, но экспериментальные возможности (требуется перезапуск)
О программе
Информация
Сброс настроек
diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml
index 83f93c01c..1c0b0cd8e 100644
--- a/app/src/main/res/values-sl/strings.xml
+++ b/app/src/main/res/values-sl/strings.xml
@@ -112,7 +112,7 @@
Mesto za shranjevanje
Mapa za shranjevanje datotek fotografij/videoposnetkov
Uporabi ogrodje za dostop do pomnilniške naprave
- Ali naj se uporabi ogrodje za dostop do pomnilniške naprave Androida 5 za shranjevanje fotografij in videoposnetkov
+ Ali naj se uporabi ogrodje za dostop do pomnilniške naprave za shranjevanje fotografij in videoposnetkov
Predpona shranjenih fotografij
Predpona imena datotek fotografij
Predpona shranjenih videoposnetkov
@@ -228,7 +228,7 @@
Daruj za podporo razvoju
Če vam je ta program všeč, razmislite o darovanju, da podprete razvoj. To lahko naredite z nakupom mojega "programa za darovanje" - kliknite na to možnost za odpiranje strani z mojim programom. Hvala!
Uporabi API Camera2
- Omogoči API Camera2 Androida 5 - ponuja dodatne značilnosti, vendar morda ne bo pravilno deloval na vseh napravah (lahko povzroči ponovni zagon)
+ Omogoči API Camera2 - ponuja dodatne značilnosti, vendar morda ne bo pravilno deloval na vseh napravah (lahko povzroči ponovni zagon)
O programu
Program in podatki za razhroščevanje
Ponastavi nastavitve
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 6faf399f0..011a4fbad 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -103,13 +103,13 @@
Fotoğraf çektikten sonra beklet
Fotoğraf çektikten sonra fotoğrafı paylaşma ya da silme seçeneği için ekranı duraklat
Fotoğraf çekme sesi
- Fotoğraf çekerken ses çal(kapatmak için Android 4.2 ya da daha üstü gereklidir)
+ Fotoğraf çekerken ses çal
Ses seviyesi tuşları
Kaydetme yeri
Fotoğraf/vidyo dosyaları için kayıt klasörü
Storage Access Framework kullan
- Android 5\'s fotoğraf ve vidyoları kaydetmek için Storage Access Framework kullan
+ Fotoğraf ve vidyoları kaydetmek için Storage Access Framework kullan
Fotoğraf adlandırma öneki kaydet
Fotoğraflarda dosya adlarını kaydetmede kullanılacak önek
vidyo adlandırma öneki kaydet
@@ -213,7 +213,7 @@
Geliştirmeyi desteklemek için bağışta bulunun
Uygulamayı beğendiyseniz, bağış yapmayı düşünebilirsiniz. "donation app" satın alarak bunu yapabilirsiniz - bu seçeneğe tıkladığınızda bağış uygulaması için sayfam açılacaktır. Teşekkürler!
Camera2 API sini kullan
- Etkinleştirir Android 5\'s Camera2 API - ekstra özellikler sunar fakat şuan deneyseldir(yeniden başlatacaktır)
+ Etkinleştirir Camera2 API - ekstra özellikler sunar fakat şuan deneyseldir(yeniden başlatacaktır)
Hakkında
Uygulama ve eksiklik bilgisi
Ayarları temizle
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 0f220824d..dc81774a0 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -104,7 +104,7 @@
Пауза після знімку
Пауза після зняття фото, з можливістю поділитися чи видалити фотографію
Звук затвору
- Відтворення звуку під час знімку фотографії (потрібно версія Android 4.2+ аби вимкнути)
+ Відтворення звуку під час знімку фотографії
Кнопки гучності
Налаштування керування звуком
@@ -113,7 +113,7 @@
Тека збереження
"Ім'я теки для збереження фото та відео (також може бути повний шлях)"
Використовувати Storage Access Framework
- Для Android 5 використовувати Storage Access Framework для збереження фото та відео
+ Використовувати Storage Access Framework для збереження фото та відео
Префікс для фото
Префікс імен файлів для знімків
Префікс для відео
@@ -229,7 +229,7 @@
Подякувати
Якщо вам сподобався цей додаток, киньте монетку. Ви можете зробити це, придбавши мій додаток. Дякую!
Використовувати Camera2 API
- Дозволяє використання Camera2 API для Android 5 - додаткові, але експериментальні можливості (потрібно перезавантажити)
+ Дозволяє використання Camera2 API - додаткові, але експериментальні можливості (потрібно перезавантажити)
Про додаток
Інформація
Скидання налаштувань
diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml
index 416df69cb..91457294a 100644
--- a/app/src/main/res/values-vi/strings.xml
+++ b/app/src/main/res/values-vi/strings.xml
@@ -112,7 +112,7 @@
Vị trí lưu
Thư mục lưu tệp tin ảnh/video
Sử dụng Khung Truy cập Lưu trữ
- Sử dụng Khung Truy cập Lưu trữ để lưu ảnh và video. Nên kích hoạt (từ Android 5 trở lên) để có thể lưu vào thẻ nhớ ngoài.
+ Sử dụng Khung Truy cập Lưu trữ để lưu ảnh và video. Nên kích hoạt để có thể lưu vào thẻ nhớ ngoài.
Tiền tố ảnh
Đặt tiền tố trong tên tệp khi lưu ảnh
Tiền tố video
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 292e86201..e3b25a280 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -103,7 +103,7 @@
拍照后暂停
拍照后暂停屏幕,带有选项分享或删除照片
快门声音
- 拍照时播放声音(需要 Android 4.2 或更高才能禁用)
+ 拍照时播放声音
音量键功能
语音识别
麦克风灵敏度
@@ -111,7 +111,7 @@
保存位置
用来保存照片/视频文件的文件夹
使用存储访问架构
- 是否使用 Android 5 的存储访问架构保存照片和视频
+ 是否使用存储访问架构保存照片和视频
保存照片前缀
用于保存照片文件名的前缀
保存视频前缀
@@ -220,7 +220,7 @@
捐赠以支持开发
如果您喜欢这个程序,可以通过购买我的“捐助 app”向我捐助。点击此选项将打开我的“捐助 app”页面。谢谢!
使用 Camera2 API
- 启用 Android 5 的 Camera2 API - 提供附加功能,但当前处于实验阶段 (会引起重启)
+ 启用 Camera2 API - 提供附加功能,但当前处于实验阶段 (会引起重启)
关于
应用程序和调试信息
复位设置
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index e43886665..03e47cbba 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -102,12 +102,12 @@
拍照後暫停
拍照後暫停螢幕,顯示分享或刪除照片選項
快門聲音
- 拍照時播放聲音(需要 Android 4.2 或更高才能停用)
+ 拍照時播放聲音
音量鍵
儲存位置
用來儲存照片/影片檔的資料夾
使用 Storage Access Framework
- 是否使用 Android 5 的 Storage Access Framework 來儲存照片和影片
+ 是否使用 Storage Access Framework 來儲存照片和影片
照片檔名前綴
用於儲存照片檔名的前置字串
影片檔名前綴
@@ -210,7 +210,7 @@
捐贈以支援開發
如果您喜歡這個程式,請考慮捐助。您可以透過購買我的“捐助 app”來進行捐助 - 點擊此選項將打開我的捐助 app 頁面。謝謝!
使用 Camera2 API
- 啟用 Android 5 的 Camera2 API - 提供更多功能,但仍在實驗中 (會造成重新啟動)
+ 啟用 Camera2 API - 提供更多功能,但仍在實驗中 (會造成重新啟動)
關於
應用程式和除錯資訊
復原設定
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index bedfa3055..c8d1515e3 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -113,7 +113,7 @@
Save location
Folder to save the photo/video files in
Use Storage Access Framework
- Whether to use Storage Access Framework for saving photos and videos. This should be enabled (on Android 5+) to allow saving to external SD cards.
+ Whether to use Storage Access Framework for saving photos and videos. This should be enabled to allow saving to external SD cards.
Save photo prefix
The prefix to use for the save filenames for photos
Save video prefix
--
GitLab
From daa6e59a63fe75057a8921b45d7e8f11ff783458 Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Sun, 8 Dec 2019 22:34:43 +0000
Subject: [PATCH 017/243] Clarify digital video stabilization.
---
_docs/help.html | 5 +++--
app/src/main/res/values/strings.xml | 4 ++--
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/_docs/help.html b/_docs/help.html
index 716dc6c44..9f3bb327b 100644
--- a/_docs/help.html
+++ b/_docs/help.html
@@ -905,8 +905,9 @@ be left set to true for faster operation, but it's an option just in case.
--
Video resolution - Select the resolution of videos taken by the camera.
-Enable video stabilization - Video stabilization reduces the shaking due to the motion of the camera in
-both the preview and in recorded videos.
+Enable digital video stabilization - Video stabilization reduces the shaking due to the motion of the camera in
+both the preview and in recorded videos. This enables a digital method in the camera driver, and may be unnecessary if
+your device supports optical image stabilization (OIS).
Video format - Allows choice of various video file formats and codecs. Please test before using, as some may
not work properly on all devices! Also note:
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index c8d1515e3..9cadf61c3 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -200,8 +200,8 @@
Video resolution
Force 4K UHD video (only works on some devices)
Enable 3840x2160 resolution for video recording on back camera - this option is a hack that may allow 4K devices on 4K cameras that don\'t expose the option to 3rd party camera apps. This isn\'t guaranteed to work, please test before working.
- Enable video stabilization
- Video stabilization reduces the shaking due to the motion of the camera in both the preview and in recorded videos
+ Enable digital video stabilization
+ Video stabilization reduces the shaking due to the motion of the camera in both the preview and in recorded videos. This may be unnecessary if your device supports optical image stabilization (OIS).
Video bitrate (approx)
Set the approximate bitrate of videos (higher means better quality, but takes up more disk space; may cause video recording to fail if bitrate not supported)\n%s
Video frame rate (approx)
--
GitLab
From 0289a7a77a8699858f7cae6240d9d8236c2af5c4 Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Mon, 9 Dec 2019 00:00:06 +0000
Subject: [PATCH 018/243] When using "Pause after taking photo", touching to
unpause no longer triggers auto focus, or taking another photo for "Touch to
capture".
---
_docs/history.html | 5 +++++
.../sourceforge/opencamera/preview/Preview.java | 16 +++++++++++++---
2 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/_docs/history.html b/_docs/history.html
index 4f73769f2..7aeaa290b 100644
--- a/_docs/history.html
+++ b/_docs/history.html
@@ -48,6 +48,11 @@
< Main Page.
+Version 1.48 (Work in progress)
+
+FIXED When using "Pause after taking photo", touching to unpause no longer
+ triggers auto focus, or taking another photo for "Touch to capture".
+
Version 1.47.3 (2019/10/20)
FIXED Grids were being drawing too faintly.
diff --git a/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java b/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java
index bb729714d..00450a79e 100644
--- a/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java
+++ b/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java
@@ -549,6 +549,11 @@ public class Preview implements SurfaceHolder.Callback, TextureView.SurfaceTextu
public boolean touchEvent(MotionEvent event) {
if( MyDebug.LOG )
Log.d(TAG, "touch event at : " + event.getX() + " , " + event.getY() + " at time " + event.getEventTime());
+
+ boolean was_paused = !this.is_preview_started;
+ if( MyDebug.LOG )
+ Log.d(TAG, "was_paused: " + was_paused);
+
if( gestureDetector.onTouchEvent(event) ) {
if( MyDebug.LOG )
Log.d(TAG, "touch event handled by gestureDetector");
@@ -619,7 +624,8 @@ public class Preview implements SurfaceHolder.Callback, TextureView.SurfaceTextu
}
cancelAutoFocus();
- if( camera_controller != null && !this.using_face_detection ) {
+ // don't set focus areas on touch if the user is touching to unpause!
+ if( camera_controller != null && !this.using_face_detection && !was_paused ) {
this.has_focus_area = false;
ArrayList areas = getAreas(event.getX(), event.getY());
if( camera_controller.setFocusAndMeteringArea(areas) ) {
@@ -636,7 +642,8 @@ public class Preview implements SurfaceHolder.Callback, TextureView.SurfaceTextu
}
}
- if( !this.is_video && applicationInterface.getTouchCapturePref() ) {
+ // don't take a photo on touch if the user is touching to unpause!
+ if( !this.is_video && !was_paused && applicationInterface.getTouchCapturePref() ) {
if( MyDebug.LOG )
Log.d(TAG, "touch to capture");
// interpret as if user had clicked take photo/video button, except that we set the focus/metering areas
@@ -644,7 +651,10 @@ public class Preview implements SurfaceHolder.Callback, TextureView.SurfaceTextu
return true;
}
- tryAutoFocus(false, true);
+ // don't auto focus on touch if the user is touching to unpause!
+ if( !was_paused ) {
+ tryAutoFocus(false, true);
+ }
return true;
}
--
GitLab
From 753c1633d9a9f7b0cad5a3db675e4c1ae495b85a Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Tue, 10 Dec 2019 23:22:18 +0000
Subject: [PATCH 019/243] Update testTakePhotoFrontCamera() to check all
non-default cameras.
---
.../opencamera/test/MainActivityTest.java | 96 +++++++++++--------
1 file changed, 57 insertions(+), 39 deletions(-)
diff --git a/app/src/androidTest/java/net/sourceforge/opencamera/test/MainActivityTest.java b/app/src/androidTest/java/net/sourceforge/opencamera/test/MainActivityTest.java
index 4d6cfdd13..79e808470 100644
--- a/app/src/androidTest/java/net/sourceforge/opencamera/test/MainActivityTest.java
+++ b/app/src/androidTest/java/net/sourceforge/opencamera/test/MainActivityTest.java
@@ -4032,7 +4032,7 @@ public class MainActivityTest extends ActivityInstrumentationTestCase2
Date: Tue, 10 Dec 2019 23:46:39 +0000
Subject: [PATCH 020/243] Update comment for getNRModePref().
---
.../sourceforge/opencamera/preview/ApplicationInterface.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/java/net/sourceforge/opencamera/preview/ApplicationInterface.java b/app/src/main/java/net/sourceforge/opencamera/preview/ApplicationInterface.java
index d4becefb8..b08d34a18 100644
--- a/app/src/main/java/net/sourceforge/opencamera/preview/ApplicationInterface.java
+++ b/app/src/main/java/net/sourceforge/opencamera/preview/ApplicationInterface.java
@@ -110,7 +110,7 @@ public interface ApplicationInterface {
NRMODE_NORMAL,
NRMODE_LOW_LIGHT
}
- NRModePref getNRModePref(); // only relevant if getBurstForNoiseReduction() returns true
+ NRModePref getNRModePref(); // only relevant if getBurstForNoiseReduction() returns true; if this changes without reopening the preview's camera, call Preview.setupBurstMode()
boolean getOptimiseAEForDROPref(); // see CameraController doc for setOptimiseAEForDRO().
enum RawPref {
RAWPREF_JPEG_ONLY, // JPEG only
--
GitLab
From a3721dc3f638246d6910053a5384efc71affe0ed Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Tue, 10 Dec 2019 23:58:50 +0000
Subject: [PATCH 021/243] Test low light mode in testTakePhotoNR.
---
.../opencamera/test/MainActivityTest.java | 18 ++++++++++++++++++
.../cameracontroller/CameraController.java | 1 +
.../cameracontroller/CameraController2.java | 2 +-
3 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/app/src/androidTest/java/net/sourceforge/opencamera/test/MainActivityTest.java b/app/src/androidTest/java/net/sourceforge/opencamera/test/MainActivityTest.java
index 79e808470..2afc0573c 100644
--- a/app/src/androidTest/java/net/sourceforge/opencamera/test/MainActivityTest.java
+++ b/app/src/androidTest/java/net/sourceforge/opencamera/test/MainActivityTest.java
@@ -3434,6 +3434,8 @@ public class MainActivityTest extends ActivityInstrumentationTestCase2= CameraController.ISO_FOR_DARK )
+ assertEquals(CameraController.N_IMAGES_NR_DARK_LOW_LIGHT, mActivity.getPreview().getCameraController().getBurstTotal());
+ // reset
+ mActivity.getApplicationInterface().setNRMode("preference_nr_mode_normal");
+ mActivity.getPreview().setupBurstMode();
+
// then try front camera
if( mPreview.getCameraControllerManager().getNumberOfCameras() <= 1 ) {
@@ -10420,6 +10437,7 @@ public class MainActivityTest extends ActivityInstrumentationTestCase2= 1100 ) {
+ if( capture_result_iso >= ISO_FOR_DARK ) {
if( MyDebug.LOG )
Log.d(TAG, "optimise for dark scene");
n_burst = noise_reduction_low_light ? N_IMAGES_NR_DARK_LOW_LIGHT : N_IMAGES_NR_DARK;
--
GitLab
From 1a01f7b8bd6fb10e34846964b9056b725233ecd7 Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Thu, 12 Dec 2019 00:39:00 +0000
Subject: [PATCH 022/243] Updates to FAQ.
---
_docs/help.html | 37 ++++++++++++-------
.../sourceforge/opencamera/MainActivity.java | 1 +
2 files changed, 24 insertions(+), 14 deletions(-)
diff --git a/_docs/help.html b/_docs/help.html
index 9f3bb327b..88ea00c51 100644
--- a/_docs/help.html
+++ b/_docs/help.html
@@ -1165,6 +1165,19 @@ the Storage Access Framework method as with Android 5 (or the Android/dat
with Android 4.4).
+Can you implement disabling shutter sound for my phone? -
+ If Open Camera shows the option Settings/"Camera API", then changing to "Camera2 API" means you'll be able to disable
+ shutter sounds under "Settings/More camera controls...".
+ When not using Camera2 API, if the option "Shutter sound" under "More camera controls..." isn't shown,
+ then it's not available. There
+ are possible workarounds for some of these devices (which is why some third party camera applications
+ may be able to silence the shutter), though the issue is these don't work on all devices, and tend
+ to use methods that Google now discourage. The fault is with the device for not supporting
+ standard method for cameras to disable the shutter sound on Android. In particular, if under Settings/About
+ you see that "Can disable shutter sound?" says No, it means the device's camera API is telling 3rd
+ party camera apps that shutter sound can't be disabled (so either it can't do it, or the API is lying
+ - either way, this should be reported to your manufacturer).
+
Photos or videos fail to save! - Firstly, if you're trying to save to an
external SD card, see "How can I save to my external SD card?" above. Otherwise:
@@ -1285,20 +1298,11 @@ default and you want to change it, then go to the App Settings for that app, and
actions, with an option to clear them. There are plenty of gallery apps for Android, and it seems
better for users to have this choice, rather than Open Camera having its own custom gallery.
-Can you implement disabling shutter sound for my phone? -
-If Open Camera shows the option Settings/"Camera API", then changing to "Camera2 API" means you'll be able to disable
-shutter sounds under "Settings/More camera controls...".
-When not using Camera2 API, if the option "Shutter sound" under "More camera controls..." isn't shown,
-then it's not available. There
-are possible workarounds for some of these devices (which is why some third party camera applications
-may be able to silence the shutter), though the issue is these don't work on all devices, and tend
-to use methods that Google now discourage. The fault is with the device for not supporting
-standard method for cameras to disable the shutter sound on Android. In particular, if under Settings/About
-you see that "Can disable shutter sound?" says No, it means the device's camera API is telling 3rd
-party camera apps that shutter sound can't be disabled (so either it can't do it, or the API is lying
-- either way, this should be reported to your manufacturer).
-
-Why does Open Camera have ads? - Open Camera does not have ads (there may be ads on the online
+
Clicking on the thumbnail icon only shows the photo briefly? - This can happen if you've changed the save location
+for photos/videos to one that is not typical (e.g., not inside DCIM/ ). Some gallery applications will not show a photo in
+such cases.
+
+Why does Open Camera have ads? - Open Camera does not have ads in the application (there may be ads on the online
webpage you're reading now, but not in the app). There are however some clones on Google Play with ads inserted.
Please ensure that you've downloaded from one of the places listed above
on this page.
@@ -1319,6 +1323,11 @@ supported in both old and Camera2 API. See
Note that some Google Pixels (e.g., 3a) do not have a Pixel Visual Core chip, and may not support HDR+ in third party
camera applications (see this thread).
+Why isn't Paranorama supported on my device? - To support panorama in Open Camera, this requires Android 5+,
+a gyroscope and compass, and at least 256MB of "large heap" memory (note, this isn't the same as the device's RAM).
+Bear in mind that even if your device supports panorama, with Open Camera I have to support thousands of Android devices,
+and I don't have the luxury of targetting functionality towards one particular device.
+
Why doesn't Open Camera's HDR images look like other HDR camera apps? - There are a great many different ways
of applying a HDR algorithm, some may do better or worse in different circumstances; some may look more or less pleasing
depending on what you are after. Also note that some camera apps use "HDR" to mean "apply a whacky-looking filter".
diff --git a/app/src/main/java/net/sourceforge/opencamera/MainActivity.java b/app/src/main/java/net/sourceforge/opencamera/MainActivity.java
index 7958ab7a1..121d3a692 100644
--- a/app/src/main/java/net/sourceforge/opencamera/MainActivity.java
+++ b/app/src/main/java/net/sourceforge/opencamera/MainActivity.java
@@ -3818,6 +3818,7 @@ public class MainActivity extends Activity {
return false;
// require 256MB just to be safe, due to the large number of images that may be created
// also require at least Android 5, for Renderscript
+ // remember to update the FAQ "Why isn't Paranoram supported on my device?" if this changes
return( Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && large_heap_memory >= 256 && applicationInterface.getGyroSensor().hasSensors() );
//return false; // currently blocked for release
}
--
GitLab
From 41cd4c6d1fb2c4da37e9baa4395f49b7588b2854 Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Mon, 16 Dec 2019 20:31:47 +0000
Subject: [PATCH 023/243] Take photo issue.
---
_docs/history.html | 1 +
.../java/net/sourceforge/opencamera/MainActivity.java | 6 ++++--
.../main/java/net/sourceforge/opencamera/TakePhoto.java | 9 +++++++--
.../java/net/sourceforge/opencamera/preview/Preview.java | 7 +++++--
4 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/_docs/history.html b/_docs/history.html
index 7aeaa290b..99417e681 100644
--- a/_docs/history.html
+++ b/_docs/history.html
@@ -52,6 +52,7 @@ Version 1.48 (Work in progress)
FIXED When using "Pause after taking photo", touching to unpause no longer
triggers auto focus, or taking another photo for "Touch to capture".
+FIXED Take photo widget issue.
Version 1.47.3 (2019/10/20)
diff --git a/app/src/main/java/net/sourceforge/opencamera/MainActivity.java b/app/src/main/java/net/sourceforge/opencamera/MainActivity.java
index 121d3a692..8f4664a65 100644
--- a/app/src/main/java/net/sourceforge/opencamera/MainActivity.java
+++ b/app/src/main/java/net/sourceforge/opencamera/MainActivity.java
@@ -202,8 +202,10 @@ public class MainActivity extends Activity {
}
if( getIntent() != null && getIntent().getExtras() != null ) {
// whether called from Take Photo widget
- if( MyDebug.LOG )
- Log.d(TAG, "take_photo?: " + getIntent().getExtras().getBoolean(TakePhoto.TAKE_PHOTO));
+ if( MyDebug.LOG ) {
+ //Log.d(TAG, "take_photo?: " + getIntent().getExtras().getBoolean(TakePhoto.TAKE_PHOTO));
+ Log.d(TAG, "take_photo?: " + TakePhoto.TAKE_PHOTO);
+ }
}
if( getIntent() != null && getIntent().getAction() != null ) {
// invoked via the manifest shortcut?
diff --git a/app/src/main/java/net/sourceforge/opencamera/TakePhoto.java b/app/src/main/java/net/sourceforge/opencamera/TakePhoto.java
index d2b942a34..a80f5a1ad 100644
--- a/app/src/main/java/net/sourceforge/opencamera/TakePhoto.java
+++ b/app/src/main/java/net/sourceforge/opencamera/TakePhoto.java
@@ -11,7 +11,11 @@ import android.util.Log;
*/
public class TakePhoto extends Activity {
private static final String TAG = "TakePhoto";
- public static final String TAKE_PHOTO = "net.sourceforge.opencamera.TAKE_PHOTO";
+
+ // Usually passing data via intent is preferred to using statics - however here a static is better for security,
+ // as we don't want other applications calling Open Camera's MainActivity with a take photo intent!
+ //public static final String TAKE_PHOTO = "net.sourceforge.opencamera.TAKE_PHOTO";
+ public static boolean TAKE_PHOTO;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -21,7 +25,8 @@ public class TakePhoto extends Activity {
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
- intent.putExtra(TAKE_PHOTO, true);
+ //intent.putExtra(TAKE_PHOTO, true);
+ TakePhoto.TAKE_PHOTO = true;
this.startActivity(intent);
if( MyDebug.LOG )
Log.d(TAG, "finish");
diff --git a/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java b/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java
index 00450a79e..f0ad5fa0b 100644
--- a/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java
+++ b/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java
@@ -1591,7 +1591,7 @@ public class Preview implements SurfaceHolder.Callback, TextureView.SurfaceTextu
boolean take_photo = false;
if( camera_controller != null ) {
Activity activity = (Activity)Preview.this.getContext();
- if( MyDebug.LOG )
+ /*if( MyDebug.LOG )
Log.d(TAG, "intent: " + activity.getIntent());
if( activity.getIntent() != null && activity.getIntent().getExtras() != null ) {
take_photo = activity.getIntent().getExtras().getBoolean(TakePhoto.TAKE_PHOTO);
@@ -1600,7 +1600,10 @@ public class Preview implements SurfaceHolder.Callback, TextureView.SurfaceTextu
else {
if( MyDebug.LOG )
Log.d(TAG, "no intent data");
- }
+ }*/
+ take_photo = TakePhoto.TAKE_PHOTO;
+ if( take_photo )
+ TakePhoto.TAKE_PHOTO = false;
if( MyDebug.LOG )
Log.d(TAG, "take_photo?: " + take_photo);
--
GitLab
From 02cae004821e7ec6f2d9936d5950f46bcbd5792f Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Mon, 16 Dec 2019 21:11:07 +0000
Subject: [PATCH 024/243] Update.
---
app/src/main/res/values-ru/strings.xml | 63 +++++++++++++++++++-------
1 file changed, 47 insertions(+), 16 deletions(-)
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 0f7e97a3e..87600b5d5 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -98,7 +98,7 @@
Озвучивать обратный отсчет для таймера или пакетного режима (от 60 секунд)
Пакетный
Интервал в пакетном режиме
- Дополнительные настройки
+ Дополнительные настройки…
Касание для съемки
Делать снимок по одинарному или двойному касанию области просмотра
Пауза после съёмки
@@ -107,6 +107,7 @@
Воспроизведение звука при съемке фотографии
Клавиши громкости
Настройки управления звуком
+
Чувствительность управления звуком
Чувствительность уровня шума для управления звуком (опция \"громкий шум\")
Папка сохранения
@@ -126,7 +127,7 @@
При записи видео графический интерфейс будет заблокирован для предотвращения случайной остановки записи. Проведите по экрану, чтобы разблокировать. Обратите внимание, что запись видео остановится, если приложение перейдет в фоновый режим или погаснет экран.
Поворот предпросмотра
Возможность поворота предпросмотра (не повлияет на фото/видео)\n%s
- Настройки интерфейса
+ Настройки интерфейса…
Размер предпросмотра
Расположение интерфейса
Режим погружения
@@ -180,14 +181,14 @@
Хранить направление компаса
Хранить данные о направлении компаса в фотографиях
Требовать данные о местоположении
- Если данные о местоположении включены, вы сможете снять фото/видео только, если они доступны
+ Если данные о местоположении включены, вы сможете снять фото/видео только при их доступности
Штампы
Сохранение вместе с фотографией таких данных как: дата/время/местоположение\n%s
Формат даты
Формат времени
Формат GPS
- Подписывание фото
- Добавление текста на фотографию
+ Подписывать фото
+ Добавлять текст на фотографию
Размер шрифта
Размер шрифта для добавляемого на фотографию текста
Цвет
@@ -201,16 +202,16 @@
При выборе разрешения (3840х2160) для записи через заднюю камеру она будет работать только, если ваше устройство поддерживает данный формат!
Включить стабилизацию видео
Стабилизация видео уменьшает тряску в связи с движением камеры
- Видео битрейт (примерно)
+ Битрейт видео (примерно)
Выбор битрейта видео. (чем выше, тем лучше качество, но файл будет занимать больше места на диске. Неподдерживаемый битрейт может стать причиной ошибки при записи видео).\n%s
Частота кадров видео (примерно)
Кол-во кадров в секунду (FPS) в видео (примерное). Может привести к записи с ошибкой, если частота кадров не поддерживается\n%s
Максимальная длительность видео
Видеозапись прекратится по истечении указанной продолжительности\n%s
- Записать новое видео после достижения лимита
- При достижении лимита продолжительности, будет записано новое видео (столько раз, сколько вы выбрали)\n%s
+ Записывать новое видео после достижения лимита
+ При достижении лимита продолжительности будет записано новое видео (столько раз, сколько вы выбрали)\n%s
Максимальный размер файла видео
- Видеозапись прекратится или начнется заново (смотрите опцию ниже), когда размер файла достигнет указанной величины (приблизительно). Стоит заметить, что почти у всех Android-устройств есть ограничение на максимальный размер видео (обычно около 2 или 4 Гб), однако с помощью этой опции можно указать конкретное значение\n%s
+ Видеозапись прекратится или начнется заново (смотрите опцию ниже), когда размер файла достигнет указанной величины (приблизительно). Важно: почти у всех Android-устройств есть ограничение на максимальный размер видео (обычно около 2 или 4 Гб), однако с помощью этой опции можно указать конкретное значение\n%s
Начать видеозапись заново при достижении максимального размера файла
Автоматически начать видеозапись заново при достижении максимального размера файла (обусловленного ограничениями устройства или указанного пользователем)
Запись звука
@@ -223,7 +224,7 @@
Если включено, вспышка будет включаться/выключаться при записи видео (можно использовать, чтобы выполнить запись на расстоянии)
Разное
- Онлайн помощь
+ Помощь в Интернете
Запустить веб-сайт Open Camera в вашем браузере
Пожертвовать
Если вам нравится это приложение, киньте мне копейку. Вы можете сделать это, купив мое приложение. Спасибо!
@@ -280,9 +281,9 @@
Скажите \"cheese\"
Создайте громкий шум
- Автоматическая стабилизация будет поворачивать фотографии для их выравнивания.\n\nСтоит заметить, что разрешение полученных фото слегка уменьшится из-за поворота и обрезки.
- Файлы DNG содержат несжатую и необработанную информацию с вашей камеры.\n\nБольшинство программ для просмотра изображений не поддерживают DNG. Их нужно открывать специальными программами наподобие Snapseed или Lightroom.\n\nСтоит заметить, что различные опции наподобие "Штамп на фото" или "Автоматическая стабилизация" работают только для изображений формата JPEG, а не DNG.\n\nФайлы DNG имеют большой объем. Для их копирования или удаления может быть полезен файловый менеджер.\n\nФайлы DNG сохраняются только в режиме фото "Стандарт".
- Режим HDR полезен для фото с большой разницей яркости. В нем делается несколько фото с различной экспозицией, которые объединяются в окончательное фото.\n\nСтоит заметить, что HDR не рекомендуется для съемки кадров с быстрым движением, что может привести к менее корректной цветопередаче.\n\nСъемка фото в режиме HDR будет гораздо медленнее, чем в обычном режиме.
+ Автоматическая стабилизация будет поворачивать фотографии для их выравнивания.\n\nВажно: разрешение полученных фото слегка уменьшится из-за поворота и обрезки.
+ Файлы DNG содержат несжатую и необработанную информацию с вашей камеры.\n\nБольшинство программ для просмотра изображений не поддерживают DNG. Их нужно открывать специальными программами наподобие Snapseed или Lightroom.\n\nВажно: различные опции наподобие "Штамп на фото" или "Автоматическая стабилизация" работают только для изображений формата JPEG, а не DNG.\n\nФайлы DNG имеют большой объем. Для их копирования или удаления может быть полезен файловый менеджер.\n\nФайлы DNG сохраняются только в режиме фото "Стандарт".
+ Режим HDR полезен для фото с большой разницей яркости. В нем делается несколько фото с различной экспозицией, которые объединяются в окончательное фото.\n\nВажно: HDR не рекомендуется для съемки кадров с быстрым движением, это может привести к менее корректной цветопередаче.\n\nСъемка фото в режиме HDR будет гораздо медленнее, чем в обычном режиме.
Больше не показывать
@@ -298,7 +299,7 @@
Снижение шума
Штамп на фото
Сохранять все изображения в режиме HDR
- Если эта опция включена, то в режиме HDR вместе с окончательным фото HDR будут сохранены три основных фото экспозиции. Стоит заметить, что сохранение фото будет медленнее, особенно при включенных опциях наподобие "Штамп на фото" или "Автоматическая стабилизация".
+ Если эта опция включена, то в режиме HDR вместе с окончательным фото HDR будут сохранены три основных фото экспозиции. Важно: сохранение фото будет медленнее, особенно при включенных опциях наподобие "Штамп на фото" или "Автоматическая стабилизация".
РАЗРЕШЕНИЯ НЕ ДОСТУПНЫ
Требуется разрешение
@@ -520,7 +521,7 @@
Экранный фонарик
Антибэндинг
- Алгоритмы для борьюы с мерцанием света.\n%s
+ Алгоритмы для борьбы с мерцанием света.\n%s
Автоматически
50 Гц
60 Гц
@@ -800,6 +801,7 @@
Kraken Smart Housing
Использовать адреса
+
По возможности показывать адреса вместе с GPS-координатами
Предпочитать адреса GPS-координатам
Не показывать адреса
@@ -868,7 +870,7 @@
Автоматическая обрезка панорамы
Удалять волнистые края в режиме панорамы\n%s
- Чтобы снять панораму, удерживайте ваше устройство в портретной ориентации и нажмите на кнопку снятия фото для начала формирования панорамыa. Затем поворачивайте устройство влево или вправо, сдвигая белый круг в центре на синюю точку. После захвата нового изображения продолжайте поворачивать устройство, чтобы захватить следующую синюю точку.\n\nНажмите на галочку, чтобы сохранить панораму, или крестик, чтобы отменить ее.\n\nВажно: обработка и сохранение фото панорамы могут занять некоторое время.
+ Чтобы снять панораму, удерживайте ваше устройство в портретной ориентации и нажмите на кнопку снятия фото для начала формирования панорамы. Затем поворачивайте устройство влево или вправо, сдвигая белый круг в центре на синюю точку. После захвата нового изображения продолжайте поворачивать устройство, чтобы захватить следующую синюю точку.\n\nНажмите на галочку, чтобы сохранить панораму, или крестик, чтобы отменить ее.\n\nВажно: обработка и сохранение фото панорамы могут занять некоторое время.
Оригинальные изображения панорамы
Сохранять оригинальные изображения в режиме панорамы. Важно: фото панорам будут сохраняться медленнее. Также позволяет сохранять файл XML, который может быть полезен при сообщении об ошибках с панорамами.\n%s
@@ -879,4 +881,33 @@
ID
+ Шкала для изменения компенсации экспозиции
+
+ Выберите формат файла для сохранения фото. Это влияет на \"обычные\" (не RAW) фото. Важно: формат PNG не является настоящим форматом "без потерь", вместо этого он конвертируется из JPEG со 100% качеством.\n%s
+
+ Camera API
+ Выберите Camera2 API, чтобы включить дополнительные возможности, например ручные режимы экспозиции, фокус, баланс белого, вместе с форматом RAW (если поддерживается устройством). При изменении API потребуется перезапуск.\n%s
+ Оригинальный API камеры
+ Camera2 API
+
+ Снимать фото/видео при обнаружении шума или по голосовой команде.
+ Если включено, используйте экранную кнопку микрофона для запуска/остановки слушания.
+ Важно: настройка голосовой команды использует службу распознавания речи Android. При использовании этой опции аудиоданные
+ могут быть переданы на удаленные серверы для распознавания речи.
+ \n%s
+
+ По возможности использовать адрес при штамповании геолокации по GPS.
+ Для данной опции требуется наличие Интернет-соединения.
+ Важно: если включено, ваше устройство будет передавать данные геолокации сторонним лицам
+ для преобразования координат GPS в адрес. Смотрите https://developer.android.com/reference/android/location/Geocoder .
+ \n%s
+
+ Коснитесь для фокуса и нажмите синюю кнопку камеры, чтобы сделать фото.
+ \n\nДля отключения максимальной яркости экрана перейдите в Настройки/Настройки интерфейса…/\"Максимальная яркость\".
+ Для сохранения на SD-карту на Android 5+ перейдите в Настройки/Дополнительные настройки…/\"Использовать Storage Access Framework\".
+ Для получения подробностей нажмите \"Помощь в Интернете\" в меню Настройки.
+
+
+ Выбрать удаленное устройство
+
--
GitLab
From 186ec8dead0fbd0b2adbccf2f7790efb3ba2634f Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Mon, 16 Dec 2019 21:14:41 +0000
Subject: [PATCH 025/243] update comments
---
app/src/main/res/values/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9cadf61c3..29910566b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -910,7 +910,7 @@
Select remote device
-
+
Privacy policy
Tap to display privacy policy
@@ -948,7 +948,7 @@
Online licences
Please tap here for full online licensing information (opens in your browser).
-
+
[This dialog is shown when Open Camera is updated. You can disable it under
Settings/On screen GUI/Show What\'s New dialog.]
--
GitLab
From cccef393a4a6a7acbe5f3a9e5f80c2dc2f14e91a Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Wed, 18 Dec 2019 23:47:52 +0000
Subject: [PATCH 026/243] New testPanoramaWhite.
---
.../opencamera/test/MainActivityTest.java | 23 +++++++++++++++++++
.../opencamera/test/PanoramaTests.java | 1 +
2 files changed, 24 insertions(+)
diff --git a/app/src/androidTest/java/net/sourceforge/opencamera/test/MainActivityTest.java b/app/src/androidTest/java/net/sourceforge/opencamera/test/MainActivityTest.java
index 2afc0573c..1b8224cf1 100644
--- a/app/src/androidTest/java/net/sourceforge/opencamera/test/MainActivityTest.java
+++ b/app/src/androidTest/java/net/sourceforge/opencamera/test/MainActivityTest.java
@@ -15618,6 +15618,29 @@ public class MainActivityTest extends ActivityInstrumentationTestCase2 inputs = new ArrayList<>();
+
+ inputs.add(panorama_images_path + "testPanoramaWhite/input0.jpg");
+ inputs.add(panorama_images_path + "testPanoramaWhite/input0.jpg");
+ float camera_angle_x = 66.3177f;
+ float camera_angle_y = 50.04736f;
+ float panorama_pics_per_screen = 2.0f;
+ String output_name = "testPanoramaWhite_output.jpg";
+
+ subTestPanorama(inputs, output_name, null, panorama_pics_per_screen, camera_angle_x, camera_angle_y, 2.0f);
+ }
+
/** Tests panorama algorithm on test samples "testPanorama1".
* @throws IOException
* @throws InterruptedException
diff --git a/app/src/androidTest/java/net/sourceforge/opencamera/test/PanoramaTests.java b/app/src/androidTest/java/net/sourceforge/opencamera/test/PanoramaTests.java
index ed775a458..5e3c38d00 100644
--- a/app/src/androidTest/java/net/sourceforge/opencamera/test/PanoramaTests.java
+++ b/app/src/androidTest/java/net/sourceforge/opencamera/test/PanoramaTests.java
@@ -12,6 +12,7 @@ public class PanoramaTests {
*/
public static Test suite() {
TestSuite suite = new TestSuite(MainTests.class.getName());
+ suite.addTest(TestSuite.createTest(MainActivityTest.class, "testPanoramaWhite"));
suite.addTest(TestSuite.createTest(MainActivityTest.class, "testPanorama1"));
suite.addTest(TestSuite.createTest(MainActivityTest.class, "testPanorama2"));
suite.addTest(TestSuite.createTest(MainActivityTest.class, "testPanorama3"));
--
GitLab
From e683996abcc354c3b15ea16609a723669bcb12b5 Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Sat, 21 Dec 2019 22:58:00 +0000
Subject: [PATCH 027/243] Add debug info on whether video digital stabilization
is enabled.
---
app/src/main/java/net/sourceforge/opencamera/MainActivity.java | 1 +
.../java/net/sourceforge/opencamera/MyPreferenceFragment.java | 3 +++
2 files changed, 4 insertions(+)
diff --git a/app/src/main/java/net/sourceforge/opencamera/MainActivity.java b/app/src/main/java/net/sourceforge/opencamera/MainActivity.java
index 8f4664a65..b4fe54681 100644
--- a/app/src/main/java/net/sourceforge/opencamera/MainActivity.java
+++ b/app/src/main/java/net/sourceforge/opencamera/MainActivity.java
@@ -1693,6 +1693,7 @@ public class MainActivity extends Activity {
bundle.putInt("white_balance_temperature_min", this.preview.getMinimumWhiteBalanceTemperature());
bundle.putInt("white_balance_temperature_max", this.preview.getMaximumWhiteBalanceTemperature());
bundle.putBoolean("supports_video_stabilization", this.preview.supportsVideoStabilization());
+ bundle.putBoolean("video_stabilization_enabled", this.preview.getVideoStabilization());
bundle.putBoolean("can_disable_shutter_sound", this.preview.canDisableShutterSound());
bundle.putInt("tonemap_max_curve_points", this.preview.getTonemapMaxCurvePoints());
bundle.putBoolean("supports_tonemap_curve", this.preview.supportsTonemapCurve());
diff --git a/app/src/main/java/net/sourceforge/opencamera/MyPreferenceFragment.java b/app/src/main/java/net/sourceforge/opencamera/MyPreferenceFragment.java
index 295180e86..bde9c0a4f 100644
--- a/app/src/main/java/net/sourceforge/opencamera/MyPreferenceFragment.java
+++ b/app/src/main/java/net/sourceforge/opencamera/MyPreferenceFragment.java
@@ -533,6 +533,7 @@ public class MyPreferenceFragment extends PreferenceFragment implements OnShared
PreferenceGroup pg = (PreferenceGroup)this.findPreference("preference_screen_video_settings");
pg.removePreference(pref);
}
+ final boolean video_stabilization_enabled = bundle.getBoolean("video_stabilization_enabled");
if( Build.VERSION.SDK_INT < Build.VERSION_CODES.N ) {
filterArrayEntry("preference_video_output_format", "preference_video_output_format_mpeg4_hevc");
@@ -1228,6 +1229,8 @@ public class MyPreferenceFragment extends PreferenceFragment implements OnShared
}
about_string.append("\nVideo stabilization?: ");
about_string.append(getString(supports_video_stabilization ? R.string.about_available : R.string.about_not_available));
+ about_string.append("\nVideo stabilization enabled?: ");
+ about_string.append(video_stabilization_enabled);
about_string.append("\nTonemap max curve points: ");
about_string.append(tonemap_max_curve_points);
about_string.append("\nCan disable shutter sound?: ");
--
GitLab
From 83a50651b2eff47567aa43e20bae902e31cf9183 Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Sat, 21 Dec 2019 22:58:15 +0000
Subject: [PATCH 028/243] Update gradle version.
---
build.gradle | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/build.gradle b/build.gradle
index 6fe5d2708..a9deb8ae9 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,7 +5,7 @@ buildscript {
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.5.0'
+ classpath 'com.android.tools.build:gradle:3.5.3'
}
}
--
GitLab
From feb693e74a647c642ea82235f7ebd662e14565b1 Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Sat, 21 Dec 2019 23:07:54 +0000
Subject: [PATCH 029/243] Fix for recent release, need getVideoStabilization()
too.
---
.../net/sourceforge/opencamera/preview/Preview.java | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java b/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java
index f0ad5fa0b..74589c515 100644
--- a/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java
+++ b/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java
@@ -6437,6 +6437,17 @@ public class Preview implements SurfaceHolder.Callback, TextureView.SurfaceTextu
return supports_video_stabilization;
}
+ public boolean getVideoStabilization() {
+ if( MyDebug.LOG )
+ Log.d(TAG, "getVideoStabilization");
+ if( camera_controller == null ) {
+ if( MyDebug.LOG )
+ Log.d(TAG, "camera not opened!");
+ return false;
+ }
+ return camera_controller.getVideoStabilization();
+ }
+
public boolean supportsPhotoVideoRecording() {
if( MyDebug.LOG )
Log.d(TAG, "supportsPhotoVideoRecording");
--
GitLab
From 123da5ec5bca6bb7b77ff2571a51133785b4f9b4 Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Sat, 21 Dec 2019 23:08:08 +0000
Subject: [PATCH 030/243] Add comment.
---
.../main/java/net/sourceforge/opencamera/preview/Preview.java | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java b/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java
index 74589c515..e3e7a1dce 100644
--- a/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java
+++ b/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java
@@ -6431,6 +6431,8 @@ public class Preview implements SurfaceHolder.Callback, TextureView.SurfaceTextu
return supports_face_detection;
}
+ /** Whether video digital stabilization is supported by the device.
+ */
public boolean supportsVideoStabilization() {
if( MyDebug.LOG )
Log.d(TAG, "supportsVideoStabilization");
--
GitLab
From 16079d29192a98669d7a329636ef930cbe5466e5 Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Sat, 21 Dec 2019 23:12:48 +0000
Subject: [PATCH 031/243] Refactor to split code from setupCameraParameters()
to initCameraParameters().
---
.../opencamera/preview/Preview.java | 29 ++++++++++++-------
1 file changed, 19 insertions(+), 10 deletions(-)
diff --git a/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java b/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java
index e3e7a1dce..dc0cc1bfc 100644
--- a/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java
+++ b/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java
@@ -1737,6 +1737,16 @@ public class Preview implements SurfaceHolder.Callback, TextureView.SurfaceTextu
// we'll switch to the user-requested focus by calling setFocusPref() from setupCameraParameters() below
this.updateFocusForVideo();
+ try {
+ initCameraParameters();
+ }
+ catch(CameraControllerException e) {
+ e.printStackTrace();
+ applicationInterface.onCameraError();
+ closeCamera(false, null);
+ return;
+ }
+
try {
setupCameraParameters();
}
@@ -1965,13 +1975,9 @@ public class Preview implements SurfaceHolder.Callback, TextureView.SurfaceTextu
}
}
- private void setupCameraParameters() throws CameraControllerException {
+ private void initCameraParameters() throws CameraControllerException {
if( MyDebug.LOG )
- Log.d(TAG, "setupCameraParameters()");
- long debug_time = 0;
- if( MyDebug.LOG ) {
- debug_time = System.currentTimeMillis();
- }
+ Log.d(TAG, "initCameraParameters()");
{
// get available scene modes
// important, from old Camera API docs:
@@ -1997,9 +2003,6 @@ public class Preview implements SurfaceHolder.Callback, TextureView.SurfaceTextu
applicationInterface.clearSceneModePref();
}
}
- if( MyDebug.LOG ) {
- Log.d(TAG, "setupCameraParameters: time after setting scene mode: " + (System.currentTimeMillis() - debug_time));
- }
{
// grab all read-only info from parameters
@@ -2053,8 +2056,14 @@ public class Preview implements SurfaceHolder.Callback, TextureView.SurfaceTextu
this.video_quality_handler.setVideoSizesHighSpeed(camera_features.video_sizes_high_speed);
this.supported_preview_sizes = camera_features.preview_sizes;
}
+ }
+
+ private void setupCameraParameters() throws CameraControllerException {
+ if( MyDebug.LOG )
+ Log.d(TAG, "setupCameraParameters()");
+ long debug_time = 0;
if( MyDebug.LOG ) {
- Log.d(TAG, "setupCameraParameters: time after getting read only info: " + (System.currentTimeMillis() - debug_time));
+ debug_time = System.currentTimeMillis();
}
{
--
GitLab
From f018199f64b31c7776574c1d1c864ceefdbd8fe6 Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Sat, 21 Dec 2019 23:14:59 +0000
Subject: [PATCH 032/243] Add debug info on whether OIS is supported or
enabled.
---
.../sourceforge/opencamera/MainActivity.java | 2 +
.../opencamera/MyPreferenceFragment.java | 7 ++++
.../cameracontroller/CameraController.java | 2 +
.../cameracontroller/CameraController1.java | 6 +++
.../cameracontroller/CameraController2.java | 38 ++++++++++++-------
.../opencamera/preview/Preview.java | 22 +++++++++++
6 files changed, 63 insertions(+), 14 deletions(-)
diff --git a/app/src/main/java/net/sourceforge/opencamera/MainActivity.java b/app/src/main/java/net/sourceforge/opencamera/MainActivity.java
index b4fe54681..e2cda2034 100644
--- a/app/src/main/java/net/sourceforge/opencamera/MainActivity.java
+++ b/app/src/main/java/net/sourceforge/opencamera/MainActivity.java
@@ -1692,6 +1692,8 @@ public class MainActivity extends Activity {
bundle.putBoolean("supports_white_balance_temperature", this.preview.supportsWhiteBalanceTemperature());
bundle.putInt("white_balance_temperature_min", this.preview.getMinimumWhiteBalanceTemperature());
bundle.putInt("white_balance_temperature_max", this.preview.getMaximumWhiteBalanceTemperature());
+ bundle.putBoolean("supports_optical_stabilization", this.preview.supportsOpticalStabilization());
+ bundle.putBoolean("optical_stabilization_enabled", this.preview.getOpticalStabilization());
bundle.putBoolean("supports_video_stabilization", this.preview.supportsVideoStabilization());
bundle.putBoolean("video_stabilization_enabled", this.preview.getVideoStabilization());
bundle.putBoolean("can_disable_shutter_sound", this.preview.canDisableShutterSound());
diff --git a/app/src/main/java/net/sourceforge/opencamera/MyPreferenceFragment.java b/app/src/main/java/net/sourceforge/opencamera/MyPreferenceFragment.java
index bde9c0a4f..265ac83ff 100644
--- a/app/src/main/java/net/sourceforge/opencamera/MyPreferenceFragment.java
+++ b/app/src/main/java/net/sourceforge/opencamera/MyPreferenceFragment.java
@@ -525,6 +525,9 @@ public class MyPreferenceFragment extends PreferenceFragment implements OnShared
pg.removePreference(pref);
}
+ final boolean supports_optical_stabilization = bundle.getBoolean("supports_optical_stabilization");
+ final boolean optical_stabilization_enabled = bundle.getBoolean("optical_stabilization_enabled");
+
final boolean supports_video_stabilization = bundle.getBoolean("supports_video_stabilization");
if( MyDebug.LOG )
Log.d(TAG, "supports_video_stabilization: " + supports_video_stabilization);
@@ -1227,6 +1230,10 @@ public class MyPreferenceFragment extends PreferenceFragment implements OnShared
about_string.append(" to ");
about_string.append(white_balance_temperature_max);
}
+ about_string.append("\nOptical stabilization?: ");
+ about_string.append(getString(supports_optical_stabilization ? R.string.about_available : R.string.about_not_available));
+ about_string.append("\nOptical stabilization enabled?: ");
+ about_string.append(optical_stabilization_enabled);
about_string.append("\nVideo stabilization?: ");
about_string.append(getString(supports_video_stabilization ? R.string.about_available : R.string.about_not_available));
about_string.append("\nVideo stabilization enabled?: ");
diff --git a/app/src/main/java/net/sourceforge/opencamera/cameracontroller/CameraController.java b/app/src/main/java/net/sourceforge/opencamera/cameracontroller/CameraController.java
index e1fd834e6..93c28c867 100644
--- a/app/src/main/java/net/sourceforge/opencamera/cameracontroller/CameraController.java
+++ b/app/src/main/java/net/sourceforge/opencamera/cameracontroller/CameraController.java
@@ -69,6 +69,7 @@ public abstract class CameraController {
public float minimum_focus_distance;
public boolean is_exposure_lock_supported;
public boolean is_white_balance_lock_supported;
+ public boolean is_optical_stabilization_supported;
public boolean is_video_stabilization_supported;
public boolean is_photo_video_recording_supported;
public boolean supports_white_balance_temperature;
@@ -441,6 +442,7 @@ public abstract class CameraController {
public boolean getUseCamera2FakeFlash() {
return false;
}
+ public abstract boolean getOpticalStabilization();
public abstract void setVideoStabilization(boolean enabled);
public abstract boolean getVideoStabilization();
public abstract void setLogProfile(boolean use_log_profile, float log_profile_strength);
diff --git a/app/src/main/java/net/sourceforge/opencamera/cameracontroller/CameraController1.java b/app/src/main/java/net/sourceforge/opencamera/cameracontroller/CameraController1.java
index 5c8cb8eb4..5b3d29b24 100644
--- a/app/src/main/java/net/sourceforge/opencamera/cameracontroller/CameraController1.java
+++ b/app/src/main/java/net/sourceforge/opencamera/cameracontroller/CameraController1.java
@@ -871,6 +871,12 @@ public class CameraController1 extends CameraController {
// not supported for CameraController1
}
+ @Override
+ public boolean getOpticalStabilization() {
+ // not supported for CameraController1
+ return false;
+ }
+
@Override
public void setVideoStabilization(boolean enabled) {
Camera.Parameters parameters = this.getParameters();
diff --git a/app/src/main/java/net/sourceforge/opencamera/cameracontroller/CameraController2.java b/app/src/main/java/net/sourceforge/opencamera/cameracontroller/CameraController2.java
index 1ec8f0d4c..6c95c76a4 100644
--- a/app/src/main/java/net/sourceforge/opencamera/cameracontroller/CameraController2.java
+++ b/app/src/main/java/net/sourceforge/opencamera/cameracontroller/CameraController2.java
@@ -75,6 +75,7 @@ public class CameraController2 extends CameraController {
private int current_zoom_value;
private boolean supports_face_detect_mode_simple;
private boolean supports_face_detect_mode_full;
+ private boolean supports_optical_stabilization;
private boolean supports_photo_video_recording;
private final static int tonemap_max_curve_points_c = 64;
private final ErrorCallback preview_error_cb;
@@ -1950,20 +1951,6 @@ public class CameraController2 extends CameraController {
}
}
- if( MyDebug.LOG ) {
- int[] ois_modes = characteristics.get(CameraCharacteristics.LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION); // may be null on some devices
- if (ois_modes != null) {
- for (int ois_mode : ois_modes) {
- if (MyDebug.LOG)
- Log.d(TAG, "ois mode: " + ois_mode);
- if (ois_mode == CameraCharacteristics.LENS_OPTICAL_STABILIZATION_MODE_ON) {
- if (MyDebug.LOG)
- Log.d(TAG, "supports ois");
- }
- }
- }
- }
-
int [] capabilities = characteristics.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES);
//boolean capabilities_manual_sensor = false;
boolean capabilities_manual_post_processing = false;
@@ -2227,6 +2214,19 @@ public class CameraController2 extends CameraController {
camera_features.is_white_balance_lock_supported = true;
+ camera_features.is_optical_stabilization_supported = false;
+ int [] supported_optical_stabilization_modes = characteristics.get(CameraCharacteristics.LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION);
+ if( supported_optical_stabilization_modes != null ) {
+ for(int supported_optical_stabilization_mode : supported_optical_stabilization_modes) {
+ if( supported_optical_stabilization_mode == CameraCharacteristics.LENS_OPTICAL_STABILIZATION_MODE_ON ) {
+ camera_features.is_optical_stabilization_supported = true;
+ }
+ }
+ }
+ if( MyDebug.LOG )
+ Log.d(TAG, "is_optical_stabilization_supported: " + camera_features.is_optical_stabilization_supported);
+ supports_optical_stabilization = camera_features.is_optical_stabilization_supported;
+
camera_features.is_video_stabilization_supported = false;
int [] supported_video_stabilization_modes = characteristics.get(CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES);
if( supported_video_stabilization_modes != null ) {
@@ -3625,6 +3625,8 @@ public class CameraController2 extends CameraController {
@Override
public void setVideoStabilization(boolean enabled) {
+ if( MyDebug.LOG )
+ Log.d(TAG, "setVideoStabilization: " + enabled);
camera_settings.video_stabilization = enabled;
camera_settings.setVideoStabilization(previewBuilder);
try {
@@ -3640,6 +3642,14 @@ public class CameraController2 extends CameraController {
}
}
+ @Override
+ public boolean getOpticalStabilization() {
+ Integer ois_mode = previewBuilder.get(CaptureRequest.LENS_OPTICAL_STABILIZATION_MODE);
+ if( ois_mode == null )
+ return false;
+ return( ois_mode == CaptureRequest.LENS_OPTICAL_STABILIZATION_MODE_ON );
+ }
+
@Override
public boolean getVideoStabilization() {
return camera_settings.video_stabilization;
diff --git a/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java b/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java
index dc0cc1bfc..1cc95ad11 100644
--- a/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java
+++ b/app/src/main/java/net/sourceforge/opencamera/preview/Preview.java
@@ -307,6 +307,7 @@ public class Preview implements SurfaceHolder.Callback, TextureView.SurfaceTextu
private CameraController.Face [] faces_detected;
private final RectF face_rect = new RectF();
private final AccessibilityManager accessibility_manager;
+ private boolean supports_optical_stabilization;
private boolean supports_video_stabilization;
private boolean supports_photo_video_recording;
private boolean can_disable_shutter_sound;
@@ -1338,6 +1339,7 @@ public class Preview implements SurfaceHolder.Callback, TextureView.SurfaceTextu
faces_detected = null;
supports_face_detection = false;
using_face_detection = false;
+ supports_optical_stabilization = false;
supports_video_stabilization = false;
supports_photo_video_recording = false;
can_disable_shutter_sound = false;
@@ -2027,6 +2029,7 @@ public class Preview implements SurfaceHolder.Callback, TextureView.SurfaceTextu
this.max_num_focus_areas = camera_features.max_num_focus_areas;
this.is_exposure_lock_supported = camera_features.is_exposure_lock_supported;
this.is_white_balance_lock_supported = camera_features.is_white_balance_lock_supported;
+ this.supports_optical_stabilization = camera_features.is_optical_stabilization_supported;
this.supports_video_stabilization = camera_features.is_video_stabilization_supported;
this.supports_photo_video_recording = camera_features.is_photo_video_recording_supported;
this.can_disable_shutter_sound = camera_features.can_disable_shutter_sound;
@@ -6440,6 +6443,25 @@ public class Preview implements SurfaceHolder.Callback, TextureView.SurfaceTextu
return supports_face_detection;
}
+ /** Whether optical image stabilization (OIS) is supported by the device.
+ */
+ public boolean supportsOpticalStabilization() {
+ if( MyDebug.LOG )
+ Log.d(TAG, "supportsOpticalStabilization");
+ return supports_optical_stabilization;
+ }
+
+ public boolean getOpticalStabilization() {
+ if( MyDebug.LOG )
+ Log.d(TAG, "getOpticalStabilization");
+ if( camera_controller == null ) {
+ if( MyDebug.LOG )
+ Log.d(TAG, "camera not opened!");
+ return false;
+ }
+ return camera_controller.getOpticalStabilization();
+ }
+
/** Whether video digital stabilization is supported by the device.
*/
public boolean supportsVideoStabilization() {
--
GitLab
From d605518107be6bd639defbf3888552970a8df4f7 Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Sun, 22 Dec 2019 21:59:16 +0000
Subject: [PATCH 033/243] Fix white space.
---
.../java/net/sourceforge/opencamera/test/VideoTests.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/androidTest/java/net/sourceforge/opencamera/test/VideoTests.java b/app/src/androidTest/java/net/sourceforge/opencamera/test/VideoTests.java
index 6c1768a18..5a4658f72 100644
--- a/app/src/androidTest/java/net/sourceforge/opencamera/test/VideoTests.java
+++ b/app/src/androidTest/java/net/sourceforge/opencamera/test/VideoTests.java
@@ -2,6 +2,7 @@ package net.sourceforge.opencamera.test;
import junit.framework.Test;
import junit.framework.TestSuite;
+
public class VideoTests {
// Tests related to video recording; note that tests to do with video mode that don't record are still part of MainTests
public static Test suite() {
--
GitLab
From 5fa8101d76ff3646e0c366690468b6ad01decd46 Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Tue, 24 Dec 2019 17:03:16 +0000
Subject: [PATCH 034/243] Don't set video digital stabilization in photo mode;
don't set OIS if video digital stabilization enabled in video mode.
---
_docs/history.html | 3 ++
.../opencamera/test/MainActivityTest.java | 32 +++++++++++++++++++
.../cameracontroller/CameraController.java | 3 ++
.../cameracontroller/CameraController2.java | 28 ++++++++++++++--
.../opencamera/preview/Preview.java | 29 +++++++++--------
5 files changed, 79 insertions(+), 16 deletions(-)
diff --git a/_docs/history.html b/_docs/history.html
index 99417e681..9dcfe0aed 100644
--- a/_docs/history.html
+++ b/_docs/history.html
@@ -53,6 +53,9 @@ Version 1.48 (Work in progress)
FIXED When using "Pause after taking photo", touching to unpause no longer
triggers auto focus, or taking another photo for "Touch to capture".
FIXED Take photo widget issue.
+FIXED Don't set optical image stabilization if video digital stabilization is enabled in video
+ mode.
+UPDATED Don't set video digital stabilization when in photo mode.
Version 1.47.3 (2019/10/20)
diff --git a/app/src/androidTest/java/net/sourceforge/opencamera/test/MainActivityTest.java b/app/src/androidTest/java/net/sourceforge/opencamera/test/MainActivityTest.java
index 1b8224cf1..74e3b7535 100644
--- a/app/src/androidTest/java/net/sourceforge/opencamera/test/MainActivityTest.java
+++ b/app/src/androidTest/java/net/sourceforge/opencamera/test/MainActivityTest.java
@@ -6258,18 +6258,50 @@ public class MainActivityTest extends ActivityInstrumentationTestCase2
Date: Tue, 24 Dec 2019 17:03:42 +0000
Subject: [PATCH 035/243] Make testIntentVideoDurationLimit() more tolerant.
---
.../java/net/sourceforge/opencamera/test/MainActivityTest.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/app/src/androidTest/java/net/sourceforge/opencamera/test/MainActivityTest.java b/app/src/androidTest/java/net/sourceforge/opencamera/test/MainActivityTest.java
index 74e3b7535..a6d98d2b3 100644
--- a/app/src/androidTest/java/net/sourceforge/opencamera/test/MainActivityTest.java
+++ b/app/src/androidTest/java/net/sourceforge/opencamera/test/MainActivityTest.java
@@ -10989,7 +10989,8 @@ public class MainActivityTest extends ActivityInstrumentationTestCase2
Date: Tue, 24 Dec 2019 17:03:59 +0000
Subject: [PATCH 036/243] Enable http to https redirect.
---
_docs/.htaccess | 3 +++
1 file changed, 3 insertions(+)
create mode 100644 _docs/.htaccess
diff --git a/_docs/.htaccess b/_docs/.htaccess
new file mode 100644
index 000000000..1f8de971d
--- /dev/null
+++ b/_docs/.htaccess
@@ -0,0 +1,3 @@
+RewriteEngine On
+RewriteCond %{HTTP:X-Forwarded-Proto} !https
+RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
--
GitLab
From 7a4fabf82c9fd3ac1b352e448c6f06cdb96ae60c Mon Sep 17 00:00:00 2001
From: Mark Harman
Date: Tue, 24 Dec 2019 21:21:35 +0000
Subject: [PATCH 037/243] Fix up sizes of take_video* icons.
---
app/src/main/res/drawable-mdpi/take_video.png | Bin 12439 -> 6448 bytes
.../res/drawable-mdpi/take_video_pressed.png | Bin 8851 -> 5655 bytes
.../drawable-mdpi/take_video_recording.png | Bin 8399 -> 5433 bytes
.../main/res/drawable-xhdpi/take_video.png | Bin 0 -> 12439 bytes
.../res/drawable-xhdpi/take_video_pressed.png | Bin 0 -> 8851 bytes
.../drawable-xhdpi/take_video_recording.png | Bin 0 -> 8399 bytes
6 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 app/src/main/res/drawable-xhdpi/take_video.png
create mode 100644 app/src/main/res/drawable-xhdpi/take_video_pressed.png
create mode 100644 app/src/main/res/drawable-xhdpi/take_video_recording.png
diff --git a/app/src/main/res/drawable-mdpi/take_video.png b/app/src/main/res/drawable-mdpi/take_video.png
index baa7d15e4f21d208e1f81c1258788e56914a6473..dbd02fb220262e6529a608242040b222b4fb64c9 100644
GIT binary patch
literal 6448
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
V7P(AMkb!}L!PC{xWt~$(69BM9dz1hG
literal 12439
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
4YPv_+Ke>|C4w0V(0nc5p)
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
diff --git a/app/src/main/res/drawable-mdpi/take_video_pressed.png b/app/src/main/res/drawable-mdpi/take_video_pressed.png
index 9ec59ff250afe7882065cdc4a7e0b4259e5604ed..b53a69345aeffeca7dd0fa8e21b9bbcbdcfd623b 100644
GIT binary patch
literal 5655
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
literal 8399
zcmeAS@N?(olHy`uVBq!ia0y~yU}OMc4mJh`hM1xiX&_#4kh>GZx^prw85kH?(j9#r
z85lP9bN@+XWnf_7EbxddW?&G?24TjBdls%>U{FZ$ba4!+ho9X$ViyB?$RqPPqTdDQt!yNs)w?ddyjSP7h9w+|})BBe$KTbzsvSC%{OH}6yJ63*6V5V
z=ek+fw-}|fRK9;*qx4Bfz3XC=`1k)Je9FCv3@;9JrB^I1Xj{PlXJPh(nB1pv`8Gj}
zs#4Ak-~V2o$??DR&$nmthZUCy@i0uCvwCgSO=*7JHldR$x}tnjP2bF6S6#%z+_0!`
z*Q)T^jTcM