summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNAMJEONGYOON <just.nam@samsung.com>2016-04-19 15:28:48 +0900
committerNAMJEONGYOON <just.nam@samsung.com>2016-04-19 15:28:48 +0900
commita09a665f36c06866121b6516e97b0dd66550e6e3 (patch)
tree18fa2d80753550af1f583e47998c2eead1a3f7b9
parentb2e1a52822e89e77a824a8f070f629565d8fa1fa (diff)
downloadlibmm-evas-renderer-a09a665f36c06866121b6516e97b0dd66550e6e3.tar.gz
libmm-evas-renderer-a09a665f36c06866121b6516e97b0dd66550e6e3.tar.bz2
libmm-evas-renderer-a09a665f36c06866121b6516e97b0dd66550e6e3.zip
Change-Id: I8c19ca17cf1ed67c419aaf644e7cda6e16ba0298
-rw-r--r--src/mm_evas_renderer.c18
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)
{