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)
{
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();
/* 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) {
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)
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);
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)
{
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);
}
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) {
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,
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;