From 0968d9756ccc3f2991e0f8ac5a45b5d20e2a8e30 Mon Sep 17 00:00:00 2001 From: Jeongmo Yang Date: Thu, 3 Sep 2015 19:30:34 +0900 Subject: [PATCH] Skip restart preview if new and old preview resolutions are same Change-Id: I50ba05817016ca8879384f88dc86dada4d731a9f Signed-off-by: Jeongmo Yang --- src/include/mm_camcorder_internal.h | 1 + src/mm_camcorder_attribute.c | 43 ++++++++++++++++++++++++++++++++----- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/src/include/mm_camcorder_internal.h b/src/include/mm_camcorder_internal.h index 4d1e072..aa69471 100644 --- a/src/include/mm_camcorder_internal.h +++ b/src/include/mm_camcorder_internal.h @@ -668,6 +668,7 @@ typedef struct mmf_camcorder { char *software_version; /**< software_version from system info */ int capture_sound_count; /**< count for capture sound */ char *root_directory; /**< Root directory for device */ + int resolution_changed; /**< Flag for preview resolution change */ _MMCamcorderInfoConverting caminfo_convert[CAMINFO_CONVERT_NUM]; /**< converting structure of camera info */ _MMCamcorderEnumConvert enum_conv[ENUM_CONVERT_NUM]; /**< enum converting list that is modified by ini info */ diff --git a/src/mm_camcorder_attribute.c b/src/mm_camcorder_attribute.c index 0402f3b..a0e1644 100644 --- a/src/mm_camcorder_attribute.c +++ b/src/mm_camcorder_attribute.c @@ -2083,6 +2083,13 @@ bool _mmcamcorder_commit_camera_width(MMHandleType handle, int attr_idx, const m NULL); if (current_state == MM_CAMCORDER_STATE_PREPARE) { + if (hcamcorder->resolution_changed == FALSE) { + _mmcam_dbg_log("no need to restart preview"); + return TRUE; + } + + hcamcorder->resolution_changed = FALSE; + if (!pthread_mutex_trylock(&(hcamcorder->restart_preview_lock))) { _mmcam_dbg_log("restart preview"); @@ -2141,7 +2148,7 @@ bool _mmcamcorder_commit_camera_height(MMHandleType handle, int attr_idx, const mmf_return_val_if_fail(attr, FALSE); _mmcam_dbg_log("Height(%d)", value->value.i_val); - current_state = _mmcamcorder_get_state( handle); + current_state = _mmcamcorder_get_state(handle); if (current_state > MM_CAMCORDER_STATE_PREPARE) { _mmcam_dbg_log("Resolution can't be changed.(state=%d)", current_state); @@ -2164,6 +2171,13 @@ bool _mmcamcorder_commit_camera_height(MMHandleType handle, int attr_idx, const sc->info_video->preview_height = height; if (current_state == MM_CAMCORDER_STATE_PREPARE) { + if (hcamcorder->resolution_changed == FALSE) { + _mmcam_dbg_log("no need to restart preview"); + return TRUE; + } + + hcamcorder->resolution_changed = FALSE; + if (!pthread_mutex_trylock(&(hcamcorder->restart_preview_lock))) { _mmcam_dbg_log("restart preview"); @@ -4166,17 +4180,17 @@ static bool __mmcamcorder_set_capture_resolution(MMHandleType handle, int width, } -static int -__mmcamcorder_check_valid_pair( MMHandleType handle, char **err_attr_name, const char *attribute_name, va_list var_args ) +static int __mmcamcorder_check_valid_pair(MMHandleType handle, char **err_attr_name, const char *attribute_name, va_list var_args) { #define INIT_VALUE -1 #define CHECK_COUNT 3 - mmf_camcorder_t *hcamcorder= MMF_CAMCORDER(handle); + mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle); MMHandleType attrs = 0; int ret = MM_ERROR_NONE; - int i = 0, j = 0; + int i = 0; + int j = 0; const char *name = NULL; const char *check_pair_name[CHECK_COUNT][3] = { {MMCAM_CAMERA_WIDTH, MMCAM_CAMERA_HEIGHT, "MMCAM_CAMERA_WIDTH and HEIGHT"}, @@ -4326,6 +4340,25 @@ __mmcamcorder_check_valid_pair( MMHandleType handle, char **err_attr_name, const return MM_ERROR_CAMCORDER_INVALID_ARGUMENT; } + if (!strcmp(check_pair_name[i][0], MMCAM_CAMERA_WIDTH)) { + int current_width = 0; + int current_height = 0; + + mm_camcorder_get_attributes(handle, NULL, + MMCAM_CAMERA_WIDTH, ¤t_width, + MMCAM_CAMERA_HEIGHT, ¤t_height, + NULL); + + if (current_width != check_pair_value[i][0] || + current_height != check_pair_value[i][1]) { + hcamcorder->resolution_changed = TRUE; + } else { + hcamcorder->resolution_changed = FALSE; + } + + _mmcam_dbg_log("resolution changed : %d", hcamcorder->resolution_changed); + } + if (err_name) { free(err_name); err_name = NULL; -- 2.7.4