From: Minje Ahn Date: Tue, 14 Nov 2017 23:56:42 +0000 (+0900) Subject: Remove user_marked field in face table X-Git-Tag: submit/tizen/20171115.074622^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a267926466de6df4e761a9223e97cb97f52f1542;p=platform%2Fcore%2Fmultimedia%2Fdcm-service.git Remove user_marked field in face table Add face scan status for distinguish between file changes and re-scans. - file modified time > face detected time : file is changed - face detected time == 0 : some detected faces are removed by user Change logic to re-scan: - Do not delete, add missing. Delete is performed only when the file is modified. - Delete unnecessary fields (user_marked) Change-Id: I1782e330698612c719c4842c6d9d9b1e990b9e2c Signed-off-by: Minje Ahn --- diff --git a/include/dcm_svc_db.h b/include/dcm_svc_db.h index 66f7879..aa86a19 100755 --- a/include/dcm_svc_db.h +++ b/include/dcm_svc_db.h @@ -28,9 +28,10 @@ #define DB_TABLE_FACE "face" #define DB_TABLE_FACE_SCAN_LIST "face_scan_list" #define DB_TABLE_MEDIA "media" + #define FACE_ITEM "media_uuid, face_rect_x , face_rect_y, face_rect_w , face_rect_h, orientation" -#define SELECT_MEDIA_INFO_BY_FILE_PATH_FROM_DB "SELECT media_uuid, width, height, orientation, mime_type, modified_time FROM media WHERE path = '%q';" +#define SELECT_MEDIA_INFO_BY_FILE_PATH_FROM_DB "SELECT media_uuid, width, height, orientation, mime_type, modified_time FROM "DB_TABLE_MEDIA" WHERE path = '%q';" #define SELECT_SCAN_INFO_BY_MEDIA_ID "SELECT modified_time FROM "DB_TABLE_FACE_SCAN_LIST" WHERE media_uuid = '%q';" #define INSERT_FACE_ITEM_TO_DB "INSERT OR IGNORE INTO " DB_TABLE_FACE" (" FACE_ITEM") VALUES ('%q', %d, %d, %d, %d, %d);" @@ -55,7 +56,8 @@ typedef enum { FACE_SCAN_NEEDED = 0, FACE_SCAN_NO_NEEDED = 1, FACE_SCAN_REFRESH_NEEDED = 2, - FACE_SCAN_STATUS_NONE = 3, + FACE_SCAN_RESCAN = 3, + FACE_SCAN_STATUS_NONE = 4, } dcm_face_scan_status_e; int dcm_svc_db_connect(uid_t uid); @@ -64,7 +66,6 @@ int dcm_svc_db_get_scan_image_info_by_path(const char *file_path, dcm_svc_item_s int dcm_svc_db_insert_face_to_db(dcm_face_item_s *face); int dcm_svc_db_update_color_to_db(const dcm_color_item_s color); int dcm_svc_db_insert_face_to_face_scan_list(dcm_svc_item_s *scan_item); -int dcm_svc_db_update_face_to_face_scan_list(dcm_svc_item_s *scan_item); int dcm_svc_db_delete_face_from_db(const char *media_uuid); int dcm_svc_db_check_scanned_by_media_uuid(const char *media_uuid, time_t modified_time, dcm_face_scan_status_e *scan_status); diff --git a/src/dcm_svc_db.c b/src/dcm_svc_db.c index fcbc573..d5ab0ea 100755 --- a/src/dcm_svc_db.c +++ b/src/dcm_svc_db.c @@ -187,35 +187,7 @@ int dcm_svc_db_insert_face_to_face_scan_list(dcm_svc_item_s *scan_item) dcm_retvm_if(scan_item == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid scan_item"); dcm_retvm_if(scan_item->media_uuid == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid media_uuid"); - query_string = sqlite3_mprintf("INSERT OR IGNORE INTO %s (media_uuid, modified_time) values('%q', %d)", DB_TABLE_FACE_SCAN_LIST, scan_item->media_uuid, scan_item->modified_time); - dcm_debug("query[%s]", query_string); - - g_mutex_trylock(&gMutexLock); - ret = media_db_request_update_db(query_string, dcm_uid); - if (ret != MS_MEDIA_ERR_NONE) - dcm_error("media_db_request_update_db is failed: %d, %s", ret, sqlite3_errmsg((sqlite3 *)db_handle)); - - g_mutex_unlock(&gMutexLock); - - DCM_SQLITE3_FREE(query_string); - - dcm_debug_fleave(); - - return ret; -} - -int dcm_svc_db_update_face_to_face_scan_list(dcm_svc_item_s *scan_item) -{ - int ret = MS_MEDIA_ERR_NONE; - char* query_string = NULL; - - dcm_debug_fenter(); - - dcm_retvm_if(db_handle == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid db_handle"); - dcm_retvm_if(scan_item == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid scan_item"); - dcm_retvm_if(scan_item->media_uuid == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid media_uuid"); - - query_string = sqlite3_mprintf("UPDATE %s SET modified_time = %d WHERE media_uuid='%q'", DB_TABLE_FACE_SCAN_LIST, scan_item->modified_time, scan_item->media_uuid); + query_string = sqlite3_mprintf("INSERT OR REPLACE INTO %s (media_uuid, modified_time) values('%q', %d)", DB_TABLE_FACE_SCAN_LIST, scan_item->media_uuid, scan_item->modified_time); dcm_debug("query[%s]", query_string); g_mutex_trylock(&gMutexLock); @@ -242,7 +214,7 @@ int dcm_svc_db_delete_face_from_db(const char *media_uuid) dcm_retvm_if(db_handle == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid db_handle"); dcm_retvm_if(media_uuid == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid media_uuid"); - query_string = sqlite3_mprintf("DELETE FROM %s WHERE media_uuid='%q' AND user_marked = 0", DB_TABLE_FACE, media_uuid); + query_string = sqlite3_mprintf("DELETE FROM %s WHERE media_uuid='%q'", DB_TABLE_FACE, media_uuid); dcm_sec_debug("query[%s]", query_string); g_mutex_trylock(&gMutexLock); @@ -310,8 +282,12 @@ int dcm_svc_db_check_scanned_by_media_uuid(const char *media_uuid, time_t modifi if (org_modified_time == modified_time) { dcm_info("Already scanned item"); *scan_status = FACE_SCAN_NO_NEEDED; + } else if (org_modified_time == 0) { + /*In case of the some objects removed by user */ + dcm_info("Some objects have been deleted"); + *scan_status = FACE_SCAN_RESCAN; } else { - dcm_info("Scanned but item updated. Scanning needed"); + dcm_info("Scanned but item is modified"); *scan_status = FACE_SCAN_REFRESH_NEEDED; } diff --git a/src/dcm_svc_detect_face.c b/src/dcm_svc_detect_face.c index 79659ef..17ad2c8 100755 --- a/src/dcm_svc_detect_face.c +++ b/src/dcm_svc_detect_face.c @@ -195,15 +195,9 @@ int dcm_face_detect_process(dcm_svc_item_s *scan_item, dcm_face_scan_status_e sc DCM_SVC_FACE_RECOGNIZE_BUFFER_FAILED: - if (scan_status == FACE_SCAN_REFRESH_NEEDED) { - err = dcm_svc_db_update_face_to_face_scan_list(scan_item); - if (err != MS_MEDIA_ERR_NONE) - dcm_error("Failed to update face item into face_scan_list! err: %d", err); - } else { - err = dcm_svc_db_insert_face_to_face_scan_list(scan_item); - if (err != MS_MEDIA_ERR_NONE) - dcm_error("Failed to insert face item into face_scan_list! err: %d", err); - } + err = dcm_svc_db_insert_face_to_face_scan_list(scan_item); + if (err != MS_MEDIA_ERR_NONE) + dcm_error("Failed to insert face item into face_scan_list! err: %d", err); dcm_face_destroy_face_info(face_info); diff --git a/src/dcm_svc_internal.c b/src/dcm_svc_internal.c index 330612a..29acf65 100755 --- a/src/dcm_svc_internal.c +++ b/src/dcm_svc_internal.c @@ -47,7 +47,6 @@ static int __dcm_scan_process(dcm_svc_item_s *scan_item) if (scan_status == FACE_SCAN_NO_NEEDED) { dcm_warn("This media is scanned already! Skip..."); - DCM_SAFE_FREE(image_info.pixel); return MS_MEDIA_ERROR_ALREADY_SCANNED; } else { dcm_debug("Need to Scan"); @@ -74,8 +73,9 @@ static int __dcm_scan_process(dcm_svc_item_s *scan_item) dcm_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "Failed dcm_decode_image(%d)", ret); dcm_info("Image info W[%d] H[%d] Orient[%d] buf_w[%d] buf_h[%d]", - image_info.original_width, image_info.original_height, scan_item->image_orientation, image_info.buffer_width, image_info.buffer_height); + image_info.original_width, image_info.original_height, image_info.orientation, image_info.buffer_width, image_info.buffer_height); + /* If status is refresh, remove all faces and re-insert */ if (scan_status == FACE_SCAN_REFRESH_NEEDED) { ret = dcm_svc_db_delete_face_from_db(scan_item->media_uuid); if (ret != MS_MEDIA_ERR_NONE)