tdm_layer_is_committing(tdm_layer *layer, unsigned int *committing);
/**
+ * @brief Remove the user commit handler
+ * @param[in] layer A layer object
+ * @param[in] func A user commit handler
+ * @param[in] user_data The user data
+ * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ */
+tdm_error
+tdm_layer_remove_commit_handler(tdm_layer *layer, tdm_layer_commit_handler func, void *user_data);
+
+/**
* @brief Get a displaying TDM buffer from a layer object
* @details A displaying TDM buffer is a current showing buffer on screen
* that is set to layer object and applied output object of a layer object.
return ret;
}
+INTERN void
+tdm_layer_remove_commit_handler_internal(tdm_layer *layer, tdm_layer_commit_handler func, void *user_data)
+{
+ tdm_private_layer *private_layer = (tdm_private_layer*)layer;
+ tdm_private_output *private_output = private_layer->private_output;
+ tdm_private_layer_commit_handler *lm = NULL, *lmm = NULL;
+
+ TDM_RETURN_IF_FAIL(private_layer != NULL);
+
+ LIST_FOR_EACH_ENTRY_SAFE(lm, lmm, &private_output->layer_commit_handler_list, link) {
+ if (lm->func == func && lm->user_data == user_data) {
+ LIST_DEL(&lm->link);
+ tdm_output_remove_commit_handler_internal(private_output, _tdm_layer_cb_output_commit, lm);
+ _tdm_layer_free_buffer(private_layer, lm->committed_buffer);
+ free(lm);
+ break;
+ }
+ }
+
+ LIST_FOR_EACH_ENTRY_SAFE(lm, lmm, &private_output->pending_commit_handler_list, link) {
+ if (lm->func == func && lm->user_data == user_data) {
+ LIST_DEL(&lm->link);
+ tdm_output_remove_commit_handler_internal(private_output, _tdm_layer_cb_output_commit, lm);
+ _tdm_layer_free_buffer(private_layer, lm->committed_buffer);
+ free(lm);
+ break;
+ }
+ }
+}
+
+EXTERN tdm_error
+tdm_layer_remove_commit_handler(tdm_layer *layer, tdm_layer_commit_handler func, void *user_data)
+{
+ LAYER_FUNC_ENTRY();
+
+ _pthread_mutex_lock(&private_display->lock);
+
+ tdm_layer_remove_commit_handler_internal(layer, func, user_data);
+
+ _pthread_mutex_unlock(&private_display->lock);
+
+ return ret;
+}
+
EXTERN tbm_surface_h
tdm_layer_get_displaying_buffer(tdm_layer *layer, tdm_error *error)
{
tdm_output_remove_vblank_handler_internal(tdm_output *output, tdm_output_vblank_handler func, void *user_data);
void
tdm_output_remove_commit_handler_internal(tdm_output *output, tdm_output_commit_handler func, void *user_data);
+void
+tdm_layer_remove_commit_handler_internal(tdm_layer *layer, tdm_layer_commit_handler func, void *user_data);
void
tdm_layer_committed(tdm_private_layer *private_layer, tdm_private_layer_buffer **committed_buffer);