[MMFMWK-7909] kmssink: add force-hantrotile property
This property can enable and disable hantro VPU tile output
upstream status: i.Mx specific
diff --git a/sys/kms/gstkmssink.c b/sys/kms/gstkmssink.c
index 8ef4c06..86fa1ce 100644
--- a/sys/kms/gstkmssink.c
+++ b/sys/kms/gstkmssink.c
@@ -91,6 +91,7 @@
PROP_PLANE_ID,
PROP_FORCE_MODESETTING,
PROP_GLOBAL_ALPHA,
+ PROP_FORCE_HANTROTILE,
PROP_N
};
@@ -1178,20 +1179,22 @@
drm_modifier = DRM_FORMAT_MOD_AMPHION_TILED;
gst_query_add_allocation_dmabuf_meta (query, drm_modifier);
- props = drmModeObjectGetProperties (self->fd, self->plane_id, DRM_MODE_OBJECT_PLANE);
- for (i = 0; i < props->count_props; ++i) {
- prop = drmModeGetProperty(self->fd, props->props[i]);
- if (!strcmp(prop->name, "dtrc_table_ofs")) {
- GST_DEBUG ("has dtrc_table_ofs property, can support VSI tile format");
- drm_modifier = DRM_FORMAT_MOD_VSI_G1_TILED;
- gst_query_add_allocation_dmabuf_meta (query, drm_modifier);
- drm_modifier = DRM_FORMAT_MOD_VSI_G2_TILED;
- gst_query_add_allocation_dmabuf_meta (query, drm_modifier);
- drm_modifier = DRM_FORMAT_MOD_VSI_G2_TILED_COMPRESSED;
- gst_query_add_allocation_dmabuf_meta (query, drm_modifier);
+ if (self->hantro_tile_enabled) {
+ props = drmModeObjectGetProperties (self->fd, self->plane_id, DRM_MODE_OBJECT_PLANE);
+ for (i = 0; i < props->count_props; ++i) {
+ prop = drmModeGetProperty(self->fd, props->props[i]);
+ if (!strcmp(prop->name, "dtrc_table_ofs")) {
+ GST_DEBUG ("has dtrc_table_ofs property, can support VSI tile format");
+ drm_modifier = DRM_FORMAT_MOD_VSI_G1_TILED;
+ gst_query_add_allocation_dmabuf_meta (query, drm_modifier);
+ drm_modifier = DRM_FORMAT_MOD_VSI_G2_TILED;
+ gst_query_add_allocation_dmabuf_meta (query, drm_modifier);
+ drm_modifier = DRM_FORMAT_MOD_VSI_G2_TILED_COMPRESSED;
+ gst_query_add_allocation_dmabuf_meta (query, drm_modifier);
+ }
+ drmModeFreeProperty (prop);
+ prop = NULL;
}
- drmModeFreeProperty (prop);
- prop = NULL;
}
return TRUE;
@@ -1899,6 +1902,9 @@
case PROP_GLOBAL_ALPHA:
sink->global_alpha = g_value_get_int (value);
break;
+ case PROP_FORCE_HANTROTILE:
+ sink->hantro_tile_enabled = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1929,6 +1935,9 @@
case PROP_GLOBAL_ALPHA:
g_value_set_int (value, sink->global_alpha);
break;
+ case PROP_FORCE_HANTROTILE:
+ g_value_set_boolean (value, sink->hantro_tile_enabled);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1957,6 +1966,7 @@
sink->scale_checked = FALSE;
sink->upscale_ratio = 1;
sink->downscale_ratio = 1;
+ sink->hantro_tile_enabled = FALSE;
gst_poll_fd_init (&sink->pollfd);
sink->poll = gst_poll_new (TRUE);
gst_video_info_init (&sink->vinfo);
@@ -2044,6 +2054,16 @@
g_param_spec_boolean ("force-modesetting", "Force modesetting",
"When enabled, the sink try to configure the display mode", FALSE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT);
+
+ /**
+ * kmssink:force-hantrotile:
+ *
+ * If enable, the sink propose hantro tile modifier to VPU.
+ */
+ g_properties[PROP_FORCE_HANTROTILE] =
+ g_param_spec_boolean ("force-hantrotile", "Force to use hantro tile",
+ "When enabled, the sink propose hantro tile modifier to VPU", FALSE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT);
/**
* kmssink:global-alpha:
diff --git a/sys/kms/gstkmssink.h b/sys/kms/gstkmssink.h
index 63cad16..961e106 100644
--- a/sys/kms/gstkmssink.h
+++ b/sys/kms/gstkmssink.h
@@ -79,6 +79,7 @@
gboolean modesetting_enabled;
gboolean display_connected;
+ gboolean hantro_tile_enabled;
GstVideoInfo vinfo;
GstCaps *allowed_caps;