return HAL_TDM_ERROR_NONE;
}
+static void
+_tdm_vc4_layer_hwc_window_destroy_handler(hal_tdm_hwc_window *hwc_window, void *user_data)
+{
+ tdm_vc4_layer *layer_data = user_data;
+
+ layer_data->hwc_window_data = NULL;
+}
+
hal_tdm_error
tdm_vc4_layer_set_hwc_window(tdm_vc4_layer *layer_data, tdm_vc4_hwc_window *hwc_window_data)
{
TDM_BACKEND_DBG("layer_data[%p]zpos[%d] hwc_window_data:%p", layer_data, layer_data->zpos, hwc_window_data);
- layer_data->hwc_window_data = hwc_window_data;
+ if (layer_data->hwc_window_data == hwc_window_data)
+ return HAL_TDM_ERROR_NONE;
+
+ if (layer_data->hwc_window_data) {
+ vc4_hwc_window_remove_destroy_handler(layer_data->hwc_window_data,_tdm_vc4_layer_hwc_window_destroy_handler, layer_data);
+ layer_data->hwc_window_data = NULL;
+ }
+
+ if (hwc_window_data) {
+ vc4_hwc_window_add_destroy_handler(hwc_window_data, _tdm_vc4_layer_hwc_window_destroy_handler, layer_data);
+ layer_data->hwc_window_data = hwc_window_data;
+ }
return HAL_TDM_ERROR_NONE;
}