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);
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);
} 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 {
} 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 {
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
}
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);
}
}
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();
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);
}
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;
tdm_info_pp info;
pid_t owner_tid;
+
+ tdm_pp_done_handler done_func;
+ void *done_user_data;
};
struct _tdm_private_capture {
tdm_info_capture info;
pid_t owner_tid;
+
+ tdm_capture_done_handler done_func;
+ void *done_user_data;
};
/* CAUTION: