e_plane_renderer: check count of display surface in queue set 13/168913/1
authorChangyeon Lee <cyeon.lee@samsung.com>
Mon, 29 Jan 2018 05:04:45 +0000 (14:04 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Thu, 1 Feb 2018 04:38:49 +0000 (13:38 +0900)
Change-Id: I73cda86ce5ddfa4fcf3000f79096f42a256258a6

src/bin/e_plane_renderer.c

index 3bed32bd33b1b73927f9b4e16d0ce37ed16e0998..ebd13b95f8fc1540586da8a7a5f8a0a7a472e0b2 100644 (file)
@@ -2079,28 +2079,6 @@ e_plane_renderer_surface_queue_set(E_Plane_Renderer *renderer, tbm_surface_queue
    EINA_SAFETY_ON_NULL_RETURN_VAL(renderer, EINA_FALSE);
    EINA_SAFETY_ON_NULL_RETURN_VAL(tqueue, EINA_FALSE);
 
-   tsq_err = tbm_surface_queue_add_destroy_cb(tqueue, _e_plane_renderer_cb_surface_queue_destroy, (void *)renderer);
-   if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE)
-     {
-        ERR("fail to add destroy cb");
-        return EINA_FALSE;
-     }
-
-   if (renderer->ee)
-     {
-        tsq_err = tbm_surface_queue_add_acquirable_cb(tqueue, _e_plane_renderer_cb_acquirable, (void *)renderer->event_fd);
-        if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE)
-          {
-             ERR("fail to add acquirable cb");
-
-             tsq_err = tbm_surface_queue_remove_destroy_cb(tqueue, _e_plane_renderer_cb_surface_queue_destroy, (void *)renderer);
-             if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE)
-               ERR("fail to remove destroy cb");
-
-             return EINA_FALSE;
-          }
-     }
-
    renderer->tqueue = tqueue;
    renderer->tqueue_width = tbm_surface_queue_get_width(tqueue);
    renderer->tqueue_height = tbm_surface_queue_get_height(tqueue);
@@ -2115,11 +2093,7 @@ e_plane_renderer_surface_queue_set(E_Plane_Renderer *renderer, tbm_surface_queue
      {
         /* dequeue */
         tsurface = e_plane_renderer_surface_queue_dequeue(renderer);
-        if (!tsurface)
-          {
-             ERR("fail to dequeue surface");
-             continue;
-          }
+        if (!tsurface) continue;
 
         /* if not exist, add the surface to the renderer */
         if (!_e_plane_renderer_surface_find_disp_surface(renderer, tsurface))
@@ -2131,7 +2105,46 @@ e_plane_renderer_surface_queue_set(E_Plane_Renderer *renderer, tbm_surface_queue
 
    _e_plane_renderer_surface_release_all_disp_surfaces(renderer);
 
+   tsq_err = tbm_surface_queue_add_destroy_cb(tqueue, _e_plane_renderer_cb_surface_queue_destroy, (void *)renderer);
+   if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE)
+     {
+        ERR("fail to add destroy cb");
+        goto fail_add_destroy_cb;
+     }
+
+   if (renderer->ee)
+     {
+        tsq_err = tbm_surface_queue_add_acquirable_cb(tqueue, _e_plane_renderer_cb_acquirable, (void *)renderer->event_fd);
+        if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE)
+          {
+             ERR("fail to add acquirable cb");
+             goto fail;
+          }
+     }
+   else
+     {
+        if (eina_list_count(renderer->disp_surfaces) < 2)
+          {
+             ERR("fail to get disp_surface count:%d", eina_list_count(renderer->disp_surfaces));
+             goto fail;
+          }
+     }
+
    return EINA_TRUE;
+
+fail:
+   tbm_surface_queue_remove_destroy_cb(tqueue, _e_plane_renderer_cb_surface_queue_destroy, (void *)renderer);
+
+fail_add_destroy_cb:
+   EINA_LIST_FREE(renderer->disp_surfaces, tsurface)
+     _e_plane_renderer_buffer_remove(renderer, tsurface);
+
+   renderer->tqueue = NULL;
+   renderer->tqueue_width = 0;
+   renderer->tqueue_height = 0;
+   renderer->tqueue_size = 0;
+
+   return EINA_FALSE;
 }
 
 EINTERN void