Skip restart preview if new and old preview resolutions are same 55/47455/1
authorJeongmo Yang <jm80.yang@samsung.com>
Thu, 3 Sep 2015 10:30:34 +0000 (19:30 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Thu, 3 Sep 2015 10:30:34 +0000 (19:30 +0900)
Change-Id: I50ba05817016ca8879384f88dc86dada4d731a9f
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
src/include/mm_camcorder_internal.h
src/mm_camcorder_attribute.c

index 4d1e072..aa69471 100644 (file)
@@ -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 */
index 0402f3b..a0e1644 100644 (file)
@@ -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, &current_width,
+                                                           MMCAM_CAMERA_HEIGHT, &current_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;