mmimgr/mmi-common, mmi-provider & modality_vision : mmi-vision-provier.c, vision... 94/265194/1
authordyamy-lee <dyamy.lee@samsung.com>
Sun, 10 Oct 2021 06:44:32 +0000 (15:44 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Tue, 12 Oct 2021 14:35:20 +0000 (23:35 +0900)
- implemente vision event callback in mmi-provider.c
- add event handler for checking propagation and add event for finishing when test

Change-Id: I3369491b7ab67a296c9451de77ee182c847c37ab

src/mmimgr/mmi-common.c
src/mmimgr/mmi-common.h
src/mmimgr/mmi-provider.c
src/modules/modality_vision/mmi-vision-provider.c
src/modules/modality_vision/vision.c

index 2ed9983..0e0b9a2 100644 (file)
@@ -30,3 +30,5 @@ MMI_API int MMI_PROVIDER_EVENT_KEY = -1;
 MMI_API int MMI_PROVIDER_EVENT_GESTURE = -1;
 MMI_API int MMI_PROVIDER_EVENT_VOICE = -1;
 MMI_API int MMI_PROVIDER_EVENT_VISION = -1;
+MMI_API int MMI_VISION_EVENT_PROPAGATE = -1;
+MMI_API int MMI_VISION_EVENT_FINISH = -1;
index cd336bf..2d81487 100644 (file)
@@ -34,6 +34,16 @@ MMI_API extern int MMI_PROVIDER_EVENT_KEY;
 MMI_API extern int MMI_PROVIDER_EVENT_GESTURE;
 MMI_API extern int MMI_PROVIDER_EVENT_VOICE;
 MMI_API extern int MMI_PROVIDER_EVENT_VISION;
+MMI_API extern int MMI_VISION_EVENT_PROPAGATE;
+MMI_API extern int MMI_VISION_EVENT_FINISH;
+
+//TODO. not use mmi_vision_state, use mmi_event_vision_type
+typedef enum mmi_vision_state
+{
+    LIKE,
+    OKAY,
+    NO
+} mmi_vision_state;
 
 typedef enum mmi_event_key_type
 {
index 36bea3c..2c3545f 100644 (file)
@@ -81,6 +81,22 @@ _vision_provider_event_cb(void *data EINA_UNUSED, int type, void *event)
                ev->type, ev->timestamp, ev->duration, ev->confidence);
        LOGI("... cmd:%s, nargs:%d, source:%s\n", ev->cmd, ev->nargs, ev->source);
 
+       mmi_vision_state state = ev->type;
+       LOGI("[MMI_PROVIDER_EVENT_VISION] state = %d", state);
+
+       switch(state)
+       {
+               case 0:
+                       LOGI("LIKE\n");
+               break;
+               case 1:
+                       LOGI("OKAY\n");
+               break;
+               case 2:
+                       LOGI("NO\n");
+                       LOGI("type : %d, confidence : %f\n", ev->type, ev->confidence);
+                       break;
+       }
        return ECORE_CALLBACK_PASS_ON;
 }
 
@@ -238,6 +254,8 @@ _event_handler_init()
        MMI_PROVIDER_EVENT_GESTURE = ecore_event_type_new();
        MMI_PROVIDER_EVENT_VOICE = ecore_event_type_new();
        MMI_PROVIDER_EVENT_VISION = ecore_event_type_new();
+       MMI_VISION_EVENT_PROPAGATE = ecore_event_type_new();
+       MMI_VISION_EVENT_FINISH = ecore_event_type_new();
 
        LOGD("MMI_PROVIDER_EVENT_KEY=%d\n", MMI_PROVIDER_EVENT_KEY);
        LOGD("MMI_PROVIDER_EVENT_GESTURE=%d\n", MMI_PROVIDER_EVENT_GESTURE);
index e5d4207..4649369 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <Ecore.h>
 
 mmi_provider_op_mode _provider_mode = MODALITY_PROVIDER_MODE_NONE;
 
@@ -54,6 +55,12 @@ bool vision_set_mode(mmi_provider_op_mode mode)
        if(!mode)
                return false;
        _provider_mode = mode;
+
+       if(_provider_mode == MODALITY_PROVIDER_MODE_PROPAGATE_EVENT)
+       {
+               //TODO. vision_streaming();
+               ecore_event_add(MMI_VISION_EVENT_PROPAGATE, NULL, NULL, NULL);
+       }
        return true;
 }
 
index d1fc3f4..016313a 100644 (file)
@@ -79,6 +79,7 @@ unsigned long gettotalmillisec(const struct timespec time)
 int max_confidence_idx = 0;
 mv_engine_config_h _engine_cfg = NULL;
 mv_inference_h _infer = NULL;
+static Ecore_Event_Handler *_event_handlers;
 
 typedef struct _video_info{
        pthread_mutex_t* mutex;
@@ -258,6 +259,9 @@ void _vision_finish_cb(void *user_data)
        }
 
        LOGD("end of destroy");
+
+       //Todo. for test
+       ecore_event_add(MMI_VISION_EVENT_FINISH, NULL, NULL, NULL);
 }
 
 void eos_frame_cb(mv_video_reader_h reader,
@@ -543,10 +547,33 @@ clean_image_engine:
        return err;
 }
 
+static Eina_Bool
+_vision_event_cb(void *data EINA_UNUSED, int type, void *event)
+{
+       char *path_to_video = NULL;
+
+       //for test
+       path_to_video = "/tmp/test_video_2.mp4";
+
+       //TODO. find video path while camera streaming when propagation
+
+       LOGD("vision event working\n");
+       if(path_to_video)
+       {
+               LOGI("path to video = %s", path_to_video);
+               classification_from_video(path_to_video);
+       }
+       else
+               LOGE("No path to video");
+
+       return ECORE_CALLBACK_PASS_ON;
+}
+
 void vision_init(void)
 {
        int err = MEDIA_VISION_ERROR_NONE;
        err = image_classification_init();
+       _event_handlers = ecore_event_handler_add(MMI_VISION_EVENT_PROPAGATE, _vision_event_cb, NULL);
 
        if (err != MEDIA_VISION_ERROR_NONE)
                LOGE("Fail to detect with engine [err:%i]\n", err);
@@ -565,5 +592,7 @@ void vision_shutdown(void)
        {
                RET_IF_FAIL(mv_destroy_engine_config(_engine_cfg));
        }
+       ecore_event_handler_del(_event_handlers);
+       _event_handlers = NULL;
        LOGD("end of shutdown");
 }