summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--[-rwxr-xr-x]AndroidManifest.xml70
-rw-r--r--jni/feature_mos/src/mosaic_renderer/SurfaceTextureRenderer.cpp2
-rw-r--r--jni/feature_mos/src/mosaic_renderer/SurfaceTextureRenderer.h1
-rw-r--r--proguard.flags2
-rw-r--r--[-rwxr-xr-x]res/layout/one_ui_layout.xml99
-rw-r--r--res/values-zh-rCN/strings.xml223
-rw-r--r--[-rwxr-xr-x]res/values/camera2arrays.xml2
-rw-r--r--res/values/qcomstrings.xml22
-rw-r--r--res/values/strings.xml1
-rw-r--r--[-rwxr-xr-x]res/xml/setting_menu_preferences.xml2
-rw-r--r--[-rwxr-xr-x]src/com/android/camera/CameraActivity.java9
-rw-r--r--src/com/android/camera/CameraSettings.java9
-rw-r--r--src/com/android/camera/CaptureModule.java561
-rw-r--r--[-rwxr-xr-x]src/com/android/camera/CaptureUI.java24
-rw-r--r--src/com/android/camera/MediaSaveService.java4
-rw-r--r--[-rwxr-xr-x]src/com/android/camera/SettingsManager.java7
-rw-r--r--src/com/android/camera/imageprocessor/FrameProcessor.java12
-rw-r--r--src/com/android/camera/imageprocessor/PostProcessor.java15
-rw-r--r--src/com/android/camera/imageprocessor/ZSLQueue.java6
-rw-r--r--src/com/android/camera/imageprocessor/filter/ChromaflashFilter.java60
-rw-r--r--[-rwxr-xr-x]src/com/android/camera/ui/Camera2FaceView.java2
-rw-r--r--[-rwxr-xr-x]src/com/android/camera/ui/FaceView.java7
-rw-r--r--src/com/android/camera/util/CameraUtil.java4
-rw-r--r--src/com/android/camera/util/PersistUtil.java204
-rw-r--r--version.mk4
25 files changed, 808 insertions, 544 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 1b8a88d2d..92e8b7f35 100755..100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -53,7 +53,8 @@
android:screenOrientation="portrait"
android:taskAffinity="com.android.camera.CameraActivity"
android:theme="@style/Theme.Camera"
- android:windowSoftInputMode="stateAlwaysHidden|adjustPan" >
+ android:windowSoftInputMode="stateAlwaysHidden|adjustPan"
+ android:visibleToInstantApps="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
@@ -69,10 +70,32 @@
android:label="@string/app_name"
android:launchMode="singleTop"
android:configChanges="orientation|screenSize|keyboardHidden"
- android:parentActivityName="com.android.camera.CameraActivity" >
- <meta-data
- android:name="android.support.PARENT_ACTIVITY"
- android:value="com.android.camera.CameraActivity" />
+ android:parentActivityName="com.android.camera.CameraActivity"
+ android:visibleToInstantApps="true">
+
+ <intent-filter>
+ <action android:name="android.media.action.VIDEO_CAMERA" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+
+ <intent-filter>
+ <action android:name="android.media.action.VIDEO_CAPTURE" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+
+ <intent-filter>
+ <action android:name="android.media.action.IMAGE_CAPTURE" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+
+ <intent-filter>
+ <action android:name="android.media.action.STILL_IMAGE_CAMERA" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+
+ <meta-data
+ android:name="android.support.PARENT_ACTIVITY"
+ android:value="com.android.camera.CameraActivity" />
</activity>
<activity
@@ -110,43 +133,6 @@
</intent-filter>
</activity-alias>
- <activity-alias
- android:name="com.android.camera.PhotoCamera"
- android:icon="@mipmap/ic_launcher_camera"
- android:label="@string/snapcam_app_name"
- android:launchMode="singleTop"
- android:targetActivity="com.android.camera.PermissionsActivity">
- <intent-filter>
- <action android:name="android.media.action.IMAGE_CAPTURE" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- <intent-filter>
- <action android:name="android.media.action.STILL_IMAGE_CAMERA" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity-alias>
-
- <!-- Video camera and capture use the Camcorder label and icon. -->
- <activity-alias
- android:name="com.android.camera.VideoCamera"
- android:icon="@mipmap/ic_launcher_video_camera"
- android:label="@string/video_camera_label"
- android:launchMode="singleTop"
- android:targetActivity="com.android.camera.PermissionsActivity">
- <intent-filter>
- <action android:name="android.media.action.VIDEO_CAMERA" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- <intent-filter>
- <action android:name="android.media.action.VIDEO_CAPTURE" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity-alias>
-
<activity
android:name="com.android.camera.SecureCameraActivity"
android:clearTaskOnLaunch="true"
diff --git a/jni/feature_mos/src/mosaic_renderer/SurfaceTextureRenderer.cpp b/jni/feature_mos/src/mosaic_renderer/SurfaceTextureRenderer.cpp
index 4725463f2..2a7a1c2a0 100644
--- a/jni/feature_mos/src/mosaic_renderer/SurfaceTextureRenderer.cpp
+++ b/jni/feature_mos/src/mosaic_renderer/SurfaceTextureRenderer.cpp
@@ -16,7 +16,9 @@
#include "SurfaceTextureRenderer.h"
+#include <string.h>
#include <GLES2/gl2ext.h>
+
const GLfloat g_vVertices[] = {
-1.f, -1.f, 0.0f, 1.0f, // Position 0
0.0f, 0.0f, // TexCoord 0
diff --git a/jni/feature_mos/src/mosaic_renderer/SurfaceTextureRenderer.h b/jni/feature_mos/src/mosaic_renderer/SurfaceTextureRenderer.h
index 9dbe9eb48..ea2b81ade 100644
--- a/jni/feature_mos/src/mosaic_renderer/SurfaceTextureRenderer.h
+++ b/jni/feature_mos/src/mosaic_renderer/SurfaceTextureRenderer.h
@@ -8,7 +8,6 @@
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
-#include <string.h>
class SurfaceTextureRenderer: public Renderer {
public:
diff --git a/proguard.flags b/proguard.flags
index 9d477262a..522c66444 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -3,6 +3,7 @@
#Avoid the library class dependency error
-dontwarn android.view.inputmethod.InputMethodManager
-dontwarn android.content.res.Resources
+-dontwarn com.android.internal.widget.ViewInfoStore$InfoRecord
# ctors of subclasses of CameraPreference are called with Java reflection.
-keep class * extends com.android.camera.CameraPreference {
@@ -57,3 +58,4 @@
}
-keep class android.renderscript.** { *; }
+
diff --git a/res/layout/one_ui_layout.xml b/res/layout/one_ui_layout.xml
index 5904b5b96..59e31b95d 100755..100644
--- a/res/layout/one_ui_layout.xml
+++ b/res/layout/one_ui_layout.xml
@@ -133,15 +133,48 @@
style="@style/OneUIMenuButton" />
<LinearLayout
+ android:id="@+id/remaining_photos"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:background="@android:color/transparent"
+ android:orientation="horizontal"
+ android:visibility="gone">
+
+ <TextView
+ android:id="@+id/remaining_photos_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:background="@android:color/transparent"
+ android:textColor="@android:color/white"
+ android:visibility="gone" />
+
+ <ImageView
+ android:id="@+id/remaining_photos_image"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@drawable/remaining_sheets"
+ android:visibility="gone" />
+ </LinearLayout>
+
+ <include layout="@layout/pro_mode_layout" />
+
+ <ImageView
+ android:id="@+id/promode_close_button"
+ android:layout_height="20dp"
+ android:layout_width="20dp"
+ android:src="@drawable/icon_x" />
+
+ <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/makeup_seekbar_layout"
android:visibility="gone">
<ImageView
- android:layout_width="12dp"
- android:layout_height="20dp"
- android:layout_marginLeft="23dp"
- android:layout_marginRight="23dp"
+ android:layout_width="30dp"
+ android:layout_height="40dp"
+ android:layout_marginLeft="20dp"
+ android:layout_marginRight="10dp"
+ android:src="@drawable/seekbar_hide"
android:id="@+id/seekbar_toggle">
</ImageView>
<RelativeLayout
@@ -149,8 +182,8 @@
android:layout_height="wrap_content"
android:id="@+id/seekbar_body">
<com.android.camera.ui.RotateLayout
- android:layout_width="24dp"
- android:layout_height="24dp"
+ android:layout_width="30dp"
+ android:layout_height="40dp"
android:layout_alignParentLeft="true"
android:id="@+id/makeup_low_text">
<TextView
@@ -163,18 +196,18 @@
</TextView>
</com.android.camera.ui.RotateLayout>
<SeekBar
- android:layout_width="220dp"
- android:layout_height="wrap_content"
- android:maxHeight="3dip"
- android:minHeight="1dip"
- android:layout_marginLeft="10dp"
- android:layout_toRightOf="@+id/makeup_low_text"
- android:progressDrawable="@drawable/beautify_progressbar_style"
- android:thumb="@drawable/ic_beautify_oval"
- android:id="@+id/makeup_seekbar"/>
+ android:layout_width="220dp"
+ android:layout_height="40dp"
+ android:maxHeight="3dip"
+ android:minHeight="1dip"
+ android:layout_marginLeft="10dp"
+ android:layout_toRightOf="@+id/makeup_low_text"
+ android:progressDrawable="@drawable/beautify_progressbar_style"
+ android:thumb="@drawable/ic_beautify_oval"
+ android:id="@+id/makeup_seekbar"/>
<com.android.camera.ui.RotateLayout
- android:layout_width="24dp"
- android:layout_height="24dp"
+ android:layout_width="30dp"
+ android:layout_height="40dp"
android:layout_toRightOf="@+id/makeup_seekbar"
android:layout_marginLeft="10dp"
android:id="@+id/makeup_high_text">
@@ -189,36 +222,4 @@
</com.android.camera.ui.RotateLayout>
</RelativeLayout>
</LinearLayout>
-
- <LinearLayout
- android:id="@+id/remaining_photos"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="@android:color/transparent"
- android:orientation="horizontal"
- android:visibility="gone">
-
- <TextView
- android:id="@+id/remaining_photos_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="@android:color/transparent"
- android:textColor="@android:color/white"
- android:visibility="gone" />
-
- <ImageView
- android:id="@+id/remaining_photos_image"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/remaining_sheets"
- android:visibility="gone" />
- </LinearLayout>
-
- <include layout="@layout/pro_mode_layout" />
-
- <ImageView
- android:id="@+id/promode_close_button"
- android:layout_height="20dp"
- android:layout_width="20dp"
- android:src="@drawable/icon_x" />
</com.android.camera.ui.OneUICameraControls>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 607e3b5ec..9b8290f13 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -85,8 +85,8 @@
<string name="unknown" msgid="564184550182858146">"未知"</string>
<string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"该内容已存储到本地,可以离线查看。"</string>
<string name="please_wait" msgid="1416313324505140068">"请稍候"</string>
- <string name="rendering_photo_sphere" msgid="3032858512989313215">"正在渲染 Photo Sphere 全景照片"</string>
- <string name="camera_error_title" msgid="6200558085072670067">"相机发生错误"</string>
+ <string name="rendering_photo_sphere">"正在渲染全景照片"</string>
+ <string name="camera_error_title">"相机故障"</string>
<string name="cannot_connect_camera" msgid="4311259792784598381">"无法连接到相机。"</string>
<string name="camera_disabled" msgid="6963443549010040595">"由于安全政策的限制,相机已被禁用。"</string>
<string name="wait" msgid="765601745709933047">"请稍候…"</string>
@@ -98,7 +98,7 @@
<string name="pref_camera_id_title" msgid="4680648115225411185">"选择摄像头"</string>
<string name="pref_camera_id_entry_back" msgid="6386943973628160510">"后置"</string>
<string name="pref_camera_id_entry_front" msgid="6233067010315787044">"前置"</string>
- <string name="pref_camera_recordlocation_title" msgid="3354956161456185749">"保存地理位置"</string>
+ <string name="pref_camera_recordlocation_title">"存储位置信息"</string>
<string name="pref_camera_location_label" msgid="8695441802378057719">"位置信息"</string>
<string name="pref_camera_timer_title" msgid="4728838281741571323">"倒计时器"</string>
<plurals name="pref_camera_timer_entry">
@@ -108,6 +108,7 @@
<!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
<skip />
<string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"倒计时过程中发出提示音"</string>
+ <string name="pref_camera_savepath_default">0</string>
<string name="setting_off" msgid="6782191065550276632">"关"</string>
<string name="setting_on" msgid="9086728135773197891">"开"</string>
<string name="pref_video_quality_title" msgid="5887153490982738588">"视频画质"</string>
@@ -117,10 +118,15 @@
<string name="pref_camera_settings_category" msgid="4274141528139077830">"相机设置"</string>
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"摄像机设置"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"照片尺寸"</string>
- <string name="pref_camera_picturesize_entry_square">方形 (1:1)</string>
- <string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"1300万像素"</string>
- <string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"800万像素"</string>
- <string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"500万像素"</string>
+ <string name="pref_camera_picturesize_entry_24mp">"24M 像素"</string>
+ <string name="pref_camera_picturesize_entry_21mp">"2100 万像素"</string>
+ <string name="pref_camera_picturesize_entry_16mp">"1600 万像素"</string>
+ <string name="pref_camera_picturesize_entry_16mp_wide">"1600 万像素 (16:9)"</string>
+ <string name="pref_camera_picturesize_entry_13mp">"1300万像素"</string>
+ <string name="pref_camera_picturesize_entry_12mp">"1200 万像素"</string>
+ <string name="pref_camera_picturesize_entry_8mp">"800万像素"</string>
+ <string name="pref_camera_picturesize_entry_square">"方形 (1:1)"</string>
+ <string name="pref_camera_picturesize_entry_5mp">"500万像素"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"400万像素 (16:9)"</string>
<string name="pref_camera_picturesize_entry_3mp" msgid="140799231761236311">"300万像素"</string>
<string name="pref_camera_picturesize_entry_2mp" msgid="450006451326859328">"200万像素"</string>
@@ -148,14 +154,14 @@
<string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"白平衡"</string>
<string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"白平衡"</string>
<string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"自动"</string>
- <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"白炽灯"</string>
- <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"晴天"</string>
- <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"日光灯"</string>
+ <string name="pref_camera_whitebalance_entry_incandescent">"白炽光"</string>
+ <string name="pref_camera_whitebalance_entry_daylight">"日光"</string>
+ <string name="pref_camera_whitebalance_entry_fluorescent">"荧光"</string>
<string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"阴天"</string>
<string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"自动"</string>
- <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"白炽灯"</string>
- <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"晴天"</string>
- <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"日光灯"</string>
+ <string name="pref_camera_whitebalance_label_incandescent">"白炽光"</string>
+ <string name="pref_camera_whitebalance_label_daylight">"日光"</string>
+ <string name="pref_camera_whitebalance_label_fluorescent">"荧光"</string>
<string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"阴天"</string>
<string name="pref_camera_scenemode_title" msgid="5709932164781367066">"取景模式"</string>
<string name="pref_camera_scenemode_entry_auto" msgid="9205644316260850379">"自动"</string>
@@ -165,12 +171,14 @@
<string name="pref_camera_scenemode_entry_turn_hdr_plus_off" msgid="2668770361856397834">"关闭 HDR+"</string>
<string name="pref_camera_scenemode_entry_turn_hdr_on" msgid="5232394324298489502">"开启 HDR"</string>
<string name="pref_camera_scenemode_entry_turn_hdr_off" msgid="7694606461440250206">"关闭 HDR"</string>
- <string name="pref_camera_scenemode_entry_action" msgid="5753183620959062015">"动作"</string>
- <string name="pref_camera_scenemode_entry_night" msgid="3468037364159759991">"夜间"</string>
+ <string name="pref_camera_scenemode_entry_action">"运动"</string>
+ <string name="pref_camera_scenemode_entry_night">"夜景"</string>
<string name="pref_camera_scenemode_entry_sunset" msgid="5884302914893488509">"日落"</string>
<string name="pref_camera_scenemode_entry_party" msgid="401232668169066415">"派对"</string>
+ <string name="pref_camera_scenemode_entry_refocus">"UbiFocus"</string>
+ <string name="pref_camera_scenemode_entry_optizoom">"光学变焦"</string>
<string name="pref_camera_scenemode_label_auto" msgid="2874586883608401615">"无"</string>
- <string name="pref_camera_scenemode_label_action" msgid="1822814017595414923">"动作"</string>
+ <string name="pref_camera_scenemode_label_action">"运动"</string>
<string name="pref_camera_scenemode_label_night" msgid="7764371228088101131">"夜景"</string>
<string name="pref_camera_scenemode_label_sunset" msgid="3443610538453611123">"日落"</string>
<string name="pref_camera_scenemode_label_party" msgid="917499272505930322">"派对"</string>
@@ -180,6 +188,13 @@
<string name="pref_camera_countdown_label_ten" msgid="4372650985906500604">"10秒"</string>
<string name="pref_camera_countdown_label_fifteen" msgid="8469955900530268867">"15秒"</string>
<string name="not_selectable_in_scene_mode" msgid="3260801086980522611">"无法在取景模式下选择。"</string>
+ <string name="advanced_capture_disable_continuous_shot">"启用高级拍摄将禁用连拍功能。"</string>
+ <string name="video_quality_4k_disable_SeeMore">"在 4K 视频期间无法启用查看详情。"</string>
+ <string name="disable_CDS_during_HighQualityNoiseReduction">"高品质降噪将禁用 CDS。"</string>
+ <string name="disable_TNR_during_HighQualityNoiseReduction">"高品质降噪将禁用 TNR。"</string>
+ <string name="disable_CDS_during_SeeMore">"查看详情将禁用 CDS。"</string>
+ <string name="disable_TNR_during_SeeMore">"查看详情将禁用 TNR。"</string>
+ <string name="disable_NR_during_SeeMore">"查看详情将禁用降噪。"</string>
<string name="pref_exposure_title" msgid="7525751789152582800">"曝光"</string>
<string name="pref_exposure_label" msgid="2604738602400261218">"曝光"</string>
<!-- no translation found for pref_camera_hdr_default (5054955236904902318) -->
@@ -190,7 +205,7 @@
<string name="pref_camera_id_label_back" msgid="1645608049757733858">"前置摄像头"</string>
<string name="pref_camera_id_label_front" msgid="349308803062874842">"后置摄像头"</string>
<string name="dialog_ok" msgid="774141340500181131">"确定"</string>
- <string name="spaceIsLow_content" product="default" msgid="4522771065344332702">"SD 卡空间不足。请更改画质设置,或删除部分图片或其他文件。"</string>
+ <string name="spaceIsLow_content" product="default">"SD 卡空间不足。请更改画质设置,或者删除部分图片或其他文件。"</string>
<string name="video_reach_size_limit" msgid="9196836111505731836">"已达文件大小上限。"</string>
<string name="pano_too_fast_prompt" msgid="2503148095578052177">"速度太快"</string>
<string name="pano_dialog_prepare_preview" msgid="4445235163599534263">"正在生成全景图"</string>
@@ -200,16 +215,16 @@
<string name="pano_dialog_waiting_previous" msgid="2646847402743245320">"正在等待上一幅全景图处理完毕"</string>
<string name="pano_review_saving_indication_str" msgid="4691771283450663293">"正在保存…"</string>
<string name="pano_review_rendering" msgid="2743087719999377155">"正在渲染全景图"</string>
- <string name="tap_to_focus" msgid="3519718196270593468">"触摸即可对焦。"</string>
+ <string name="tap_to_focus">"触摸对焦。"</string>
<string name="pref_video_effect_title" msgid="594570613431209010">"效果"</string>
<string name="effect_none" msgid="3102797925086872636">"无"</string>
- <string name="effect_goofy_face_squeeze" msgid="1362021544829311452">"哈哈镜"</string>
+ <string name="effect_goofy_face_squeeze">"面部哈哈镜"</string>
<string name="effect_goofy_face_big_eyes" msgid="9220121522816762649">"大眼睛"</string>
<string name="effect_goofy_face_big_mouth" msgid="2064008284599552683">"大嘴巴"</string>
<string name="effect_goofy_face_small_mouth" msgid="3105849596912069261">"小嘴巴"</string>
<string name="effect_goofy_face_big_nose" msgid="6936976307035428164">"大鼻子"</string>
<string name="effect_goofy_face_small_eyes" msgid="558042211252573238">"小眼睛"</string>
- <string name="effect_backdropper_space" msgid="9133825395915767627">"太空"</string>
+ <string name="effect_backdropper_space">"太空背景"</string>
<string name="effect_backdropper_sunset" msgid="7354053769863638757">"日落"</string>
<string name="effect_backdropper_gallery" msgid="2333888391153564920">"您的视频"</string>
<string name="video_snapshot_hint" msgid="2707403607250082339">"在录制视频过程中,触摸一下即可拍一张照片。"</string>
@@ -225,7 +240,7 @@
<string name="accessibility_switch_to_camera" msgid="4518394037216725274">"切换到拍照模式"</string>
<string name="accessibility_switch_to_video" msgid="8174781871592793967">"切换到视频模式"</string>
<string name="accessibility_switch_to_panorama" msgid="8322228859117808037">"切换到全景模式"</string>
- <string name="accessibility_switch_to_photo_sphere" msgid="5803217570370854725">"切换到 Photo Sphere 模式"</string>
+ <string name="accessibility_switch_to_photo_sphere">"切换到全景照片"</string>
<string name="accessibility_switch_to_gcam" msgid="7562625440767034695">"切换到高画质模式"</string>
<string name="accessibility_review_cancel" msgid="5462850829869569629">"取消"</string>
<string name="accessibility_review_ok" msgid="3486465319880320270">"完成"</string>
@@ -301,11 +316,11 @@
<string name="pref_camera_focusmode_entry_continuous">连续对焦</string>
<string name="pref_camera_scenemode_entry_portrait">"肖像"</string>
<string name="pref_camera_scenemode_entry_landscape">"风景"</string>
- <string name="pref_camera_scenemode_entry_night_portrait">"夜景肖像"</string>
+ <string name="pref_camera_scenemode_entry_night_portrait">"夜间人像"</string>
<string name="pref_camera_scenemode_entry_theatre">"剧院"</string>
<string name="pref_camera_scenemode_entry_beach">"海滩"</string>
<string name="pref_camera_scenemode_entry_snow">"雪景"</string>
- <string name="pref_camera_scenemode_entry_steadyphoto">"稳定"</string>
+ <string name="pref_camera_scenemode_entry_steadyphoto">"防抖"</string>
<string name="pref_camera_scenemode_entry_fireworks">"焰火"</string>
<string name="pref_camera_scenemode_entry_sports">"运动"</string>
<string name="pref_camera_scenemode_entry_candlelight">"烛光"</string>
@@ -409,11 +424,15 @@
<!-- Settings screen, Anti Banding title -->
<string name="pref_camera_antibanding_title">"反带效应"</string>
<!-- Settings screen, Anti Banding entries -->
- <string name="pref_camera_antibanding_entry_0">"关"</string>
- <string name="pref_camera_antibanding_entry_3">"自动"</string>
+ <string name="pref_camera_antibanding_entry_0">"关闭"</string>
+ <string name="pref_camera_antibanding_entry_1">"50 Hz"</string>
+ <string name="pref_camera_antibanding_entry_2">"60 Hz"</string>
+ <string name="pref_camera_antibanding_entry_3">"自动"</string>
+ <string name="pref_camera_filter_mode_entry_on">"开启"</string>
+ <string name="pref_camera_filter_mode_entry_off">"关闭"</string>
<!-- Settings screen, Select Iso title -->
- <string name="pref_camera_iso_title">"选择 ISO"</string>
+ <string name="pref_camera_iso_title">"ISO"</string>
<!-- Settings screen, ISO dialog radio button choices -->
<string name="pref_camera_iso_entry_auto">"自动"</string>
<string name="pref_camera_iso_entry_isodeblur">"ISO 自动(HJR)"</string>
@@ -483,13 +502,13 @@
<!-- error message -->
<string name="error_app_unsupported_hfr">"当前分辨率下不支持高帧率视频,如需高帧率请更改视频画质"</string>
<string name="error_app_unsupported_hfr_codec">"高帧率下仅支持H264视频编码格式,如需高帧率请更改视频编码"</string>
- <string name="error_app_unsupported">"此编码格式不支持当前的分辨率设置,请切换至H264"</string>
+ <string name="error_app_unsupported">"当前分辨率不支持录像"</string>
<string name="error_app_unsupported_raw">"RAW图片格式下不支持零秒快拍,已为您切换至JPEG格式"</string>
<string name="error_app_unsupported_hsr">当前格式下不支持HSR</string>
<!-- The message is shown in toast when the app encounters an unsupported selection for HFR/HSR mode -->
<string name="error_app_unsupported_hfr_selection">HFR/HSR不支持DIS/延时拍摄/HDR模式</string>
<!-- The message is shown in toast when the app encounters an unsupported resolution for DIS mode -->
- <string name="error_app_unsupported_dis">DIS不支持当前的分辨率设置</string>
+ <string name="error_app_unsupported_dis">"图像防抖不支持的视频分辨率"</string>
<string name="pref_camera_longshot_title">连拍</string>
<string name="msg_cancel_longshot_for_limited_memory">内存不足, 取消连拍</string>
@@ -502,7 +521,7 @@
<string name="HDR_disable_continuous_shot">"开启HDR将禁用连拍功能"</string>
<!-- Toast showing non-supported functionality for flash in AE bracket -->
- <string name="flash_aebracket_message">闪光灯不支持自动包围曝光模式</string>
+ <string name="flash_aebracket_message">自动曝光模式下不支持闪光灯</string>
<string name="pref_camera_ae_bracket_hdr_title">自动包围曝光</string>
@@ -545,8 +564,8 @@
<string name="text_tsmakeup_alert_continue">继续</string>
<string name="text_tsmakeup_alert_quit">退出</string>
- <string name="all_in_focus">全焦</string>
- <string name="refocus_toast">点击此处可重新对焦照片</string>
+ <string name="all_in_focus">"全景对焦"</string>
+ <string name="refocus_toast">"要对上一张照片重新对焦,点按此处"</string>
<string name="refocus_prompt_title">UbiFocus</string>
<string name="refocus_prompt_message">开启UbiFocus模式后,相机会连续拍摄5张照片并将其合成一张全焦照片。您还可以事后重新对焦。</string>
@@ -631,12 +650,146 @@
<string name="pref_camera_tnr_entry_enable">启用</string>
<!-- Settings screen, Picture quality dialog radio button choices -->
- <string name="pref_camera_jpegquality_entry_0">低</string>
- <string name="pref_camera_jpegquality_entry_1">标准</string>
- <string name="pref_camera_jpegquality_entry_2">高</string>
-
+ <string name="pref_camera_jpegquality_entry_0">"低画质"</string>
+ <string name="pref_camera_jpegquality_entry_1">"中画质"</string>
+ <string name="pref_camera_jpegquality_entry_2">"高画质"</string>
<!-- Setting screen, shutter sound choices -->
<string name="pref_camera_shuttersound_title">快门声音</string>
<string name="pref_camera_shuttersound_entry_enable">开</string>
<string name="pref_camera_shuttersound_entry_disable">关</string>
+
+ <!-- Settings screen, Power Mode title -->
+ <string name="pref_camera_powermode_title">"电源模式"</string>
+
+ <!-- Settings screen, Video encoder dialog title -->
+ <string name="pref_camera_videoencoder_dialogtitle">"视频编码器"</string>
+
+ <!-- Settings screen, Skin Tone Enhancement radio button choices -->
+ <string name="pref_camera_skinToneEnhancement_entry_enable">"启用"</string>
+ <string name="pref_camera_skinToneEnhancement_entry_disable">"停用"</string>
+
+ <!-- Settings screen, Selectable Zone Af dialog radio button choices -->
+ <string name="pref_camera_advanced_feature_entry_ubifocus">"Ubi 对焦"</string>
+ <string name="pref_camera_advanced_feature_entry_refocus">"重新聚焦"</string>
+ <string name="pref_camera_advanced_feature_entry_chromaflash">"Chroma Flash"</string>
+ <string name="pref_camera_advanced_feature_entry_optizoom">"光学变焦"</string>
+ <string name="pref_camera_advanced_feature_entry_FSSR">"FSSR"</string>
+ <string name="pref_camera_advanced_feature_entry_trueportrait">"真实肖像"</string>
+ <string name="pref_camera_advanced_feature_entry_multi_touch_focus">"多点触控对焦"</string>
+ <string name="pref_camera_advanced_feature_entry_stillmore">"还有更多"</string>
+
+ <!-- Instant Capture entry -->
+ <string name="pref_camera_instant_capture_title" translatable="true">"即时捕获"</string>
+ <string name="pref_camera_instant_capture_entry_enable" translatable="true">"启用"</string>
+ <string name="pref_camera_instant_capture_entry_disable" translatable="true">"停用"</string>
+
+ <!-- Settings screen, Selfie Flash Detection -->
+ <string name="pref_selfie_flash_title">"自拍闪光灯"</string>
+ <!-- Settings menu, Selfie Flash choices -->
+ <string name="pref_selfie_flash_entry_off">"关闭"</string>
+ <string name="pref_selfie_flash_entry_on">"开启"</string>
+
+ <!-- The message is shown in dialog when the app encounters an unsupported video profile-->
+ <string name="error_app_unsupported_profile">"不支持的视频配置文件"</string>
+
+ <string name="err_app_unsupport_ae_bracket_code">"当前应用程序不支持自动曝光"</string>
+ <!-- The messsage shown if user selects a snapshot resolution lower than the current video size. -->
+ <string name="snapshot_lower_than_video">"视频快照大小小于视频大小。最大为视频大小。请选择高于或等于当前视频大小的分辨率。 "</string>
+ <!-- The messsage shown if user selects a snapshot resolution in low power mode. -->
+ <string name="snapshotsize_low_powermode">"我们不支持低电耗模式下的照片分辨率。将拍摄视频大小快照。请针对照片大小选择高电耗模式。 "</string>
+ <!-- The messsage shown if user tries to take snapshot during D1/QCIF resolution. -->
+ <string name="snapshot_qcif_and_d1">"此分辨率仅支持视频大小快照。 "</string>
+
+ <!-- Settings screen, Select See More title -->
+ <string name="pref_camera_noise_reduction_title">"降噪"</string>
+ <!-- Settings screen, see more radio button choices -->
+ <string name="pref_camera_noise_reduction_entry_off">"关闭"</string>
+ <string name="pref_camera_noise_reduction_entry_fast">"快"</string>
+ <string name="pref_camera_noise_reduction_entry_high_quality">"高品质"</string>
+
+ <string name="pref_camera_filter_mode_title">"色效应模式"</string>
+ <!-- Settings screen, Color effect dialog radio button choices -->
+
+ <!-- Select IS title -->
+ <string name="pref_camera_dis_title">"图像防抖"</string>
+
+ <!-- Select Face Recognition title -->
+ <string name="pref_camera_facerc_title">"人脸识别"</string>
+
+ <!-- Face Recognition choices -->
+ <string name="pref_camera_facerc_entry_off">"关闭"</string>
+ <string name="pref_camera_facerc_entry_on">"开启"</string>
+
+ <!-- Settings screen, picture format dialog radio button choices -->
+ <string name="pref_camera_picture_format_entry_jpeg">Jpeg</string>
+ <string name="pref_camera_picture_format_entry_raw">"原始"</string>
+
+ <!-- Settings screen, Select Auto Scene Detection -->
+ <string name="pref_camera_scenedetect_title">"自动取景检测"</string>
+ <!-- Settings menu, auto scene detection choices -->
+ <string name="pref_camera_scenedetect_entry_off">"关闭"</string>
+ <!-- Scene detection set to on - supports backlight and snow cloudy detection. -->
+ <string name="pref_camera_scenedetect_entry_on">"开启"</string>
+ <!-- Toast showing error if invalid size selected for time lapse [CHAR LIMIT=65] -->
+ <string name="time_lapse_error">"延时录制的视频大小无效。"</string>
+
+ <!-- Settings screen, Selectable HDR mode title -->
+ <string name="pref_camera_hdr_mode_title">"HDR 模式"</string>
+ <!-- Settings screen, Selectable HDR mode radio button choices -->
+ <string name="pref_camera_hdr_mode_entry_sensor">"传感器 HDR"</string>
+ <string name="pref_camera_hdr_mode_entry_multi_frame">"多帧 HDR"</string>
+
+ <!-- Settings screen, Selectable HDR need 1x frame default value -->
+ <string name="pref_camera_hdr_need_1x_default">@string/pref_hdr_need_1x_value_true</string>
+
+ <!-- Settings screen, Selectable HDR need 1x frame radio button choices -->
+ <string name="pref_camera_hdr_need_1x_entry_false">@string/setting_off</string>
+ <string name="pref_camera_hdr_need_1x_entry_true">@string/setting_on</string>
+
+ <!--Menu, video rotation label-->
+ <string name="pref_camera_video_rotation_label">"视频旋转"</string>
+
+ <!-- Continous shot enable message -->
+ <string name="longshot_enable_message">"连拍模式下不支持高级功能"</string>
+ <!-- Advance features enable message -->
+ <string name="advance_feature_enable_msg">"启用高级功能时不支持连拍"</string>
+
+ <string name="text_tsmakeup_beautify_toast" translatable="true">"美化"</string>
+
+ <string name="mute_button_desc">"静音按钮"</string>
+ <!-- Help menu strings -->
+ <string name="help_menu_ok" translatable="true">"确定"</string>
+ <string name="help_menu_scene_mode_1" translatable="true">"选择"</string>
+ <string name="help_menu_scene_mode_2" translatable="true">"取景模式"</string>
+ <string name="help_menu_scene_mode_3" translatable="true">"以提升图片质量"</string>
+ <string name="help_menu_color_filter_1" translatable="true">"应用彩色"</string>
+ <string name="help_menu_color_filter_2" translatable="true">"滤镜"</string>
+ <string name="help_menu_color_filter_3" translatable="true">"以"</string>
+ <string name="help_menu_color_filter_4" translatable="true">"增强图片效果"</string>
+ <string name="help_menu_beautify_1" translatable="true">"增强肖像"</string>
+ <string name="help_menu_beautify_2" translatable="true">"(通过"</string>
+ <string name="help_menu_beautify_3" translatable="true">"美化功能)"</string>
+ <string name="help_menu_switcher_1" translatable="true">"切换"</string>
+ <string name="help_menu_switcher_2" translatable="true">"相机模式、视频模式"</string>
+ <string name="help_menu_switcher_3" translatable="true">"和全景模式"</string>
+
+ <string-array name="pref_camera2_timer_entries">
+ <item>"关闭"</item>
+ <item>"2秒"</item>
+ <item>"5秒"</item>
+ <item>"10秒"</item>
+ </string-array>
+ <string name="settings_title">"设置"</string>
+ <string name="perf_camera2_version_info" translatable="true">"版本信息"</string>
+ <string name="perf_camera2_preferences_category_general" translatable="true">"通用"</string>
+ <string name="perf_camera2_preferences_category_photo" translatable="true">"拍照"</string>
+ <string name="perf_camera2_preferences_category_video" translatable="true">"录像"</string>
+ <string name="perf_camera2_preferences_category_system" translatable="true">System</string>
+ <string name="pref_camera2_category_system">其他</string>
+ <string name="pref_camera2_restore_default">"恢复"</string>
+ <string name="pref_camera2_restore_default_hint">"相机将恢复到出厂设置"</string>
+
+ <string name="makeup_ui_ok_button" translatable="true">确定</string>
+ <string name="makeup_seekbar_low" translatable="true">低</string>
+ <string name="makeup_seekbar_high" translatable="true">高</string>
</resources>
diff --git a/res/values/camera2arrays.xml b/res/values/camera2arrays.xml
index b6cf25f2e..7f4b0da26 100755..100644
--- a/res/values/camera2arrays.xml
+++ b/res/values/camera2arrays.xml
@@ -431,7 +431,7 @@
<item>@string/pref_camera_picturesize_entry_16mp_wide</item>
<item>@string/pref_camera_picturesize_entry_13mp</item>
<item>@string/pref_camera_picturesize_entry_12mp</item>
- <item>@string/pref_camera_picturesize_entry_8mp</item>
+ <item>@string/pref_camera_picturesize_entry_8mp_wide</item>
<item>@string/pref_camera_picturesize_entry_8mp</item>
<item>@string/pref_camera_picturesize_entry_square</item>
<item>@string/pref_camera_picturesize_entry_5mp</item>
diff --git a/res/values/qcomstrings.xml b/res/values/qcomstrings.xml
index 8c77a062b..c6e4301fc 100644
--- a/res/values/qcomstrings.xml
+++ b/res/values/qcomstrings.xml
@@ -533,12 +533,12 @@
<!-- Select IS title -->
<string name="pref_camera_dis_title">Image Stabilization</string>
- <string name="pref_camera_dis_default">disable</string>
<!-- DIS choices -->
<string name="pref_camera_dis_entry_off">Off</string>
<string name="pref_camera_dis_entry_on">On</string>
+ <string name="pref_camera_dis_default">disable</string>
<string name="pref_camera_dis_value_disable">disable</string>
<string name="pref_camera_dis_value_enable">enable</string>
@@ -1006,9 +1006,9 @@
<string name="pref_camera2_noise_reduction_default" translatable="false">off</string>
<string name="pref_camera2_noise_reduction_title" translatable="true">Noise Reduction</string>
- <string name="pref_camera2_noise_reduction_entry_off" translatable="true">Off</string>
- <string name="pref_camera2_noise_reduction_entry_fast" translatable="true">Fast</string>
- <string name="pref_camera2_noise_reduction_entry_high_quality" translatable="true">High Quality</string>
+ <string name="pref_camera2_noise_reduction_entry_off" translatable="true">@string/pref_camera_noise_reduction_entry_off</string>
+ <string name="pref_camera2_noise_reduction_entry_fast" translatable="true">@string/pref_camera_noise_reduction_entry_fast</string>
+ <string name="pref_camera2_noise_reduction_entry_high_quality" translatable="true">@string/pref_camera_noise_reduction_entry_high_quality</string>
<string name="pref_camera2_noise_reduction_value_off" translatable="false">off</string>
<string name="pref_camera2_noise_reduction_value_fast" translatable="false">fast</string>
@@ -1037,9 +1037,9 @@
<string name="pref_camera2_shutter_sound_value_on" translatable="true">on</string>
<string name="pref_camera2_shutter_sound_value_off" translatable="true">off</string>
- <string name="pref_camera2_shutter_sound_entry_on" translatable="true">On</string>
- <string name="pref_camera2_shutter_sound_entry_off" translatable="true">Off</string>
- <string name="pref_camera2_shutter_sound_title" translatable="true">Shutter Sound</string>
+ <string name="pref_camera2_shutter_sound_entry_on" translatable="true">@string/pref_camera_shuttersound_entry_enable</string>
+ <string name="pref_camera2_shutter_sound_entry_off" translatable="true">@string/pref_camera_shuttersound_entry_disable</string>
+ <string name="pref_camera2_shutter_sound_title" translatable="true">@string/pref_camera_shuttersound_title</string>
<string name="pref_camera2_timer_entry_off" translatable="true">Off</string>
<string name="pref_camera2_timer_entry_2sec" translatable="true">2 seconds</string>
@@ -1169,12 +1169,8 @@
<string name="pref_camera2_bsgc_entry_value_enable" translatable="false">enable</string>
<string name="pref_camera2_bsgc_entry_value_disable" translatable="false">disable</string>
-
- <string name="pref_camera2_picturesize_default" translatable="false">3840x2160</string>
- <string name="pref_camera2_video_quality_default" translatable="false">1920x1080</string>
-
<string name="pref_camera2_zsl_title" translatable="true">ZSL</string>
- <string name="pref_camera2_zsl_default" translatable="false">@string/pref_camera2_zsl_entryvalue_disable</string>
+ <string name="pref_camera2_zsl_default" translatable="false">@string/pref_camera2_zsl_entryvalue_app_zsl</string>
<string name="pref_camera2_zsl_entry_disable" translatable="true">Off</string>
<string name="pref_camera2_zsl_entry_app_zsl" translatable="true">APP-ZSL</string>
<string name="pref_camera2_zsl_entry_hal_zsl" translatable="true">HAL-ZSL</string>
@@ -1182,5 +1178,7 @@
<string name="pref_camera2_zsl_entryvalue_app_zsl" translatable="false">app-zsl</string>
<string name="pref_camera2_zsl_entryvalue_hal_zsl" translatable="false">hal-zsl</string>
+ <string name="pref_camera2_picturesize_default" translatable="false">3840x2160</string>
+ <string name="pref_camera2_video_quality_default" translatable="false">1920x1080</string>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 0b2310439..42ad07272 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -296,6 +296,7 @@
<string name="pref_camera_picturesize_entry_12mp">12M pixels</string>
<!-- Settings screen, dialog choice for 8 megapixels picture size [CHAR LIMIT=20] -->
<string name="pref_camera_picturesize_entry_8mp">8M pixels</string>
+ <string name="pref_camera_picturesize_entry_8mp_wide">8M pixels (16:9)</string>
<!-- Settings screen, dialog choice for square picture size [CHAR LIMIT=20] -->
<string name="pref_camera_picturesize_entry_square">Square (1:1)</string>
<!-- Settings screen, dialog choice for 5 megapixels picture size [CHAR LIMIT=20] -->
diff --git a/res/xml/setting_menu_preferences.xml b/res/xml/setting_menu_preferences.xml
index 48b6f99d3..cb7b3897a 100755..100644
--- a/res/xml/setting_menu_preferences.xml
+++ b/res/xml/setting_menu_preferences.xml
@@ -273,7 +273,7 @@
android:key="version_info"
android:layout="@layout/preference"
android:summary="Version"
- android:title="Version Info" />
+ android:title="@string/perf_camera2_version_info" />
</PreferenceCategory>
<PreferenceCategory
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index ea4bc03ba..f679e26c3 100755..100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -639,14 +639,8 @@ public class CameraActivity extends Activity
View decorView = getWindow().getDecorView();
int currentSystemUIVisibility = decorView.getSystemUiVisibility();
- boolean hidePreview = SystemProperties.getBoolean("camera.ui.no_navigation_bar", false);
int systemUIVisibility = DEFAULT_SYSTEM_UI_VISIBILITY;
int systemUINotVisible = View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN;
- if (hidePreview) {
- systemUIVisibility |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
- systemUINotVisible |= (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
- }
int newSystemUIVisibility = systemUIVisibility
| (visible ? View.SYSTEM_UI_FLAG_VISIBLE : systemUINotVisible);
@@ -1651,7 +1645,8 @@ public class CameraActivity extends Activity
SETTING_LIST_WIDTH_1 = lower / 2 + offset;
SETTING_LIST_WIDTH_2 = lower / 2 - offset;
registerSDcardMountedReceiver();
- mAutoTestEnabled = SystemProperties.getBoolean("camera.ui.auto_test", false);
+
+ mAutoTestEnabled = PersistUtil.isAutoTestEnabled();
if (mAutoTestEnabled) {
registerAutoTestReceiver();
diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java
index e0141ed11..541c65704 100644
--- a/src/com/android/camera/CameraSettings.java
+++ b/src/com/android/camera/CameraSettings.java
@@ -38,6 +38,7 @@ import android.util.Log;
import com.android.camera.util.ApiHelper;
import com.android.camera.util.CameraUtil;
import com.android.camera.util.GcamHelper;
+import com.android.camera.util.PersistUtil;
import org.codeaurora.snapcam.R;
import org.codeaurora.snapcam.wrapper.CamcorderProfileWrapper;
import org.codeaurora.snapcam.wrapper.ParametersWrapper;
@@ -338,6 +339,10 @@ public class CameraSettings {
VIDEO_ENCODER_BITRATE.put("1280x720:240", 72000000);
VIDEO_ENCODER_BITRATE.put("720:480:120", 5200000);
+ //resolution, fps and encoder type
+ VIDEO_ENCODER_BITRATE.put("3840x2160:60:" + MediaRecorder.VideoEncoder.H264, 67200000);
+ VIDEO_ENCODER_BITRATE.put("3840x2160:60:" + MediaRecorder.VideoEncoder.HEVC, 50400000);
+
}
// Following maps help find a corresponding time-lapse or high-speed quality
@@ -977,6 +982,8 @@ public class CameraSettings {
supportedAdvancedFeatures)) {
removePreference(group, chromaFlash.getKey());
}
+ //remove chromaFlash
+ removePreference(group, chromaFlash.getKey());
}
if (sceneMode != null) {
@@ -1037,7 +1044,7 @@ public class CameraSettings {
removePreference(group, cameraHdrPlus.getKey());
}
- if (SystemProperties.getBoolean("persist.env.camera.saveinsd", false)) {
+ if (PersistUtil.isSaveInSdEnabled()) {
final String CAMERA_SAVEPATH_SDCARD = "1";
final int CAMERA_SAVEPATH_SDCARD_IDX = 1;
final int CAMERA_SAVEPATH_PHONE_IDX = 0;
diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java
index 46a822e67..5b029df86 100644
--- a/src/com/android/camera/CaptureModule.java
+++ b/src/com/android/camera/CaptureModule.java
@@ -89,7 +89,6 @@ import android.graphics.Canvas;
import android.graphics.Color;
import android.util.AttributeSet;
import android.graphics.Bitmap;
-import android.graphics.YuvImage;
import com.android.camera.exif.ExifInterface;
import com.android.camera.imageprocessor.filter.BlurbusterFilter;
@@ -1028,7 +1027,6 @@ public class CaptureModule implements CameraModule, PhotoController,
if(id == getMainCameraId()) {
mCurrentSession = cameraCaptureSession;
}
-
initializePreviewConfiguration(id);
setDisplayOrientation();
updateFaceDetection();
@@ -1047,17 +1045,18 @@ public class CaptureModule implements CameraModule, PhotoController,
mCaptureSession[id].setRepeatingRequest(mPreviewRequestBuilder[id]
.build(), mCaptureCallback, mCameraHandler);
}
+
if (isClearSightOn()) {
ClearSightImageProcessor.getInstance().onCaptureSessionConfigured(id == BAYER_ID, cameraCaptureSession);
} else if (mChosenImageFormat == ImageFormat.PRIVATE && id == getMainCameraId()) {
mPostProcessor.onSessionConfigured(mCameraDevice[id], mCaptureSession[id]);
}
+
} catch (CameraAccessException e) {
e.printStackTrace();
} catch(IllegalStateException e) {
e.printStackTrace();
}
-
}
@Override
@@ -1271,12 +1270,11 @@ public class CaptureModule implements CameraModule, PhotoController,
mJpegImageData = data;
}
- public void showCapturedReview(final byte[] jpegData, final int orientation,
- final boolean mirror) {
+ public void showCapturedReview(final byte[] jpegData, final int orientation) {
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
- mUI.showCapturedImageForReview(jpegData, orientation, mirror);
+ mUI.showCapturedImageForReview(jpegData, orientation);
}
});
}
@@ -1309,11 +1307,7 @@ public class CaptureModule implements CameraModule, PhotoController,
if (takeZSLPicture(BAYER_ID)) {
return;
}
-/* take picture directly for now*/
- captureStillPicture(BAYER_ID);
- mState[BAYER_ID] = STATE_PICTURE_TAKEN;
-
-//todo lockFocus(BAYER_ID);
+ lockFocus(BAYER_ID);
break;
case MONO_MODE:
lockFocus(MONO_ID);
@@ -1323,11 +1317,7 @@ public class CaptureModule implements CameraModule, PhotoController,
if (takeZSLPicture(FRONT_ID)) {
return;
}
-/* take picture directly for now*/
- captureStillPicture(FRONT_ID);
- mState[FRONT_ID] = STATE_PICTURE_TAKEN;
-
-//todo lockFocus(FRONT_ID);
+ lockFocus(FRONT_ID);
}
}
}
@@ -1480,173 +1470,175 @@ public class CaptureModule implements CameraModule, PhotoController,
Log.d(TAG, "captureStillPicture " + id);
mJpegImageData = null;
mIsRefocus = false;
- CameraCaptureSession.CaptureCallback captureCallback = new CameraCaptureSession.CaptureCallback() {
-
- @Override
- public void onCaptureCompleted(CameraCaptureSession session,
- CaptureRequest request,
- TotalCaptureResult result) {
- Log.d(TAG, "captureStillPicture onCaptureCompleted: " + id);
- }
-
- @Override
- public void onCaptureFailed(CameraCaptureSession session,
- CaptureRequest request,
- CaptureFailure result) {
- Log.d(TAG, "captureStillPicture onCaptureFailed: " + id);
- }
-
- @Override
- public void onCaptureSequenceCompleted(CameraCaptureSession session, int
- sequenceId, long frameNumber) {
- Log.d(TAG, "captureStillPicture onCaptureSequenceCompleted: " + id);
- unlockFocus(id);
- }
- };
try {
if (null == mActivity || null == mCameraDevice[id]) {
warningToast("Camera is not ready yet to take a picture.");
return;
}
- final boolean csEnabled = isClearSightOn();
- CaptureRequest.Builder captureBuilder;
+ CaptureRequest.Builder captureBuilder =
+ mCameraDevice[id].createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
- if(csEnabled) {
- captureBuilder = ClearSightImageProcessor.getInstance().createCaptureRequest(mCameraDevice[id]);
- } else {
- captureBuilder = mCameraDevice[id].createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
- }
if(mSettingsManager.isZSLInHALEnabled()) {
- Log.d(TAG, "CONTROL_ENABLE_ZSL is enabled.");
captureBuilder.set(CaptureRequest.CONTROL_ENABLE_ZSL, true);
- } else {
- Log.d(TAG, "CONTROL_ENABLE_ZSL is disabled.");
+ }else{
captureBuilder.set(CaptureRequest.CONTROL_ENABLE_ZSL, false);
}
-/*todo Location location = mLocationManager.getCurrentLocation();
- if(location != null) {
- // make copy so that we don't alter the saved location since we may re-use it
- location = new Location(location);
- // workaround for Google bug. Need to convert timestamp from ms -> sec
- location.setTime(location.getTime()/1000);
- captureBuilder.set(CaptureRequest.JPEG_GPS_LOCATION, location);
- Log.d(TAG, "captureStillPicture gps: " + location.toString());
- } else {
- Log.d(TAG, "captureStillPicture no location - getRecordLocation: " + getRecordLocation());
- }
- captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, CameraUtil.getJpegRotation(id, mOrientation));
- captureBuilder.set(CaptureRequest.JPEG_THUMBNAIL_SIZE, mPictureThumbSize);
- captureBuilder.set(CaptureRequest.JPEG_THUMBNAIL_QUALITY, (byte)80);
-*/
- captureBuilder.set(CaptureRequest.CONTROL_MODE, CaptureRequest.CONTROL_MODE_AUTO);
+ applySettingsForJpegInformation(captureBuilder, id);
addPreviewSurface(captureBuilder, null, id);
- captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, mControlAFMode);
- captureBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.CONTROL_AF_TRIGGER_IDLE);
- VendorTagUtil.setCdsMode(captureBuilder, 2); // CDS 0-OFF, 1-ON, 2-AUTO
+ VendorTagUtil.setCdsMode(captureBuilder, 2);// CDS 0-OFF, 1-ON, 2-AUTO
applySettingsForCapture(captureBuilder, id);
- if(csEnabled) {
- applySettingsForLockExposure(captureBuilder, id);
- checkAndPlayShutterSound(id);
- ClearSightImageProcessor.getInstance().capture(
- id==BAYER_ID, mCaptureSession[id], captureBuilder, mCaptureCallbackHandler);
+ if(isClearSightOn()) {
+ captureStillPictureForClearSight(id);
} else if(id == getMainCameraId() && mPostProcessor.isFilterOn()) { // Case of post filtering
- applySettingsForLockExposure(captureBuilder, id);
- checkAndPlayShutterSound(id);
- mCaptureSession[id].stopRepeating();
- captureBuilder.addTarget(mImageReader[id].getSurface());
- if (mSaveRaw) {
- captureBuilder.addTarget(mRawImageReader[id].getSurface());
- }
- mPostProcessor.onStartCapturing();
- if(mPostProcessor.isManualMode()) {
- mPostProcessor.manualCapture(captureBuilder, mCaptureSession[id], mCaptureCallbackHandler);
- } else {
- List<CaptureRequest> captureList = mPostProcessor.setRequiredImages(captureBuilder);
- mCaptureSession[id].captureBurst(captureList, mPostProcessor.getCaptureCallback(), mCaptureCallbackHandler);
- }
+ captureStillPictureForFilter(captureBuilder, id);
} else {
captureBuilder.addTarget(mImageReader[id].getSurface());
if (mSaveRaw) {
captureBuilder.addTarget(mRawImageReader[id].getSurface());
}
mCaptureSession[id].stopRepeating();
-
if (mLongshotActive) {
- Log.d(TAG, "captureStillPicture capture longshot " + id);
- List<CaptureRequest> burstList = new ArrayList<>();
- for (int i = 0; i < PersistUtil.getLongshotShotLimit(); i++) {
- burstList.add(captureBuilder.build());
- }
- mCaptureSession[id].captureBurst(burstList, new
- CameraCaptureSession.CaptureCallback() {
+ captureStillPictureForLongshot(captureBuilder, id);
+ } else {
+ captureStillPictureForCommon(captureBuilder, id);
+ }
+ }
+ } catch (CameraAccessException e) {
+ Log.d(TAG, "Capture still picture has failed");
+ e.printStackTrace();
+ }
+ }
- @Override
- public void onCaptureCompleted(CameraCaptureSession session,
- CaptureRequest request,
- TotalCaptureResult result) {
- Log.d(TAG, "captureStillPicture Longshot onCaptureCompleted: " + id);
- if (mLongshotActive) {
- checkAndPlayShutterSound(id);
- mActivity.runOnUiThread(new Runnable() {
- @Override
- public void run() {
- mUI.doShutterAnimation();
- }
- });
- }
- }
+ private void captureStillPictureForClearSight(int id) throws CameraAccessException{
+ CaptureRequest.Builder captureBuilder =
+ ClearSightImageProcessor.getInstance().createCaptureRequest(mCameraDevice[id]);
+
+ if(mSettingsManager.isZSLInHALEnabled()) {
+ captureBuilder.set(CaptureRequest.CONTROL_ENABLE_ZSL, true);
+ }else{
+ captureBuilder.set(CaptureRequest.CONTROL_ENABLE_ZSL, false);
+ }
+
+ applySettingsForJpegInformation(captureBuilder, id);
+ addPreviewSurface(captureBuilder, null, id);
+ VendorTagUtil.setCdsMode(captureBuilder, 2); // CDS 0-OFF, 1-ON, 2-AUTO
+ applySettingsForCapture(captureBuilder, id);
+ applySettingsForLockExposure(captureBuilder, id);
+ checkAndPlayShutterSound(id);
+ ClearSightImageProcessor.getInstance().capture(
+ id==BAYER_ID, mCaptureSession[id], captureBuilder, mCaptureCallbackHandler);
+ }
+
+ private void captureStillPictureForFilter(CaptureRequest.Builder captureBuilder, int id) throws CameraAccessException{
+ applySettingsForLockExposure(captureBuilder, id);
+ checkAndPlayShutterSound(id);
+ mCaptureSession[id].stopRepeating();
+ captureBuilder.addTarget(mImageReader[id].getSurface());
+ if (mSaveRaw) {
+ captureBuilder.addTarget(mRawImageReader[id].getSurface());
+ }
+ mPostProcessor.onStartCapturing();
+ if(mPostProcessor.isManualMode()) {
+ mPostProcessor.manualCapture(captureBuilder, mCaptureSession[id], mCaptureCallbackHandler);
+ } else {
+ List<CaptureRequest> captureList = mPostProcessor.setRequiredImages(captureBuilder);
+ mCaptureSession[id].captureBurst(captureList, mPostProcessor.getCaptureCallback(), mCaptureCallbackHandler);
+ }
+ }
+
+ private void captureStillPictureForLongshot(CaptureRequest.Builder captureBuilder, int id) throws CameraAccessException{
+ Log.d(TAG, "captureStillPictureForLongshot " + id);
+ List<CaptureRequest> burstList = new ArrayList<>();
+ for (int i = 0; i < PersistUtil.getLongshotShotLimit(); i++) {
+ burstList.add(captureBuilder.build());
+ }
+ mCaptureSession[id].captureBurst(burstList, new
+ CameraCaptureSession.CaptureCallback() {
+ @Override
+ public void onCaptureCompleted(CameraCaptureSession session,
+ CaptureRequest request,
+ TotalCaptureResult result) {
+ Log.d(TAG, "captureStillPictureForLongshot onCaptureCompleted: " + id);
+ if (mLongshotActive) {
+ checkAndPlayShutterSound(id);
+ mActivity.runOnUiThread(new Runnable() {
@Override
- public void onCaptureFailed(CameraCaptureSession session,
- CaptureRequest request,
- CaptureFailure result) {
- Log.d(TAG, "captureStillPicture Longshot onCaptureFailed: " + id);
- if (mLongshotActive) {
- mActivity.runOnUiThread(new Runnable() {
- @Override
- public void run() {
- mUI.doShutterAnimation();
- }
- });
- }
+ public void run() {
+ mUI.doShutterAnimation();
}
+ });
+ }
+ }
+ @Override
+ public void onCaptureFailed(CameraCaptureSession session,
+ CaptureRequest request,
+ CaptureFailure result) {
+ Log.d(TAG, "captureStillPictureForLongshot onCaptureFailed: " + id);
+ if (mLongshotActive) {
+ mActivity.runOnUiThread(new Runnable() {
@Override
- public void onCaptureSequenceCompleted(CameraCaptureSession session, int
- sequenceId, long frameNumber) {
- Log.d(TAG, "captureStillPicture Longshot onCaptureSequenceCompleted: " + id);
- mLongshotActive = false;
- unlockFocus(id);
+ public void run() {
+ mUI.doShutterAnimation();
}
- }, mCaptureCallbackHandler);
- mActivity.runOnUiThread(new Runnable() {
- @Override
- public void run() {
- mUI.enableVideo(false);
+ });
}
- });
-
- } else {
- checkAndPlayShutterSound(id);
- if(isMpoOn()) {
- mCaptureStartTime = System.currentTimeMillis();
- mMpoSaveHandler.obtainMessage(MpoSaveHandler.MSG_CONFIGURE,
- Long.valueOf(mCaptureStartTime)).sendToTarget();
}
-/*todo if(mChosenImageFormat == ImageFormat.YUV_420_888 || mChosenImageFormat == ImageFormat.PRIVATE) { // Case of ZSL, FrameFilter, SelfieMirror
- mPostProcessor.onStartCapturing();
- mCaptureSession[id].capture(captureBuilder.build(), mPostProcessor.getCaptureCallback(), mCaptureCallbackHandler);
- } else*/ {
- mCaptureSession[id].capture(captureBuilder.build(), captureCallback, mCaptureCallbackHandler);
+
+ @Override
+ public void onCaptureSequenceCompleted(CameraCaptureSession session, int
+ sequenceId, long frameNumber) {
+ Log.d(TAG, "captureStillPictureForLongshot onCaptureSequenceCompleted: " + id);
+ mLongshotActive = false;
+ unlockFocus(id);
}
- }
+ }, mCaptureCallbackHandler);
+ mActivity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mUI.enableVideo(false);
}
- } catch (CameraAccessException e) {
- Log.d(TAG, "Capture still picture has failed");
- e.printStackTrace();
+ });
+ }
+
+ private void captureStillPictureForCommon(CaptureRequest.Builder captureBuilder, int id) throws CameraAccessException{
+ checkAndPlayShutterSound(id);
+ if(isMpoOn()) {
+ mCaptureStartTime = System.currentTimeMillis();
+ mMpoSaveHandler.obtainMessage(MpoSaveHandler.MSG_CONFIGURE,
+ Long.valueOf(mCaptureStartTime)).sendToTarget();
+ }
+ if(mChosenImageFormat == ImageFormat.YUV_420_888 || mChosenImageFormat == ImageFormat.PRIVATE) { // Case of ZSL, FrameFilter, SelfieMirror
+ mPostProcessor.onStartCapturing();
+ mCaptureSession[id].capture(captureBuilder.build(), mPostProcessor.getCaptureCallback(), mCaptureCallbackHandler);
+ } else {
+ mCaptureSession[id].capture(captureBuilder.build(), new CameraCaptureSession.CaptureCallback() {
+
+ @Override
+ public void onCaptureCompleted(CameraCaptureSession session,
+ CaptureRequest request,
+ TotalCaptureResult result) {
+ Log.d(TAG, "captureStillPictureForCommon onCaptureCompleted: " + id);
+ }
+
+ @Override
+ public void onCaptureFailed(CameraCaptureSession session,
+ CaptureRequest request,
+ CaptureFailure result) {
+ Log.d(TAG, "captureStillPictureForCommon onCaptureFailed: " + id);
+ }
+
+ @Override
+ public void onCaptureSequenceCompleted(CameraCaptureSession session, int
+ sequenceId, long frameNumber) {
+ Log.d(TAG, "captureStillPictureForCommon onCaptureSequenceCompleted: " + id);
+ unlockFocus(id);
+ }
+ }, mCaptureCallbackHandler);
}
}
@@ -1661,12 +1653,12 @@ public class CaptureModule implements CameraModule, PhotoController,
CaptureRequest.Builder captureBuilder =
mCameraDevice[id].createCaptureRequest(CameraDevice.TEMPLATE_VIDEO_SNAPSHOT);
- /* todo captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, CameraUtil.getJpegRotation(id, mOrientation));
+ captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, CameraUtil.getJpegRotation(id, mOrientation));
captureBuilder.set(CaptureRequest.JPEG_THUMBNAIL_SIZE, mVideoSnapshotThumbSize);
captureBuilder.set(CaptureRequest.JPEG_THUMBNAIL_QUALITY, (byte)80);
applyVideoSnapshot(captureBuilder, id);
applyZoom(captureBuilder, id);
- */
+
captureBuilder.addTarget(mVideoSnapshotImageReader.getSurface());
mCurrentSession.capture(captureBuilder.build(),
@@ -1764,8 +1756,7 @@ public class CaptureModule implements CameraModule, PhotoController,
ClearSightImageProcessor.getInstance().setCallback(this);
}
} else {
-//todo if ((imageFormat == ImageFormat.YUV_420_888 || imageFormat == ImageFormat.PRIVATE)
- if ((imageFormat == ImageFormat.PRIVATE)
+ if ((imageFormat == ImageFormat.YUV_420_888 || imageFormat == ImageFormat.PRIVATE)
&& i == getMainCameraId()) {
if(mPostProcessor.isZSLEnabled()) {
mImageReader[i] = ImageReader.newInstance(mSupportedMaxPictureSize.getWidth(),
@@ -1801,38 +1792,19 @@ public class CaptureModule implements CameraModule, PhotoController,
String title = (name == null) ? null : name.title;
long date = (name == null) ? -1 : name.date;
+ byte[] bytes = getJpegData(image);
+
if (image.getFormat() == ImageFormat.RAW10) {
- byte[] bytes = getJpegData(image);
mActivity.getMediaSaveService().addRawImage(bytes, title,
"raw");
- } else if (image.getFormat() == ImageFormat.YUV_420_888) {
- Log.d(TAG, "Bring up picture of YUV is taken and ready to process");
- int width = image.getWidth();
- int height = image.getHeight();
- int stride = image.getPlanes()[0].getRowStride();
- ByteBuffer yuvBuf = ByteBuffer.allocateDirect(stride * height*3/2);
-
- ByteBuffer yBuf = image.getPlanes()[0].getBuffer();
- ByteBuffer vuBuf = image.getPlanes()[2].getBuffer();
- yBuf.get(yuvBuf.array(), 0, yBuf.remaining());
- vuBuf.get(yuvBuf.array(), stride*height, vuBuf.remaining());
- byte[] bytes = nv21ToJpeg(yuvBuf, width, height, stride);
- mActivity.getMediaSaveService().addImage(bytes, title, date,
- null, width, height, 90, null,
- mOnMediaSavedListener, mContentResolver, "jpeg");
- mActivity.updateThumbnail(bytes);
- image.close();
} else {
- byte[] bytes = getJpegData(image);
-
ExifInterface exif = Exif.getExif(bytes);
int orientation = Exif.getOrientation(exif);
if (mIntentMode != CaptureModule.INTENT_MODE_NORMAL) {
mJpegImageData = bytes;
if (!mQuickCapture) {
- showCapturedReview(bytes, orientation,
- mPostProcessor.isSelfieMirrorOn());
+ showCapturedReview(bytes, orientation);
} else {
onCaptureDone();
}
@@ -1870,30 +1842,16 @@ public class CaptureModule implements CameraModule, PhotoController,
}
}
- private byte[] nv21ToJpeg(ByteBuffer byteBuffer, int width, int height, int stride) {
- PostProcessor.BitmapOutputStream bos = new PostProcessor.BitmapOutputStream(1024);
- YuvImage im = new YuvImage(byteBuffer.array(), ImageFormat.NV21,
- width, height, new int[]{stride, stride});
- im.compressToJpeg(new Rect(0,0, width, height), 50, bos);
- byte[] bytes = bos.getArray();
- return bytes;
- }
-
private void createVideoSnapshotImageReader() {
if (mVideoSnapshotImageReader != null) {
mVideoSnapshotImageReader.close();
}
-/*Todo mVideoSnapshotImageReader = ImageReader.newInstance(mVideoSnapshotSize.getWidth(),
- mVideoSnapshotSize.getHeight(), ImageFormat.JPEG, 2);*/
-
- mVideoSnapshotImageReader = ImageReader.newInstance(3840, 2160, mChosenImageFormat, 2);
- Log.e(TAG, "Image="+mChosenImageFormat);
+ mVideoSnapshotImageReader = ImageReader.newInstance(mVideoSnapshotSize.getWidth(),
+ mVideoSnapshotSize.getHeight(), ImageFormat.JPEG, 2);
mVideoSnapshotImageReader.setOnImageAvailableListener(
new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
- Log.d(TAG, "Video Snapshot Image Available.");
-
Image image = reader.acquireNextImage();
mCaptureStartTime = System.currentTimeMillis();
mNamedImages.nameNewImage(mCaptureStartTime);
@@ -1901,39 +1859,19 @@ public class CaptureModule implements CameraModule, PhotoController,
String title = (name == null) ? null : name.title;
long date = (name == null) ? -1 : name.date;
- if (image.getFormat() == ImageFormat.YUV_420_888) {
- Log.d(TAG, "Bring up picture of YUV is taken and ready to process");
- int width = image.getWidth();
- int height = image.getHeight();
- int stride = image.getPlanes()[0].getRowStride();
- ByteBuffer yuvBuf = ByteBuffer.allocateDirect(stride * height*3/2);
-
- ByteBuffer yBuf = image.getPlanes()[0].getBuffer();
- ByteBuffer vuBuf = image.getPlanes()[2].getBuffer();
- yBuf.get(yuvBuf.array(), 0, yBuf.remaining());
- vuBuf.get(yuvBuf.array(), stride*height, vuBuf.remaining());
- byte[] bytes = nv21ToJpeg(yuvBuf, width, height, stride);
- mActivity.getMediaSaveService().addImage(bytes, title, date,
- null, width, height, 90, null,
- mOnMediaSavedListener, mContentResolver, "jpeg");
- mActivity.updateThumbnail(bytes);
- image.close();
- } else {
-
- ByteBuffer buffer = image.getPlanes()[0].getBuffer();
- byte[] bytes = new byte[buffer.remaining()];
- buffer.get(bytes);
+ ByteBuffer buffer = image.getPlanes()[0].getBuffer();
+ byte[] bytes = new byte[buffer.remaining()];
+ buffer.get(bytes);
- ExifInterface exif = Exif.getExif(bytes);
- int orientation = Exif.getOrientation(exif);
+ ExifInterface exif = Exif.getExif(bytes);
+ int orientation = Exif.getOrientation(exif);
- mActivity.getMediaSaveService().addImage(bytes, title, date,
+ mActivity.getMediaSaveService().addImage(bytes, title, date,
null, image.getWidth(), image.getHeight(), orientation, null,
mOnMediaSavedListener, mContentResolver, "jpeg");
- mActivity.updateThumbnail(bytes);
- image.close();
- }
+ mActivity.updateThumbnail(bytes);
+ image.close();
}
}, mImageAvailableHandler);
}
@@ -2151,6 +2089,23 @@ public class CaptureModule implements CameraModule, PhotoController,
applyCommonSettings(builder, id);
}
+ private void applySettingsForJpegInformation(CaptureRequest.Builder builder, int id) {
+ Location location = mLocationManager.getCurrentLocation();
+ if(location != null) {
+ // make copy so that we don't alter the saved location since we may re-use it
+ location = new Location(location);
+ // workaround for Google bug. Need to convert timestamp from ms -> sec
+ location.setTime(location.getTime()/1000);
+ builder.set(CaptureRequest.JPEG_GPS_LOCATION, location);
+ Log.d(TAG, "gps: " + location.toString());
+ } else {
+ Log.d(TAG, "no location - getRecordLocation: " + getRecordLocation());
+ }
+ builder.set(CaptureRequest.JPEG_ORIENTATION, CameraUtil.getJpegRotation(id, mOrientation));
+ builder.set(CaptureRequest.JPEG_THUMBNAIL_SIZE, mPictureThumbSize);
+ builder.set(CaptureRequest.JPEG_THUMBNAIL_QUALITY, (byte)80);
+ }
+
private void applyVideoSnapshot(CaptureRequest.Builder builder, int id) {
builder.set(CaptureRequest.CONTROL_MODE, CaptureRequest.CONTROL_MODE_AUTO);
applyColorEffect(builder);
@@ -2387,42 +2342,6 @@ public class CaptureModule implements CameraModule, PhotoController,
updateMaxVideoDuration();
}
- private Size checkOverridePreviewSize(int cur_width, int cur_height) {
- int preview_resolution = PersistUtil.getCameraPreviewSize();
-
- switch (preview_resolution) {
- case 1: {
- cur_width = 640;
- cur_height = 480;
- Log.v(TAG, "Preview resolution hardcoded to 640x480");
- break;
- }
- case 2: {
- cur_width = 720;
- cur_height = 480;
- Log.v(TAG, "Preview resolution hardcoded to 720x480");
- break;
- }
- case 3: {
- cur_width = 1280;
- cur_height = 720;
- Log.v(TAG, "Preview resolution hardcoded to 1280x720");
- break;
- }
- case 4: {
- cur_width = 1920;
- cur_height = 1080;
- Log.v(TAG, "Preview resolution hardcoded to 1920x1080");
- break;
- }
- default: {
- Log.v(TAG, "Preview resolution as per Snapshot aspect ratio");
- break;
- }
- }
- return new Size(cur_width, cur_height);
- }
-
private void updatePreviewSize() {
int width = mPreviewSize.getWidth();
int height = mPreviewSize.getHeight();
@@ -2433,7 +2352,16 @@ public class CaptureModule implements CameraModule, PhotoController,
width = mVideoSize.getWidth();
height = mVideoSize.getHeight();
}
- mPreviewSize = checkOverridePreviewSize(width, height);
+
+ Point previewSize = PersistUtil.getCameraPreviewSize();
+ if (previewSize != null) {
+ width = previewSize.x;
+ height = previewSize.y;
+ }
+
+ Log.d(TAG, "updatePreviewSize final preview size = " + width + ", " + height);
+
+ mPreviewSize = new Size(width, height);
mUI.setPreviewSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
}
@@ -2474,7 +2402,7 @@ public class CaptureModule implements CameraModule, PhotoController,
} else if(mPostProcessor.isFilterOn() || getFrameFilters().size() != 0 || mPostProcessor.isSelfieMirrorOn()) {
mChosenImageFormat = ImageFormat.YUV_420_888;
} else {
- mChosenImageFormat = ImageFormat.YUV_420_888; //todo ImageFormat.JPEG;
+ mChosenImageFormat = ImageFormat.JPEG;
}
setUpCameraOutputs(mChosenImageFormat);
@@ -3114,11 +3042,9 @@ public class CaptureModule implements CameraModule, PhotoController,
Size[] prevSizes = mSettingsManager.getSupportedOutputSize(getMainCameraId(),
SurfaceHolder.class);
mSupportedMaxPictureSize = prevSizes[0];
- if (mSaveRaw == true) {
- Size[] rawSize = mSettingsManager.getSupportedOutputSize(getMainCameraId(),
+ Size[] rawSize = mSettingsManager.getSupportedOutputSize(getMainCameraId(),
ImageFormat.RAW10);
- mSupportedRawPictureSize = rawSize[0];
- }
+ mSupportedRawPictureSize = rawSize[0];
mPreviewSize = getOptimalPreviewSize(mPictureSize, prevSizes);
Size[] thumbSizes = mSettingsManager.getSupportedThumbnailSizes(getMainCameraId());
mPictureThumbSize = getOptimalPreviewSize(mPictureSize, thumbSizes); // get largest thumb size
@@ -3150,17 +3076,19 @@ public class CaptureModule implements CameraModule, PhotoController,
Size[] prevSizes = mSettingsManager.getSupportedOutputSize(getMainCameraId(),
MediaRecorder.class);
mVideoPreviewSize = getOptimalPreviewSize(mVideoSize, prevSizes);
- mVideoPreviewSize = checkOverridePreviewSize(mVideoPreviewSize.getWidth(),
- mVideoPreviewSize.getHeight());
+
+ Point previewSize = PersistUtil.getCameraPreviewSize();
+ if (previewSize != null) {
+ mVideoPreviewSize = new Size(previewSize.x, previewSize.y);
+ }
+ Log.d(TAG, "updatePreviewSize final preview size = " + mVideoPreviewSize.getWidth()
+ + ", " + mVideoPreviewSize.getHeight());
}
private void updateVideoSnapshotSize() {
- updateHFRSetting();
- mVideoSnapshotSize = mPictureSize;
- mVideoSnapshotSize = getMaxPictureSizeForLiveShot();
- // if video High FrameRate > 60fps, the mVideoSnapshotSize = mVideoSize
- if (mHighSpeedCapture && ((int)mHighSpeedFPSRange.getUpper() > NORMAL_SESSION_MAX_FPS)) {
- mVideoSnapshotSize = mVideoSize;
+ mVideoSnapshotSize = mVideoSize;
+ if (is4kSize(mVideoSize) && is4kSize(mVideoSnapshotSize)) {
+ mVideoSnapshotSize = getMaxPictureSizeLessThan4k();
}
Size[] thumbSizes = mSettingsManager.getSupportedThumbnailSizes(getMainCameraId());
mVideoSnapshotThumbSize = getOptimalPreviewSize(mVideoSnapshotSize, thumbSizes); // get largest thumb size
@@ -3200,7 +3128,6 @@ public class CaptureModule implements CameraModule, PhotoController,
mStartRecPending = true;
mIsRecordingVideo = true;
mMediaRecorderPausing = false;
- mUI.hideUIwhileRecording();
mActivity.updateStorageSpaceAndHint();
if (mActivity.getStorageSpaceBytes() <= Storage.LOW_STORAGE_THRESHOLD_BYTES) {
@@ -3212,6 +3139,17 @@ public class CaptureModule implements CameraModule, PhotoController,
try {
setUpMediaRecorder(cameraId);
+ try {
+ mMediaRecorder.start(); // Recording is now started
+ } catch (RuntimeException e) {
+ Toast.makeText(mActivity,"Could not start media recorder.\n " +
+ "Can't start video recording.", Toast.LENGTH_LONG).show();
+ releaseMediaRecorder();
+ releaseAudioFocus();
+ mStartRecPending = false;
+ mIsRecordingVideo = false;
+ return false;
+ }
if (mUnsupportedResolution == true ) {
Log.v(TAG, "Unsupported Resolution according to target");
mStartRecPending = false;
@@ -3227,6 +3165,7 @@ public class CaptureModule implements CameraModule, PhotoController,
requestAudioFocus();
mUI.clearFocus();
+ mUI.hideUIwhileRecording();
mCameraHandler.removeMessages(CANCEL_TOUCH_FOCUS, mCameraId[cameraId]);
mState[cameraId] = STATE_PREVIEW;
mControlAFMode = CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE;
@@ -3294,17 +3233,6 @@ public class CaptureModule implements CameraModule, PhotoController,
+ e.getMessage());
e.printStackTrace();
}
- try {
- mMediaRecorder.start(); // Recording is now started
- } catch (RuntimeException e) {
- Toast.makeText(mActivity,"Could not start media recorder.\n " +
- "Can't start video recording.", Toast.LENGTH_LONG).show();
- releaseMediaRecorder();
- releaseAudioFocus();
- mStartRecPending = false;
- mIsRecordingVideo = false;
- return;
- }
mUI.clearFocus();
mUI.resetPauseButton();
mRecordingTotalTime = 0L;
@@ -3339,17 +3267,6 @@ public class CaptureModule implements CameraModule, PhotoController,
} catch (IllegalStateException e) {
e.printStackTrace();
}
- try {
- mMediaRecorder.start(); // Recording is now started
- } catch (RuntimeException e) {
- Toast.makeText(mActivity,"Could not start media recorder.\n " +
- "Can't start video recording.", Toast.LENGTH_LONG).show();
- releaseMediaRecorder();
- releaseAudioFocus();
- mStartRecPending = false;
- mIsRecordingVideo = false;
- return;
- }
mUI.clearFocus();
mUI.resetPauseButton();
mRecordingTotalTime = 0L;
@@ -3395,9 +3312,6 @@ public class CaptureModule implements CameraModule, PhotoController,
mHighSpeedRecordingMode = mode.equals("hsr");
mHighSpeedCaptureRate = Integer.parseInt(value.substring(3));
}
- if (mHighSpeedCapture) {
- mHighSpeedFPSRange = new Range(mHighSpeedCaptureRate, mHighSpeedCaptureRate);
- }
}
private void setUpVideoCaptureRequestBuilder(CaptureRequest.Builder builder,int cameraId) {
@@ -4059,14 +3973,14 @@ public class CaptureModule implements CameraModule, PhotoController,
if (value == null || value.equals("0"))
return;
int intValue = Integer.parseInt(value);
- //todo request.set(CaptureModule.INSTANT_AEC_MODE, intValue);
+ request.set(CaptureModule.INSTANT_AEC_MODE, intValue);
}
private void applySaturationLevel(CaptureRequest.Builder request) {
String value = mSettingsManager.getValue(SettingsManager.KEY_SATURATION_LEVEL);
if (value != null) {
int intValue = Integer.parseInt(value);
- //todo request.set(CaptureModule.SATURATION, intValue);
+ request.set(CaptureModule.SATURATION, intValue);
}
}
@@ -4371,7 +4285,7 @@ public class CaptureModule implements CameraModule, PhotoController,
}
}
- private Surface getPreviewSurfaceForSession(int id) {
+ public Surface getPreviewSurfaceForSession(int id) {
if (isBackCamera()) {
if (getCameraMode() == DUAL_MODE && id == MONO_ID) {
return mUI.getMonoDummySurface();
@@ -4669,57 +4583,6 @@ public class CaptureModule implements CameraModule, PhotoController,
return (optimalPickIndex == -1) ? null : prevSizes[optimalPickIndex];
}
- private Size getMaxPictureSizeForLiveShot() {
- Size[] sizes = mSettingsManager.getSupportedOutputSize(getMainCameraId(), ImageFormat.JPEG);
- float ratio = (float) mVideoSize.getWidth() / mVideoSize.getHeight();
- Size optimalSize = null;
- double minDiff = Double.MAX_VALUE;
- for (Size size : sizes) {
- // if video quality set 1080p, the mVideoSnapshotSize is biggest is 16M(16:9 and 4:3)
- if (mVideoSize.getHeight() == 1080 && mVideoSize.getWidth() == 1920) {
- if (size.getHeight() > 3456 || size.getWidth() > 5312) continue;
- // if video quality set 4K dci or UHD, the mVideoSnapshotSize is biggest is 12M
- } else if ((mVideoSize.getHeight() == 2160 && mVideoSize.getWidth() == 4096) ||
- (mVideoSize.getHeight() == 2160 && mVideoSize.getWidth() == 3840)){
- if (size.getHeight() > 3000 || size.getWidth() > 4000) continue;
- }
-
- float pictureRatio = (float) size.getWidth() / size.getHeight();
- if (Math.abs(pictureRatio - ratio) > 0.01) continue;
-
- double heightDiff = Math.abs(size.getHeight() - mPictureSize.getHeight());
- if (heightDiff < minDiff) {
- optimalSize = size;
- minDiff = Math.abs(size.getHeight() - mPictureSize.getHeight());
- } else if (heightDiff == minDiff) {
- // Prefer resolutions smaller-than-display when an equally close
- // larger-than-display resolution is available
- if (size.getHeight() < mPictureSize.getHeight()) {
- optimalSize = size;
- minDiff = heightDiff;
- }
- }
- }
-
- // Cannot find one that matches the aspect ratio. This should not happen.
- // Ignore the requirement.
- if (optimalSize == null) {
- Log.w(TAG, "No picture size match the aspect ratio");
- for (Size size : sizes) {
- if (mVideoSize.getHeight() == 1080 && mVideoSize.getWidth() == 1920) {
- if (size.getHeight() >= 3456 || size.getWidth() >= 4608) continue;
- } else if ((mVideoSize.getHeight() == 2160 && mVideoSize.getWidth() == 4096) ||
- (mVideoSize.getHeight() == 2160 && mVideoSize.getWidth() == 3840)) {
- if (size.getHeight() >= 3000 || size.getWidth() >= 4000) continue;
- }
- if (optimalSize == null || size.getWidth() > optimalSize.getWidth()) {
- optimalSize = size;
- }
- }
- }
- return optimalSize;
- }
-
private Size getMaxPictureSizeLessThan4k() {
Size[] sizes = mSettingsManager.getSupportedOutputSize(getMainCameraId(), ImageFormat.JPEG);
float ratio = (float) mVideoSize.getWidth() / mVideoSize.getHeight();
diff --git a/src/com/android/camera/CaptureUI.java b/src/com/android/camera/CaptureUI.java
index 6ec09effd..d0b129ad9 100755..100644
--- a/src/com/android/camera/CaptureUI.java
+++ b/src/com/android/camera/CaptureUI.java
@@ -306,8 +306,10 @@ public class CaptureUI implements FocusOverlayManager.FocusUI,
mMakeupSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progresValue, boolean fromUser) {
- int value = progresValue/10*10;
- mSettingsManager.setValue(SettingsManager.KEY_MAKEUP, value+"");
+ if ( progresValue != 0 ) {
+ int value = 10 + 9 * progresValue / 10;
+ mSettingsManager.setValue(SettingsManager.KEY_MAKEUP, value + "");
+ }
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
@@ -484,8 +486,8 @@ public class CaptureUI implements FocusOverlayManager.FocusUI,
showFirstTimeHelp();
}
- protected void showCapturedImageForReview(byte[] jpegData, int orientation, boolean mirror) {
- mDecodeTaskForReview = new CaptureUI.DecodeImageForReview(jpegData, orientation, mirror);
+ protected void showCapturedImageForReview(byte[] jpegData, int orientation) {
+ mDecodeTaskForReview = new CaptureUI.DecodeImageForReview(jpegData, orientation);
mDecodeTaskForReview.execute();
if (getCurrentIntentMode() != CaptureModule.INTENT_MODE_NORMAL) {
if (mFilterMenuStatus == FILTER_MENU_ON) {
@@ -1737,24 +1739,18 @@ public class CaptureUI implements FocusOverlayManager.FocusUI,
private class DecodeTask extends AsyncTask<Void, Void, Bitmap> {
private final byte [] mData;
private int mOrientation;
- private boolean mMirror;
- public DecodeTask(byte[] data, int orientation, boolean mirror) {
+ public DecodeTask(byte[] data, int orientation) {
mData = data;
mOrientation = orientation;
- mMirror = mirror;
}
@Override
protected Bitmap doInBackground(Void... params) {
Bitmap bitmap = CameraUtil.downSample(mData, mDownSampleFactor);
// Decode image in background.
- if ((mOrientation != 0 || mMirror) && (bitmap != null)) {
+ if ((mOrientation != 0) && (bitmap != null)) {
Matrix m = new Matrix();
- if (mMirror) {
- // Flip horizontally
- m.setScale(-1f, 1f);
- }
m.preRotate(mOrientation);
return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), m,
false);
@@ -1768,8 +1764,8 @@ public class CaptureUI implements FocusOverlayManager.FocusUI,
}
private class DecodeImageForReview extends CaptureUI.DecodeTask {
- public DecodeImageForReview(byte[] data, int orientation, boolean mirror) {
- super(data, orientation, mirror);
+ public DecodeImageForReview(byte[] data, int orientation) {
+ super(data, orientation);
}
@Override
diff --git a/src/com/android/camera/MediaSaveService.java b/src/com/android/camera/MediaSaveService.java
index 6ca37b9e2..217f44f27 100644
--- a/src/com/android/camera/MediaSaveService.java
+++ b/src/com/android/camera/MediaSaveService.java
@@ -41,6 +41,7 @@ import com.android.camera.exif.ExifInterface;
import com.android.camera.mpo.MpoData;
import com.android.camera.mpo.MpoImageData;
import com.android.camera.mpo.MpoInterface;
+import com.android.camera.util.PersistUtil;
import com.android.camera.util.XmpUtil;
import org.codeaurora.snapcam.filter.GDepth;
@@ -58,7 +59,8 @@ public class MediaSaveService extends Service {
// The memory limit for unsaved image is 50MB.
private static final int SAVE_TASK_MEMORY_LIMIT_IN_MB =
- android.os.SystemProperties.getInt("persist.camera.perf.memlimit", 60);
+ PersistUtil.getSaveTaskMemoryLimitInMb();
+
private static final int SAVE_TASK_MEMORY_LIMIT = SAVE_TASK_MEMORY_LIMIT_IN_MB * 1024 * 1024;
private static final String TAG = "CAM_" + MediaSaveService.class.getSimpleName();
diff --git a/src/com/android/camera/SettingsManager.java b/src/com/android/camera/SettingsManager.java
index 4cccf8e94..af796c6a7 100755..100644
--- a/src/com/android/camera/SettingsManager.java
+++ b/src/com/android/camera/SettingsManager.java
@@ -1181,7 +1181,10 @@ public class SettingsManager implements ListMenu.SettingsListener {
public int getHighSpeedVideoEncoderBitRate(CamcorderProfile profile, int targetRate) {
int bitRate;
String key = profile.videoFrameWidth+"x"+profile.videoFrameHeight+":"+targetRate;
- if (CameraSettings.VIDEO_ENCODER_BITRATE.containsKey(key)) {
+ String resolutionFpsEncoder = key + ":" + profile.videoCodec;
+ if (CameraSettings.VIDEO_ENCODER_BITRATE.containsKey(resolutionFpsEncoder)) {
+ bitRate = CameraSettings.VIDEO_ENCODER_BITRATE.get(resolutionFpsEncoder);
+ } else if (CameraSettings.VIDEO_ENCODER_BITRATE.containsKey(key) ) {
bitRate = CameraSettings.VIDEO_ENCODER_BITRATE.get(key);
} else {
Log.i(TAG, "No pre-defined bitrate for "+key);
@@ -1394,7 +1397,9 @@ public class SettingsManager implements ListMenu.SettingsListener {
modes.add("" + i);
}
} catch(NullPointerException e) {
+ Log.w(TAG, "Supported instant aec modes is null.");
} catch(IllegalArgumentException e) {
+ Log.w(TAG, "Supported instant aec modes is null.");
}
return modes;
diff --git a/src/com/android/camera/imageprocessor/FrameProcessor.java b/src/com/android/camera/imageprocessor/FrameProcessor.java
index b1b415acd..6b0c97732 100644
--- a/src/com/android/camera/imageprocessor/FrameProcessor.java
+++ b/src/com/android/camera/imageprocessor/FrameProcessor.java
@@ -401,7 +401,11 @@ public class FrameProcessor {
}
} else {
filter.init(mSize.getWidth(), mSize.getHeight(), stride, stride);
- filter.addImage(bY, bVU, 0, new Boolean(true));
+ if (filter instanceof BeautificationFilter) {
+ filter.addImage(bY, bVU, 0, new Boolean(false));
+ } else {
+ filter.addImage(bY, bVU, 0, new Boolean(true));
+ }
needToFeedSurface = true;
}
bY.rewind();
@@ -485,7 +489,11 @@ public class FrameProcessor {
mBY.rewind();
mBVU.rewind();
mFilter.init(mWidth, mHeight, mStride, mStride);
- mFilter.addImage(mBY, mBVU, 0, new Boolean(true));
+ if (mFilter instanceof BeautificationFilter) {
+ mFilter.addImage(mBY, mBVU, 0, new Boolean(false));
+ } else {
+ mFilter.addImage(mBY, mBVU, 0, new Boolean(true));
+ }
mMutureLock.release();
} catch (InterruptedException e) {
}
diff --git a/src/com/android/camera/imageprocessor/PostProcessor.java b/src/com/android/camera/imageprocessor/PostProcessor.java
index 6e34de96d..d70743be9 100644
--- a/src/com/android/camera/imageprocessor/PostProcessor.java
+++ b/src/com/android/camera/imageprocessor/PostProcessor.java
@@ -391,6 +391,7 @@ public class PostProcessor{
public void onCaptureCompleted(CameraCaptureSession session,
CaptureRequest request,
TotalCaptureResult result) {
+ Log.d(TAG, "onCaptureCompleted");
if(mTotalCaptureResultList.size() <= PostProcessor.MAX_REQUIRED_IMAGE_NUM) {
mTotalCaptureResultList.add(result);
}
@@ -405,11 +406,13 @@ public class PostProcessor{
public void onCaptureFailed(CameraCaptureSession session,
CaptureRequest request,
CaptureFailure result) {
+ Log.d(TAG, "onCaptureFailed");
}
@Override
public void onCaptureSequenceCompleted(CameraCaptureSession session, int
sequenceId, long frameNumber) {
+ Log.d(TAG, "onCaptureSequenceCompleted");
if(!isFilterOn()) {
mController.unlockFocus(mController.getMainCameraId());
}
@@ -561,17 +564,20 @@ public class PostProcessor{
public void onCaptureCompleted(CameraCaptureSession session,
CaptureRequest request,
TotalCaptureResult result) {
+ Log.d(TAG, "reprocessImage onCaptureCompleted");
}
@Override
public void onCaptureFailed(CameraCaptureSession session,
CaptureRequest request,
CaptureFailure result) {
+ Log.d(TAG, "reprocessImage onCaptureFailed");
}
@Override
public void onCaptureSequenceCompleted(CameraCaptureSession session, int
sequenceId, long frameNumber) {
+ Log.d(TAG, "reprocessImage onCaptureSequenceCompleted");
}
}, mHandler);
} catch (CameraAccessException e) {
@@ -672,6 +678,7 @@ public class PostProcessor{
mImageHandlerTask = new ImageHandlerTask();
mSaveRaw = isSaveRaw;
if(setFilter(postFilterId) || isFlashModeOn || isTrackingFocusOn || isMakeupOn || isSelfieMirrorOn
+ || PersistUtil.getCameraZSLDisabled()
|| !SettingsManager.getInstance().isZSLInAppEnabled()
|| "enable".equals(
SettingsManager.getInstance().getValue(SettingsManager.KEY_AUTO_HDR))
@@ -1091,8 +1098,7 @@ public class PostProcessor{
if (mController.isQuickCapture()) {
mController.onCaptureDone();
} else {
- mController.showCapturedReview(
- bytes, mOrientation, isSelfieMirrorOn());
+ mController.showCapturedReview(bytes, mOrientation);
}
}
mActivity.getMediaSaveService().addImage(
@@ -1166,8 +1172,7 @@ public class PostProcessor{
if (mController.isQuickCapture()) {
mController.onCaptureDone();
} else {
- mController.showCapturedReview(bytes,
- orientation, isSelfieMirrorOn());
+ mController.showCapturedReview(bytes, orientation);
}
} else {
mActivity.getMediaSaveService().addImage(
@@ -1204,7 +1209,7 @@ public class PostProcessor{
return quality;
}
- public static class BitmapOutputStream extends ByteArrayOutputStream {
+ private class BitmapOutputStream extends ByteArrayOutputStream {
public BitmapOutputStream(int size) {
super(size);
}
diff --git a/src/com/android/camera/imageprocessor/ZSLQueue.java b/src/com/android/camera/imageprocessor/ZSLQueue.java
index c9ecb79a2..0509b8fb5 100644
--- a/src/com/android/camera/imageprocessor/ZSLQueue.java
+++ b/src/com/android/camera/imageprocessor/ZSLQueue.java
@@ -42,9 +42,7 @@ import java.util.LinkedList;
import java.util.NoSuchElementException;
public class ZSLQueue {
- private static final String CIRCULAR_BUFFER_SIZE_PERSIST = "persist.camera.zsl.buffer.size";
- private static final int CIRCULAR_BUFFER_SIZE_DEFAULT = 5;
- private int mCircularBufferSize = CIRCULAR_BUFFER_SIZE_DEFAULT;
+ private int mCircularBufferSize;
private ImageItem[] mBuffer;
private int mImageHead;
private int mMetaHead;
@@ -56,7 +54,7 @@ public class ZSLQueue {
private static final String TAG = "ZSLQueue";
public ZSLQueue(CaptureModule module) {
- mCircularBufferSize = SystemProperties.getInt(CIRCULAR_BUFFER_SIZE_PERSIST, CIRCULAR_BUFFER_SIZE_DEFAULT);
+ mCircularBufferSize = PersistUtil.getCircularBufferSize();
synchronized (mLock) {
mBuffer = new ImageItem[mCircularBufferSize];
mImageHead = 0;
diff --git a/src/com/android/camera/imageprocessor/filter/ChromaflashFilter.java b/src/com/android/camera/imageprocessor/filter/ChromaflashFilter.java
index 607908ebf..4682e3947 100644
--- a/src/com/android/camera/imageprocessor/filter/ChromaflashFilter.java
+++ b/src/com/android/camera/imageprocessor/filter/ChromaflashFilter.java
@@ -32,8 +32,10 @@ import android.graphics.Rect;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCaptureSession;
import android.hardware.camera2.CameraCharacteristics;
+import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.CaptureResult;
+import android.hardware.camera2.TotalCaptureResult;
import android.os.Handler;
import android.util.Log;
@@ -155,20 +157,33 @@ public class ChromaflashFilter implements ImageFilter{
for (int i = 0; i < NUM_REQUIRED_IMAGE; i++) {
if (i == 0) {
captureSession.capture(builder.build(), callback, handler);
+ waitForImage(i);
} else if (i == 1) { //To change the setting
builder.set(CaptureRequest.CONTROL_AE_LOCK, Boolean.FALSE);
+ builder.set(CaptureRequest.FLASH_MODE,
+ CaptureRequest.FLASH_MODE_SINGLE);
captureSession.capture(builder.build(), callback, handler);
waitForImage(i);
} else if (i == 2) { //To change the setting
- builder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
- builder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_SINGLE);
- builder.set(CaptureRequest.CONTROL_AE_LOCK, Boolean.TRUE);
- captureSession.capture(builder.build(), callback, handler);
- waitForImage(i);
+ builder.set(CaptureRequest.CONTROL_AE_MODE,
+ CaptureRequest.CONTROL_AE_MODE_ON);
+ CaptureRequest.Builder AeTunningBuilder = captureSession.getDevice().
+ createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
+ CaptureRequest request = builder.build();
+ for (CaptureRequest.Key key : request.getKeys()) {
+ AeTunningBuilder.set(key, request.get(key));
+ }
+ AeTunningBuilder.addTarget(mModule.getPreviewSurfaceForSession(
+ mModule.getMainCameraId()));
+
+ waitForAeBlock(AeTunningBuilder,builder,callback,
+ captureSession,handler,5);
} else if (i == 3) {
captureSession.capture(builder.build(), callback, handler);
+ waitForImage(i);
} else if (i == 4) { //To change the setting
builder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
+ builder.set(CaptureRequest.CONTROL_AE_LOCK, Boolean.FALSE);
captureSession.capture(builder.build(), callback, handler);
waitForImage(i);
} else if (i == 5) {
@@ -190,6 +205,41 @@ public class ChromaflashFilter implements ImageFilter{
}
}
+ private void waitForAeBlock(final CaptureRequest.Builder tuningBuilder,
+ final CaptureRequest.Builder captureBuilder,
+ final CameraCaptureSession.CaptureCallback callback,
+ final CameraCaptureSession captureSession,
+ final Handler handler, final int AeTunningTime) {
+ try{
+ captureSession.capture(tuningBuilder.build(),
+ new CameraCaptureSession.CaptureCallback() {
+ private boolean mAeStateConverged = false;
+
+ @Override
+ public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request,
+ TotalCaptureResult result) {
+ Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE);
+ Log.d(TAG,"AE tunning onCaptureCompleted aeState = " + aeState);
+ if (aeState != null && aeState == CaptureResult.CONTROL_AE_STATE_CONVERGED) {
+ mAeStateConverged = true;
+ }
+ Log.d(TAG,"AE tunning completed mAeStateConverged = " + mAeStateConverged);
+ if(!mAeStateConverged && AeTunningTime >= 2) {
+ int resetTime = AeTunningTime - 1;
+ waitForAeBlock(tuningBuilder,captureBuilder,callback,
+ captureSession,handler,resetTime);
+ } else {
+ try{
+ captureSession.capture(captureBuilder.build(),callback,handler);
+ } catch (CameraAccessException e){}
+ }
+ }
+ }, handler);
+ }catch (CameraAccessException e){
+
+ }
+ }
+
public static boolean isSupportedStatic() {
return mIsSupported;
}
diff --git a/src/com/android/camera/ui/Camera2FaceView.java b/src/com/android/camera/ui/Camera2FaceView.java
index 3b6d10541..81be61f81 100755..100644
--- a/src/com/android/camera/ui/Camera2FaceView.java
+++ b/src/com/android/camera/ui/Camera2FaceView.java
@@ -151,7 +151,9 @@ public class Camera2FaceView extends FaceView {
faceBound.offset(-mCameraBound.left, -mCameraBound.top);
mRect.set(faceBound);
translateMatrix.mapRect(mRect);
+ if (LOGV) CameraUtil.dumpRect(mRect, "Original rect");
mMatrix.mapRect(mRect);
+ if (LOGV) CameraUtil.dumpRect(mRect, "Transformed rect");
mPaint.setColor(mColor);
mRect.offset(dx, dy);
diff --git a/src/com/android/camera/ui/FaceView.java b/src/com/android/camera/ui/FaceView.java
index b617891e5..04b3664eb 100755..100644
--- a/src/com/android/camera/ui/FaceView.java
+++ b/src/com/android/camera/ui/FaceView.java
@@ -33,14 +33,17 @@ import android.view.View;
import com.android.camera.PhotoUI;
import com.android.camera.util.CameraUtil;
+import com.android.camera.util.PersistUtil;
import org.codeaurora.snapcam.R;
import org.codeaurora.snapcam.wrapper.ExtendedFaceWrapper;
public class FaceView extends View
implements FocusIndicator, Rotatable,
PhotoUI.SurfaceTextureSizeChangedListener {
- protected static final String TAG = "CAM FaceView";
- protected final boolean LOGV = false;
+ protected static final String TAG = "CAM_FaceView";
+ protected final boolean LOGV =
+ (PersistUtil.getCamera2Debug() == PersistUtil.CAMERA2_DEBUG_DUMP_LOG) ||
+ (PersistUtil.getCamera2Debug() == PersistUtil.CAMERA2_DEBUG_DUMP_ALL);
// The value for android.hardware.Camera.setDisplayOrientation.
protected int mDisplayOrientation;
// The orientation compensation for the face indicator to make it look
diff --git a/src/com/android/camera/util/CameraUtil.java b/src/com/android/camera/util/CameraUtil.java
index 3b0d5e6ac..d6c1956d9 100644
--- a/src/com/android/camera/util/CameraUtil.java
+++ b/src/com/android/camera/util/CameraUtil.java
@@ -526,8 +526,8 @@ public class CameraUtil {
//For < 720p, there is no need to do any capping.
//By capping the panel size, we are indirectly controlling the preview size being
//chosen in getOptimalPreviewSize().
- String uMax = SystemProperties.get("camera.display.umax", "");
- String lMax = SystemProperties.get("camera.display.lmax", "");
+ String uMax = PersistUtil.getDisplayUMax();
+ String lMax = PersistUtil.getDisplayLMax();
if ((uMax.length() > 0) && (lMax.length() > 0)) {
Log.v(TAG,"display uMax "+ uMax + " lMax " + lMax);
String uMaxArr[] = uMax.split("x", 2);
diff --git a/src/com/android/camera/util/PersistUtil.java b/src/com/android/camera/util/PersistUtil.java
index 8c1b57e98..976389ea2 100644
--- a/src/com/android/camera/util/PersistUtil.java
+++ b/src/com/android/camera/util/PersistUtil.java
@@ -28,20 +28,32 @@
*/
package com.android.camera.util;
+import android.graphics.Point;
import android.os.SystemProperties;
+import android.text.TextUtils;
+import android.util.Log;
public class PersistUtil {
+ public static final int CAMERA2_DEBUG_DUMP_IMAGE = 1;
+ public static final int CAMERA2_DEBUG_DUMP_LOG = 2;
+ public static final int CAMERA2_DEBUG_DUMP_ALL = 100;
+
+ private static final int CAMERA_SENSOR_HORIZONTAL_ALIGNED = 0;
+ private static final int CAMERA_SENSOR_VERTICAL_ALIGNED = 1;
+
private static final int PERSIST_MEMORY_LIMIT =
SystemProperties.getInt("persist.vendor.camera.perf.memlimit", 60);
private static final boolean PERSIST_SKIP_MEMORY_CHECK =
SystemProperties.getBoolean("persist.vendor.camera.perf.skip_memck", false);
private static final int PERSIST_LONGSHOT_SHOT_LIMIT =
SystemProperties.getInt("persist.vendor.camera.longshot.shotnum", 50);
- private static final int PERSIST_CAMERA_PREVIEW_SIZE =
- SystemProperties.getInt("persist.vendor.camera.preview.size", 0);
+ private static final String PERSIST_CAMERA_PREVIEW_SIZE =
+ SystemProperties.get("persist.vendor.camera.preview.size", "");
private static final boolean PERSIST_CAMERA_CAMERA2 =
SystemProperties.getBoolean("persist.vendor.camera.camera2", true);
+ private static final boolean PERSIST_CAMERA_ZSL =
+ SystemProperties.getBoolean("persist.vendor.camera.zsl.disabled", false);
private static final int PERSIST_CAMERA2_DEBUG =
SystemProperties.getInt("persist.vendor.camera2.debug", 0);
private static final int PERSIST_CAMERA_CANCEL_TOUCHFOCUS_DELAY =
@@ -56,10 +68,59 @@ public class PersistUtil {
SystemProperties.get("persist.vendor.camera.stm_smooth", "0");
private static final int PERSIST_CAMERA_STILLMORE_NUM_REQUIRED_IMAGE =
SystemProperties.getInt("persist.vendor.camera.stm_img_nums", 5);
-
- public static final int CAMERA2_DEBUG_DUMP_IMAGE = 1;
- public static final int CAMERA2_DEBUG_DUMP_LOG = 2;
- public static final int CAMERA2_DEBUG_DUMP_ALL = 100;
+ private static final String PERSIST_CAMERA_CS_BRINTENSITY_KEY =
+ SystemProperties.get("persist.vendor.camera.sensor.brinten", "0.0");
+ private static final String PERSIST_CAMERA_CS_SMOOTH_KEY =
+ SystemProperties.get("persist.vendor.camera.sensor.smooth", "0.5");
+ private static final int PERSIST_CAMERA_SENSOR_ALIGN_KEY =
+ SystemProperties.getInt("persist.vendor.camera.sensor.align",
+ CAMERA_SENSOR_HORIZONTAL_ALIGNED);
+ private static final int CIRCULAR_BUFFER_SIZE_PERSIST =
+ SystemProperties.getInt("persist.vendor.camera.zsl.buffer.size", 5);
+ private static final int SAVE_TASK_MEMORY_LIMIT_IN_MB =
+ SystemProperties.getInt("persist.vendor.camera.perf.memlimit", 60);
+ private static final boolean PERSIST_CAMERA_UI_AUTO_TEST_ENABLED =
+ SystemProperties.getBoolean("persist.vendor.camera.ui.auto_test", false);
+ private static final boolean PERSIST_CAMERA_SAVE_IN_SD_ENABLED =
+ SystemProperties.getBoolean("persist.vendor.env.camera.saveinsd", false);
+ private static final boolean PERSIST_LONG_SAVE_ENABLED =
+ SystemProperties.getBoolean("persist.vendor.camera.longshot.save", false);
+ private static final boolean PERSIST_CAMERA_PREVIEW_RESTART_ENABLED =
+ SystemProperties.getBoolean("persist.vendor.camera.feature.restart", false);
+ private static final boolean PERSIST_CAPTURE_ANIMATION_ENABLED =
+ SystemProperties.getBoolean("persist.vendor.camera.capture.animate", true);
+ private static final boolean PERSIST_SKIP_MEM_CHECK_ENABLED =
+ SystemProperties.getBoolean("persist.vendor.camera.perf.skip_memck", false);
+ private static final boolean PERSIST_ZZHDR_ENABLED =
+ SystemProperties.getBoolean("persist.vendor.camera.zzhdr.enable", false);
+ private static final int PERSIST_PREVIEW_SIZE =
+ SystemProperties.getInt("persist.vendor.camera.preview.size", 0);
+ private static final long PERSIST_TIMESTAMP_LIMIT =
+ SystemProperties.getLong("persist.vendor.camera.cs.threshold", 10);
+ private static final int PERSIST_BURST_COUNT =
+ SystemProperties.getInt("persist.vendor.camera.cs.burstcount", 4);
+ private static final boolean PERSIST_DUMP_FRAMES_ENABLED =
+ SystemProperties.getBoolean("persist.vendor.camera.cs.dumpframes", false);
+ private static final boolean PERSIST_DUMP_YUV_ENABLED =
+ SystemProperties.getBoolean("persist.vendor.camera.cs.dumpyuv", false);
+ private static final int PERSIST_CS_TIMEOUT =
+ SystemProperties.getInt("persist.vendor.camera.cs.timeout", 300);
+ private static final boolean PERSIST_DUMP_DEPTH_ENABLED =
+ SystemProperties.getBoolean("persist.vendor.camera.cs.dumpdepth", false);
+ private static final boolean PERSIST_DISABLE_QCOM_MISC_SETTING =
+ SystemProperties.getBoolean("persist.vendor.camera.qcom.misc.disable", false);
+ private static final int PREVIEW_FLIP_VALUE =
+ SystemProperties.getInt("persist.vendor.debug.camera.preview.flip", 0);
+ private static final int PERSIST_VIDEO_FLIP_VALUE =
+ SystemProperties.getInt("persist.vendor.debug.camera.video.flip", 0);
+ private static final int PERSIST_PICTURE_FLIP_VALUE =
+ SystemProperties.getInt("persist.vendor.debug.camera.picture.flip", 0);
+ private static final boolean PERSIST_YV_12_FORMAT_ENABLED =
+ SystemProperties.getBoolean("persist.vendor.camera.debug.camera.yv12", false);
+ private static final String PERSIST_DISPLAY_UMAX =
+ SystemProperties.get("persist.vendor.camera.display.umax", "");
+ private static final String PERSIST_DISPLAY_LMAX =
+ SystemProperties.get("persist.vendor.camera.display.lmax", "");
public static int getMemoryLimit() {
return PERSIST_MEMORY_LIMIT;
@@ -72,15 +133,31 @@ public class PersistUtil {
public static int getLongshotShotLimit() {
return PERSIST_LONGSHOT_SHOT_LIMIT;
}
+ public static int getLongshotShotLimit(int defaultValue) {
+ return SystemProperties.getInt("persist.vendor.camera.longshot.shotnum", defaultValue);
+ }
- public static int getCameraPreviewSize() {
- return PERSIST_CAMERA_PREVIEW_SIZE;
+ public static Point getCameraPreviewSize() {
+ Point result = null;
+ if (PERSIST_CAMERA_PREVIEW_SIZE != null) {
+ String[] sourceStrArray = PERSIST_CAMERA_PREVIEW_SIZE.split("x");
+ if (sourceStrArray != null && sourceStrArray.length >= 2) {
+ result = new Point();
+ result.x = Integer.parseInt(sourceStrArray[0]);
+ result.y = Integer.parseInt(sourceStrArray[1]);
+ }
+ }
+ return result;
}
public static boolean getCamera2Mode() {
return PERSIST_CAMERA_CAMERA2;
}
+ public static boolean getCameraZSLDisabled() {
+ return PERSIST_CAMERA_ZSL;
+ }
+
public static int getCamera2Debug() {
return PERSIST_CAMERA_DEBUG;
}
@@ -110,4 +187,115 @@ public class PersistUtil {
public static int getCancelTouchFocusDelay() {
return PERSIST_CAMERA_CANCEL_TOUCHFOCUS_DELAY;
}
+
+ public static float getDualCameraBrIntensity() {
+ return Float.parseFloat(PERSIST_CAMERA_CS_BRINTENSITY_KEY);
+ }
+
+ public static float getDualCameraSmoothingIntensity() {
+ return Float.parseFloat(PERSIST_CAMERA_CS_SMOOTH_KEY);
+ }
+
+ public static boolean getDualCameraSensorAlign() {
+ return PERSIST_CAMERA_SENSOR_ALIGN_KEY == CAMERA_SENSOR_VERTICAL_ALIGNED;
+ }
+
+ public static int getCircularBufferSize(){
+ return CIRCULAR_BUFFER_SIZE_PERSIST;
+ }
+
+ public static int getSaveTaskMemoryLimitInMb(){
+ return SAVE_TASK_MEMORY_LIMIT_IN_MB;
+ }
+
+ public static boolean isAutoTestEnabled(){
+ return PERSIST_CAMERA_UI_AUTO_TEST_ENABLED;
+ }
+
+ public static boolean isSaveInSdEnabled(){
+ return PERSIST_CAMERA_SAVE_IN_SD_ENABLED;
+ }
+
+ public static boolean isLongSaveEnabled(){
+ return PERSIST_LONG_SAVE_ENABLED;
+ }
+
+ public static boolean isPreviewRestartEnabled(){
+ return PERSIST_CAMERA_PREVIEW_RESTART_ENABLED;
+ }
+
+ public static boolean isCaptureAnimationEnabled(){
+ return PERSIST_CAPTURE_ANIMATION_ENABLED;
+ }
+
+ public static boolean isSkipMemoryCheckEnabled(){
+ return PERSIST_SKIP_MEM_CHECK_ENABLED;
+ }
+
+ public static boolean isZzhdrEnabled(){
+ return PERSIST_ZZHDR_ENABLED;
+ }
+
+ public static int getPreviewSize(){
+ //Read Preview Resolution from adb command
+ //value: 0(default) - Default value as per snapshot aspect ratio
+ //value: 1 - 640x480
+ //value: 2 - 720x480
+ //value: 3 - 1280x720
+ //value: 4 - 1920x1080
+ return PERSIST_PREVIEW_SIZE;
+ }
+
+ public static long getTimestampLimit(){
+ return PERSIST_TIMESTAMP_LIMIT;
+ }
+
+ public static int getImageToBurst(){
+ return PERSIST_BURST_COUNT;
+ }
+
+ public static boolean isDumpFramesEnabled(){
+ return PERSIST_DUMP_FRAMES_ENABLED;
+ }
+
+ public static boolean isDumpYUVEnabled(){
+ return PERSIST_DUMP_YUV_ENABLED;
+ }
+
+ public static int getClearSightTimeout(){
+ return PERSIST_CS_TIMEOUT;
+ }
+
+ public static boolean isDumpDepthEnabled() {
+ return PERSIST_DUMP_DEPTH_ENABLED;
+ }
+
+ public static boolean isDisableQcomMiscSetting(){
+ return PERSIST_DISABLE_QCOM_MISC_SETTING;
+ }
+
+ public static int getPreviewFlip() {
+ return PREVIEW_FLIP_VALUE;
+ }
+
+ public static int getVideoFlip() {
+ return PERSIST_VIDEO_FLIP_VALUE;
+ }
+
+ public static int getPictureFlip() {
+ return PERSIST_PICTURE_FLIP_VALUE;
+ }
+
+ public static boolean isYv12FormatEnable() {
+ return PERSIST_YV_12_FORMAT_ENABLED;
+ }
+
+ public static String getDisplayUMax() {
+ return PERSIST_DISPLAY_UMAX;
+ }
+
+ public static String getDisplayLMax() {
+ return PERSIST_DISPLAY_LMAX;
+ }
+
}
diff --git a/version.mk b/version.mk
index 869c764ad..b9926f8b1 100644
--- a/version.mk
+++ b/version.mk
@@ -85,10 +85,10 @@ version_code_package := $(base_version_major)$(base_version_minor)$(base_version
# On eng builds, the BUILD_NUMBER has the user and timestamp inline
ifneq "" "$(filter eng.%,$(BUILD_NUMBER))"
git_hash := $(shell git --git-dir $(LOCAL_PATH)/.git log -n 1 --pretty=format:%h)
- date_string := $(shell date +%m%d%y_%H%M%S)
+ date_string := $$(date +%m%d%y_%H%M%S)
version_name_package := $(base_version_major).$(base_version_minor).$(base_version_build) (eng.$(USER).$(git_hash).$(date_string)-$(base_version_arch)$(base_version_density))
else
- version_name_package := $(base_version_major).$(base_version_minor).$(base_version_build) ($(BUILD_NUMBER)-$(base_version_arch)$(base_version_density))
+ version_name_package := $(base_version_major).$(base_version_minor).$(base_version_build) ($(BUILD_NUMBER_FROM_FILE)-$(base_version_arch)$(base_version_density))
endif
# Cleanup the locals