Separate ecore_pipe_write() with a function and modify macro 12/117412/3
authorHyunil <hyunil46.park@samsung.com>
Mon, 6 Mar 2017 04:32:41 +0000 (13:32 +0900)
committerHyunil <hyunil46.park@samsung.com>
Mon, 6 Mar 2017 05:45:11 +0000 (14:45 +0900)
Change-Id: I1586100315e654fde6e5f07a297b6095b9828eff
Signed-off-by: Hyunil <hyunil46.park@samsung.com>
packaging/libmm-evas-renderer.spec
src/mm_evas_renderer.c

index cac9923..97cb2b3 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-evas-renderer
 Summary:    Multimedia Framework Evas Renderer Library
-Version:    0.0.13
+Version:    0.0.14
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index d5b0d70..154cde1 100755 (executable)
 #define MMER_FLEAVE();
 #endif
 
-#define MM_CHECK_NULL(x_var) \
-       if (!x_var) { \
-               LOGE("[%s] is NULL\n", #x_var); \
-               return MM_ERROR_EVASRENDER_INVALID_ARGUMENT; \
-       }
+#define MMEVAS_RETURN_IF_FAIL(expr) \
+       do { \
+               if (!(expr)) { \
+                       LOGW("faild [%s]", #expr); \
+                       return; \
+               } \
+       } while (0)
+
+#define MMEVAS_RETURN_VAL_IF_FAIL(expr, var) \
+       do { \
+               if (!(expr)) { \
+                       LOGW("faild [%s]", #expr); \
+                       return (var); \
+               } \
+       } while (0)
 
 #define SET_EVAS_OBJECT_EVENT_CALLBACK(x_evas_image_object, x_usr_data) \
        do { \
@@ -211,7 +221,7 @@ static void _evas_pipe_cb(void *data, void *buffer, update_info info)
                return;
        }
 
-       LOGD("evas_info : %p, type : %d, evas_info->eo : %p", evas_info, info, evas_info->eo);
+       LOGD("evas_info : %p, info type : %d, evas_info->eo : %p", evas_info, info, evas_info->eo);
 
        if (info != UPDATE_TBM_SURF && info != UPDATE_VISIBILITY && info != UPDATE_FLUSH_BUFFER) {
                LOGW("invalid info type : %d", info);
@@ -220,9 +230,8 @@ static void _evas_pipe_cb(void *data, void *buffer, update_info info)
        }
 
        if (info == UPDATE_FLUSH_BUFFER) {
-               if (_flush_packets(evas_info) != MM_ERROR_NONE) {
+               if (_flush_packets(evas_info) != MM_ERROR_NONE)
                        LOGE("flushing packets is failed");
-               }
                g_mutex_unlock(&evas_info->mp_lock);
                return;
        }
@@ -724,7 +733,7 @@ static int _mm_evas_renderer_destroy(mm_evas_info **evas_info)
        MMER_FENTER();
 
        mm_evas_info *ptr = (mm_evas_info *)*evas_info;
-       MM_CHECK_NULL(ptr);
+       MMEVAS_RETURN_VAL_IF_FAIL(ptr, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
        int ret = MM_ERROR_NONE;
 
        LOGD("finalize evas_info %p", ptr);
@@ -746,8 +755,9 @@ static int _mm_evas_renderer_destroy(mm_evas_info **evas_info)
 static int _mm_evas_renderer_set_info(mm_evas_info *evas_info, Evas_Object *eo)
 {
        MMER_FENTER();
-       MM_CHECK_NULL(evas_info);
-       MM_CHECK_NULL(eo);
+       MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
+       MMEVAS_RETURN_VAL_IF_FAIL(eo, MM_ERROR_EVASRENDER_INVALID_ARGUMENT);
+
        g_mutex_lock(&evas_info->idx_lock);
 
        LOGD("set evas_info");
@@ -783,7 +793,7 @@ static int _mm_evas_renderer_set_info(mm_evas_info *evas_info, Evas_Object *eo)
 static int _mm_evas_renderer_reset(mm_evas_info *evas_info)
 {
        MMER_FENTER();
-       MM_CHECK_NULL(evas_info);
+       MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
        g_mutex_lock(&evas_info->mp_lock);
 
        int i;
@@ -844,15 +854,9 @@ static int _mm_evas_renderer_reset(mm_evas_info *evas_info)
 static void _mm_evas_renderer_update_geometry(mm_evas_info *evas_info, rect_info *result)
 {
        MMER_FENTER();
-
-       if (!evas_info || !evas_info->eo) {
-               LOGW("there is no evas_info or evas object");
-               return;
-       }
-       if (!result) {
-               LOGW("there is no rect info");
-               return;
-       }
+       MMEVAS_RETURN_IF_FAIL(evas_info);
+       MMEVAS_RETURN_IF_FAIL(evas_info->eo); //need to check evas object
+       MMEVAS_RETURN_IF_FAIL(result);
 
        result->x = 0;
        result->y = 0;
@@ -948,10 +952,8 @@ static int _mm_evas_renderer_apply_geometry(mm_evas_info *evas_info)
 {
        MMER_FENTER();
 
-       if (!evas_info || !evas_info->eo) {
-               LOGW("there is no evas_info or evas object");
-               return MM_ERROR_NONE;
-       }
+       MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
+       MMEVAS_RETURN_VAL_IF_FAIL(evas_info->eo, MM_ERROR_EVASRENDER_NOT_INITIALIZED); //need to check evas object
 
        Evas_Native_Surface *surf = evas_object_image_native_surface_get(evas_info->eo);
        rect_info result = { 0 };
@@ -984,10 +986,30 @@ static int _mm_evas_renderer_apply_geometry(mm_evas_info *evas_info)
        return MM_ERROR_NONE;
 }
 
+
+static int _mm_evas_pipe_write(mm_evas_info *evas_info, update_info info)
+{
+       MMER_FENTER();
+       MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
+       MMEVAS_RETURN_VAL_IF_FAIL(evas_info->epipe, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
+
+       int ret = MM_ERROR_NONE;
+
+       g_mutex_lock(&evas_info->write_lock);
+       if (!ecore_pipe_write(evas_info->epipe, evas_info, info)) {
+               LOGW("fail to ecore_pipe_write() for update info type(%d)", info);
+               ret = MM_ERROR_EVASRENDER_INTERNAL;
+       }
+       g_mutex_unlock(&evas_info->write_lock);
+
+       MMER_FLEAVE();
+       return ret;
+}
+
 static int _mm_evas_renderer_retrieve_all_packets(mm_evas_info *evas_info, bool keep_screen)
 {
        MMER_FENTER();
-       MM_CHECK_NULL(evas_info);
+       MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
 
        int ret = MM_ERROR_NONE;
        pid_t pid = getpid();
@@ -1001,19 +1023,7 @@ static int _mm_evas_renderer_retrieve_all_packets(mm_evas_info *evas_info, bool
                ret = _mm_evas_renderer_make_flush_buffer(evas_info);
        evas_info->keep_screen = keep_screen;
 
-       if (evas_info->epipe) {
-               g_mutex_lock(&evas_info->write_lock);
-               ret = ecore_pipe_write(evas_info->epipe, evas_info, UPDATE_FLUSH_BUFFER);
-               if (!ret) {
-                       LOGW("fail to ecore_pipe_write() for updating visibility\n");
-                       ret = MM_ERROR_EVASRENDER_INTERNAL;
-               } else {
-                       ret = MM_ERROR_NONE;
-               }
-               g_mutex_unlock(&evas_info->write_lock);
-       } else {
-               LOGW("there is no epipe. we cant update it");
-       }
+       ret = _mm_evas_pipe_write(evas_info, UPDATE_FLUSH_BUFFER);
 
        MMER_FLEAVE();
 
@@ -1024,6 +1034,7 @@ static int _mm_evas_renderer_retrieve_all_packets(mm_evas_info *evas_info, bool
 static int _mm_evas_renderer_make_flush_buffer(mm_evas_info *evas_info)
 {
        MMER_FENTER();
+       MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
 
        if (evas_info->cur_idx == -1) {
                /* it is deemed ERROR_NONE, because this API is used only for retrieving buffers */
@@ -1031,7 +1042,7 @@ static int _mm_evas_renderer_make_flush_buffer(mm_evas_info *evas_info)
                return MM_ERROR_NONE;
        }
        media_packet_h packet = evas_info->pkt_info[evas_info->cur_idx].packet;
-       MM_CHECK_NULL(packet);
+       MMEVAS_RETURN_VAL_IF_FAIL(packet, MM_ERROR_EVASRENDER_INTERNAL);
 
        flush_info *flush_buffer = NULL;
        tbm_surface_h src_tbm_surf = NULL;
@@ -1139,6 +1150,7 @@ ERROR:
 static void _mm_evas_renderer_release_flush_buffer(mm_evas_info *evas_info)
 {
        MMER_FENTER();
+       MMEVAS_RETURN_IF_FAIL(evas_info);
 
        LOGW("release FLUSH BUFFER start");
        if (evas_info->flush_buffer->bo)
@@ -1231,19 +1243,16 @@ void mm_evas_renderer_write(media_packet_h packet, void *data)
                handle->sent_buffer_cnt++;
                LOGD("sent packet %d", handle->sent_buffer_cnt);
 
-               g_mutex_lock(&handle->write_lock);
-               ret = ecore_pipe_write(handle->epipe, handle, UPDATE_TBM_SURF);
-               if (!ret) {
+               ret = _mm_evas_pipe_write(handle, UPDATE_TBM_SURF);
+               if (ret != MM_ERROR_NONE) {
                        handle->pkt_info[index].packet = NULL;
                        handle->pkt_info[index].tbm_surf = NULL;
                        handle->pkt_info[index].prev = -1;
                        handle->cur_idx = handle->pkt_info[index].prev;
                        handle->sent_buffer_cnt--;
                        LOGW("Failed to ecore_pipe_write() for updating tbm surf\n");
-                       g_mutex_unlock(&handle->write_lock);
                        goto ERROR;
                }
-               g_mutex_unlock(&handle->write_lock);
        } else {
                LOGW("no tbm_surf");
                goto ERROR;
@@ -1275,7 +1284,9 @@ INVALID_PARAM:
 int mm_evas_renderer_create(MMHandleType *handle, Evas_Object *eo)
 {
        MMER_FENTER();
-       MM_CHECK_NULL(handle);
+       MMEVAS_RETURN_VAL_IF_FAIL(handle, MM_ERROR_EVASRENDER_INVALID_ARGUMENT);
+       MMEVAS_RETURN_VAL_IF_FAIL(eo, MM_ERROR_EVASRENDER_INVALID_ARGUMENT);
+
 
        int ret = MM_ERROR_NONE;
        mm_evas_info *evas_info = NULL;
@@ -1301,15 +1312,10 @@ int mm_evas_renderer_create(MMHandleType *handle, Evas_Object *eo)
 int mm_evas_renderer_destroy(MMHandleType *handle)
 {
        MMER_FENTER();
-       MM_CHECK_NULL(handle);
 
        int ret = MM_ERROR_NONE;
        mm_evas_info *evas_info = (mm_evas_info *)*handle;
-
-       if (!evas_info) {
-               LOGD("skip it. it is not evas surface type.");
-               return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
-       }
+       MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
 
        ret = _mm_evas_renderer_destroy(&evas_info);
        if (ret != MM_ERROR_NONE) {
@@ -1329,27 +1335,10 @@ int mm_evas_renderer_set_visible(MMHandleType handle, bool visible)
 
        int ret = MM_ERROR_NONE;
        mm_evas_info *evas_info = (mm_evas_info *)handle;
-
-       if (!evas_info) {
-               LOGW("skip it. it is not evas surface type or handle is not prepared");
-               return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
-       }
+       MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
 
        evas_info->visible = visible;
-
-       if (evas_info->epipe) {
-               g_mutex_lock(&evas_info->write_lock);
-               ret = ecore_pipe_write(evas_info->epipe, evas_info, UPDATE_VISIBILITY);
-               if (!ret) {
-                       LOGW("fail to ecore_pipe_write() for updating visibility\n");
-                       ret = MM_ERROR_EVASRENDER_INTERNAL;
-               } else {
-                       ret = MM_ERROR_NONE;
-               }
-               g_mutex_unlock(&evas_info->write_lock);
-       } else {
-               LOGW("there is no epipe. we cant update it");
-       }
+       ret = _mm_evas_pipe_write(evas_info, UPDATE_VISIBILITY);
 
        MMER_FLEAVE();
 
@@ -1361,11 +1350,7 @@ int mm_evas_renderer_get_visible(MMHandleType handle, bool *visible)
        MMER_FENTER();
 
        mm_evas_info *evas_info = (mm_evas_info *)handle;
-
-       if (!evas_info) {
-               LOGW("skip it. it is not evas surface type or handle is not prepared");
-               return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
-       }
+       MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
 
        *visible = evas_info->visible;
 
@@ -1381,11 +1366,7 @@ int mm_evas_renderer_set_rotation(MMHandleType handle, int rotate)
        int ret = MM_ERROR_NONE;
        mm_evas_info *evas_info = (mm_evas_info *)handle;
        guint value;
-
-       if (!evas_info) {
-               LOGW("skip it. it is not evas surface type or handle is not prepared");
-               return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
-       }
+       MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
 
        switch (rotate) {
        case DEGREE_0:
@@ -1403,23 +1384,14 @@ int mm_evas_renderer_set_rotation(MMHandleType handle, int rotate)
        default:
                return MM_ERROR_EVASRENDER_INVALID_ARGUMENT;
        }
+
        if (evas_info->rotate_angle != value) {
                evas_info->update_needed = TRUE;
                evas_info->rotate_angle = value;
        }
 
-       /* FIXME: pause state only */
-       if (evas_info->epipe) {
-               g_mutex_lock(&evas_info->write_lock);
-               ret = ecore_pipe_write(evas_info->epipe, evas_info, UPDATE_TBM_SURF);
-               if (!ret) {
-                       LOGW("fail to ecore_pipe_write() for updating visibility\n");
-                       ret = MM_ERROR_EVASRENDER_INTERNAL;
-               } else {
-                       ret = MM_ERROR_NONE;
-               }
-               g_mutex_unlock(&evas_info->write_lock);
-       }
+       ret = _mm_evas_pipe_write(evas_info, UPDATE_TBM_SURF);
+
        MMER_FLEAVE();
 
        return ret;
@@ -1430,11 +1402,7 @@ int mm_evas_renderer_get_rotation(MMHandleType handle, int *rotate)
        MMER_FENTER();
 
        mm_evas_info *evas_info = (mm_evas_info *)handle;
-
-       if (!evas_info) {
-               LOGW("skip it. it is not evas surface type or handle is not prepared");
-               return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
-       }
+       MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
 
        switch (evas_info->rotate_angle) {
        case EVAS_IMAGE_ORIENT_0:
@@ -1464,29 +1432,16 @@ int mm_evas_renderer_set_geometry(MMHandleType handle, int mode)
 
        int ret = MM_ERROR_NONE;
        mm_evas_info *evas_info = (mm_evas_info *)handle;
+       MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
 
-       if (!evas_info) {
-               LOGW("skip it. it is not evas surface type or handle is not prepared");
-               return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
-       }
        if (evas_info->display_geometry_method != mode) {
                evas_info->update_needed = TRUE;
                evas_info->display_geometry_method = mode;
        }
 
        /* ecore_pipe_write is needed, because of setting ratio for letterbox mode */
-       /* FIXME: pause state only */
-       if (evas_info->epipe) {
-               g_mutex_lock(&evas_info->write_lock);
-               ret = ecore_pipe_write(evas_info->epipe, evas_info, UPDATE_TBM_SURF);
-               if (!ret) {
-                       LOGW("fail to ecore_pipe_write() for updating visibility\n");
-                       ret = MM_ERROR_EVASRENDER_INTERNAL;
-               } else {
-                       ret = MM_ERROR_NONE;
-               }
-               g_mutex_unlock(&evas_info->write_lock);
-       }
+       ret = _mm_evas_pipe_write(evas_info, UPDATE_TBM_SURF);
+
        MMER_FLEAVE();
 
        return ret;
@@ -1497,11 +1452,8 @@ int mm_evas_renderer_get_geometry(MMHandleType handle, int *mode)
        MMER_FENTER();
 
        mm_evas_info *evas_info = (mm_evas_info *)handle;
+       MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
 
-       if (!evas_info) {
-               LOGW("skip it. it is not evas surface type or handle is not prepared");
-               return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
-       }
        *mode = evas_info->display_geometry_method;
 
        MMER_FLEAVE();
@@ -1515,11 +1467,8 @@ int mm_evas_renderer_set_roi_area(MMHandleType handle, int x, int y, int w, int
 
        int ret = MM_ERROR_NONE;
        mm_evas_info *evas_info = (mm_evas_info *)handle;
+       MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
 
-       if (!evas_info) {
-               LOGW("skip it. it is not evas surface type or handle is not prepared");
-               return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
-       }
        if (!w || !h) {
                LOGE("invalid resolution");
                return MM_ERROR_EVASRENDER_INVALID_ARGUMENT;
@@ -1539,17 +1488,7 @@ int mm_evas_renderer_set_roi_area(MMHandleType handle, int x, int y, int w, int
        }
 
        /* pipe_write could be needed because ratio can be changed on pause state */
-       if (evas_info->epipe) {
-               g_mutex_lock(&evas_info->write_lock);
-               ret = ecore_pipe_write(evas_info->epipe, evas_info, UPDATE_TBM_SURF);
-               if (!ret) {
-                       LOGW("fail to ecore_pipe_write() for updating visibility\n");
-                       ret = MM_ERROR_EVASRENDER_INTERNAL;
-               } else {
-                       ret = MM_ERROR_NONE;
-               }
-               g_mutex_unlock(&evas_info->write_lock);
-       }
+       ret = _mm_evas_pipe_write(evas_info, UPDATE_TBM_SURF);
 
        MMER_FLEAVE();
 
@@ -1561,11 +1500,8 @@ int mm_evas_renderer_get_roi_area(MMHandleType handle, int *x, int *y, int *w, i
        MMER_FENTER();
 
        mm_evas_info *evas_info = (mm_evas_info *)handle;
+       MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
 
-       if (!evas_info) {
-               LOGW("skip it. it is not evas surface type or handle is not prepared");
-               return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
-       }
        if (evas_info->display_geometry_method != DISP_GEO_METHOD_CUSTOM_ROI) {
                LOGE("invalid mode");
                return MM_ERROR_EVASRENDER_INVALID_OPERATION;
@@ -1588,11 +1524,7 @@ int mm_evas_renderer_set_flip(MMHandleType handle, int flip)
        int ret = MM_ERROR_NONE;
        mm_evas_info *evas_info = (mm_evas_info *)handle;
        guint value;
-
-       if (!evas_info) {
-               LOGW("skip it. it is not evas surface type or handle is not prepared");
-               return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
-       }
+       MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
 
        switch (flip) {
        case FLIP_NONE:
@@ -1610,23 +1542,13 @@ int mm_evas_renderer_set_flip(MMHandleType handle, int flip)
        default:
                return MM_ERROR_EVASRENDER_INVALID_ARGUMENT;
        }
+
        if (evas_info->flip != value) {
                evas_info->update_needed = TRUE;
                evas_info->flip = value;
        }
 
-       /* FIXME: pause state only */
-       if (evas_info->epipe) {
-               g_mutex_lock(&evas_info->write_lock);
-               ret = ecore_pipe_write(evas_info->epipe, evas_info, UPDATE_TBM_SURF);
-               if (!ret) {
-                       LOGW("fail to ecore_pipe_write() for updating visibility\n");
-                       ret = MM_ERROR_EVASRENDER_INTERNAL;
-               } else {
-                       ret = MM_ERROR_NONE;
-               }
-               g_mutex_unlock(&evas_info->write_lock);
-       }
+       ret = _mm_evas_pipe_write(evas_info, UPDATE_TBM_SURF);
 
        MMER_FLEAVE();
 
@@ -1638,11 +1560,7 @@ int mm_evas_renderer_get_flip(MMHandleType handle, int *flip)
        MMER_FENTER();
 
        mm_evas_info *evas_info = (mm_evas_info *)handle;
-
-       if (!evas_info) {
-               LOGW("skip it. it is not evas surface type or handle is not prepared");
-               return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
-       }
+       MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
 
        switch (evas_info->flip) {
        case EVAS_IMAGE_ORIENT_NONE:
@@ -1672,11 +1590,8 @@ int mm_evas_renderer_retrieve_all_packets(MMHandleType handle, bool keep_screen)
 
        int ret = MM_ERROR_NONE;
        mm_evas_info *evas_info = (mm_evas_info*) handle;
+       MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
 
-       if (!evas_info) {
-               LOGW("skip it. it is not evas surface type or player is not prepared");
-               return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
-       }
        ret = _mm_evas_renderer_retrieve_all_packets(evas_info, keep_screen);
 
        MMER_FLEAVE();
@@ -1689,11 +1604,8 @@ int mm_evas_renderer_set_packet_rendered_callback(MMHandleType handle, mm_evas_r
        MMER_FENTER();
 
        mm_evas_info *evas_info = (mm_evas_info*) handle;
+       MMEVAS_RETURN_VAL_IF_FAIL(evas_info, MM_ERROR_EVASRENDER_NOT_INITIALIZED);
 
-       if (!evas_info) {
-               LOGW("skip it. it is not evas surface type or player is not prepared");
-               return MM_ERROR_EVASRENDER_NOT_INITIALIZED;
-       }
        evas_info->packet_rendered_cb = callback;
        evas_info->packet_rendered_cb_user = user_data;