vkswapper: use gst_video_sink_center_rect for positioning the video

Don't try to reimplement it badly.
This commit is contained in:
Matthew Waters 2016-05-05 18:00:25 +10:00
parent c4680ab2a9
commit 267588fb5e

View File

@ -852,25 +852,25 @@ _build_render_buffer_cmd (GstVulkanSwapper * swapper, guint32 swap_idx,
{ {
VkBufferImageCopy region = { 0, }; VkBufferImageCopy region = { 0, };
guint32 dst_width = gst_vulkan_image_memory_get_width (swap_mem); GstVideoRectangle src, dst, rslt;
guint32 dst_height = gst_vulkan_image_memory_get_height (swap_mem);
guint src_width = GST_VIDEO_INFO_WIDTH (&swapper->v_info);
guint src_height = GST_VIDEO_INFO_HEIGHT (&swapper->v_info);
guint x, y;
if (src_width != dst_width || src_height != dst_height) { src.x = src.y = 0;
/* FIXME: broken with LunarG's driver src.w = GST_VIDEO_INFO_WIDTH (&swapper->v_info);
x = (src_width - dst_width) / 2; src.h = GST_VIDEO_INFO_HEIGHT (&swapper->v_info);
y = (src_height - dst_height) / 2;*/
x = y = 0; dst.x = dst.y = 0;
} else { dst.w = gst_vulkan_image_memory_get_width (swap_mem);
x = y = 0; dst.h = gst_vulkan_image_memory_get_height (swap_mem);
}
/* FIXME: scale rect */ gst_video_sink_center_rect (src, dst, &rslt, FALSE);
GST_VK_BUFFER_IMAGE_COPY (region, 0, src_width, src_height,
GST_TRACE_OBJECT (swapper, "rendering into result rectangle %ux%u+%u,%u "
"src %ux%u dst %ux%u", rslt.w, rslt.h, rslt.x, rslt.y, src.w, src.h,
dst.w, dst.h);
GST_VK_BUFFER_IMAGE_COPY (region, 0, src.w, src.h,
GST_VK_IMAGE_SUBRESOURCE_LAYERS_INIT (VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, GST_VK_IMAGE_SUBRESOURCE_LAYERS_INIT (VK_IMAGE_ASPECT_COLOR_BIT, 0, 0,
1), GST_VK_OFFSET3D_INIT (x, y, 0), GST_VK_EXTENT3D_INIT (src_width, 1), GST_VK_OFFSET3D_INIT (rslt.x, rslt.y, 0),
src_height, 1)); GST_VK_EXTENT3D_INIT (rslt.w, rslt.h, 1));
vkCmdCopyBufferToImage (cmd, buf_mem->buffer, swap_mem->image, vkCmdCopyBufferToImage (cmd, buf_mem->buffer, swap_mem->image,
swap_mem->image_layout, 1, &region); swap_mem->image_layout, 1, &region);