Do not allocate backend data 42/315042/2
authorChangyeon Lee <cyeon.lee@samsung.com>
Wed, 24 Jul 2024 03:34:19 +0000 (12:34 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Wed, 24 Jul 2024 06:29:46 +0000 (15:29 +0900)
backend data is allocated in hal-api

Change-Id: I12a36c472282aa399a1b2dfd98cdfdad85de99b4

src/tdm_backend_exynos.c

index bbb0d885022ccf509ecd3ff2da2b96893ba08ff3..b4fe608648a12dfa315dbd420405ac37f6130470 100644 (file)
@@ -372,31 +372,6 @@ hal_backend_tdm_exynos_exit(void *data)
        display_data = (tdm_exynos_display *)backend_data->display;
        TDM_BACKEND_RETURN_VAL_IF_FAIL(display_data != NULL, -1);
 
-       if (backend_data->capture_funcs) {
-               free(backend_data->capture_funcs);
-               backend_data->capture_funcs = NULL;
-       }
-       if (backend_data->pp_funcs) {
-               free(backend_data->pp_funcs);
-               backend_data->pp_funcs = NULL;
-       }
-       if (backend_data->hwc_window_funcs) {
-               free(backend_data->hwc_window_funcs);
-               backend_data->hwc_window_funcs = NULL;
-       }
-       if (backend_data->hwc_funcs) {
-               free(backend_data->hwc_funcs);
-               backend_data->hwc_funcs = NULL;
-       }
-       if (backend_data->output_funcs) {
-               free(backend_data->output_funcs);
-               backend_data->output_funcs = NULL;
-       }
-       if (backend_data->display_funcs) {
-               free(backend_data->display_funcs);
-               backend_data->display_funcs = NULL;
-       }
-
        _tdm_exynos_display_deinitialize(display_data);
 
 #ifdef HAVE_UDEV
@@ -407,8 +382,8 @@ hal_backend_tdm_exynos_exit(void *data)
        if (display_data->drm_fd >= 0)
                close(display_data->drm_fd);
 
-       free(display_data);
-       free(backend_data);
+       free(backend_data->display);
+       backend_data->display = NULL;
 
        return HAL_TDM_ERROR_NONE;
 }
@@ -417,12 +392,6 @@ static int
 hal_backend_tdm_exynos_init(void **data)
 {
        hal_tdm_backend_data *backend_data = NULL;
-       hal_tdm_display_funcs *display_funcs = NULL;
-       hal_tdm_output_funcs *output_funcs = NULL;
-       hal_tdm_hwc_funcs *hwc_funcs = NULL;
-       hal_tdm_hwc_window_funcs *hwc_window_funcs = NULL;
-       hal_tdm_pp_funcs *pp_funcs = NULL;
-       hal_tdm_capture_funcs *capture_funcs = NULL;
        tdm_exynos_display *display_data = NULL;
        hal_tdm_error ret;
        int drm_fd;
@@ -432,14 +401,16 @@ hal_backend_tdm_exynos_init(void **data)
        hal_tdm_event_source *udev_event_source;
 #endif
 
-       /* allocate a hal_tdm_backend_data */
-       backend_data = calloc(1, sizeof(struct _hal_tdm_backend_data));
+       if (!data) {
+               TDM_BACKEND_ERR("data is NULL");
+               return -1;
+       }
+
+       backend_data = *(hal_tdm_backend_data **)data;
        if (!backend_data) {
-               TDM_BACKEND_ERR("fail to alloc backend_data!\n");
-               *data = NULL;
+               TDM_BACKEND_ERR("backend_data is NULL");
                return -1;
        }
-       *data = backend_data;
 
        /* allocate a hal_tdm_display */
        display_data = calloc(1, sizeof(struct _tdm_exynos_display));
@@ -517,126 +488,78 @@ hal_backend_tdm_exynos_init(void **data)
        backend_data->num_event_sources++;
 #endif
 
-       /* alloc and register display_funcs */
-       display_funcs = calloc(1, sizeof(struct _hal_tdm_display_funcs));
-       if (!display_funcs) {
-               TDM_BACKEND_ERR("fail to alloc display_funcs!\n");
-               goto failed;
-       }
-       backend_data->display_funcs = display_funcs;
-
-       display_funcs->display_get_capability = exynos_display_get_capability;
-       display_funcs->display_get_pp_capability = exynos_display_get_pp_capability;
-       display_funcs->display_get_capture_capability = exynos_display_get_capture_capability;
-       display_funcs->display_get_outputs = exynos_display_get_outputs;
-       display_funcs->display_get_fd = exynos_display_get_fd;
-       display_funcs->display_handle_events = exynos_display_handle_events;
-       display_funcs->display_create_pp = exynos_display_create_pp;
-
-       /* alloc and register output_funcs */
-       output_funcs = calloc(1, sizeof(struct _hal_tdm_output_funcs));
-       if (!output_funcs) {
-               TDM_BACKEND_ERR("fail to alloc output_funcs!\n");
-               goto failed;
-       }
-       backend_data->output_funcs = output_funcs;
-
-       output_funcs->output_get_capability = exynos_output_get_capability;
-       output_funcs->output_set_property = exynos_output_set_property;
-       output_funcs->output_get_property = exynos_output_get_property;
-       output_funcs->output_wait_vblank = exynos_output_wait_vblank;
-       output_funcs->output_set_vblank_handler = exynos_output_set_vblank_handler;
-       output_funcs->output_set_dpms = exynos_output_set_dpms;
-       output_funcs->output_get_dpms = exynos_output_get_dpms;
-       output_funcs->output_set_mode = exynos_output_set_mode;
-       output_funcs->output_get_mode = exynos_output_get_mode;
-       output_funcs->output_create_capture = exynos_output_create_capture;
+       backend_data->display_funcs->display_get_capability = exynos_display_get_capability;
+       backend_data->display_funcs->display_get_pp_capability = exynos_display_get_pp_capability;
+       backend_data->display_funcs->display_get_capture_capability = exynos_display_get_capture_capability;
+       backend_data->display_funcs->display_get_outputs = exynos_display_get_outputs;
+       backend_data->display_funcs->display_get_fd = exynos_display_get_fd;
+       backend_data->display_funcs->display_handle_events = exynos_display_handle_events;
+       backend_data->display_funcs->display_create_pp = exynos_display_create_pp;
+
+       backend_data->output_funcs->output_get_capability = exynos_output_get_capability;
+       backend_data->output_funcs->output_set_property = exynos_output_set_property;
+       backend_data->output_funcs->output_get_property = exynos_output_get_property;
+       backend_data->output_funcs->output_wait_vblank = exynos_output_wait_vblank;
+       backend_data->output_funcs->output_set_vblank_handler = exynos_output_set_vblank_handler;
+       backend_data->output_funcs->output_set_dpms = exynos_output_set_dpms;
+       backend_data->output_funcs->output_get_dpms = exynos_output_get_dpms;
+       backend_data->output_funcs->output_set_mode = exynos_output_set_mode;
+       backend_data->output_funcs->output_get_mode = exynos_output_get_mode;
+       backend_data->output_funcs->output_create_capture = exynos_output_create_capture;
 #ifdef HAVE_UDEV
-       output_funcs->output_set_status_handler = exynos_output_set_status_handler;
+       backend_data->output_funcs->output_set_status_handler = exynos_output_set_status_handler;
 #endif
-       output_funcs->output_get_hwc = exynos_output_get_hwc;
-
-       /* alloc and register hwc_funcs */
-       hwc_funcs = calloc(1, sizeof(struct _hal_tdm_hwc_funcs));
-       if (!hwc_funcs) {
-               TDM_BACKEND_ERR("fail to alloc hwc_funcs!\n");
-               goto failed;
-       }
-       backend_data->hwc_funcs = hwc_funcs;
-
-       hwc_funcs->hwc_create_window = exynos_hwc_create_window;
-       hwc_funcs->hwc_get_video_supported_formats = exynos_hwc_get_video_supported_formats;
-       hwc_funcs->hwc_get_capabilities = exynos_hwc_get_capabilities;
-       hwc_funcs->hwc_get_available_properties = exynos_hwc_get_available_properties;
-       hwc_funcs->hwc_get_client_target_buffer_queue = exynos_hwc_get_client_target_buffer_queue;
-       hwc_funcs->hwc_set_client_target_buffer = exynos_hwc_set_client_target_buffer;
-       hwc_funcs->hwc_validate = exynos_hwc_validate;
-       hwc_funcs->hwc_get_changed_composition_types = exynos_hwc_get_changed_composition_types;
-       hwc_funcs->hwc_accept_validation  = exynos_hwc_accept_validation;
-       hwc_funcs->hwc_commit = exynos_hwc_commit;
-       hwc_funcs->hwc_set_commit_handler = exynos_hwc_set_commit_handler;
-
-       /* alloc and register hwc_window_funcs */
-       hwc_window_funcs = calloc(1, sizeof(struct _hal_tdm_hwc_window_funcs));
-       if (!hwc_window_funcs) {
-               TDM_BACKEND_ERR("fail to alloc hwc_window_funcs!\n");
-               goto failed;
-       }
-       backend_data->hwc_window_funcs = hwc_window_funcs;
-
-       hwc_window_funcs->hwc_window_destroy = exynos_hwc_window_destroy;
-       hwc_window_funcs->hwc_window_acquire_buffer_queue = NULL;
-       hwc_window_funcs->hwc_window_release_buffer_queue = NULL;
-       hwc_window_funcs->hwc_window_set_composition_type = exynos_hwc_window_set_composition_type;
-       hwc_window_funcs->hwc_window_set_buffer_damage = exynos_hwc_window_set_buffer_damage;
-       hwc_window_funcs->hwc_window_set_info = exynos_hwc_window_set_info;
-       hwc_window_funcs->hwc_window_set_buffer = exynos_hwc_window_set_buffer;
-       hwc_window_funcs->hwc_window_set_property = exynos_hwc_window_set_property;
-       hwc_window_funcs->hwc_window_get_property = exynos_hwc_window_get_property;
-       hwc_window_funcs->hwc_window_get_constraints = exynos_hwc_window_get_constraints;
-
-       /* alloc and register pp_funcs */
-       pp_funcs = calloc(1, sizeof(struct _hal_tdm_pp_funcs));
-       if (!pp_funcs) {
-               TDM_BACKEND_ERR("fail to alloc pp_funcs!\n");
-               goto failed;
-       }
-       backend_data->pp_funcs = pp_funcs;
+       backend_data->output_funcs->output_get_hwc = exynos_output_get_hwc;
+
+       backend_data->hwc_funcs->hwc_create_window = exynos_hwc_create_window;
+       backend_data->hwc_funcs->hwc_get_video_supported_formats = exynos_hwc_get_video_supported_formats;
+       backend_data->hwc_funcs->hwc_get_capabilities = exynos_hwc_get_capabilities;
+       backend_data->hwc_funcs->hwc_get_available_properties = exynos_hwc_get_available_properties;
+       backend_data->hwc_funcs->hwc_get_client_target_buffer_queue = exynos_hwc_get_client_target_buffer_queue;
+       backend_data->hwc_funcs->hwc_set_client_target_buffer = exynos_hwc_set_client_target_buffer;
+       backend_data->hwc_funcs->hwc_validate = exynos_hwc_validate;
+       backend_data->hwc_funcs->hwc_get_changed_composition_types = exynos_hwc_get_changed_composition_types;
+       backend_data->hwc_funcs->hwc_accept_validation  = exynos_hwc_accept_validation;
+       backend_data->hwc_funcs->hwc_commit = exynos_hwc_commit;
+       backend_data->hwc_funcs->hwc_set_commit_handler = exynos_hwc_set_commit_handler;
+
+       backend_data->hwc_window_funcs->hwc_window_destroy = exynos_hwc_window_destroy;
+       backend_data->hwc_window_funcs->hwc_window_acquire_buffer_queue = NULL;
+       backend_data->hwc_window_funcs->hwc_window_release_buffer_queue = NULL;
+       backend_data->hwc_window_funcs->hwc_window_set_composition_type = exynos_hwc_window_set_composition_type;
+       backend_data->hwc_window_funcs->hwc_window_set_buffer_damage = exynos_hwc_window_set_buffer_damage;
+       backend_data->hwc_window_funcs->hwc_window_set_info = exynos_hwc_window_set_info;
+       backend_data->hwc_window_funcs->hwc_window_set_buffer = exynos_hwc_window_set_buffer;
+       backend_data->hwc_window_funcs->hwc_window_set_property = exynos_hwc_window_set_property;
+       backend_data->hwc_window_funcs->hwc_window_get_property = exynos_hwc_window_get_property;
+       backend_data->hwc_window_funcs->hwc_window_get_constraints = exynos_hwc_window_get_constraints;
 
        if (display_data->use_ippv2) {
-               pp_funcs->pp_destroy = exynos_pp_destroy;
-               pp_funcs->pp_set_info = exynos_pp_set_info;
-               pp_funcs->pp_attach = exynos_pp_attach;
-               pp_funcs->pp_commit = exynos_pp_commit;
-               pp_funcs->pp_set_done_handler = exynos_pp_set_done_handler;
+               backend_data->pp_funcs->pp_destroy = exynos_pp_destroy;
+               backend_data->pp_funcs->pp_set_info = exynos_pp_set_info;
+               backend_data->pp_funcs->pp_attach = exynos_pp_attach;
+               backend_data->pp_funcs->pp_commit = exynos_pp_commit;
+               backend_data->pp_funcs->pp_set_done_handler = exynos_pp_set_done_handler;
        } else {
-               pp_funcs->pp_destroy = exynos_pp_legacy_destroy;
-               pp_funcs->pp_set_info = exynos_pp_legacy_set_info;
-               pp_funcs->pp_attach = exynos_pp_legacy_attach;
-               pp_funcs->pp_commit = exynos_pp_legacy_commit;
-               pp_funcs->pp_set_done_handler = exynos_pp_legacy_set_done_handler;
-       }
-
-       /* alloc and register capture_funcs */
-       capture_funcs = calloc(1, sizeof(struct _hal_tdm_capture_funcs));
-       if (!capture_funcs) {
-               TDM_BACKEND_ERR("fail to alloc pp_funcs!\n");
-               goto failed;
+               backend_data->pp_funcs->pp_destroy = exynos_pp_legacy_destroy;
+               backend_data->pp_funcs->pp_set_info = exynos_pp_legacy_set_info;
+               backend_data->pp_funcs->pp_attach = exynos_pp_legacy_attach;
+               backend_data->pp_funcs->pp_commit = exynos_pp_legacy_commit;
+               backend_data->pp_funcs->pp_set_done_handler = exynos_pp_legacy_set_done_handler;
        }
-       backend_data->capture_funcs = capture_funcs;
 
        if (display_data->use_ippv2) {
-               capture_funcs->capture_destroy = exynos_capture_destroy;
-               capture_funcs->capture_set_info = exynos_capture_set_info;
-               capture_funcs->capture_attach = exynos_capture_attach;
-               capture_funcs->capture_commit = exynos_capture_commit;
-               capture_funcs->capture_set_done_handler = exynos_capture_set_done_handler;
+               backend_data->capture_funcs->capture_destroy = exynos_capture_destroy;
+               backend_data->capture_funcs->capture_set_info = exynos_capture_set_info;
+               backend_data->capture_funcs->capture_attach = exynos_capture_attach;
+               backend_data->capture_funcs->capture_commit = exynos_capture_commit;
+               backend_data->capture_funcs->capture_set_done_handler = exynos_capture_set_done_handler;
        } else {
-               capture_funcs->capture_destroy = exynos_capture_legacy_destroy;
-               capture_funcs->capture_set_info = exynos_capture_legacy_set_info;
-               capture_funcs->capture_attach = exynos_capture_legacy_attach;
-               capture_funcs->capture_commit = exynos_capture_legacy_commit;
-               capture_funcs->capture_set_done_handler = exynos_capture_legacy_set_done_handler;
+               backend_data->capture_funcs->capture_destroy = exynos_capture_legacy_destroy;
+               backend_data->capture_funcs->capture_set_info = exynos_capture_legacy_set_info;
+               backend_data->capture_funcs->capture_attach = exynos_capture_legacy_attach;
+               backend_data->capture_funcs->capture_commit = exynos_capture_legacy_commit;
+               backend_data->capture_funcs->capture_set_done_handler = exynos_capture_legacy_set_done_handler;
        }
 
        TDM_BACKEND_INFO("init success!");