Merge remote branch 'cm/cm-11.0'
diff --git a/camera/exynos_camera.c b/camera/exynos_camera.c
index 6b6bce3..6ef2dc6 100644
--- a/camera/exynos_camera.c
+++ b/camera/exynos_camera.c
@@ -922,9 +922,13 @@
if (rc < 0)
ALOGE("%s: Unable to set object y position", __func__);
}
- }
- focus_mode = FOCUS_MODE_TOUCH;
+ /* After taking a picture, focus-areas is reseted by stock camera app to the center of the screen */
+ if (! ( (focus_x == (preview_width / 2)) && (focus_y == (preview_height / 2)) )) {
+ //ALOGV("%s focus_mode changed to %d due to focus-areas='%s'", __func__, focus_mode, focus_areas_string);
+ focus_mode = FOCUS_MODE_TOUCH;
+ }
+ }
}
@@ -1082,9 +1086,11 @@
}
}
- rc = exynos_v4l2_s_ctrl(exynos_camera, 0, V4L2_CID_CAMERA_FOCUS_MODE, focus_mode);
- if (rc < 0)
- ALOGE("%s: Unable to set focus mode", __func__);
+ if (focus_mode != exynos_camera->focus_mode || force) {
+ rc = exynos_v4l2_s_ctrl(exynos_camera, 0, V4L2_CID_CAMERA_FOCUS_MODE, focus_mode);
+ if (rc < 0)
+ ALOGE("%s: Unable to set focus mode", __func__);
+ }
exynos_camera->focus_mode = focus_mode;
sprintf(exynos_camera->raw_focus_mode, "%s", focus_mode_string);
@@ -2110,6 +2116,11 @@
goto complete;
error:
+ if (exynos_camera->face_data != NULL && exynos_camera->face_data->release != NULL) {
+ exynos_camera->face_data->release(exynos_camera->face_data);
+ exynos_camera->face_data = NULL;
+ }
+
if (exynos_camera->capture_memory != NULL && exynos_camera->capture_memory->release != NULL) {
exynos_camera->capture_memory->release(exynos_camera->capture_memory);
exynos_camera->capture_memory = NULL;
@@ -2154,6 +2165,11 @@
ALOGE("%s: Unable to stop stream", __func__);
}
+ if (exynos_camera->face_data != NULL && exynos_camera->face_data->release != NULL) {
+ exynos_camera->face_data->release(exynos_camera->face_data);
+ exynos_camera->face_data = NULL;
+ }
+
if (exynos_camera->capture_memory != NULL && exynos_camera->capture_memory->release != NULL) {
exynos_camera->capture_memory->release(exynos_camera->capture_memory);
exynos_camera->capture_memory = NULL;
@@ -3798,6 +3814,7 @@
void exynos_camera_recording_thread_stop(struct exynos_camera *exynos_camera)
{
+ camera_memory_t *memory;
int i;
if (exynos_camera == NULL)
@@ -3810,6 +3827,8 @@
return;
}
+ memory = exynos_camera->recording_memory;
+
if (exynos_camera->recording_listener != NULL) {
exynos_camera_capture_listener_unregister(exynos_camera, exynos_camera->recording_listener);
exynos_camera->recording_listener = NULL;
@@ -3837,6 +3856,11 @@
pthread_mutex_destroy(&exynos_camera->recording_mutex);
pthread_mutex_destroy(&exynos_camera->recording_lock_mutex);
+
+ if (memory != NULL && memory->release != NULL) {
+ memory->release(memory);
+ exynos_camera->recording_memory = NULL;
+ }
}
// Auto-focus
diff --git a/configs/media_codecs.xml b/configs/media_codecs.xml
index ddebc53..92e1915 100755
--- a/configs/media_codecs.xml
+++ b/configs/media_codecs.xml
@@ -94,6 +94,29 @@
<MediaCodec name="OMX.google.h264.decoder" type="video/avc" />
<MediaCodec name="OMX.google.vp8.decoder" type="video/x-vnd.on2.vp8" />
<MediaCodec name="OMX.google.vp9.decoder" type="video/x-vnd.on2.vp9" />
+
+ <!-- ffmpeg audio codecs -->
+ <MediaCodec name="OMX.ffmpeg.ra.decoder" type="audio/vnd.rn-realaudio"/>
+ <MediaCodec name="OMX.ffmpeg.flac.decoder" type="audio/flac"/>
+ <MediaCodec name="OMX.ffmpeg.mp2.decoder" type="audio/mpeg-L2"/>
+ <MediaCodec name="OMX.ffmpeg.ac3.decoder" type="audio/ac3"/>
+ <MediaCodec name="OMX.ffmpeg.ape.decoder" type="audio/x-ape"/>
+ <MediaCodec name="OMX.ffmpeg.dts.decoder" type="audio/vnd.dts"/>
+ <MediaCodec name="OMX.ffmpeg.atrial.decoder" type="audio/ffmpeg"/>
+
+ <!-- ffmpeg video codecs -->
+ <MediaCodec name="OMX.ffmpeg.mpeg2v.decoder" type="video/mpeg2"/>
+ <MediaCodec name="OMX.ffmpeg.h263.decoder" type="video/3gpp"/>
+ <MediaCodec name="OMX.ffmpeg.mpeg4.decoder" type="video/mp4v-es"/>
+ <MediaCodec name="OMX.ffmpeg.wmv.decoder" type="video/x-ms-wmv"/>
+ <MediaCodec name="OMX.ffmpeg.rv.decoder" type="video/vnd.rn-realvideo"/>
+ <MediaCodec name="OMX.ffmpeg.h264.decoder" type="video/avc"/>
+ <MediaCodec name="OMX.ffmpeg.vc1.decoder" type="video/vc1"/>
+ <MediaCodec name="OMX.ffmpeg.flv1.decoder" type="video/x-flv"/>
+ <MediaCodec name="OMX.ffmpeg.divx.decoder" type="video/divx"/>
+ <MediaCodec name="OMX.ffmpeg.hevc.decoder" type="video/hevc"/>
+ <MediaCodec name="OMX.ffmpeg.vtrial.decoder" type="video/ffmpeg"/>
+
</Decoders>
<Encoders>
diff --git a/configs/media_profiles.xml b/configs/media_profiles.xml
index 2de9af9..4dc5f0d 100644
--- a/configs/media_profiles.xml
+++ b/configs/media_profiles.xml
@@ -25,6 +25,7 @@
<!ATTLIST EncoderProfile quality (timelapse1080p|timelapse720p|timelapse480p|timelapsehigh|timelapselow|480p|qcif|high|low) #REQUIRED>
<!ATTLIST EncoderProfile fileFormat (mp4|3gp) #REQUIRED>
<!ATTLIST EncoderProfile duration (30|60) #REQUIRED>
+ <!ATTLIST EncoderProfile cameraId (0|1) #REQUIRED>
<!ELEMENT Video EMPTY>
<!ATTLIST Video codec (h264|h263|m4v) #REQUIRED>
<!ATTLIST Video bitRate CDATA #REQUIRED>
@@ -89,25 +90,12 @@
<!-- Back Camera -->
<CamcorderProfiles cameraId="0">
- <EncoderProfile quality="low" fileFormat="mp4" duration="30">
+ <EncoderProfile quality="qvga" fileFormat="mp4" duration="30">
<Video codec="h264"
bitRate="384000"
- width="176"
- height="144"
- frameRate="30" />
-
- <Audio codec="aac"
- bitRate="128000"
- sampleRate="48000"
- channels="2" />
- </EncoderProfile>
-
- <EncoderProfile quality="qcif" fileFormat="mp4" duration="30">
- <Video codec="h264"
- bitRate="384000"
- width="176"
- height="144"
- frameRate="30" />
+ width="320"
+ height="240"
+ frameRate="15" />
<Audio codec="aac"
bitRate="128000"
@@ -154,40 +142,6 @@
channels="2" />
</EncoderProfile>
- <EncoderProfile quality="timelapselow" fileFormat="3gp" duration="30">
- <Video codec="h264"
- bitRate="384000"
- width="176"
- height="144"
- frameRate="30" />
-
- <!--
- The Audio part of the profile will not be used since time lapse mode
- does not capture audio
- -->
- <Audio codec="aac"
- bitRate="128000"
- sampleRate="48000"
- channels="1" />
- </EncoderProfile>
-
- <EncoderProfile quality="timelapsehigh" fileFormat="mp4" duration="30">
- <Video codec="h264"
- bitRate="17000000"
- width="1920"
- height="1080"
- frameRate="30" />
-
- <!--
- The Audio part of the profile will not be used since time lapse mode
- does not capture audio
- -->
- <Audio codec="aac"
- bitRate="128000"
- sampleRate="48000"
- channels="1" />
- </EncoderProfile>
-
<EncoderProfile quality="timelapseqcif" fileFormat="3gp" duration="30">
<Video codec="h264"
bitRate="384000"
@@ -266,38 +220,12 @@
<!-- Front Camera -->
<CamcorderProfiles cameraId="1">
- <EncoderProfile quality="low" fileFormat="3gp" duration="30">
+ <EncoderProfile quality="qvga" fileFormat="3gp" duration="30">
<Video codec="h264"
bitRate="384000"
- width="176"
- height="144"
- frameRate="30" />
-
- <Audio codec="aac"
- bitRate="128000"
- sampleRate="48000"
- channels="1" />
- </EncoderProfile>
-
- <EncoderProfile quality="high" fileFormat="mp4" duration="30">
- <Video codec="h264"
- bitRate="3078000"
- width="640"
- height="480"
- frameRate="30" />
-
- <Audio codec="aac"
- bitRate="128000"
- sampleRate="48000"
- channels="1" />
- </EncoderProfile>
-
- <EncoderProfile quality="qcif" fileFormat="3gp" duration="30">
- <Video codec="h264"
- bitRate="384000"
- width="176"
- height="144"
- frameRate="30" />
+ width="320"
+ height="240"
+ frameRate="15" />
<Audio codec="aac"
bitRate="128000"
@@ -318,40 +246,6 @@
channels="1" />
</EncoderProfile>
- <EncoderProfile quality="timelapselow" fileFormat="3gp" duration="30">
- <Video codec="h264"
- bitRate="384000"
- width="176"
- height="144"
- frameRate="30" />
-
- <!--
- The Audio part of the profile will not be used since time lapse mode
- does not capture audio
- -->
- <Audio codec="aac"
- bitRate="128000"
- sampleRate="48000"
- channels="1" />
- </EncoderProfile>
-
- <EncoderProfile quality="timelapsehigh" fileFormat="mp4" duration="30">
- <Video codec="h264"
- bitRate="3078000"
- width="640"
- height="480"
- frameRate="30" />
-
- <!--
- The Audio part of the profile will not be used since time lapse mode
- does not capture audio
- -->
- <Audio codec="aac"
- bitRate="128000"
- sampleRate="48000"
- channels="1" />
- </EncoderProfile>
-
<EncoderProfile quality="timelapseqcif" fileFormat="3gp" duration="30">
<Video codec="h264"
bitRate="384000"
diff --git a/libhealthd/healthd_board_exynos4.cpp b/libhealthd/healthd_board_exynos4.cpp
index 5809692..90a1719 100644
--- a/libhealthd/healthd_board_exynos4.cpp
+++ b/libhealthd/healthd_board_exynos4.cpp
@@ -23,7 +23,7 @@
config->batteryCapacityPath = "/sys/class/power_supply/battery/capacity";
config->batteryStatusPath = "/sys/class/power_supply/battery/status";
config->batteryVoltagePath = "/sys/class/power_supply/battery/voltage_now";
- config->batteryCurrentNowPath = "/sys/class/power_supply/battery/batt_current_now";
+ config->batteryCurrentNowPath = "/sys/class/power_supply/battery/current_now";
config->batteryPresentPath = "/sys/class/power_supply/battery/present";
config->batteryHealthPath = "/sys/class/power_supply/battery/health";
config->batteryTemperaturePath = "/sys/class/power_supply/battery/temp";
diff --git a/recovery/recovery_keys.c b/recovery/recovery_keys.c
index 528a796..f9a1072 100644
--- a/recovery/recovery_keys.c
+++ b/recovery/recovery_keys.c
@@ -4,19 +4,6 @@
#include "common.h"
#include "extendedcommands.h"
-
-int device_toggle_display(volatile char* key_pressed, int key_code) {
- int alt = key_pressed[KEY_LEFTALT] || key_pressed[KEY_RIGHTALT];
- if (alt && key_code == KEY_L)
- return 1;
- // allow toggling of the display if the correct key is pressed, and the display toggle is allowed or the display is currently off
- if (ui_get_showing_back_button()) {
- return 0;
- //return get_allow_toggle_display() && (key_code == KEY_HOME || key_code == KEY_MENU || key_code == KEY_END);
- }
- return get_allow_toggle_display() && (key_code == KEY_HOMEPAGE || key_code == KEY_MENU || key_code == KEY_POWER || key_code == KEY_END);
-}
-
int device_handle_key(int key_code, int visible) {
if (visible) {
switch (key_code) {
@@ -24,37 +11,32 @@
case KEY_DOWN:
case KEY_VOLUMEDOWN:
return HIGHLIGHT_DOWN;
+
case KEY_MENU:
return NO_ACTION;
+
case KEY_LEFTSHIFT:
case KEY_UP:
case KEY_VOLUMEUP:
return HIGHLIGHT_UP;
+
case KEY_HOMEPAGE:
- if (ui_get_showing_back_button()) {
- return SELECT_ITEM;
- }
- if (!get_allow_toggle_display())
- return GO_BACK;
- break;
case KEY_POWER:
- if (ui_get_showing_back_button()) {
- return SELECT_ITEM;
- }
- if (!get_allow_toggle_display())
- return GO_BACK;
- break;
case KEY_LEFTBRACE:
case KEY_ENTER:
case BTN_MOUSE:
case KEY_CAMERA:
case KEY_F21:
- case KEY_SEND:
+ case KEY_SEND:
+ return SELECT_ITEM;
+
case KEY_END:
case KEY_BACKSPACE:
case KEY_SEARCH:
case KEY_BACK:
- return GO_BACK;
+ if (!ui_root_menu) {
+ return GO_BACK;
+ }
}
}