#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 struct {
- char *media_uuid;
- unsigned int face_rect_x;
- unsigned int face_rect_y;
- unsigned int face_rect_w;
- unsigned int face_rect_h;
- int orientation;
-} dcm_face_item_s;
-
typedef struct {
char *media_uuid;
unsigned char rgb_r;
int dcm_svc_db_connect(uid_t uid);
int dcm_svc_db_disconnect();
int dcm_svc_db_get_scan_image_info_by_path(const char *file_path, dcm_svc_item_s **scan_item);
-int dcm_svc_db_insert_face_to_db(dcm_face_item_s *face);
+int dcm_svc_db_insert_face_to_db(const char *media_uuid, unsigned int x, unsigned int y, unsigned int w, unsigned int h, int orientation);
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_delete_face_from_db(const char *media_uuid);
return ret;
}
-int dcm_svc_db_insert_face_to_db(dcm_face_item_s *face)
+int dcm_svc_db_insert_face_to_db(const char *media_uuid, unsigned int x, unsigned int y, unsigned int w, unsigned int h, int orientation)
{
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(face == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid face");
+ dcm_retvm_if(media_uuid == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid media_uuid");
- query_string = sqlite3_mprintf(INSERT_FACE_ITEM_TO_DB, face->media_uuid, face->face_rect_x, face->face_rect_y, face->face_rect_w, face->face_rect_h, face->orientation);
+ query_string = sqlite3_mprintf(INSERT_FACE_ITEM_TO_DB, media_uuid, x, y, w, h, orientation);
dcm_debug("query[%s]", query_string);
g_mutex_trylock(&gMutexLock);
return scale_factor;
}
-static int __create_face_item(dcm_face_item_s **face)
-{
- DCM_CHECK_VAL(face, MS_MEDIA_ERR_INVALID_PARAMETER);
-
- *face = NULL;
-
- dcm_face_item_s *_face = (dcm_face_item_s*)g_malloc0(sizeof(dcm_face_item_s));
- if (_face == NULL)
- return MS_MEDIA_ERR_OUT_OF_MEMORY;
-
- *face = _face;
-
- return MS_MEDIA_ERR_NONE;
-}
-
-static void __destroy_face_item(void *data)
-{
- dcm_face_item_s *_face = (dcm_face_item_s *)data;
- DCM_CHECK(_face);
-
- DCM_SAFE_FREE(_face->media_uuid);
- DCM_SAFE_FREE(_face);
-
- return;
-}
-
int dcm_face_detect_initialize()
{
int ret = MS_MEDIA_ERR_NONE;
int dcm_face_detect_process(dcm_svc_item_s *scan_item, dcm_face_scan_status_e scan_status, dcm_image_info_s *image_info)
{
- dcm_face_item_s *face = NULL;
int face_area = 0;
int i = 0;
double scale_factor = 0.0;
int err = MS_MEDIA_ERR_NONE;
int ret = MS_MEDIA_ERR_NONE;
face_info_s *face_info = NULL;
+ unsigned int face_rect_x = 0;
+ unsigned int face_rect_y = 0;
+ unsigned int face_rect_w = 0;
+ unsigned int face_rect_h = 0;
+ int face_orientation = 0;
dcm_debug_fenter();
/* Insert every face rectangle into database */
for (i = 0; i < face_info->count; i++) {
- face = NULL;
-
- ret = __create_face_item(&face);
- if (ret != MS_MEDIA_ERR_NONE) {
- dcm_error("Failed to create face items! ret: %d", ret);
- goto DCM_SVC_FACE_RECOGNIZE_BUFFER_FAILED;
- }
-
if (scale_factor > 1.0) {
- face->face_rect_x = (int) (face_info->rects[i].x * scale_factor);
- face->face_rect_y = (int) (face_info->rects[i].y * scale_factor);
- face->face_rect_w = (int) (face_info->rects[i].w * scale_factor);
- face->face_rect_h = (int) (face_info->rects[i].h * scale_factor);
+ face_rect_x = (int) (face_info->rects[i].x * scale_factor);
+ face_rect_y = (int) (face_info->rects[i].y * scale_factor);
+ face_rect_w = (int) (face_info->rects[i].w * scale_factor);
+ face_rect_h = (int) (face_info->rects[i].h * scale_factor);
} else {
- face->face_rect_x = face_info->rects[i].x;
- face->face_rect_y = face_info->rects[i].y;
- face->face_rect_w = face_info->rects[i].w;
- face->face_rect_h = face_info->rects[i].h;
+ face_rect_x = face_info->rects[i].x;
+ face_rect_y = face_info->rects[i].y;
+ face_rect_w = face_info->rects[i].w;
+ face_rect_h = face_info->rects[i].h;
}
- face->orientation = face_info->rects[i].orientation;
+ face_orientation = face_info->rects[i].orientation;
- face_area += face->face_rect_w * face->face_rect_h;
- dcm_debug("[#%d] face rect: XYWH (%d, %d, %d, %d)", i, face->face_rect_x, face->face_rect_y, face->face_rect_w,
- face->face_rect_h);
+ face_area += face_rect_w * face_rect_h;
- face->media_uuid = g_strdup(scan_item->media_uuid);
+ dcm_debug("[#%d] face rect: X [%d] Y [%d] W [%d] H [%d] Orientation [%d]", i, face_rect_x, face_rect_y, face_rect_w, face_rect_h, face_orientation);
/* Insert face rectangle into database */
- ret = dcm_svc_db_insert_face_to_db(face);
+ ret = dcm_svc_db_insert_face_to_db(scan_item->media_uuid, face_rect_x, face_rect_y, face_rect_w, face_rect_h, face_orientation);
if (ret != MS_MEDIA_ERR_NONE) {
dcm_error("Failed to insert face item into db! ret: %d", ret);
goto DCM_SVC_FACE_RECOGNIZE_BUFFER_FAILED;
}
- /* Send db updated notification */
- __destroy_face_item(face);
- face = NULL;
}
DCM_SVC_FACE_RECOGNIZE_BUFFER_FAILED:
dcm_face_destroy_face_info(face_info);
- if (face != NULL) {
- __destroy_face_item(face);
- face = NULL;
- }
-
dcm_debug_fleave();
return ret;