summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Schmidt <thaytan@mad.scientist.com>2006-05-19 13:02:46 +0000
committerJan Schmidt <thaytan@mad.scientist.com>2006-05-19 13:02:46 +0000
commitf3b81a7de1850488fcf2af26c20cfec33a152dc8 (patch)
treeb5347fb288c1da3443d6190d523c25280e29c31f
parent47e7f3f367d3a6d1a120abd81915b98a7ed694c9 (diff)
Use the gstutil scaling function to preserve 64 bits while calculating output width and height from the display-aspec...
Original commit message from CVS: * 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)
-rw-r--r--ChangeLog8
-rw-r--r--gst/videoscale/gstvideoscale.c12
-rw-r--r--sys/xvimage/xvimagesink.c9
3 files changed, 20 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 3e943544..de413ebb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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",