kmssink: add alignment for video src crop size for dpu
upstream status: i.Mx specific
Conflicts:
sys/kms/gstkmssink.c
diff --git a/sys/kms/gstkmssink.c b/sys/kms/gstkmssink.c
index 3264201..231c9b2 100644
--- a/sys/kms/gstkmssink.c
+++ b/sys/kms/gstkmssink.c
@@ -1738,7 +1738,8 @@
guint64 dtrc_table_ofs;
GstFlowReturn res;
gboolean can_scale = TRUE;
-
+ guint32 fmt, alignment;
+
dump_hdr10meta (GST_KMS_SINK (vsink), buf);
self = GST_KMS_SINK (vsink);
@@ -1752,6 +1753,13 @@
return GST_FLOW_OK;
}
+ if (strcmp (get_imx_drm_device_name(), "DPU") == 0) {
+ fmt = gst_drm_format_from_video (GST_VIDEO_INFO_FORMAT (&self->vinfo));
+ alignment = gst_drm_alignment_from_drm_format (fmt);
+ } else {
+ alignment = 1;
+ }
+
if (buf)
buffer = gst_kms_sink_get_input_buffer (self, buf);
else if (self->last_buffer)
@@ -1809,15 +1817,15 @@
retry_set_plane:
gst_video_sink_center_rect (src, dst, &result, can_scale);
- result.x += self->render_rect.x;
- result.y += self->render_rect.y;
+ result.x = GST_ROUND_DOWN_N (result.x + self->render_rect.x, alignment);
+ result.y = GST_ROUND_DOWN_N (result.y + self->render_rect.y, alignment);;
if (crop) {
src.w = crop->width;
src.h = crop->height;
} else {
- src.w = GST_VIDEO_INFO_WIDTH (&self->vinfo);
- src.h = GST_VIDEO_INFO_HEIGHT (&self->vinfo);
+ src.w = GST_ROUND_DOWN_N (GST_VIDEO_INFO_WIDTH (&self->vinfo), alignment);
+ src.h = GST_ROUND_DOWN_N (GST_VIDEO_INFO_HEIGHT (&self->vinfo), alignment);
}
if (!gst_kms_sink_check_scale_ratio (self, result, src)) {