add tdm_pp_set_done_handler and tdm_capture_set_done_handler 99/81499/1
authorBoram Park <boram1288.park@samsung.com>
Tue, 26 Jul 2016 09:31:07 +0000 (18:31 +0900)
committerBoram Park <boram1288.park@samsung.com>
Tue, 26 Jul 2016 11:01:55 +0000 (20:01 +0900)
Change-Id: Id6231d28be18540fe82fd1e6f8d22795539ac4b7

include/tdm.h
include/tdm_backend.h
include/tdm_types.h
src/tdm_capture.c
src/tdm_pp.c
src/tdm_private.h

index 8b29a49..b62beb7 100644 (file)
@@ -693,12 +693,25 @@ tdm_error
 tdm_pp_set_info(tdm_pp *pp, tdm_info_pp *info);
 
 /**
+ * @brief Set the PP done handler to a pp object
+ * @details
+ * The user PP done handler will be called after converting a source buffer's image
+ * to a destination buffer.
+ * @param[in] pp A pp object
+ * @param[in] func A user PP done handler
+ * @param[in] user_data The user data
+ * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ */
+tdm_error
+tdm_pp_set_done_handler(tdm_pp *pp, tdm_pp_done_handler func, void *user_data);
+
+/**
  * @brief Attach a source buffer and a destination buffer to a pp object
  * @param[in] pp A pp object
  * @param[in] src A source buffer
  * @param[in] dst A destination buffer
  * @return #TDM_ERROR_NONE if success. Otherwise, error value.
- * @see tdm_pp_commit, tdm_buffer_add_release_handler, tdm_buffer_release_handler
+ * @see tdm_pp_commit, tdm_pp_set_done_handler
  */
 tdm_error
 tdm_pp_attach(tdm_pp *pp, tbm_surface_h src, tbm_surface_h dst);
@@ -730,11 +743,24 @@ tdm_error
 tdm_capture_set_info(tdm_capture *capture, tdm_info_capture *info);
 
 /**
+ * @brief Set the capture done handler to a capture object
+ * @details
+ * The user capture done handler will be called after capturing a screen into a
+ * buffer.
+ * @param[in] capture A capture object
+ * @param[in] func A user capture done handler
+ * @param[in] user_data The user data
+ * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ */
+tdm_error
+tdm_capture_set_done_handler(tdm_capture *capture, tdm_capture_done_handler func, void *user_data);
+
+/**
  * @brief Attach a TDM buffer to a capture object
  * @param[in] capture A capture object
  * @param[in] buffer A TDM buffer
  * @return #TDM_ERROR_NONE if success. Otherwise, error value.
- * @see tdm_capture_commit, tdm_buffer_add_release_handler, tdm_buffer_release_handler
+ * @see tdm_capture_commit, tdm_capture_set_done_handler
  */
 tdm_error
 tdm_capture_attach(tdm_capture *capture, tbm_surface_h buffer);
index 77b1e9b..8076fa2 100644 (file)
@@ -639,12 +639,6 @@ typedef struct _tdm_func_layer {
 } tdm_func_layer;
 
 /**
- * @brief The done handler of a pp object
- */
-typedef void (*tdm_pp_done_handler)(tdm_pp *pp, tbm_surface_h src,
-                                                                       tbm_surface_h dst, void *user_data);
-
-/**
  * @brief The pp functions for a backend module.
  */
 typedef struct _tdm_func_pp {
@@ -713,12 +707,6 @@ typedef struct _tdm_func_pp {
 } tdm_func_pp;
 
 /**
- * @brief The done handler of a capture object
- */
-typedef void (*tdm_capture_done_handler)(tdm_capture *capture,
-                                                                                tbm_surface_h buffer, void *user_data);
-
-/**
  * @brief The capture functions for a backend module.
  */
 typedef struct _tdm_func_capture {
index 6073646..b11b3f5 100644 (file)
@@ -167,6 +167,17 @@ typedef void (*tdm_output_vblank_handler)(tdm_output *output, unsigned int seque
 typedef void (*tdm_output_commit_handler)(tdm_output *output, unsigned int sequence,
                                                                                  unsigned int tv_sec, unsigned int tv_usec,
                                                                                  void *user_data);
+/**
+ * @brief The done handler of a pp object
+ */
+typedef void (*tdm_pp_done_handler)(tdm_pp *pp, tbm_surface_h src,
+                                                                       tbm_surface_h dst, void *user_data);
+
+/**
+ * @brief The done handler of a capture object
+ */
+typedef void (*tdm_capture_done_handler)(tdm_capture *capture,
+                                                                                tbm_surface_h buffer, void *user_data);
 
 #ifdef __cplusplus
 }
index 2737805..2069487 100644 (file)
@@ -123,6 +123,8 @@ tdm_capture_cb_done(tdm_capture *capture_backend, tbm_surface_h buffer,
                LIST_DEL(&buf_info->link);
 
        _pthread_mutex_unlock(&private_display->lock);
+       if (private_capture->done_func)
+               private_capture->done_func(private_capture, buffer, private_capture->done_user_data);
        tdm_buffer_unref_backend(buffer);
        _pthread_mutex_lock(&private_display->lock);
 }
@@ -360,6 +362,30 @@ tdm_capture_set_info(tdm_capture *capture, tdm_info_capture *info)
 }
 
 EXTERN tdm_error
+tdm_capture_set_done_handler(tdm_capture *capture, tdm_capture_done_handler func, void *user_data)
+{
+       tdm_private_display *private_display;
+       tdm_private_capture *private_capture;
+       tdm_error ret = TDM_ERROR_NONE;
+
+       TDM_RETURN_VAL_IF_FAIL(capture != NULL, TDM_ERROR_INVALID_PARAMETER);
+
+       private_capture = (tdm_private_capture*)capture;
+       private_display = private_capture->private_display;
+
+       TDM_RETURN_VAL_IF_FAIL(func != NULL, TDM_ERROR_INVALID_PARAMETER);
+
+       _pthread_mutex_lock(&private_display->lock);
+
+       private_capture->done_func = func;
+       private_capture->done_user_data = user_data;
+
+       _pthread_mutex_unlock(&private_display->lock);
+
+       return ret;
+}
+
+EXTERN tdm_error
 tdm_capture_attach(tdm_capture *capture, tbm_surface_h buffer)
 {
        CAPTURE_FUNC_ENTRY();
index a87ac19..a1ba203 100644 (file)
@@ -152,6 +152,8 @@ tdm_pp_cb_done(tdm_pp *pp_backend, tbm_surface_h src, tbm_surface_h dst,
                LIST_DEL(&pp_buffer->link);
 
                _pthread_mutex_unlock(&private_display->lock);
+               if (private_pp->done_func)
+                       private_pp->done_func(private_pp, src, dst, private_pp->done_user_data);
                tdm_buffer_unref_backend(src);
                tdm_buffer_unref_backend(dst);
                _pthread_mutex_lock(&private_display->lock);
@@ -337,6 +339,30 @@ tdm_pp_set_info(tdm_pp *pp, tdm_info_pp *info)
 }
 
 EXTERN tdm_error
+tdm_pp_set_done_handler(tdm_pp *pp, tdm_pp_done_handler func, void *user_data)
+{
+       tdm_private_display *private_display;
+       tdm_private_pp *private_pp;
+       tdm_error ret = TDM_ERROR_NONE;
+
+       TDM_RETURN_VAL_IF_FAIL(pp != NULL, TDM_ERROR_INVALID_PARAMETER);
+
+       private_pp = (tdm_private_pp*)pp;
+       private_display = private_pp->private_display;
+
+       TDM_RETURN_VAL_IF_FAIL(func != NULL, TDM_ERROR_INVALID_PARAMETER);
+
+       _pthread_mutex_lock(&private_display->lock);
+
+       private_pp->done_func = func;
+       private_pp->done_user_data = user_data;
+
+       _pthread_mutex_unlock(&private_display->lock);
+
+       return ret;
+}
+
+EXTERN tdm_error
 tdm_pp_attach(tdm_pp *pp, tbm_surface_h src, tbm_surface_h dst)
 {
        tdm_pp_private_buffer *pp_buffer;
index a641440..a15ffc5 100644 (file)
@@ -225,6 +225,9 @@ struct _tdm_private_pp {
 
        tdm_info_pp info;
        pid_t owner_tid;
+
+       tdm_pp_done_handler done_func;
+       void *done_user_data;
 };
 
 struct _tdm_private_capture {
@@ -246,6 +249,9 @@ struct _tdm_private_capture {
 
        tdm_info_capture info;
        pid_t owner_tid;
+
+       tdm_capture_done_handler done_func;
+       void *done_user_data;
 };
 
 /* CAUTION: