Allocate backend data and funcs in hal-api 82/314982/1
authorChangyeon Lee <cyeon.lee@samsung.com>
Tue, 23 Jul 2024 08:28:27 +0000 (17:28 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Tue, 23 Jul 2024 08:28:27 +0000 (17:28 +0900)
Change-Id: Ia95300f2b08ac78bc989b3834de22970db557223

src/hal-api-tdm.c

index 2f41a3dbc021d7c7eaa9ba5200b5ddb45d0cc8c0..6914f4b04e2fb35024a4ea3c658ca6c47cfeba4f 100644 (file)
@@ -208,6 +208,70 @@ hal_tdm_get_backend(hal_tdm_error *error)
                return NULL;
        }
 
+       backend_data = calloc(1, sizeof(*backend_data));
+       if (!backend_data) {
+               HAL_TDM_ERR("Failed to allocate backend_data");
+               if (error)
+                       *error = HAL_TDM_ERROR_OUT_OF_MEMORY;
+               return NULL;
+       }
+
+       backend_data->display_funcs = calloc(1, sizeof(*backend_data->display_funcs));
+       if (!backend_data->display_funcs) {
+               HAL_TDM_ERR("Failed to allocate display_funcs");
+               if (error)
+                       *error = HAL_TDM_ERROR_OUT_OF_MEMORY;
+               goto fail;
+       }
+
+       backend_data->output_funcs = calloc(1, sizeof(*backend_data->output_funcs));
+       if (!backend_data->output_funcs) {
+               HAL_TDM_ERR("Failed to allocate output_funcs");
+               if (error)
+                       *error = HAL_TDM_ERROR_OUT_OF_MEMORY;
+               goto fail;
+       }
+
+       backend_data->hwc_funcs = calloc(1, sizeof(*backend_data->hwc_funcs));
+       if (!backend_data->hwc_funcs) {
+               HAL_TDM_ERR("Failed to allocate hwc_funcs");
+               if (error)
+                       *error = HAL_TDM_ERROR_OUT_OF_MEMORY;
+               goto fail;
+       }
+
+       backend_data->hwc_window_funcs = calloc(1, sizeof(*backend_data->hwc_window_funcs));
+       if (!backend_data->hwc_window_funcs) {
+               HAL_TDM_ERR("Failed to allocate hwc_window_funcs");
+               if (error)
+                       *error = HAL_TDM_ERROR_OUT_OF_MEMORY;
+               goto fail;
+       }
+
+       backend_data->pp_funcs = calloc(1, sizeof(*backend_data->pp_funcs));
+       if (!backend_data->pp_funcs) {
+               HAL_TDM_ERR("Failed to allocate pp_funcs");
+               if (error)
+                       *error = HAL_TDM_ERROR_OUT_OF_MEMORY;
+               goto fail;
+       }
+
+       backend_data->capture_funcs = calloc(1, sizeof(*backend_data->capture_funcs));
+       if (!backend_data->capture_funcs) {
+               HAL_TDM_ERR("Failed to allocate capture_funcs");
+               if (error)
+                       *error = HAL_TDM_ERROR_OUT_OF_MEMORY;
+               goto fail;
+       }
+
+       backend_data->voutput_funcs = calloc(1, sizeof(*backend_data->voutput_funcs));
+       if (!backend_data->voutput_funcs) {
+               HAL_TDM_ERR("Failed to allocate voutput_funcs");
+               if (error)
+                       *error = HAL_TDM_ERROR_OUT_OF_MEMORY;
+               goto fail;
+       }
+
        ret = hal_common_get_backend(HAL_MODULE_TDM, (void **)&backend_data);
        if (ret < 0) {
                 HAL_TDM_ERR("Failed to get backend\n");
@@ -224,6 +288,18 @@ hal_tdm_get_backend(hal_tdm_error *error)
        HAL_TDM_INFO("hal_tdm_get_backend");
 
        return (hal_tdm_backend *)backend_data;
+
+fail:
+       if (backend_data->display_funcs) free(backend_data->display_funcs);
+       if (backend_data->output_funcs) free(backend_data->output_funcs);
+       if (backend_data->hwc_funcs) free(backend_data->hwc_funcs);
+       if (backend_data->hwc_window_funcs) free(backend_data->hwc_window_funcs);
+       if (backend_data->pp_funcs) free(backend_data->pp_funcs);
+       if (backend_data->capture_funcs) free(backend_data->capture_funcs);
+       if (backend_data->voutput_funcs) free(backend_data->voutput_funcs);
+       free(backend_data);
+
+       return NULL;
 }
 
 EXTERN hal_tdm_error
@@ -243,6 +319,15 @@ hal_tdm_put_backend(hal_tdm_backend *backend)
                 return HAL_TDM_ERROR_OPERATION_FAILED;
        }
 
+       free(backend_data->display_funcs);
+       free(backend_data->output_funcs);
+       free(backend_data->hwc_funcs);
+       free(backend_data->hwc_window_funcs);
+       free(backend_data->pp_funcs);
+       free(backend_data->capture_funcs);
+       free(backend_data->voutput_funcs);
+       free(backend_data);
+
        g_hal_tdm_backend_data = NULL;
 
        HAL_TDM_INFO("hal_tdm_put_backend");