- Change way to get count from DB.
Change-Id: I220163f6e93752613d22bf56e70af69260f7139b
#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,
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_*/
int image_height;
int image_orientation;
char *mime_type;
- int face_count;
} dcm_svc_item_s;
typedef struct {
#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;
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;
+}
+
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);
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");
}
}
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);
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);