From 9b7c20bfca97ce67539e32c23691edc610da6b41 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Mon, 2 Mar 2020 20:55:29 +0900 Subject: [PATCH] d3d11videosink: Clarify the meaning of various width and height variables * Remove redundant variables for width/height and par from GstD3D11Window. GstVideoInfo holds all the values. * Don't need to pass par to gst_d3d11_window_prepare(). It will be parsed from caps again * Remove duplicated math Fixing regression of the commit 9dada901083fec3276cb2df58785db14b87e8f22 --- sys/d3d11/gstd3d11videosink.c | 4 +-- sys/d3d11/gstd3d11window.cpp | 53 ++++++++++++++------------------------ sys/d3d11/gstd3d11window.h | 12 ++------- sys/d3d11/gstd3d11window_win32.cpp | 4 +-- 4 files changed, 25 insertions(+), 48 deletions(-) diff --git a/sys/d3d11/gstd3d11videosink.c b/sys/d3d11/gstd3d11videosink.c index 84297fa..95ce206 100644 --- a/sys/d3d11/gstd3d11videosink.c +++ b/sys/d3d11/gstd3d11videosink.c @@ -389,8 +389,8 @@ gst_d3d11_video_sink_set_caps (GstBaseSink * sink, GstCaps * caps) self->have_video_processor = FALSE; if (!gst_d3d11_window_prepare (self->window, GST_VIDEO_SINK_WIDTH (self), - GST_VIDEO_SINK_HEIGHT (self), video_par_n, video_par_d, - caps, &self->have_video_processor, &error)) { + GST_VIDEO_SINK_HEIGHT (self), caps, &self->have_video_processor, + &error)) { GstMessage *error_msg; GST_ERROR_OBJECT (self, "cannot create swapchain"); diff --git a/sys/d3d11/gstd3d11window.cpp b/sys/d3d11/gstd3d11window.cpp index 0d00f92..84fce7c 100644 --- a/sys/d3d11/gstd3d11window.cpp +++ b/sys/d3d11/gstd3d11window.cpp @@ -176,9 +176,6 @@ gst_d3d11_window_init (GstD3D11Window * self) self->enable_navigation_events = DEFAULT_ENABLE_NAVIGATION_EVENTS; self->fullscreen_toggle_mode = GST_D3D11_WINDOW_FULLSCREEN_TOGGLE_MODE_NONE; self->fullscreen = DEFAULT_FULLSCREEN; - - self->aspect_ratio_n = 1; - self->aspect_ratio_d = 1; } static void @@ -335,23 +332,17 @@ gst_d3d11_window_on_resize_default (GstD3D11Window * window, guint width, window->surface_width = desc.Width; window->surface_height = desc.Height; - width = window->width; - height = window->height; - { - src_rect.x = 0; - src_rect.y = 0; - src_rect.w = width * window->aspect_ratio_n; - src_rect.h = height * window->aspect_ratio_d; - dst_rect.x = 0; dst_rect.y = 0; dst_rect.w = window->surface_width; dst_rect.h = window->surface_height; if (window->force_aspect_ratio) { - src_rect.w = width * window->aspect_ratio_n; - src_rect.h = height * window->aspect_ratio_d; + src_rect.x = 0; + src_rect.y = 0; + src_rect.w = GST_VIDEO_INFO_WIDTH (&window->render_info); + src_rect.h = GST_VIDEO_INFO_HEIGHT (&window->render_info); gst_video_sink_center_rect (src_rect, dst_rect, &rst_rect, TRUE); } else { @@ -426,9 +417,9 @@ gst_d3d11_window_on_mouse_event (GstD3D11Window * window, const gchar * event, } gboolean -gst_d3d11_window_prepare (GstD3D11Window * window, guint width, guint height, - guint aspect_ratio_n, guint aspect_ratio_d, GstCaps * caps, - gboolean * video_processor_available, GError ** error) +gst_d3d11_window_prepare (GstD3D11Window * window, guint display_width, + guint display_height, GstCaps * caps, gboolean * video_processor_available, + GError ** error) { GstD3D11WindowClass *klass; GstCaps *render_caps; @@ -437,11 +428,9 @@ gst_d3d11_window_prepare (GstD3D11Window * window, guint width, guint height, gboolean need_processor_input_configure = FALSE; g_return_val_if_fail (GST_IS_D3D11_WINDOW (window), FALSE); - g_return_val_if_fail (aspect_ratio_n > 0, FALSE); - g_return_val_if_fail (aspect_ratio_d > 0, FALSE); - GST_DEBUG_OBJECT (window, "Prepare window with %dx%d caps %" GST_PTR_FORMAT, - width, height, caps); + GST_DEBUG_OBJECT (window, "Prepare window, display resolution %dx%d, caps %" + GST_PTR_FORMAT, display_width, display_height, caps); gst_clear_buffer (&window->cached_buffer); @@ -492,16 +481,18 @@ gst_d3d11_window_prepare (GstD3D11Window * window, guint width, guint height, window->compositor = NULL; /* preserve upstream colorimetry */ - window->render_info.width = width; - window->render_info.height = height; + window->render_info.width = display_width; + window->render_info.height = display_height; window->render_info.colorimetry.primaries = window->info.colorimetry.primaries; window->render_info.colorimetry.transfer = window->info.colorimetry.transfer; window->processor = - gst_d3d11_video_processor_new (window->device, width, height, width, - height); + gst_d3d11_video_processor_new (window->device, + GST_VIDEO_INFO_WIDTH (&window->info), + GST_VIDEO_INFO_HEIGHT (&window->info), + display_width, display_height); if (window->processor) { const GstD3D11Format *in_format; const GstD3D11Format *out_format; @@ -581,26 +572,20 @@ gst_d3d11_window_prepare (GstD3D11Window * window, guint width, guint height, window->dxgi_format = window->render_format->dxgi_format; - window->aspect_ratio_n = aspect_ratio_n; - window->aspect_ratio_d = aspect_ratio_d; - window->render_rect.left = 0; window->render_rect.top = 0; - window->render_rect.right = width; - window->render_rect.bottom = height; + window->render_rect.right = display_width; + window->render_rect.bottom = display_height; window->input_rect.left = 0; window->input_rect.top = 0; window->input_rect.right = GST_VIDEO_INFO_WIDTH (&window->info); window->input_rect.bottom = GST_VIDEO_INFO_HEIGHT (&window->info); - window->width = width; - window->height = height; - klass = GST_D3D11_WINDOW_GET_CLASS (window); if (!window->swap_chain && !klass->create_swap_chain (window, window->dxgi_format, - width, height, swapchain_flags, &window->swap_chain)) { + display_width, display_height, swapchain_flags, &window->swap_chain)) { GST_ERROR_OBJECT (window, "Cannot create swapchain"); g_set_error (error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_FAILED, "Cannot create swapchain"); @@ -707,7 +692,7 @@ gst_d3d11_window_prepare (GstD3D11Window * window, guint width, guint height, #endif /* call resize to allocated resources */ - klass->on_resize (window, width, height); + klass->on_resize (window, display_width, display_height); if (window->requested_fullscreen != window->fullscreen) { klass->change_fullscreen_mode (window); diff --git a/sys/d3d11/gstd3d11window.h b/sys/d3d11/gstd3d11window.h index 4bb5a1b..3c344ea 100644 --- a/sys/d3d11/gstd3d11window.h +++ b/sys/d3d11/gstd3d11window.h @@ -93,15 +93,9 @@ struct _GstD3D11Window /* requested rect via gst_d3d11_window_render */ GstVideoRectangle rect; - guint width; - guint height; - guint surface_width; guint surface_height; - guint aspect_ratio_n; - guint aspect_ratio_d; - IDXGISwapChain *swap_chain; ID3D11RenderTargetView *rtv; ID3D11VideoProcessorOutputView *pov; @@ -150,10 +144,8 @@ void gst_d3d11_window_set_render_rectangle (GstD3D11Window * window, gint width, gint height); gboolean gst_d3d11_window_prepare (GstD3D11Window * window, - guint width, - guint height, - guint aspect_ratio_n, - guint aspect_ratio_d, + guint display_width, + guint display_height, GstCaps * caps, gboolean * video_processor_available, GError ** error); diff --git a/sys/d3d11/gstd3d11window_win32.cpp b/sys/d3d11/gstd3d11window_win32.cpp index 01557b5..762b921 100644 --- a/sys/d3d11/gstd3d11window_win32.cpp +++ b/sys/d3d11/gstd3d11window_win32.cpp @@ -824,8 +824,8 @@ gst_d3d11_window_win32_show (GstD3D11Window * window) GstD3D11WindowWin32 *self = GST_D3D11_WINDOW_WIN32 (window); gint width, height; - width = window->width; - height = window->height; + width = GST_VIDEO_INFO_WIDTH (&window->render_info); + height = GST_VIDEO_INFO_HEIGHT (&window->render_info); if (!self->visible) { /* if no parent the real size has to be set now because this has not been done -- 2.7.4