add tdm_layer_get_output
[platform/core/uifw/libtdm.git] / src / tdm_layer.c
index ed86c37..0ce567e 100644 (file)
@@ -80,6 +80,25 @@ static void _tdm_layer_cb_output_commit(tdm_output *output, unsigned int sequenc
                                                                                unsigned int tv_sec, unsigned int tv_usec, void *user_data);
 static void _tdm_layer_reset_pending_data(tdm_private_layer *private_layer);
 
+EXTERN tdm_output*
+tdm_layer_get_output(tdm_layer *layer, tdm_error *error)
+{
+       tdm_output *output;
+
+       LAYER_FUNC_ENTRY_ERROR();
+
+       _pthread_mutex_lock(&private_display->lock);
+
+       if (error)
+               *error = TDM_ERROR_NONE;
+
+       output = private_layer->private_output;
+
+       _pthread_mutex_unlock(&private_display->lock);
+
+       return output;
+}
+
 EXTERN tdm_error
 tdm_layer_get_capabilities(tdm_layer *layer, tdm_layer_capability *capabilities)
 {
@@ -415,17 +434,13 @@ _tdm_layer_free_all_buffers(tdm_private_layer *private_layer)
        }
 }
 
-EXTERN tdm_error
-tdm_layer_set_buffer(tdm_layer *layer, tbm_surface_h buffer)
+INTERN tdm_error
+tdm_layer_set_buffer_internal(tdm_private_layer *private_layer, tbm_surface_h buffer)
 {
+       tdm_private_output *private_output = private_layer->private_output;
+       tdm_private_display *private_display = private_output->private_display;
        tdm_func_layer *func_layer;
 
-       LAYER_FUNC_ENTRY();
-
-       TDM_RETURN_VAL_IF_FAIL(buffer != NULL, TDM_ERROR_INVALID_PARAMETER);
-
-       _pthread_mutex_lock(&private_display->lock);
-
        /* LCOV_EXCL_START */
        /* dump buffer */
        if (tdm_dump_enable && !(private_layer->caps.capabilities & TDM_LAYER_CAPABILITY_VIDEO))
@@ -450,7 +465,6 @@ tdm_layer_set_buffer(tdm_layer *layer, tbm_surface_h buffer)
 
        if (!func_layer->layer_set_buffer) {
                /* LCOV_EXCL_START */
-               _pthread_mutex_unlock(&private_display->lock);
                TDM_ERR("not implemented!!");
                return TDM_ERROR_NOT_IMPLEMENTED;
                /* LCOV_EXCL_START */
@@ -484,19 +498,33 @@ tdm_layer_set_buffer(tdm_layer *layer, tbm_surface_h buffer)
                TDM_TRACE_ASYNC_BEGIN((intptr_t)private_layer, "[LAYER] %d", tbm_bo_export(bo));
        }
 
-       _pthread_mutex_unlock(&private_display->lock);
-
-       return ret;
+       return TDM_ERROR_NONE;
 }
 
 EXTERN tdm_error
-tdm_layer_unset_buffer(tdm_layer *layer)
+tdm_layer_set_buffer(tdm_layer *layer, tbm_surface_h buffer)
 {
-       tdm_func_layer *func_layer;
        LAYER_FUNC_ENTRY();
 
+       TDM_RETURN_VAL_IF_FAIL(buffer != NULL, TDM_ERROR_INVALID_PARAMETER);
+
        _pthread_mutex_lock(&private_display->lock);
 
+       ret = tdm_layer_set_buffer_internal(private_layer, buffer);
+
+       _pthread_mutex_unlock(&private_display->lock);
+
+       return ret;
+}
+
+INTERN tdm_error
+tdm_layer_unset_buffer_internal(tdm_private_layer *private_layer)
+{
+       tdm_private_output *private_output = private_layer->private_output;
+       tdm_private_display *private_display = private_output->private_display;
+       tdm_func_layer *func_layer;
+       tdm_error ret = TDM_ERROR_NONE;
+
        func_layer = &private_display->func_layer;
 
        _tdm_layer_free_all_buffers(private_layer);
@@ -508,7 +536,6 @@ tdm_layer_unset_buffer(tdm_layer *layer)
 
        if (!func_layer->layer_unset_buffer) {
                /* LCOV_EXCL_START */
-               _pthread_mutex_unlock(&private_display->lock);
                TDM_ERR("not implemented!!");
                return TDM_ERROR_NOT_IMPLEMENTED;
                /* LCOV_EXCL_START */
@@ -517,6 +544,18 @@ tdm_layer_unset_buffer(tdm_layer *layer)
        ret = func_layer->layer_unset_buffer(private_layer->layer_backend);
        TDM_WARNING_IF_FAIL(ret == TDM_ERROR_NONE);
 
+       return ret;
+}
+
+EXTERN tdm_error
+tdm_layer_unset_buffer(tdm_layer *layer)
+{
+       LAYER_FUNC_ENTRY();
+
+       _pthread_mutex_lock(&private_display->lock);
+
+       ret = tdm_layer_unset_buffer_internal(private_layer);
+
        _pthread_mutex_unlock(&private_display->lock);
 
        return ret;