[Extn_GL] Add changed_buffer for tizen remote surface 72/110672/1 accepted/tizen/common/20170119.171610 accepted/tizen/ivi/20170118.223256 accepted/tizen/mobile/20170118.223145 accepted/tizen/tv/20170118.223212 accepted/tizen/wearable/20170118.223233 submit/tizen/20170118.061743
authorsunghyun kim <scholb.kim@samsung.com>
Mon, 16 Jan 2017 06:57:01 +0000 (15:57 +0900)
committersunghyun kim <scholb.kim@samsung.com>
Tue, 17 Jan 2017 10:22:42 +0000 (19:22 +0900)
buffer_update callback will be deprecated next version
so add changed buffer and upgrade version 2 -> 3

Change-Id: Ia89723f823df91ad0ec7e3879ce82270d11c2c54

src/modules/ecore_evas/engines/extn/ecore_evas_extn.c

index b428c63b63d636b93ebc5b408785458c12c8d635..2bab2c2ae9c91a8fba9b7ba8f84cee5f882bccbe 100644 (file)
@@ -45,13 +45,16 @@ static const struct tizen_remote_surface_provider_listener _ecore_evas_extn_gl_s
 };
 
 //For Cousumer
-static void _ecore_evas_extn_rs_cb_buffer_update(void *data, struct tizen_remote_surface *trs, struct wl_buffer *buffer, uint32_t time);
+static void _ecore_evas_extn_rs_cb_buffer_update(void *data, struct tizen_remote_surface *trs, struct wl_buffer *buffer, uint32_t time); /* This callback will be deprecated */
 static void _ecore_evas_extn_rs_cb_missing(void *data, struct tizen_remote_surface *trs);
+static void _ecore_evas_extn_rs_cb_changed_buffer(void *data, struct tizen_remote_surface *trs, uint32_t type, struct wl_buffer *buffer,
+                              int32_t img_file_fd, uint32_t img_file_size, uint32_t time, struct wl_array *keys);
 
 static const struct tizen_remote_surface_listener _ecore_evas_extn_gl_plug_listener =
 {
-   _ecore_evas_extn_rs_cb_buffer_update,
+   _ecore_evas_extn_rs_cb_buffer_update, // it will be deprecated
    _ecore_evas_extn_rs_cb_missing,
+   _ecore_evas_extn_rs_cb_changed_buffer,
 };
 
 #endif
@@ -141,7 +144,7 @@ static void _ecore_evas_extn_rsp_cb_visibility(void *data, struct tizen_remote_s
 }
 
 static void
-_ecore_evas_extn_rs_cb_buffer_update(void *data, struct tizen_remote_surface *trs, struct wl_buffer *buffer, uint32_t time)
+_ecore_evas_extn_rs_cb_buffer_update(void *data, struct tizen_remote_surface *trs, struct wl_buffer *buffer, uint32_t time) /* This callback will be deprecated */
 {
   Evas_Object* img = data;
 
@@ -180,6 +183,55 @@ _ecore_evas_extn_rs_cb_buffer_update(void *data, struct tizen_remote_surface *tr
    pre_buffer = buffer;
 }
 
+static void
+_ecore_evas_extn_rs_cb_changed_buffer(void *data, struct tizen_remote_surface *trs, uint32_t type, struct wl_buffer *buffer,
+                              int32_t img_file_fd, uint32_t img_file_size, uint32_t time, struct wl_array *keys)
+{
+   /* check type of given buffer */
+   if (type == TIZEN_REMOTE_SURFACE_BUFFER_TYPE_TBM)
+     {
+        Evas_Object* img = data;
+        //see next page
+        tbm_surface_h tbm_surface;
+        int width, height;
+
+        //added image object for native surface
+        tizen_remote_surface_transfer_visibility(trs,
+                                   TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_VISIBLE);
+
+        //get tbm surface from buffer
+        tbm_surface = wl_buffer_get_user_data(buffer);
+        width = tbm_surface_get_width(tbm_surface);
+        height = tbm_surface_get_height(tbm_surface);
+        INF("[EXTN_GL] BUFFER UPDATE %p %p (%dx%d)",buffer,tbm_surface,width,height);
+
+        Evas_Native_Surface ns;
+        memset(&ns, 0, sizeof(Evas_Native_Surface));
+        ns.version = EVAS_NATIVE_SURFACE_VERSION;
+        ns.type = EVAS_NATIVE_SURFACE_TBM;
+        ns.data.tbm.buffer = tbm_surface;
+
+        evas_object_image_size_set(img, width, height);
+
+        //set native surface
+        evas_object_image_native_surface_set(img, &ns);
+        //set dirty for image updating
+        evas_object_image_pixels_dirty_set(img, EINA_TRUE);
+     }
+   else if (type == TIZEN_REMOTE_SURFACE_BUFFER_TYPE_IMAGE_FILE)
+     {
+        ERR("[EXTN_GL] IMAGE_FILE type can't use now");
+     }
+
+   // release pre_buffer & image_file_fd
+   if( pre_buffer)
+     {
+        if (tizen_remote_surface_get_version(trs) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION)
+           tizen_remote_surface_release(trs, pre_buffer);
+     }
+   pre_buffer = buffer;
+   close(img_file_fd); /* close passed fd whatever type is */
+}
 static void
 _ecore_evas_extn_rs_cb_missing(void *data, struct tizen_remote_surface *trs)
 {
@@ -210,7 +262,7 @@ _tizen_remote_surface_init(void)
                {
                   tizen_rsm =
                      wl_registry_bind(registry, global->id,
-                                      &tizen_remote_surface_manager_interface, global->version<2? global->version : 2);
+                                      &tizen_remote_surface_manager_interface, global->version<3? global->version : 3);
                    INF("[EXTN_GL] Create tizen_rsm : %p",tizen_rsm);
                }
           }