+
+ if (user_data->is_pd) {
+ if (provider_send_desc_updated(pkgname, id, NULL) < 0)
+ ErrPrint("Failed to send PD updated (%s)\n", id);
+ } else {
+ int w;
+ int h;
+ int pixel_size;
+
+ if (provider_buffer_get_size(handle, &w, &h, &pixel_size) < 0)
+ ErrPrint("Failed to get size (%s)\n", id);
+
+ if (provider_send_updated(pkgname, id, w, h, -1.0f, NULL, NULL) < 0)
+ ErrPrint("Failed to send updated (%s)\n", id);
+ }
+ return 0;
+}
+
+EAPI int livebox_support_hw_buffer(struct livebox_buffer *handle)
+{
+ if (!handle)
+ return -EINVAL;
+
+ return provider_buffer_pixmap_is_support_hw(handle);
+}
+
+EAPI int livebox_create_hw_buffer(struct livebox_buffer *handle)
+{
+ struct livebox_buffer_data *user_data;
+ int ret;
+
+ if (!handle)
+ return -EINVAL;
+
+ user_data = provider_buffer_user_data(handle);
+ if (!user_data)
+ return -EINVAL;
+
+ if (user_data->accelerated)
+ return -EALREADY;
+
+ ret = provider_buffer_pixmap_create_hw(handle);
+ user_data->accelerated = (ret == 0);
+ return ret;
+}
+
+EAPI int livebox_destroy_hw_buffer(struct livebox_buffer *handle)
+{
+ struct livebox_buffer_data *user_data;
+ if (!handle)
+ return -EINVAL;
+
+ user_data = provider_buffer_user_data(handle);
+ if (!user_data || !user_data->accelerated)
+ return -EINVAL;
+
+ user_data->accelerated = 0;
+
+ return provider_buffer_pixmap_destroy_hw(handle);
+}
+
+EAPI void *livebox_buffer_hw_buffer(struct livebox_buffer *handle)
+{
+ struct livebox_buffer_data *user_data;
+
+ if (!handle)
+ return NULL;
+
+ user_data = provider_buffer_user_data(handle);
+ if (!user_data || !user_data->accelerated)
+ return -EINVAL;
+
+ return provider_buffer_pixmap_hw_addr(handle);
+}
+
+EAPI int livebox_buffer_pre_render(struct livebox_buffer *handle)
+{
+ struct livebox_buffer_data *user_data;
+
+ if (!handle)
+ return -EINVAL;
+
+ user_data = provider_buffer_user_data(handle);
+ if (!user_data)
+ return -EINVAL;
+
+ if (!user_data->accelerated)
+ return 0;
+
+ /*!
+ * \note
+ * Do preprocessing for accessing the H/W render buffer
+ */
+ return provider_buffer_pre_render(handle);
+}
+
+EAPI int livebox_buffer_post_render(struct livebox_buffer *handle)
+{
+ int ret;
+ const char *pkgname;
+ const char *id;
+ struct livebox_buffer_data *user_data;
+
+ if (!handle)
+ return -EINVAL;
+
+ user_data = provider_buffer_user_data(handle);
+ if (!user_data)
+ return -EINVAL;
+
+ if (!user_data->accelerated)
+ return 0;
+
+ pkgname = provider_buffer_pkgname(handle);
+ if (!pkgname) {
+ ErrPrint("Invalid buffer handle\n");
+ return -EINVAL;
+ }
+
+ id = provider_buffer_id(handle);
+ if (!id) {
+ ErrPrint("Invalid buffer handler\n");
+ return -EINVAL;
+ }
+
+ ret = provider_buffer_post_render(handle);
+ if (ret < 0) {
+ ErrPrint("Failed to post render processing\n");
+ return ret;
+ }
+
+ if (user_data->is_pd == 1) {
+ if (provider_send_desc_updated(pkgname, id, NULL) < 0)
+ ErrPrint("Failed to send PD updated (%s)\n", id);
+ } else {
+ int w;
+ int h;
+ int pixel_size;
+
+ if (provider_buffer_get_size(handle, &w, &h, &pixel_size) < 0)
+ ErrPrint("Failed to get size (%s)\n", id);
+
+ if (provider_send_updated(pkgname, id, w, h, -1.0f, NULL, NULL) < 0)
+ ErrPrint("Failed to send updated (%s)\n", id);
+ }
+