diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | gst/videoscale/gstvideoscale.c | 12 | ||||
-rw-r--r-- | sys/xvimage/xvimagesink.c | 9 |
3 files changed, 20 insertions, 9 deletions
@@ -1,5 +1,13 @@ 2006-05-19 Jan Schmidt <thaytan@mad.scientist.com> + * gst/videoscale/gstvideoscale.c: (gst_video_scale_fixate_caps): + * sys/xvimage/xvimagesink.c: (gst_xvimagesink_setcaps): + Use the gstutil scaling function to preserve 64 bits while calculating + output width and height from the display-aspect-ratio. (A continuation + of #341542) + +2006-05-19 Jan Schmidt <thaytan@mad.scientist.com> + * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_clear), (gst_xvimagesink_buffer_alloc): * sys/xvimage/xvimagesink.h: diff --git a/gst/videoscale/gstvideoscale.c b/gst/videoscale/gstvideoscale.c index 5d80d1c1..99e966e5 100644 --- a/gst/videoscale/gstvideoscale.c +++ b/gst/videoscale/gstvideoscale.c @@ -600,10 +600,10 @@ gst_video_scale_fixate_caps (GstBaseTransform * base, GstPadDirection direction, /* if one of the output width or height is fixed, we work from there */ if (h) { GST_DEBUG_OBJECT (base, "height is fixed,scaling width"); - w = h * num / den; + w = (guint) gst_util_uint64_scale_int (h, num, den); } else if (w) { - GST_DEBUG_OBJECT (base, "width is fixes, scaling height"); - h = w * den / num; + GST_DEBUG_OBJECT (base, "width is fixed, scaling height"); + h = (guint) gst_util_uint64_scale_int (w, den, num); } else { /* none of width or height is fixed, figure out both of them based only on * the input width and height */ @@ -611,15 +611,15 @@ gst_video_scale_fixate_caps (GstBaseTransform * base, GstPadDirection direction, if (from_h % den == 0) { GST_DEBUG_OBJECT (base, "keeping video height"); h = from_h; - w = h * num / den; + w = (guint) gst_util_uint64_scale_int (h, num, den); } else if (from_w % num == 0) { GST_DEBUG_OBJECT (base, "keeping video width"); w = from_w; - h = w * den / num; + h = (guint) gst_util_uint64_scale_int (w, den, num); } else { GST_DEBUG_OBJECT (base, "approximating but keeping video height"); h = from_h; - w = h * num / den; + w = (guint) gst_util_uint64_scale_int (h, num, den); } } GST_DEBUG_OBJECT (base, "scaling to %dx%d", w, h); diff --git a/sys/xvimage/xvimagesink.c b/sys/xvimage/xvimagesink.c index c2f26bfc..a3315704 100644 --- a/sys/xvimage/xvimagesink.c +++ b/sys/xvimage/xvimagesink.c @@ -1670,15 +1670,18 @@ gst_xvimagesink_setcaps (GstBaseSink * bsink, GstCaps * caps) /* check hd / den is an integer scale factor, and scale wd with the PAR */ if (video_height % den == 0) { GST_DEBUG_OBJECT (xvimagesink, "keeping video height"); - GST_VIDEO_SINK_WIDTH (xvimagesink) = video_height * num / den; + GST_VIDEO_SINK_WIDTH (xvimagesink) = (guint) + gst_util_uint64_scale_int (video_height, num, den); GST_VIDEO_SINK_HEIGHT (xvimagesink) = video_height; } else if (video_width % num == 0) { GST_DEBUG_OBJECT (xvimagesink, "keeping video width"); GST_VIDEO_SINK_WIDTH (xvimagesink) = video_width; - GST_VIDEO_SINK_HEIGHT (xvimagesink) = video_width * den / num; + GST_VIDEO_SINK_HEIGHT (xvimagesink) = (guint) + gst_util_uint64_scale_int (video_width, den, num); } else { GST_DEBUG_OBJECT (xvimagesink, "approximating while keeping video height"); - GST_VIDEO_SINK_WIDTH (xvimagesink) = video_height * num / den; + GST_VIDEO_SINK_WIDTH (xvimagesink) = (guint) + gst_util_uint64_scale_int (video_height, num, den); GST_VIDEO_SINK_HEIGHT (xvimagesink) = video_height; } GST_DEBUG_OBJECT (xvimagesink, "scaling to %dx%d", |