diff options
author | NAMJEONGYOON <just.nam@samsung.com> | 2016-04-19 15:28:48 +0900 |
---|---|---|
committer | NAMJEONGYOON <just.nam@samsung.com> | 2016-04-19 15:28:48 +0900 |
commit | a09a665f36c06866121b6516e97b0dd66550e6e3 (patch) | |
tree | 18fa2d80753550af1f583e47998c2eead1a3f7b9 | |
parent | b2e1a52822e89e77a824a8f070f629565d8fa1fa (diff) | |
download | libmm-evas-renderer-a09a665f36c06866121b6516e97b0dd66550e6e3.tar.gz libmm-evas-renderer-a09a665f36c06866121b6516e97b0dd66550e6e3.tar.bz2 libmm-evas-renderer-a09a665f36c06866121b6516e97b0dd66550e6e3.zip |
add lock for managing sent_buffer_cnt correctlysubmit/tizen/20160419.063701accepted/tizen/wearable/20160420.042559accepted/tizen/tv/20160420.042529accepted/tizen/mobile/20160420.042517accepted/tizen/ivi/20160420.042615accepted/tizen/common/20160420.140508
Change-Id: I8c19ca17cf1ed67c419aaf644e7cda6e16ba0298
-rw-r--r-- | src/mm_evas_renderer.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/mm_evas_renderer.c b/src/mm_evas_renderer.c index 983e2b7..7a8b8d7 100644 --- a/src/mm_evas_renderer.c +++ b/src/mm_evas_renderer.c @@ -160,11 +160,13 @@ static void _evas_render_pre_cb(void *data, Evas *e, void *event_info) return; } - /* flush will be executed in this callback normally, */ - /* because native_surface_set must be called in main thread */ + /* flush will be executed in this callback normally, + because native_surface_set must be called in main thread */ if (evas_info->retrieve_packet) { + g_mutex_lock(&evas_info->idx_lock); if (_flush_packets(evas_info) != MM_ERROR_NONE) LOGE("flushing packets are failed"); + g_mutex_unlock(&evas_info->idx_lock); } } @@ -429,6 +431,8 @@ int _flush_packets(mm_evas_info *evas_info) evas_object_image_native_surface_set (evas_info->eo, NULL); evas_object_image_data_set (evas_info->eo, NULL); } + LOGD("sent packet %d", evas_info->sent_buffer_cnt); + /* destroy all packets */ g_mutex_lock(&evas_info->mp_lock); for (i = 0; i < MAX_PACKET_NUM; i++) { @@ -770,6 +774,10 @@ int _mm_evas_renderer_retrieve_all_packets(mm_evas_info *evas_info, bool keep_sc pid_t pid = getpid(); pid_t tid = syscall(SYS_gettid); + /* write and this API can be called at the same time. + so lock is needed for counting sent_buffer_cnt correctly */ + g_mutex_lock(&evas_info->idx_lock); + /* make flush buffer */ if (keep_screen) ret = _mm_evas_renderer_make_flush_buffer(evas_info); @@ -786,6 +794,7 @@ int _mm_evas_renderer_retrieve_all_packets(mm_evas_info *evas_info, bool keep_sc /* it will be executed to write flush buffer and destroy media packets in pre_cb */ evas_info->retrieve_packet = TRUE; } + g_mutex_unlock(&evas_info->idx_lock); return ret; } @@ -822,7 +831,6 @@ int _mm_evas_renderer_make_flush_buffer (mm_evas_info *evas_info) } memset(flush_buffer, 0x0, sizeof(flush_info)); - /* @@@ lock is needed, because write and this API can be called at the same time */ ret = media_packet_get_tbm_surface(packet, &src_tbm_surf); if (ret != MEDIA_PACKET_ERROR_NONE || !src_tbm_surf) { LOGW("get_tbm_surface is failed"); @@ -831,7 +839,7 @@ int _mm_evas_renderer_make_flush_buffer (mm_evas_info *evas_info) /* get src buffer info */ tbm_fmt = tbm_surface_get_format(src_tbm_surf); - src_bo = tbm_surface_internal_get_bo(src_tbm_surf, 0); //@@@ 0?? + src_bo = tbm_surface_internal_get_bo(src_tbm_surf, 0); src_size = tbm_bo_size(src_bo); if (!src_bo || !src_size) { LOGE("bo(%p), size(%d)", src_bo, src_size); @@ -847,7 +855,7 @@ int _mm_evas_renderer_make_flush_buffer (mm_evas_info *evas_info) } /* get bo and size */ - bo = tbm_surface_internal_get_bo(flush_buffer->tbm_surf, 0); //@@@ 0?? + bo = tbm_surface_internal_get_bo(flush_buffer->tbm_surf, 0); size = tbm_bo_size(bo); if (!bo || !size) { |