Bug fix of getting detected face count 96/160796/2 accepted/tizen/unified/20171121.061022 submit/tizen/20171120.082013
authorhj kim <backto.kim@samsung.com>
Mon, 20 Nov 2017 06:12:43 +0000 (15:12 +0900)
committerhj kim <backto.kim@samsung.com>
Mon, 20 Nov 2017 06:12:53 +0000 (15:12 +0900)
- Change way to get count from DB.

Change-Id: I220163f6e93752613d22bf56e70af69260f7139b

include/dcm_svc_db.h
include/dcm_svc_internal.h
src/dcm_svc_db.c
src/dcm_svc_detect_face.c
src/dcm_svc_internal.c
src/dcm_svc_ipc.c

index 0c6141ca67f9ce30c2d25ac0df5f125e3411716c..08e17d13b0e118732a5681d4aa46187d5101a477 100755 (executable)
 #ifndef _DCM_DB_UTILS_H_
 #define _DCM_DB_UTILS_H_
 
-#include <sqlite3.h>
 #include <dcm_svc_internal.h>
 
 #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_*/
 
index 6ef548d04d5d7cd0f8636f4c82bb3746091d866c..cd50d70353ee65226f31fa77df4ac5276952e70c 100755 (executable)
@@ -29,7 +29,6 @@ typedef struct {
        int image_height;
        int image_orientation;
        char *mime_type;
-       int face_count;
 } dcm_svc_item_s;
 
 typedef struct {
index cdc0c04177ca783c3509963f879d1867d3db6ee1..689ba1f1d1b5fe0aa1b447dae253208934277ea6 100755 (executable)
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <sqlite3.h>
 
 #include <dcm_svc_db.h>
 #include <dcm_svc_debug.h>
 
+#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;
+}
+
index 303461e6f357821d7c8f98a75347c53cb454158b..6b28d326a71dea271e0784cf5f1527894d2c2fe0 100755 (executable)
@@ -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);
index 76f57bd3c8c8eae66a0821a9410d4f1566cf2c4c..3c64ffb72fb1f9aae3e00e613fab046624ea5e4d 100755 (executable)
@@ -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);
index 89fad2d28b001bec74e1a54189077349c55ec9c6..ca4d168419bbe0288e35c574cd6259ce955e049b 100755 (executable)
@@ -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);