correct email address
[platform/core/uifw/libtdm.git] / src / tdm_hwc_window.c
index 91191b8..c3619ed 100644 (file)
@@ -9,7 +9,7 @@
  *          Taeheon Kim <th908.kim@samsung.com>,
  *          YoungJun Cho <yj44.cho@samsung.com>,
  *          SooChan Lim <sc1.lim@samsung.com>,
- *          Boram Park <sc1.lim@samsung.com>
+ *          Boram Park <boram1288.park@samsung.com>
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the
 #include "config.h"
 #endif
 
-#include "tdm.h"
-#include "tdm_backend.h"
 #include "tdm_private.h"
-#include "tdm_helper.h"
 
 #define COUNT_MAX   10
 
@@ -77,6 +74,7 @@
 tbm_surface_queue_h
 tdm_hwc_window_get_tbm_buffer_queue(tdm_hwc_window *hwc_window, tdm_error *error)
 {
+       tdm_private_module *private_module;
        tdm_func_hwc_window *func_hwc_window = NULL;
        tbm_surface_queue_h queue = NULL;
 
@@ -84,12 +82,13 @@ tdm_hwc_window_get_tbm_buffer_queue(tdm_hwc_window *hwc_window, tdm_error *error
 
        _pthread_mutex_lock(&private_display->lock);
 
-       func_hwc_window = &private_display->func_hwc_window;
+       private_module = private_output->private_module;
+       func_hwc_window = &private_module->func_hwc_window;
 
        if (!func_hwc_window->hwc_window_get_tbm_buffer_queue) {
                /* LCOV_EXCL_START */
                _pthread_mutex_unlock(&private_display->lock);
-               TDM_ERR("not implemented!!");
+               TDM_WRN("not implemented!!");
                if (error)
                        *error = TDM_ERROR_NOT_IMPLEMENTED;
                return NULL;
@@ -104,49 +103,25 @@ tdm_hwc_window_get_tbm_buffer_queue(tdm_hwc_window *hwc_window, tdm_error *error
 }
 
 EXTERN tdm_error
-tdm_hwc_window_set_zpos(tdm_hwc_window *hwc_window, uint32_t zpos)
-{
-       tdm_func_hwc_window *func_hwc_window = NULL;
-
-       HWC_WINDOW_FUNC_ENTRY();
-
-       _pthread_mutex_lock(&private_display->lock);
-
-       func_hwc_window = &private_display->func_hwc_window;
-
-       if (!func_hwc_window->hwc_window_set_zpos) {
-               /* LCOV_EXCL_START */
-               _pthread_mutex_unlock(&private_display->lock);
-               TDM_ERR("not implemented!!");
-               return TDM_ERROR_NOT_IMPLEMENTED;
-               /* LCOV_EXCL_STOP */
-       }
-
-       ret = func_hwc_window->hwc_window_set_zpos(private_hwc_window->hwc_window_backend, zpos);
-       if (ret == TDM_ERROR_NONE)
-               private_hwc_window->zpos = zpos;
-
-       _pthread_mutex_unlock(&private_display->lock);
-
-       return ret;
-}
-
-EXTERN tdm_error
 tdm_hwc_window_set_composition_type(tdm_hwc_window *hwc_window,
                                                                        tdm_hwc_window_composition composition_type)
 {
+       tdm_private_module *private_module;
        tdm_func_hwc_window *func_hwc_window = NULL;
 
        HWC_WINDOW_FUNC_ENTRY();
+       TDM_RETURN_VAL_IF_FAIL(composition_type >= TDM_COMPOSITION_NONE, TDM_ERROR_INVALID_PARAMETER);
+       TDM_RETURN_VAL_IF_FAIL(composition_type <= TDM_COMPOSITION_VIDEO, TDM_ERROR_INVALID_PARAMETER);
 
        _pthread_mutex_lock(&private_display->lock);
 
-       func_hwc_window = &private_display->func_hwc_window;
+       private_module = private_output->private_module;
+       func_hwc_window = &private_module->func_hwc_window;
 
        if (!func_hwc_window->hwc_window_set_composition_type) {
                /* LCOV_EXCL_START */
                _pthread_mutex_unlock(&private_display->lock);
-               TDM_ERR("not implemented!!");
+               TDM_WRN("not implemented!!");
                return TDM_ERROR_NOT_IMPLEMENTED;
                /* LCOV_EXCL_STOP */
        }
@@ -161,18 +136,22 @@ tdm_hwc_window_set_composition_type(tdm_hwc_window *hwc_window,
 EXTERN tdm_error
 tdm_hwc_window_set_buffer_damage(tdm_hwc_window *hwc_window, tdm_hwc_region damage)
 {
+       tdm_private_module *private_module;
        tdm_func_hwc_window *func_hwc_window = NULL;
 
        HWC_WINDOW_FUNC_ENTRY();
+       if (damage.num_rects > 0)
+               TDM_RETURN_VAL_IF_FAIL(damage.rects != NULL, TDM_ERROR_INVALID_PARAMETER);
 
        _pthread_mutex_lock(&private_display->lock);
 
-       func_hwc_window = &private_display->func_hwc_window;
+       private_module = private_output->private_module;
+       func_hwc_window = &private_module->func_hwc_window;
 
        if (!func_hwc_window->hwc_window_set_buffer_damage) {
                /* LCOV_EXCL_START */
                _pthread_mutex_unlock(&private_display->lock);
-               TDM_ERR("not implemented!!");
+               TDM_WRN("not implemented!!");
                return TDM_ERROR_NOT_IMPLEMENTED;
                /* LCOV_EXCL_STOP */
        }
@@ -188,6 +167,7 @@ tdm_hwc_window_set_buffer_damage(tdm_hwc_window *hwc_window, tdm_hwc_region dama
 EXTERN tdm_error
 tdm_hwc_window_set_info(tdm_hwc_window *hwc_window, tdm_hwc_window_info *info)
 {
+       tdm_private_module *private_module;
        tdm_func_hwc_window *func_hwc_window = NULL;
        char fmtstr[128];
 
@@ -197,12 +177,13 @@ tdm_hwc_window_set_info(tdm_hwc_window *hwc_window, tdm_hwc_window_info *info)
 
        _pthread_mutex_lock(&private_display->lock);
 
-       func_hwc_window = &private_display->func_hwc_window;
+       private_module = private_output->private_module;
+       func_hwc_window = &private_module->func_hwc_window;
 
        if (!func_hwc_window->hwc_window_set_info) {
                /* LCOV_EXCL_START */
                _pthread_mutex_unlock(&private_display->lock);
-               TDM_ERR("not implemented!!");
+               TDM_WRN("not implemented!!");
                return TDM_ERROR_NOT_IMPLEMENTED;
                /* LCOV_EXCL_STOP */
        }
@@ -228,31 +209,10 @@ tdm_hwc_window_set_info(tdm_hwc_window *hwc_window, tdm_hwc_window_info *info)
        return ret;
 }
 
-/* LCOV_EXCL_START */
-static void
-_tdm_window_dump_buffer(tdm_hwc_window *hwc_window, tbm_surface_h buffer)
-{
-       tdm_private_hwc_window *private_window = (tdm_private_hwc_window *)hwc_window;
-       tdm_private_output *private_output = private_window->private_output;
-       unsigned int pipe;
-       uint32_t zpos;
-       char fname[PATH_MAX];
-
-       pipe = private_output->pipe;
-       zpos = private_window->zpos;
-
-       snprintf(fname, sizeof(fname), "tdm_%d_win_%d", pipe, zpos);
-
-       tbm_surface_internal_dump_buffer(buffer, fname);
-       TDM_DBG("%s dump excute", fname);
-
-       return;
-}
-/* LCOV_EXCL_STOP */
-
 EXTERN tdm_error
 tdm_hwc_window_set_buffer(tdm_hwc_window *hwc_window, tbm_surface_h buffer)
 {
+       tdm_private_module *private_module;
        tdm_func_hwc_window *func_hwc_window;
 
        HWC_WINDOW_FUNC_ENTRY();
@@ -263,28 +223,22 @@ tdm_hwc_window_set_buffer(tdm_hwc_window *hwc_window, tbm_surface_h buffer)
                /* LCOV_EXCL_START */
                char str[TDM_PATH_LEN];
                static int i;
-               snprintf(str, TDM_PATH_LEN, "window_%d_%d_%03d",
-                                private_output->index, private_hwc_window->zpos, i++);
+               snprintf(str, TDM_PATH_LEN, "window_%d_%03d", private_output->index, i++);
                tdm_helper_dump_buffer_str(buffer, tdm_debug_dump_dir, str);
                /* LCOV_EXCL_STOP */
        }
 
-       func_hwc_window = &private_display->func_hwc_window;
+       private_module = private_output->private_module;
+       func_hwc_window = &private_module->func_hwc_window;
 
        if (!func_hwc_window->hwc_window_set_buffer) {
                /* LCOV_EXCL_START */
                _pthread_mutex_unlock(&private_display->lock);
-               TDM_ERR("not implemented!!");
+               TDM_WRN("not implemented!!");
                return TDM_ERROR_NOT_IMPLEMENTED;
                /* LCOV_EXCL_STOP */
        }
 
-       /* dump buffer */
-       /* LCOV_EXCL_START */
-       if (tdm_dump_enable && buffer)
-               _tdm_window_dump_buffer(hwc_window, buffer);
-       /* LCOV_EXCL_STOP */
-
        ret = func_hwc_window->hwc_window_set_buffer(private_hwc_window->hwc_window_backend, buffer);
 
        _pthread_mutex_unlock(&private_display->lock);
@@ -292,35 +246,82 @@ tdm_hwc_window_set_buffer(tdm_hwc_window *hwc_window, tbm_surface_h buffer)
        return ret;
 }
 
+EXTERN tdm_error
+tdm_hwc_window_unset_buffer(tdm_hwc_window *hwc_window)
+{
+       tdm_private_module *private_module;
+       tdm_func_hwc_window *func_hwc_window;
+
+       HWC_WINDOW_FUNC_ENTRY();
+
+       _pthread_mutex_lock(&private_display->lock);
+
+       private_module = private_output->private_module;
+       func_hwc_window = &private_module->func_hwc_window;
+
+       if (!func_hwc_window->hwc_window_unset_buffer) {
+               /* LCOV_EXCL_START */
+               _pthread_mutex_unlock(&private_display->lock);
+               TDM_ERR("not implemented!!");
+               return TDM_ERROR_NOT_IMPLEMENTED;
+               /* LCOV_EXCL_STOP */
+       }
+
+       ret = func_hwc_window->hwc_window_unset_buffer(private_hwc_window->hwc_window_backend);
+
+       _pthread_mutex_unlock(&private_display->lock);
+
+       return ret;
+}
+
 INTERN tdm_hwc_window *
-tdm_hwc_window_create_internal(tdm_private_output *private_output,
+tdm_hwc_window_create_internal(tdm_private_output *private_output, int is_video,
                                                                   tdm_error *error)
 {
        tdm_private_display *private_display = private_output->private_display;
-       tdm_func_output *func_output = &private_display->func_output;
+       tdm_private_module *private_module = private_output->private_module;
+       tdm_func_output *func_output = &private_module->func_output;
        tdm_private_hwc_window *private_hwc_window = NULL;
        tdm_hwc_window *hwc_window_backend = NULL;
        tdm_error ret = TDM_ERROR_NONE;
 
        TDM_RETURN_VAL_IF_FAIL(TDM_MUTEX_IS_LOCKED(), NULL);
 
-       if (!func_output->output_hwc_create_window) {
-               /* LCOV_EXCL_START */
-               if (error)
-                       *error = TDM_ERROR_BAD_MODULE;
-               return NULL;
-               /* LCOV_EXCL_STOP */
-       }
+       if (!is_video) {
+               if (!func_output->output_hwc_create_window) {
+                       /* LCOV_EXCL_START */
+                       if (error)
+                               *error = TDM_ERROR_BAD_MODULE;
+                       return NULL;
+                       /* LCOV_EXCL_STOP */
+               }
 
-       hwc_window_backend = func_output->output_hwc_create_window(
+               hwc_window_backend = func_output->output_hwc_create_window(
                                                 private_output->output_backend, &ret);
-       if (ret != TDM_ERROR_NONE) {
-               if (error)
-                       *error = ret;
-               return NULL;
+               if (ret != TDM_ERROR_NONE) {
+                       if (error)
+                               *error = ret;
+                       return NULL;
+               }
+       } else {
+               if (!func_output->output_hwc_create_video_window) {
+                       /* LCOV_EXCL_START */
+                       if (error)
+                               *error = TDM_ERROR_NOT_IMPLEMENTED;
+                       return NULL;
+                       /* LCOV_EXCL_STOP */
+               }
+
+               hwc_window_backend = func_output->output_hwc_create_video_window(
+                                                private_output->output_backend, &ret);
+               if (ret != TDM_ERROR_NONE) {
+                       if (error)
+                               *error = ret;
+                       return NULL;
+               }
        }
 
-       private_hwc_window = calloc(1, sizeof(tdm_private_capture));
+       private_hwc_window = calloc(1, sizeof(tdm_private_hwc_window));
        if (!private_hwc_window) {
                /* LCOV_EXCL_START */
                TDM_ERR("failed: alloc memory");
@@ -348,8 +349,8 @@ tdm_hwc_window_create_internal(tdm_private_output *private_output,
 INTERN tdm_error
 tdm_hwc_window_destroy_internal(tdm_private_hwc_window * private_hwc_window)
 {
-       tdm_private_display *private_display;
        tdm_private_output *private_output;
+       tdm_private_module *private_module;
        tdm_func_output *func_output;
 
        TDM_RETURN_VAL_IF_FAIL(TDM_MUTEX_IS_LOCKED(), TDM_ERROR_OPERATION_FAILED);
@@ -357,12 +358,12 @@ tdm_hwc_window_destroy_internal(tdm_private_hwc_window * private_hwc_window)
        if (!private_hwc_window)
                return TDM_ERROR_OPERATION_FAILED;
 
-       private_display = private_hwc_window->private_display;
        private_output = private_hwc_window->private_output;
+       private_module = private_output->private_module;
 
        LIST_DEL(&private_hwc_window->link);
 
-       func_output = &private_display->func_output;
+       func_output = &private_module->func_output;
        func_output->output_hwc_destroy_window(private_output->output_backend, private_hwc_window->hwc_window_backend);
 
        free(private_hwc_window);
@@ -372,18 +373,20 @@ tdm_hwc_window_destroy_internal(tdm_private_hwc_window * private_hwc_window)
 EXTERN tdm_error
 tdm_hwc_window_set_flags(tdm_hwc_window *hwc_window, tdm_hwc_window_flag flags)
 {
+       tdm_private_module *private_module;
        tdm_func_hwc_window *func_hwc_window = NULL;
 
        HWC_WINDOW_FUNC_ENTRY();
 
        _pthread_mutex_lock(&private_display->lock);
 
-       func_hwc_window = &private_display->func_hwc_window;
+       private_module = private_output->private_module;
+       func_hwc_window = &private_module->func_hwc_window;
 
        if (!func_hwc_window->hwc_window_set_flags) {
                /* LCOV_EXCL_START */
                _pthread_mutex_unlock(&private_display->lock);
-               TDM_ERR("not implemented!!");
+               TDM_WRN("not implemented!!");
                return TDM_ERROR_NOT_IMPLEMENTED;
                /* LCOV_EXCL_STOP */
        }
@@ -398,18 +401,20 @@ tdm_hwc_window_set_flags(tdm_hwc_window *hwc_window, tdm_hwc_window_flag flags)
 EXTERN tdm_error
 tdm_hwc_window_unset_flags(tdm_hwc_window *hwc_window, tdm_hwc_window_flag flags)
 {
+       tdm_private_module *private_module;
        tdm_func_hwc_window *func_hwc_window = NULL;
 
        HWC_WINDOW_FUNC_ENTRY();
 
        _pthread_mutex_lock(&private_display->lock);
 
-       func_hwc_window = &private_display->func_hwc_window;
+       private_module = private_output->private_module;
+       func_hwc_window = &private_module->func_hwc_window;
 
        if (!func_hwc_window->hwc_window_unset_flags) {
                /* LCOV_EXCL_START */
                _pthread_mutex_unlock(&private_display->lock);
-               TDM_ERR("not implemented!!");
+               TDM_WRN("not implemented!!");
                return TDM_ERROR_NOT_IMPLEMENTED;
                /* LCOV_EXCL_STOP */
        }
@@ -421,10 +426,122 @@ 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,
+                                                                                unsigned int tv_sec, unsigned int tv_usec,
+                                                                                void *user_data)
+{
+       tdm_private_hwc_window_commit_handler *hwc_window_commit_handler = (tdm_private_hwc_window_commit_handler *)user_data;
+       tdm_hwc_window_commit_handler func = hwc_window_commit_handler->func;
+       tdm_hwc_window *hwc_window = (tdm_hwc_window *)hwc_window_commit_handler->private_hwc_window;
+       void *data = hwc_window_commit_handler->user_data;
+
+       func(hwc_window, sequence, tv_sec, tv_usec, data);
+
+       free(hwc_window_commit_handler);
+}
+
+tdm_error
+tdm_hwc_window_commit(tdm_hwc_window *hwc_window, tdm_hwc_window_commit_handler func, void *user_data)
+{
+       tdm_private_module *private_module;
+       tdm_func_hwc_window *func_hwc_window = NULL;
+       tdm_private_hwc_window_commit_handler *hwc_window_commit_handler;
+       tdm_layer *layer = NULL;
+       tdm_private_layer *private_layer;
+       tdm_info_layer *info_layer;
+       tdm_hwc_window_info window_info;
+       tbm_surface_h buffer;
+
+       HWC_WINDOW_FUNC_ENTRY();
+
+       _pthread_mutex_lock(&private_display->lock);
+
+       private_module = private_output->private_module;
+       func_hwc_window = &private_module->func_hwc_window;
+
+       if (!func_hwc_window->hwc_window_get_layer) {
+               /* LCOV_EXCL_START */
+               _pthread_mutex_unlock(&private_display->lock);
+               TDM_ERR("not implemented!!");
+               return TDM_ERROR_NOT_IMPLEMENTED;
+               /* LCOV_EXCL_STOP */
+       }
+
+       layer = func_hwc_window->hwc_window_get_layer(private_hwc_window->hwc_window_backend,
+                                                                                                                  &ret);
+       if (!layer) {
+               /* LCOV_EXCL_START */
+               _pthread_mutex_unlock(&private_display->lock);
+               TDM_ERR("no assigned layer!!");
+               return TDM_ERROR_INVALID_PARAMETER;
+               /* LCOV_EXCL_STOP */
+       }
+
+       private_layer = (tdm_private_layer*)layer;
+
+       buffer = func_hwc_window->hwc_window_get_buffer(private_hwc_window->hwc_window_backend,
+                                                                                                                  &ret);
+       if (buffer)
+               ret = tdm_layer_set_buffer_internal(private_layer, buffer);
+       else
+               ret = tdm_layer_unset_buffer_internal(private_layer);
+       if (ret != TDM_ERROR_NONE) {
+               /* LCOV_EXCL_START */
+               TDM_ERR("failed: layer set buffer(window)");
+               /* LCOV_EXCL_STOP */
+               return ret;
+       }
+
+       ret = func_hwc_window->hwc_window_get_info(private_hwc_window->hwc_window_backend,
+                                                                                                                  &window_info);
+       if (ret != TDM_ERROR_NONE) {
+               /* LCOV_EXCL_START */
+               TDM_ERR("failed: commit layer(window)");
+               /* LCOV_EXCL_STOP */
+               return ret;
+       }
+
+       info_layer = (tdm_info_layer *)&window_info;
+       ret = tdm_layer_set_info_internal(private_layer, info_layer);
+       if (ret != TDM_ERROR_NONE) {
+               /* LCOV_EXCL_START */
+               TDM_ERR("failed: layer set info(window)");
+               /* LCOV_EXCL_STOP */
+               return ret;
+       }
+
+       hwc_window_commit_handler = calloc(1, sizeof(tdm_private_hwc_window_commit_handler));
+       if (!hwc_window_commit_handler) {
+               /* LCOV_EXCL_START */
+               TDM_ERR("failed: alloc memory");
+               return TDM_ERROR_OUT_OF_MEMORY;
+               /* LCOV_EXCL_STOP */
+       }
+
+       hwc_window_commit_handler->private_hwc_window = private_hwc_window;
+       hwc_window_commit_handler->func = func;
+       hwc_window_commit_handler->user_data = user_data;
+
+       ret = tdm_layer_commit_internal(private_layer, _tdm_hwc_window_layer_commit_handler, hwc_window_commit_handler);
+       if (ret != TDM_ERROR_NONE) {
+               /* LCOV_EXCL_START */
+               TDM_ERR("failed: commit layer(window)");
+               free(hwc_window_commit_handler);
+               /* LCOV_EXCL_STOP */
+               return ret;
+       }
+
+       _pthread_mutex_unlock(&private_display->lock);
+
+       return ret;
+}
+
 EXTERN tdm_error
 tdm_hwc_window_video_get_capability(tdm_hwc_window *hwc_window,
                                                                        tdm_hwc_window_video_capability *video_capability)
 {
+       tdm_private_module *private_module;
        tdm_func_hwc_window *func_hwc_window = NULL;
 
        HWC_WINDOW_FUNC_ENTRY();
@@ -433,12 +550,13 @@ tdm_hwc_window_video_get_capability(tdm_hwc_window *hwc_window,
 
        _pthread_mutex_lock(&private_display->lock);
 
-       func_hwc_window = &private_display->func_hwc_window;
+       private_module = private_output->private_module;
+       func_hwc_window = &private_module->func_hwc_window;
 
        if (!func_hwc_window->hwc_window_video_get_capability) {
                /* LCOV_EXCL_START */
                _pthread_mutex_unlock(&private_display->lock);
-               TDM_ERR("not implemented!!");
+               TDM_WRN("not implemented!!");
                return TDM_ERROR_NOT_IMPLEMENTED;
                /* LCOV_EXCL_STOP */
        }
@@ -455,6 +573,7 @@ EXTERN tdm_error
 tdm_hwc_window_video_get_available_properties(tdm_hwc_window *hwc_window,
                                                                                          const tdm_prop **props, int *count)
 {
+       tdm_private_module *private_module;
        tdm_func_hwc_window *func_hwc_window = NULL;
 
        HWC_WINDOW_FUNC_ENTRY();
@@ -464,12 +583,13 @@ tdm_hwc_window_video_get_available_properties(tdm_hwc_window *hwc_window,
 
        _pthread_mutex_lock(&private_display->lock);
 
-       func_hwc_window = &private_display->func_hwc_window;
+       private_module = private_output->private_module;
+       func_hwc_window = &private_module->func_hwc_window;
 
        if (!func_hwc_window->hwc_window_video_get_available_properties) {
                /* LCOV_EXCL_START */
                _pthread_mutex_unlock(&private_display->lock);
-               TDM_ERR("not implemented!!");
+               TDM_WRN("not implemented!!");
                return TDM_ERROR_NOT_IMPLEMENTED;
                /* LCOV_EXCL_STOP */
        }
@@ -486,6 +606,7 @@ EXTERN tdm_error
 tdm_hwc_window_video_get_property(tdm_hwc_window *hwc_window,
                                                                        unsigned int id, tdm_value *value)
 {
+       tdm_private_module *private_module;
        tdm_func_hwc_window *func_hwc_window = NULL;
 
        HWC_WINDOW_FUNC_ENTRY();
@@ -494,12 +615,13 @@ tdm_hwc_window_video_get_property(tdm_hwc_window *hwc_window,
 
        _pthread_mutex_lock(&private_display->lock);
 
-       func_hwc_window = &private_display->func_hwc_window;
+       private_module = private_output->private_module;
+       func_hwc_window = &private_module->func_hwc_window;
 
        if (!func_hwc_window->hwc_window_video_get_property) {
                /* LCOV_EXCL_START */
                _pthread_mutex_unlock(&private_display->lock);
-               TDM_ERR("not implemented!!");
+               TDM_WRN("not implemented!!");
                return TDM_ERROR_NOT_IMPLEMENTED;
                /* LCOV_EXCL_STOP */
        }
@@ -516,18 +638,20 @@ EXTERN tdm_error
 tdm_hwc_window_video_set_property(tdm_hwc_window *hwc_window,
                                                                        unsigned int id, tdm_value value)
 {
+       tdm_private_module *private_module;
        tdm_func_hwc_window *func_hwc_window = NULL;
 
        HWC_WINDOW_FUNC_ENTRY();
 
        _pthread_mutex_lock(&private_display->lock);
 
-       func_hwc_window = &private_display->func_hwc_window;
+       private_module = private_output->private_module;
+       func_hwc_window = &private_module->func_hwc_window;
 
        if (!func_hwc_window->hwc_window_video_set_property) {
                /* LCOV_EXCL_START */
                _pthread_mutex_unlock(&private_display->lock);
-               TDM_ERR("not implemented!!");
+               TDM_WRN("not implemented!!");
                return TDM_ERROR_NOT_IMPLEMENTED;
                /* LCOV_EXCL_STOP */
        }