From ce10b76e299c2799a1fced1591614fac7f04b9ab Mon Sep 17 00:00:00 2001 From: hj kim Date: Mon, 20 Nov 2017 15:12:43 +0900 Subject: [PATCH] Bug fix of getting detected face count - Change way to get count from DB. Change-Id: I220163f6e93752613d22bf56e70af69260f7139b --- include/dcm_svc_db.h | 14 +------------- include/dcm_svc_internal.h | 1 - src/dcm_svc_db.c | 39 ++++++++++++++++++++++++++++++++++++++ src/dcm_svc_detect_face.c | 2 -- src/dcm_svc_internal.c | 15 ++++----------- src/dcm_svc_ipc.c | 2 +- 6 files changed, 45 insertions(+), 28 deletions(-) diff --git a/include/dcm_svc_db.h b/include/dcm_svc_db.h index 0c6141c..08e17d1 100755 --- a/include/dcm_svc_db.h +++ b/include/dcm_svc_db.h @@ -18,22 +18,9 @@ #ifndef _DCM_DB_UTILS_H_ #define _DCM_DB_UTILS_H_ -#include #include #define DCM_STRING_VALID(str) ((str != NULL && strlen(str) > 0) ? TRUE : FALSE) -#define DCM_SQLITE3_FINALIZE(x) { if (x != NULL) { sqlite3_finalize(x); x = NULL; } } -#define DCM_SQLITE3_FREE(x) { if (x != NULL) { sqlite3_free(x); x = NULL; } } - -#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 "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);" typedef enum { FACE_SCAN_NEEDED = 0, @@ -50,6 +37,7 @@ int dcm_svc_db_insert_face_to_db(const char *media_uuid, unsigned int x, unsigne int dcm_svc_db_insert_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); +int dcm_svc_db_get_face_cnt_from_db(const char* media_uuid, int *face_cnt); #endif /*_DCM_DB_UTILS_H_*/ diff --git a/include/dcm_svc_internal.h b/include/dcm_svc_internal.h index 6ef548d..cd50d70 100755 --- a/include/dcm_svc_internal.h +++ b/include/dcm_svc_internal.h @@ -29,7 +29,6 @@ typedef struct { int image_height; int image_orientation; char *mime_type; - int face_count; } dcm_svc_item_s; typedef struct { diff --git a/src/dcm_svc_db.c b/src/dcm_svc_db.c index cdc0c04..689ba1f 100755 --- a/src/dcm_svc_db.c +++ b/src/dcm_svc_db.c @@ -19,10 +19,24 @@ #include #include #include +#include #include #include +#define DCM_SQLITE3_FINALIZE(x) { if (x != NULL) { sqlite3_finalize(x); x = NULL; } } +#define DCM_SQLITE3_FREE(x) { if (x != NULL) { sqlite3_free(x); x = NULL; } } + +#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 "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);" +#define SELECT_FACE_COUNT_BY_MEDIA_ID "SELECT COUNT(*) FROM " DB_TABLE_FACE" WHERE media_uuid = '%q';" + static GMutex gMutexLock; static MediaDBHandle *db_handle; static uid_t dcm_uid; @@ -272,3 +286,28 @@ int dcm_svc_db_check_scanned_by_media_uuid(const char *media_uuid, time_t modifi return MS_MEDIA_ERR_NONE; } + +int dcm_svc_db_get_face_cnt_from_db(const char* media_uuid, int *face_cnt) +{ + int ret = MS_MEDIA_ERR_NONE; + char *query_string = NULL; + sqlite3_stmt *sql_stmt = NULL; + + dcm_retvm_if(db_handle == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid db_handle"); + dcm_retvm_if(!DCM_STRING_VALID(media_uuid), MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid media_uuid"); + dcm_retvm_if(face_cnt == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid face_cnt"); + + /* Make query */ + query_string = sqlite3_mprintf(SELECT_FACE_COUNT_BY_MEDIA_ID, media_uuid); + dcm_retvm_if(query_string == NULL, MS_MEDIA_ERR_OUT_OF_MEMORY, "Invalid query_string"); + + ret = __dcm_svc_sql_prepare_to_step((sqlite3 *)db_handle, query_string, &sql_stmt); + dcm_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "Fail __dcm_svc_sql_prepare_to_step [%d]", ret); + + *face_cnt = (int)sqlite3_column_int(sql_stmt, 0); + + DCM_SQLITE3_FINALIZE(sql_stmt); + + return MS_MEDIA_ERR_NONE; +} + diff --git a/src/dcm_svc_detect_face.c b/src/dcm_svc_detect_face.c index 303461e..6b28d32 100755 --- a/src/dcm_svc_detect_face.c +++ b/src/dcm_svc_detect_face.c @@ -120,10 +120,8 @@ int dcm_face_detect_process(dcm_svc_item_s *scan_item, dcm_face_scan_status_e sc dcm_warn("detected face count: %d", face_info->count); if (face_info->count <= 0) { - scan_item->face_count = 0; goto DCM_SVC_FACE_RECOGNIZE_BUFFER_FAILED; } - scan_item->face_count = face_info->count; /* Compute scale factor between decode size and original size */ scale_factor = __calculate_scale_factor(image_info->original_width, image_info->original_height, image_info->buffer_width, image_info->buffer_height); diff --git a/src/dcm_svc_internal.c b/src/dcm_svc_internal.c index 76f57bd..3c64ffb 100755 --- a/src/dcm_svc_internal.c +++ b/src/dcm_svc_internal.c @@ -46,7 +46,7 @@ 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..."); - return MS_MEDIA_ERROR_ALREADY_SCANNED; + return MS_MEDIA_ERR_NONE; } else { dcm_debug("Need to Scan"); } @@ -119,20 +119,13 @@ int dcm_scan_single(const char *file_path, uid_t uid, int *face_count) } ret = __dcm_scan_process(scan_item); - if (ret != MS_MEDIA_ERR_NONE) { - if (ret != MS_MEDIA_ERROR_ALREADY_SCANNED) - dcm_error("Failed to process scan job! err: %d", ret); + if (ret != MS_MEDIA_ERR_NONE) + dcm_error("Failed to process scan job! err: %d", ret); - /* If the scan item is not scanned, insert media uuid into face_scan_list */ - if (ret != MS_MEDIA_ERROR_ALREADY_SCANNED) - dcm_svc_db_insert_face_to_face_scan_list(scan_item); - } + dcm_svc_db_get_face_cnt_from_db(scan_item->media_uuid, face_count); dcm_svc_db_disconnect(); - *face_count = scan_item->face_count; - dcm_debug("*face_count is %d", *face_count); - DCM_SAFE_FREE(scan_item->media_uuid); DCM_SAFE_FREE(scan_item->file_path); DCM_SAFE_FREE(scan_item); diff --git a/src/dcm_svc_ipc.c b/src/dcm_svc_ipc.c index 89fad2d..ca4d168 100755 --- a/src/dcm_svc_ipc.c +++ b/src/dcm_svc_ipc.c @@ -193,7 +193,7 @@ int dcm_ipc_send_client_message(int socket_fd, ms_dcm_msg_type_e msg_type, unsig return MS_MEDIA_ERR_SOCKET_SEND; } - dcm_debug("Sent message type: %d %d", send_msg.msg_type, send_msg.result); + dcm_debug("Sent message type: [%d] [%d]", send_msg.msg_type, send_msg.result); close(sock); -- 2.34.1