Use the gstutil scaling function to preserve 64 bits while calculating output width...
authorJan Schmidt <thaytan@mad.scientist.com>
Fri, 19 May 2006 13:02:46 +0000 (13:02 +0000)
committerJan Schmidt <thaytan@mad.scientist.com>
Fri, 19 May 2006 13:02:46 +0000 (13:02 +0000)
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)

ChangeLog
gst/videoscale/gstvideoscale.c
sys/xvimage/xvimagesink.c

index 3e9435445623cd81dd5579f0390b5a2100d56f4c..de413ebb7e3b0f4e14db1a87b5334abdac6d05e4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+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),
index 5d80d1c11f655aaa702958e1fd3fd18e329a041b..99e966e504493123700e4a578abf1d65f49fd919 100644 (file)
@@ -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);
index c2f26bfcd13a74ff33cddab4cf20b908ee3002f1..a3315704755c9ae7617bb9aea9487235b72e2f8f 100644 (file)
@@ -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",