mode 50/169850/1 sandbox/schanlim/hwc
authorSooChan Lim <sc1.lim@samsung.com>
Sun, 11 Feb 2018 12:51:40 +0000 (21:51 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Sun, 11 Feb 2018 12:53:40 +0000 (21:53 +0900)
Change-Id: I42284f33efc8234f53cd8cfce3444ab5130d3fe7

src/tdm_hwc_window.c
src/tdm_layer.c
src/tdm_output.c
src/tdm_private.h
src/tdm_private_types.h

index 342b9db..e541c19 100644 (file)
@@ -389,8 +389,8 @@ tdm_hwc_window_unset_flags(tdm_hwc_window *hwc_window, tdm_hwc_window_flag flags
        return ret;
 }
 
-static
-void _tdm_hwc_window_layer_commit_handler(tdm_layer *layer, unsigned int sequence,
+static void
+_tdm_hwc_window_layer_commit_handler(tdm_layer *layer, unsigned int sequence,
                                                                                 unsigned int tv_sec, unsigned int tv_usec,
                                                                                 void *user_data)
 {
@@ -411,6 +411,7 @@ tdm_hwc_window_commit(tdm_hwc_window *hwc_window, tdm_hwc_window_commit_handler
        tdm_private_hwc_window_commit_handler *hwc_window_commit_handler;
        tdm_layer *layer = NULL;
        tdm_private_layer *private_layer;
+       tdm_info_layer *info_layer;
 
        HWC_WINDOW_FUNC_ENTRY();
 
@@ -436,17 +437,27 @@ tdm_hwc_window_commit(tdm_hwc_window *hwc_window, tdm_hwc_window_commit_handler
                /* LCOV_EXCL_STOP */
        }
 
-       layer = func_hwc_window->hwc_window_get_layer(private_hwc_window->hwc_window_backend,
-                                                                                                                  &ret);
-       if (!layer) {
+       private_layer = (tdm_private_layer*)layer;
+
+    info_layer = (tdm_info_layer *)&private_window->info;
+       ret = tdm_layer_set_info_internal(private_layer, info_layer);
+       if (ret != TDM_ERROR_NONE) {
                /* LCOV_EXCL_START */
-               _pthread_mutex_unlock(&private_display->lock);
-               TDM_ERR("no assigned layer!!");
-               return TDM_ERROR_INVALID_PARAMETER;
+               TDM_ERR("failed: layer set info(window)");
                /* LCOV_EXCL_STOP */
+               return ret;
+       }
+       
+       if (private_window->buffer)
+               ret = tdm_layer_set_buffer_internal(private_layer, private_window->buffer);
+       else
+               ret = tdm_layer_unset_buffer_internal(private_layer);
+       if (ret != TDM_ERROR_NONE) {
+               /* LCOV_EXCL_START */
+               TDM_ERR("failed: layer set info(window)");
+               /* LCOV_EXCL_STOP */
+               return ret;
        }
-
-       private_layer = (tdm_private_layer*)layer;
 
        hwc_window_commit_handler = calloc(1, sizeof(tdm_private_hwc_window_commit_handler));
        if (!hwc_window_commit_handler) {
index 6787258..df09520 100644 (file)
@@ -205,18 +205,12 @@ tdm_layer_get_property(tdm_layer *layer, unsigned int id, tdm_value *value)
        return ret;
 }
 
-EXTERN tdm_error
-tdm_layer_set_info(tdm_layer *layer, tdm_info_layer *info)
+INTERN tdm_error
+tdm_layer_set_info_internal(tdm_private_layer *private_layer, tdm_info_layer *info)
 {
        tdm_func_layer *func_layer;
        char fmtstr[128];
 
-       LAYER_FUNC_ENTRY();
-
-       TDM_RETURN_VAL_IF_FAIL(info != NULL, TDM_ERROR_INVALID_PARAMETER);
-
-       _pthread_mutex_lock(&private_display->lock);
-
        func_layer = &private_display->func_layer;
 
        if (private_layer->usable)
@@ -248,6 +242,21 @@ tdm_layer_set_info(tdm_layer *layer, tdm_info_layer *info)
 
        private_layer->pending_info_changed = 1;
        private_layer->pending_info = *info;
+}
+
+EXTERN tdm_error
+tdm_layer_set_info(tdm_layer *layer, tdm_info_layer *info)
+{
+       tdm_func_layer *func_layer;
+       char fmtstr[128];
+
+       LAYER_FUNC_ENTRY();
+
+       TDM_RETURN_VAL_IF_FAIL(info != NULL, TDM_ERROR_INVALID_PARAMETER);
+
+       _pthread_mutex_lock(&private_display->lock);
+
+       ret = tdm_layer_set_info_internal(private_layer, info);
 
        _pthread_mutex_unlock(&private_display->lock);
 
index 1595cce..9beb5fe 100644 (file)
@@ -1826,8 +1826,8 @@ tdm_output_hwc_set_client_target_buffer(tdm_output *output, tbm_surface_h target
        return ret;
 }
 
-static
-void _tdm_output_hwc_layer_commit_handler(tdm_layer *layer, unsigned int sequence,
+static void
+_tdm_output_hwc_layer_commit_handler(tdm_layer *layer, unsigned int sequence,
                                                                                 unsigned int tv_sec, unsigned int tv_usec,
                                                                                 void *user_data)
 {
@@ -1848,7 +1848,9 @@ tdm_output_hwc_commit_target_buffer(tdm_output *output, tdm_output_hwc_target_bu
        tdm_private_output_hwc_target_buffer_commit_handler *output_hwc_target_buffer_commit_handler;
        tdm_layer *layer = NULL;
        tdm_private_layer *private_layer;
-
+       tdm_info_layer layer_info;
+       const tdm_output_mode *mode;
+       
        OUTPUT_FUNC_ENTRY();
 
        _pthread_mutex_lock(&private_display->lock);
@@ -1880,6 +1882,41 @@ tdm_output_hwc_commit_target_buffer(tdm_output *output, tdm_output_hwc_target_bu
        }
 
        private_layer = (tdm_private_layer*)layer;
+       
+       /* set layer_info only one time */
+       if (&private_output->target_buffer_info == NULL) {
+               mode = private_output->current_mode
+               info_layer.src_config.size.h = mode->hdisplay;
+               info_layer.src_config.size.v = mode->vdisplay;
+               info_layer.src_config.pos.x = 0;
+               info_layer.src_config.pos.y = 0;
+               info_layer.src_config.pos.w = mode->hdisplay;
+               info_layer.src_config.pos.h = mode->vdisplay;
+               info_layer.dst_pos.x = 0;
+               info_layer.dst_pos.y = 0;
+               info_layer.dst_pos.w = mode->hdisplay;
+               info_layer.dst_pos.h = mode->vdisplay;
+               info_layer.transform = TDM_TRANSFORM_NORMAL;
+       }
+
+       ret = tdm_layer_set_info_internal(private_layer, &private_output->target_buffer_info);
+       if (ret != TDM_ERROR_NONE) {
+               /* LCOV_EXCL_START */
+               TDM_ERR("failed: layer set info(window)");
+               /* LCOV_EXCL_STOP */
+               return ret;
+       }
+       
+       if (private_window->buffer)
+               ret = tdm_layer_set_buffer_internal(private_layer, private_window->buffer);
+       else
+               ret = tdm_layer_unset_buffer_internal(private_layer);
+       if (ret != TDM_ERROR_NONE) {
+               /* LCOV_EXCL_START */
+               TDM_ERR("failed: layer set info(window)");
+               /* LCOV_EXCL_STOP */
+               return ret;
+       }
 
        output_hwc_target_buffer_commit_handler = calloc(1, sizeof(tdm_private_output_hwc_target_buffer_commit_handler));
        if (!output_hwc_target_buffer_commit_handler) {
index eea36d4..57f97b2 100644 (file)
@@ -141,6 +141,12 @@ tdm_error
 tdm_layer_commit_pending_data(tdm_private_layer *private_layer);
 void
 tdm_layer_committed(tdm_private_layer *private_layer, tdm_private_layer_buffer **committed_buffer);
+tdm_error
+tdm_layer_set_info_internal(tdm_private_layer *private_layer, tdm_info_layer *info);
+tdm_error
+tdm_layer_set_buffer_internal(tdm_private_layer *private_layer, tbm_surface_h buffer);
+tdm_error
+tdm_layer_unset_buffer_internal(tdm_private_layer *private_layer);
 
 void
 tdm_pp_cb_done(tdm_pp *pp_backend, tbm_surface_h src, tbm_surface_h dst,
index 7a1829d..4075b1e 100644 (file)
@@ -206,6 +206,8 @@ struct _tdm_private_output {
                tdm_event_loop_source *event_source;
        } need_validate;
 
+       tdm_info_layer target_buffer_info; /* layer_info for the target_buffer */
+
        /* calling a output commit per a vblank */
        int commit_per_vblank;
        tdm_commit_type commit_type;