devilhorns pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=939d221ff119f82fc30674d8c293b6b8a18a4db1

commit 939d221ff119f82fc30674d8c293b6b8a18a4db1
Author: Chris Michael <cp.mich...@samsung.com>
Date:   Fri Jun 5 09:59:57 2015 -0400

    evas-gl-drm: Fix issue with swap mode returning wrong value
    
    Summary: This fixes a crashing issue in evas image cache due to the
    engine returning an improper swap mode.
    
    @fix
    
    Signed-off-by: Chris Michael <cp.mich...@samsung.com>
---
 src/modules/evas/engines/gl_drm/evas_outbuf.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/src/modules/evas/engines/gl_drm/evas_outbuf.c 
b/src/modules/evas/engines/gl_drm/evas_outbuf.c
index 09f2981..6a9d7b8 100644
--- a/src/modules/evas/engines/gl_drm/evas_outbuf.c
+++ b/src/modules/evas/engines/gl_drm/evas_outbuf.c
@@ -450,6 +450,9 @@ evas_outbuf_reconfigure(Outbuf *ob, int w, int h, int rot, 
Outbuf_Depth depth)
 Render_Engine_Swap_Mode
 evas_outbuf_buffer_state_get(Outbuf *ob)
 {
+   /* check for valid output buffer */
+   if (!ob) return MODE_FULL;
+
    if (ob->swap_mode == MODE_AUTO && _extn_have_buffer_age)
      {
         Render_Engine_Swap_Mode swap_mode;
@@ -469,6 +472,29 @@ evas_outbuf_buffer_state_get(Outbuf *ob)
 
         return swap_mode;
      }
+   else
+     {
+        int delta;
+
+        delta = (ob->priv.last - ob->priv.curr +
+                 (ob->priv.last > ob->priv.last ?
+                     0 : ob->priv.num)) % ob->priv.num;
+
+        /* This is the number of frame since last frame */
+        switch (delta)
+          {
+           case 0:
+             return MODE_COPY;
+           case 1:
+             return MODE_DOUBLE;
+           case 2:
+             return MODE_TRIPLE;
+           case 3:
+             return MODE_QUADRUPLE;
+           default:
+             return MODE_FULL;
+          }
+     }
 
    return ob->swap_mode;
 }

-- 


Reply via email to