mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-18 14:26:43 +00:00
videoscale: Correct DAR and border calculations
changed: gst_video_scale_set_info in gst/videoscale/gstvideoscale.c DAR on sink side now calculated with PAR on sink side ratio of output width/height now calculated with inverse PAR additional condition that borders are 0:0 for passthrough mode https://bugzilla.gnome.org/show_bug.cgi?id=696019
This commit is contained in:
parent
2f2e3676b1
commit
8e791d52aa
1 changed files with 5 additions and 4 deletions
|
@ -507,7 +507,7 @@ gst_video_scale_set_info (GstVideoFilter * filter, GstCaps * in,
|
|||
gint from_dar_n, from_dar_d, to_dar_n, to_dar_d;
|
||||
|
||||
if (!gst_util_fraction_multiply (in_info->width,
|
||||
in_info->height, out_info->par_n, out_info->par_d, &from_dar_n,
|
||||
in_info->height, in_info->par_n, in_info->par_d, &from_dar_n,
|
||||
&from_dar_d)) {
|
||||
from_dar_n = from_dar_d = -1;
|
||||
}
|
||||
|
@ -525,7 +525,7 @@ gst_video_scale_set_info (GstVideoFilter * filter, GstCaps * in,
|
|||
|
||||
if (from_dar_n != -1 && from_dar_d != -1
|
||||
&& gst_util_fraction_multiply (from_dar_n, from_dar_d,
|
||||
out_info->par_n, out_info->par_d, &n, &d)) {
|
||||
out_info->par_d, out_info->par_n, &n, &d)) {
|
||||
to_h = gst_util_uint64_scale_int (out_info->width, d, n);
|
||||
if (to_h <= out_info->height) {
|
||||
videoscale->borders_h = out_info->height - to_h;
|
||||
|
@ -548,7 +548,8 @@ gst_video_scale_set_info (GstVideoFilter * filter, GstCaps * in,
|
|||
g_free (videoscale->tmp_buf);
|
||||
videoscale->tmp_buf = g_malloc (out_info->width * sizeof (guint64) * 4);
|
||||
|
||||
if (in_info->width == out_info->width && in_info->height == out_info->height) {
|
||||
if (in_info->width == out_info->width && in_info->height == out_info->height
|
||||
&& videoscale->borders_w == 0 && videoscale->borders_h == 0) {
|
||||
gst_base_transform_set_passthrough (GST_BASE_TRANSFORM (filter), TRUE);
|
||||
} else {
|
||||
GST_CAT_DEBUG_OBJECT (GST_CAT_PERFORMANCE, filter, "setup videoscaling");
|
||||
|
@ -558,7 +559,7 @@ gst_video_scale_set_info (GstVideoFilter * filter, GstCaps * in,
|
|||
GST_DEBUG_OBJECT (videoscale, "from=%dx%d (par=%d/%d dar=%d/%d), size %"
|
||||
G_GSIZE_FORMAT " -> to=%dx%d (par=%d/%d dar=%d/%d borders=%d:%d), "
|
||||
"size %" G_GSIZE_FORMAT,
|
||||
in_info->width, in_info->height, out_info->par_n, out_info->par_d,
|
||||
in_info->width, in_info->height, in_info->par_n, in_info->par_d,
|
||||
from_dar_n, from_dar_d, in_info->size, out_info->width,
|
||||
out_info->height, out_info->par_n, out_info->par_d, to_dar_n, to_dar_d,
|
||||
videoscale->borders_w, videoscale->borders_h, out_info->size);
|
||||
|
|
Loading…
Reference in a new issue