diff options
author | NAMJEONGYOON <just.nam@samsung.com> | 2016-05-03 12:00:12 +0900 |
---|---|---|
committer | NAMJEONGYOON <just.nam@samsung.com> | 2016-06-29 12:56:40 +0900 |
commit | b8b1ddf8a1d87e084e9bfb04b42cfc9eb0d727ed (patch) | |
tree | 907bea9e48b64e9386967ef0c5d0f3336fc8eeb4 /src | |
parent | 5701083f908e0afe38c0cb3d3ad43a88eb19048d (diff) | |
download | libmm-evas-renderer-b8b1ddf8a1d87e084e9bfb04b42cfc9eb0d727ed.tar.gz libmm-evas-renderer-b8b1ddf8a1d87e084e9bfb04b42cfc9eb0d727ed.tar.bz2 libmm-evas-renderer-b8b1ddf8a1d87e084e9bfb04b42cfc9eb0d727ed.zip |
[0.0.3] modify geometry operation
1. modify roi API operation
2. update geometry when state is pause
3. enhance debug information
Change-Id: I44a555d17bc69671595361cd2dec2ab9a702b150
Signed-off-by: NAMJEONGYOON <just.nam@samsung.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/include/mm_evas_renderer.h | 1 | ||||
-rw-r--r-- | src/mm_evas_renderer.c | 350 |
2 files changed, 268 insertions, 83 deletions
diff --git a/src/include/mm_evas_renderer.h b/src/include/mm_evas_renderer.h index 5694d1e..f92dbec 100644 --- a/src/include/mm_evas_renderer.h +++ b/src/include/mm_evas_renderer.h @@ -97,6 +97,7 @@ typedef struct { gint h; /* properties */ + gboolean update_needed; /* to update geometry information on pause state */ visible_info visible; rect_info eo_size; rect_info dst_roi; diff --git a/src/mm_evas_renderer.c b/src/mm_evas_renderer.c index 869183a..f486f71 100644 --- a/src/mm_evas_renderer.c +++ b/src/mm_evas_renderer.c @@ -36,6 +36,14 @@ #define LOG_TAG "MM_EVAS_RENDER" //#define _INTERNAL_DEBUG_ /* debug only */ +#if 0 +#define MMER_FENTER(); LOGD("<ENTER>"); +#define MMER_FLEAVE(); LOGD("<LEAVE>"); +#else +#define MMER_FENTER(); +#define MMER_FLEAVE(); +#endif + #define MM_CHECK_NULL( x_var ) \ if ( ! x_var ) \ { \ @@ -108,30 +116,33 @@ enum { }; #ifdef _INTERNAL_DEBUG_ -void __print_idx(mm_evas_info *evas_info); +static int g_cnt = 0; +static void __print_idx(mm_evas_info *evas_info); +static int __dump_pkt(media_packet_h pkt); #endif /* internal */ -void _free_previous_packets(mm_evas_info *evas_info); -int _flush_packets(mm_evas_info *evas_info); -int _mm_evas_renderer_create(mm_evas_info **evas_info); -int _mm_evas_renderer_destroy(mm_evas_info **evas_info); -int _mm_evas_renderer_set_info(mm_evas_info *evas_info, Evas_Object *eo); -int _mm_evas_renderer_reset(mm_evas_info *evas_info); -void _mm_evas_renderer_update_geometry(mm_evas_info *evas_info, rect_info *result); -int _mm_evas_renderer_apply_geometry(mm_evas_info *evas_info); -int _mm_evas_renderer_retrieve_all_packets(mm_evas_info *evas_info, bool keep_screen); -int _mm_evas_renderer_make_flush_buffer(mm_evas_info *evas_info); -void _mm_evas_renderer_release_flush_buffer(mm_evas_info *evas_info); +static void _free_previous_packets(mm_evas_info *evas_info); +static int _flush_packets(mm_evas_info *evas_info); +static int _mm_evas_renderer_create(mm_evas_info **evas_info); +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); +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); +static int _mm_evas_renderer_apply_geometry(mm_evas_info *evas_info); +static int _mm_evas_renderer_retrieve_all_packets(mm_evas_info *evas_info, bool keep_screen); +static int _mm_evas_renderer_make_flush_buffer(mm_evas_info *evas_info); +static void _mm_evas_renderer_release_flush_buffer(mm_evas_info *evas_info); static void _mm_evas_renderer_set_callback(mm_evas_info *evas_info); static void _mm_evas_renderer_unset_callback(mm_evas_info *evas_info); static void _evas_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { + MMER_FENTER(); + int x, y, w, h, ret; x = y = w = h = 0; mm_evas_info *evas_info = data; - LOGD("[ENTER]"); if (!evas_info || !evas_info->eo) { return; @@ -150,11 +161,13 @@ static void _evas_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_i if (ret != MM_ERROR_NONE) LOGW("fail to apply geometry info"); } - LOGD("[LEAVE]"); + MMER_FLEAVE(); } static void _evas_render_pre_cb(void *data, Evas *e, void *event_info) { + MMER_FENTER(); + mm_evas_info *evas_info = data; if (!evas_info || !evas_info->eo) { @@ -170,12 +183,15 @@ static void _evas_render_pre_cb(void *data, Evas *e, void *event_info) LOGE("flushing packets are failed"); g_mutex_unlock(&evas_info->idx_lock); } + MMER_FLEAVE(); } static void _evas_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { + MMER_FENTER(); + mm_evas_info *evas_info = data; - LOGD("[ENTER]"); + if (!evas_info || !evas_info->eo) { return; } @@ -184,14 +200,14 @@ static void _evas_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info evas_object_image_data_set(evas_info->eo, NULL); evas_info->eo = NULL; } - LOGD("[LEAVE]"); + MMER_FLEAVE(); } -void _evas_pipe_cb(void *data, void *buffer, update_info info) +static void _evas_pipe_cb(void *data, void *buffer, update_info info) { - mm_evas_info *evas_info = data; + MMER_FENTER(); - LOGD("[ENTER]"); + mm_evas_info *evas_info = data; if (!evas_info) { LOGW("evas_info is NULL", evas_info); @@ -253,7 +269,7 @@ void _evas_pipe_cb(void *data, void *buffer, update_info info) break; } - Evas_Native_Surface surf; + Evas_Native_Surface surf = { 0 }; surf.type = EVAS_NATIVE_SURFACE_TBM; surf.version = EVAS_NATIVE_SURFACE_VERSION; surf.data.tbm.buffer = evas_info->pkt_info[cur_idx].tbm_surf; @@ -262,7 +278,8 @@ void _evas_pipe_cb(void *data, void *buffer, update_info info) rect_info result = { 0 }; - evas_object_geometry_get(evas_info->eo, &evas_info->eo_size.x, &evas_info->eo_size.y, &evas_info->eo_size.w, &evas_info->eo_size.h); + evas_object_geometry_get(evas_info->eo, &evas_info->eo_size.x, &evas_info->eo_size.y, + &evas_info->eo_size.w, &evas_info->eo_size.h); if (!evas_info->eo_size.w || !evas_info->eo_size.h) { LOGE("there is no information for evas object size"); goto ERROR; @@ -273,9 +290,15 @@ void _evas_pipe_cb(void *data, void *buffer, update_info info) goto ERROR; } + if (evas_info->update_needed) { + /* update geometry on pause state */ + evas_object_image_native_surface_set(evas_info->eo, NULL); + evas_info->update_needed = FALSE; + } + if (evas_info->use_ratio) { surf.data.tbm.ratio = (float) evas_info->w / evas_info->h; - LOGD("set ratio for letter mode"); + LOGD("set ratio"); } evas_object_size_hint_align_set(evas_info->eo, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(evas_info->eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -288,8 +311,7 @@ void _evas_pipe_cb(void *data, void *buffer, update_info info) if (result.x || result.y) LOGD("coordinate x, y (%d, %d) for locating video to center", result.x, result.y); - if (evas_info->display_geometry_method != DISP_GEO_METHOD_CUSTOM_ROI) - evas_object_image_fill_set(evas_info->eo, result.x, result.y, result.w, result.h); + evas_object_image_fill_set(evas_info->eo, result.x, result.y, result.w, result.h); evas_object_image_pixels_dirty_set(evas_info->eo, EINA_TRUE); LOGD("GEO_METHOD : src(%dx%d), dst(%dx%d), dst_x(%d), dst_y(%d), rotate(%d), flip(%d)", evas_info->w, evas_info->h, evas_info->eo_size.w, evas_info->eo_size.h, evas_info->eo_size.x, evas_info->eo_size.y, evas_info->rotate_angle, evas_info->flip); @@ -298,10 +320,11 @@ void _evas_pipe_cb(void *data, void *buffer, update_info info) if ((prev_idx != -1) && evas_info->pkt_info[prev_idx].packet && (prev_idx != cur_idx)) _free_previous_packets(evas_info); - LOGD("[LEAVE]"); g_mutex_unlock(&evas_info->idx_lock); g_mutex_unlock(&evas_info->mp_lock); + MMER_FLEAVE(); + return; ERROR: @@ -314,11 +337,11 @@ void _evas_pipe_cb(void *data, void *buffer, update_info info) } #ifdef _INTERNAL_DEBUG_ -void __print_idx(mm_evas_info *evas_info) +static void __print_idx (mm_evas_info *evas_info) { gint prev_idx = evas_info->pkt_info[evas_info->cur_idx].prev; LOGE("***** start cur_idx : %d -> prev_idx : %d", evas_info->cur_idx, prev_idx); - while(prev_idx != -1) + while (prev_idx != -1) { LOGE("***** cur_idx : %d -> prev_idx : %d", prev_idx, evas_info->pkt_info[prev_idx].prev); prev_idx = evas_info->pkt_info[prev_idx].prev; @@ -326,10 +349,34 @@ void __print_idx(mm_evas_info *evas_info) LOGE("***** end"); return; } + +static int __dump_pkt (media_packet_h pkt) +{ + void *data; + uint64_t buf_size; + char filename[100] = {0}; + FILE *fp = NULL; + + sprintf(filename, "/tmp/DUMP_IMG_%2.2d.dump", g_cnt); + fp = fopen(filename, "wb"); + if (fp == NULL) + return 1; + + LOGW("DUMP IMG_%2.2d", g_cnt); + media_packet_get_buffer_data_ptr(pkt, &data); + media_packet_get_buffer_size(pkt, &buf_size); + LOGW("input data : %p, size %d\n", data, (int)buf_size); + fwrite(data, (int)buf_size, 1, fp); + fclose(fp); + + return 0; +} #endif -void _free_previous_packets(mm_evas_info *evas_info) +static void _free_previous_packets(mm_evas_info *evas_info) { + MMER_FENTER(); + gint index = evas_info->cur_idx; gint prev_idx = evas_info->pkt_info[index].prev; @@ -348,11 +395,16 @@ void _free_previous_packets(mm_evas_info *evas_info) prev_idx = evas_info->pkt_info[prev_idx].prev; LOGD("sent packet %d", evas_info->sent_buffer_cnt); } + + MMER_FLEAVE(); + return; } static int _get_video_size(media_packet_h packet, mm_evas_info *evas_info) { + MMER_FENTER(); + media_format_h fmt; if (media_packet_get_format(packet, &fmt) == MEDIA_PACKET_ERROR_NONE) { int w, h; @@ -368,11 +420,16 @@ static int _get_video_size(media_packet_h packet, mm_evas_info *evas_info) } else { LOGW("media_packet_get_format is failed"); } + + MMER_FLEAVE(); + return false; } -int _find_empty_index(mm_evas_info *evas_info) +static int _find_empty_index(mm_evas_info *evas_info) { + MMER_FENTER(); + int i; for (i = 0; i < MAX_PACKET_NUM; i++) { if (!evas_info->pkt_info[i].packet) { @@ -382,11 +439,15 @@ int _find_empty_index(mm_evas_info *evas_info) } LOGE("there is no empty idx"); + MMER_FLEAVE(); + return -1; } -int _flush_packets(mm_evas_info *evas_info) +static int _flush_packets(mm_evas_info *evas_info) { + MMER_FENTER(); + int ret = MM_ERROR_NONE; int ret_mp = MEDIA_PACKET_ERROR_NONE; int i = 0; @@ -395,9 +456,11 @@ int _flush_packets(mm_evas_info *evas_info) LOGW("there is no esink info"); return MM_ERROR_INVALID_ARGUMENT; } - /* update the screen only if visible is ture */ - if (evas_info->keep_screen && (evas_info->visible != VISIBLE_FALSE)) { - Evas_Native_Surface surf; + + /* update the screen only if visible is true */ + /* if flush buffer is null, we cant keep screen */ + if (evas_info->keep_screen && (evas_info->visible != VISIBLE_FALSE) && evas_info->flush_buffer) { + Evas_Native_Surface surf = { 0 }; rect_info result = { 0 }; evas_object_geometry_get(evas_info->eo, &evas_info->eo_size.x, &evas_info->eo_size.y, &evas_info->eo_size.w, &evas_info->eo_size.h); if (!evas_info->eo_size.w || !evas_info->eo_size.h) { @@ -412,7 +475,7 @@ int _flush_packets(mm_evas_info *evas_info) if (evas_info->use_ratio) { surf.data.tbm.ratio = (float) evas_info->w / evas_info->h; - LOGD("set ratio for letter mode"); + LOGD("set ratio"); } evas_object_size_hint_align_set(evas_info->eo, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(evas_info->eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -422,8 +485,7 @@ int _flush_packets(mm_evas_info *evas_info) if (result.x || result.y) LOGD("coordinate x, y (%d, %d) for locating video to center", result.x, result.y); - if (evas_info->display_geometry_method != DISP_GEO_METHOD_CUSTOM_ROI) - evas_object_image_fill_set(evas_info->eo, result.x, result.y, result.w, result.h); + evas_object_image_fill_set(evas_info->eo, result.x, result.y, result.w, result.h); /* set flush buffer */ surf.type = EVAS_NATIVE_SURFACE_TBM; @@ -468,6 +530,8 @@ int _flush_packets(mm_evas_info *evas_info) evas_object_image_pixels_dirty_set (evas_info->eo, EINA_TRUE); evas_info->retrieve_packet = FALSE; + MMER_FLEAVE(); + return ret; } @@ -523,22 +587,28 @@ int _reset_pipe(mm_evas_info *evas_info) static void _mm_evas_renderer_set_callback(mm_evas_info *evas_info) { + MMER_FENTER(); if (evas_info->eo) { SET_EVAS_OBJECT_EVENT_CALLBACK(evas_info->eo, evas_info); SET_EVAS_EVENT_CALLBACK(evas_object_evas_get(evas_info->eo), evas_info); } + MMER_FLEAVE(); } static void _mm_evas_renderer_unset_callback(mm_evas_info *evas_info) { + MMER_FENTER(); if (evas_info->eo) { UNSET_EVAS_OBJECT_EVENT_CALLBACK(evas_info->eo); UNSET_EVAS_EVENT_CALLBACK(evas_object_evas_get(evas_info->eo)); } + MMER_FLEAVE(); } -int _mm_evas_renderer_create(mm_evas_info **evas_info) +static int _mm_evas_renderer_create(mm_evas_info **evas_info) { + MMER_FENTER(); + mm_evas_info *ptr = NULL; ptr = g_malloc0(sizeof(mm_evas_info)); @@ -552,6 +622,8 @@ int _mm_evas_renderer_create(mm_evas_info **evas_info) g_mutex_init(&ptr->mp_lock); g_mutex_init(&ptr->idx_lock); + MMER_FLEAVE(); + return MM_ERROR_NONE; ERROR: @@ -559,8 +631,10 @@ int _mm_evas_renderer_create(mm_evas_info **evas_info) return MM_ERROR_OUT_OF_STORAGE; } -int _mm_evas_renderer_destroy(mm_evas_info **evas_info) +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); int ret = MM_ERROR_NONE; @@ -574,11 +648,14 @@ int _mm_evas_renderer_destroy(mm_evas_info **evas_info) g_free(ptr); ptr = NULL; + MMER_FLEAVE(); + return ret; } -int _mm_evas_renderer_set_info(mm_evas_info *evas_info, Evas_Object *eo) +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); g_mutex_lock(&evas_info->idx_lock); @@ -607,11 +684,14 @@ int _mm_evas_renderer_set_info(mm_evas_info *evas_info, Evas_Object *eo) g_mutex_unlock(&evas_info->idx_lock); + MMER_FLEAVE(); + return MM_ERROR_NONE; } -int _mm_evas_renderer_reset(mm_evas_info *evas_info) +static int _mm_evas_renderer_reset(mm_evas_info *evas_info) { + MMER_FENTER(); MM_CHECK_NULL(evas_info); g_mutex_lock(&evas_info->idx_lock); @@ -662,11 +742,15 @@ int _mm_evas_renderer_reset(mm_evas_info *evas_info) g_mutex_unlock(&evas_info->idx_lock); + MMER_FLEAVE(); + return ret; } -void _mm_evas_renderer_update_geometry(mm_evas_info *evas_info, rect_info *result) +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; @@ -736,25 +820,25 @@ void _mm_evas_renderer_update_geometry(mm_evas_info *evas_info, rect_info *resul break; case DISP_GEO_METHOD_CUSTOM_ROI: LOGD("custom roi mode"); - evas_info->use_ratio= FALSE; + evas_info->use_ratio= TRUE; result->x = evas_info->dst_roi.x; result->y = evas_info->dst_roi.y; result->w = evas_info->dst_roi.w; result->h = evas_info->dst_roi.h; - - /* don't call evas_object_image_fill_set */ - evas_object_move(evas_info->eo, result->x, result->y); - evas_object_resize(evas_info->eo, result->w, result->h); break; default: LOGW("unsupported mode."); break; } LOGD("geometry result [%d, %d, %d, %d]", result->x, result->y, result->w, result->h); + + MMER_FLEAVE(); } -int _mm_evas_renderer_apply_geometry(mm_evas_info *evas_info) +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; @@ -773,23 +857,26 @@ int _mm_evas_renderer_apply_geometry(mm_evas_info *evas_info) if (evas_info->use_ratio) { surf->data.tbm.ratio = (float) evas_info->w / evas_info->h; - LOGD("set ratio for letter mode"); + LOGD("set ratio"); } - if (result.x || result.y) LOGD("coordinate x, y (%d, %d) for locating video to center", result.x, result.y); - if (evas_info->display_geometry_method != DISP_GEO_METHOD_CUSTOM_ROI) - evas_object_image_fill_set(evas_info->eo, result.x, result.y, result.w, result.h); + evas_object_image_fill_set(evas_info->eo, result.x, result.y, result.w, result.h); + return MM_ERROR_NONE; } else LOGW("there is no surf"); /* FIXME: before pipe_cb is invoked, apply_geometry can be called. */ + + MMER_FLEAVE(); + return MM_ERROR_NONE; } -int _mm_evas_renderer_retrieve_all_packets(mm_evas_info *evas_info, bool keep_screen) +static int _mm_evas_renderer_retrieve_all_packets(mm_evas_info *evas_info, bool keep_screen) { + MMER_FENTER(); MM_CHECK_NULL(evas_info); int ret = MM_ERROR_NONE; @@ -818,12 +905,16 @@ int _mm_evas_renderer_retrieve_all_packets(mm_evas_info *evas_info, bool keep_sc } g_mutex_unlock(&evas_info->idx_lock); + MMER_FLEAVE(); + return ret; } /* make buffer for copying */ -int _mm_evas_renderer_make_flush_buffer (mm_evas_info *evas_info) +static int _mm_evas_renderer_make_flush_buffer (mm_evas_info *evas_info) { + MMER_FENTER(); + if (evas_info->cur_idx == -1) { LOGW("there is no remained buffer"); return MM_ERROR_INVALID_ARGUMENT; @@ -911,11 +1002,13 @@ int _mm_evas_renderer_make_flush_buffer (mm_evas_info *evas_info) evas_info->flush_buffer = flush_buffer; + MMER_FLEAVE(); + return MM_ERROR_NONE; ERROR: if (flush_buffer) { - if(flush_buffer->tbm_surf) + if (flush_buffer->tbm_surf) { tbm_surface_destroy(flush_buffer->tbm_surf); flush_buffer->tbm_surf = NULL; @@ -928,8 +1021,10 @@ ERROR: } /* release flush buffer */ -void _mm_evas_renderer_release_flush_buffer (mm_evas_info *evas_info) +static void _mm_evas_renderer_release_flush_buffer (mm_evas_info *evas_info) { + MMER_FENTER(); + LOGW("release FLUSH BUFFER start"); if (evas_info->flush_buffer->bo) { evas_info->flush_buffer->bo = NULL; @@ -944,11 +1039,15 @@ void _mm_evas_renderer_release_flush_buffer (mm_evas_info *evas_info) free(evas_info->flush_buffer); evas_info->flush_buffer = NULL; + MMER_FLEAVE(); + return; } void mm_evas_renderer_write(media_packet_h packet, void *data) { + MMER_FENTER(); + if (!packet) { LOGE("packet %p is NULL", packet); return; @@ -999,7 +1098,16 @@ void mm_evas_renderer_write(media_packet_h packet, void *data) if (index == -1) { goto ERROR; } - +#ifdef _INTERNAL_DEBUG_ + int ret2 = 0; + if ((g_cnt%10==0) && g_cnt<500) { + ret2 = __dump_pkt(packet); + } + if (ret2) { + LOGW ("__dump_pkt() is failed"); + } else + g_cnt++; +#endif /* save previous index */ handle->pkt_info[index].prev = handle->cur_idx; handle->pkt_info[index].packet = packet; @@ -1024,6 +1132,8 @@ void mm_evas_renderer_write(media_packet_h packet, void *data) } g_mutex_unlock(&handle->idx_lock); + MMER_FLEAVE(); + return; ERROR: g_mutex_unlock(&handle->idx_lock); @@ -1042,6 +1152,8 @@ INVALID_PARAM: int mm_evas_renderer_update_param(MMHandleType handle) { + MMER_FENTER(); + int ret = MM_ERROR_NONE; mm_evas_info *evas_info = (mm_evas_info *)handle; @@ -1065,10 +1177,9 @@ int mm_evas_renderer_update_param(MMHandleType handle) if (!ret) { LOGW("fail to ecore_pipe_write() for updating visibility\n"); return MM_ERROR_UNKNOWN; - } else - ret = MM_ERROR_NONE; - -#if 0 /* FIXME: pause state only */ + } + evas_info->update_needed = TRUE; + /* FIXME: pause state only */ g_mutex_lock(&evas_info->idx_lock); ret = ecore_pipe_write(evas_info->epipe, evas_info, UPDATE_TBM_SURF); if (!ret) { @@ -1078,15 +1189,17 @@ int mm_evas_renderer_update_param(MMHandleType handle) ret = MM_ERROR_NONE; } g_mutex_unlock(&evas_info->idx_lock); -#endif } } + MMER_FLEAVE(); + return ret; } int mm_evas_renderer_create(MMHandleType *handle, Evas_Object *eo) { + MMER_FENTER(); MM_CHECK_NULL(handle); int ret = MM_ERROR_NONE; @@ -1112,6 +1225,7 @@ 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; @@ -1129,11 +1243,15 @@ int mm_evas_renderer_destroy(MMHandleType *handle) } *handle = NULL; + MMER_FLEAVE(); + return MM_ERROR_NONE; } int mm_evas_renderer_set_visible(MMHandleType handle, bool visible) { + MMER_FENTER(); + int ret = MM_ERROR_NONE; mm_evas_info *evas_info = (mm_evas_info *)handle; @@ -1159,11 +1277,15 @@ int mm_evas_renderer_set_visible(MMHandleType handle, bool visible) LOGW("there is no epipe. we cant update it"); } + MMER_FLEAVE(); + return ret; } int mm_evas_renderer_get_visible(MMHandleType handle, bool *visible) { + MMER_FENTER(); + mm_evas_info *evas_info = (mm_evas_info *)handle; if (!evas_info) { @@ -1176,36 +1298,46 @@ int mm_evas_renderer_get_visible(MMHandleType handle, bool *visible) else *visible = TRUE; + MMER_FLEAVE(); + return MM_ERROR_NONE; } int mm_evas_renderer_set_rotation(MMHandleType handle, int rotate) { + MMER_FENTER(); + 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_RESOURCE_NOT_INITIALIZED; } - switch(rotate) { + switch (rotate) { case DEGREE_0: - evas_info->rotate_angle = EVAS_IMAGE_ORIENT_0; + value = EVAS_IMAGE_ORIENT_0; break; case DEGREE_90: - evas_info->rotate_angle = EVAS_IMAGE_ORIENT_90; + value = EVAS_IMAGE_ORIENT_90; break; case DEGREE_180: - evas_info->rotate_angle = EVAS_IMAGE_ORIENT_180; + value = EVAS_IMAGE_ORIENT_180; break; case DEGREE_270: - evas_info->rotate_angle = EVAS_IMAGE_ORIENT_270; + value = EVAS_IMAGE_ORIENT_270; break; default: return MM_ERROR_INVALID_ARGUMENT; } -#if 0 /* FIXME: pause state only */ + 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->idx_lock); ret = ecore_pipe_write(evas_info->epipe, evas_info, UPDATE_TBM_SURF); @@ -1217,12 +1349,15 @@ int mm_evas_renderer_set_rotation(MMHandleType handle, int rotate) } g_mutex_unlock(&evas_info->idx_lock); } -#endif + MMER_FLEAVE(); + return ret; } int mm_evas_renderer_get_rotation(MMHandleType handle, int *rotate) { + MMER_FENTER(); + mm_evas_info *evas_info = (mm_evas_info *)handle; if (!evas_info) { @@ -1230,7 +1365,7 @@ int mm_evas_renderer_get_rotation(MMHandleType handle, int *rotate) return MM_ERROR_RESOURCE_NOT_INITIALIZED; } - switch(evas_info->rotate_angle) { + switch (evas_info->rotate_angle) { case EVAS_IMAGE_ORIENT_0: *rotate = DEGREE_0; break; @@ -1247,11 +1382,15 @@ int mm_evas_renderer_get_rotation(MMHandleType handle, int *rotate) return MM_ERROR_INVALID_ARGUMENT; } + MMER_FLEAVE(); + return MM_ERROR_NONE; } int mm_evas_renderer_set_geometry(MMHandleType handle, int mode) { + MMER_FENTER(); + int ret = MM_ERROR_NONE; mm_evas_info *evas_info = (mm_evas_info *)handle; @@ -1259,12 +1398,13 @@ int mm_evas_renderer_set_geometry(MMHandleType handle, int mode) LOGW("skip it. it is not evas surface type or handle is not prepared"); return MM_ERROR_RESOURCE_NOT_INITIALIZED; } - - evas_info->display_geometry_method = mode; - ret = _mm_evas_renderer_apply_geometry(evas_info); + 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 */ -#if 0 /* FIXME: pause state only */ + /* FIXME: pause state only */ if (evas_info->epipe) { g_mutex_lock(&evas_info->idx_lock); ret = ecore_pipe_write(evas_info->epipe, evas_info, UPDATE_TBM_SURF); @@ -1276,13 +1416,15 @@ int mm_evas_renderer_set_geometry(MMHandleType handle, int mode) } g_mutex_unlock(&evas_info->idx_lock); } -#endif + MMER_FLEAVE(); return ret; } int mm_evas_renderer_get_geometry(MMHandleType handle, int *mode) { + MMER_FENTER(); + mm_evas_info *evas_info = (mm_evas_info *)handle; if (!evas_info) { @@ -1291,11 +1433,15 @@ int mm_evas_renderer_get_geometry(MMHandleType handle, int *mode) } *mode = evas_info->display_geometry_method; + MMER_FLEAVE(); + return MM_ERROR_NONE; } int mm_evas_renderer_set_roi_area(MMHandleType handle, int x, int y, int w, int h) { + MMER_FENTER(); + int ret = MM_ERROR_NONE; mm_evas_info *evas_info = (mm_evas_info *)handle; @@ -1309,18 +1455,36 @@ int mm_evas_renderer_set_roi_area(MMHandleType handle, int x, int y, int w, int } /* display mode is set to DISP_GEO_METHOD_CUSTOM_ROI internally */ + if (evas_info->display_geometry_method != DISP_GEO_METHOD_CUSTOM_ROI) + evas_info->update_needed = TRUE; evas_info->display_geometry_method = DISP_GEO_METHOD_CUSTOM_ROI; evas_info->dst_roi.x = x; evas_info->dst_roi.y = y; evas_info->dst_roi.w = w; evas_info->dst_roi.h = h; - ret = _mm_evas_renderer_apply_geometry(evas_info); + + /* pipe_write could be needed because ratio can be changed on pause state */ + if (evas_info->epipe) { + g_mutex_lock(&evas_info->idx_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_UNKNOWN; + } else { + ret = MM_ERROR_NONE; + } + g_mutex_unlock(&evas_info->idx_lock); + } + + MMER_FLEAVE(); return ret; } int mm_evas_renderer_get_roi_area(MMHandleType handle, int *x, int *y, int *w, int *h) { + MMER_FENTER(); + mm_evas_info *evas_info = (mm_evas_info *)handle; if (!evas_info) { @@ -1337,36 +1501,46 @@ int mm_evas_renderer_get_roi_area(MMHandleType handle, int *x, int *y, int *w, i *w = evas_info->dst_roi.w; *h = evas_info->dst_roi.h; + MMER_FLEAVE(); + return MM_ERROR_NONE; } int mm_evas_renderer_set_flip(MMHandleType handle, int flip) { + MMER_FENTER(); + 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_RESOURCE_NOT_INITIALIZED; } - switch(flip) { + switch (flip) { case FLIP_NONE : - evas_info->flip = EVAS_IMAGE_ORIENT_NONE; + value = EVAS_IMAGE_ORIENT_NONE; break; case FLIP_HORIZONTAL: - evas_info->flip = EVAS_IMAGE_FLIP_HORIZONTAL; + value = EVAS_IMAGE_FLIP_HORIZONTAL; break; case FLIP_VERTICAL: - evas_info->flip = EVAS_IMAGE_FLIP_VERTICAL; + value = EVAS_IMAGE_FLIP_VERTICAL; break; case FLIP_BOTH: - evas_info->flip = EVAS_IMAGE_ORIENT_180; + value = EVAS_IMAGE_ORIENT_180; break; default: return MM_ERROR_INVALID_ARGUMENT; } -#if 0 /* FIXME: pause state only */ + 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->idx_lock); ret = ecore_pipe_write(evas_info->epipe, evas_info, UPDATE_TBM_SURF); @@ -1378,12 +1552,16 @@ int mm_evas_renderer_set_flip(MMHandleType handle, int flip) } g_mutex_unlock(&evas_info->idx_lock); } -#endif + + MMER_FLEAVE(); + return ret; } int mm_evas_renderer_get_flip(MMHandleType handle, int *flip) { + MMER_FENTER(); + mm_evas_info *evas_info = (mm_evas_info *)handle; if (!evas_info) { @@ -1391,7 +1569,7 @@ int mm_evas_renderer_get_flip(MMHandleType handle, int *flip) return MM_ERROR_RESOURCE_NOT_INITIALIZED; } - switch(evas_info->flip) { + switch (evas_info->flip) { case EVAS_IMAGE_ORIENT_NONE: *flip = FLIP_NONE; break; @@ -1408,11 +1586,15 @@ int mm_evas_renderer_get_flip(MMHandleType handle, int *flip) return MM_ERROR_INVALID_ARGUMENT; } + MMER_FLEAVE(); + return MM_ERROR_NONE; } int mm_evas_renderer_retrieve_all_packets (MMHandleType handle, bool keep_screen) { + MMER_FENTER(); + int ret = MM_ERROR_NONE; mm_evas_info *evas_info = (mm_evas_info*) handle; @@ -1422,5 +1604,7 @@ int mm_evas_renderer_retrieve_all_packets (MMHandleType handle, bool keep_screen } ret = _mm_evas_renderer_retrieve_all_packets(evas_info, keep_screen); + MMER_FLEAVE(); + return ret; } |