summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2014-12-16 15:03:55 +0100
committerSebastian Dröge <sebastian@centricular.com>2014-12-16 15:03:55 +0100
commit0a6001dc6ae7f8346999e028a6ba290c35c5fc7f (patch)
treeada2d3372c9992bc1022f70b5816e5e8cb59f507
parentbdd7e85a4c1320aadae7bdc1a895197a00d93a81 (diff)
Revert "video: Fix non-default usage of gst_video_sink_center_rect"
This reverts commit 899461d722e45f591eeddf33c405677170d63de4. There seems to be a lot of code out there that does not properly initialize the rectangles and then causes undefined behaviour. Including our video sinks. Let's keep this out of 1.4, fix everything everywhere and keep it in 1.6
-rw-r--r--gst-libs/gst/video/gstvideosink.c16
-rw-r--r--tests/check/libs/video.c61
2 files changed, 8 insertions, 69 deletions
diff --git a/gst-libs/gst/video/gstvideosink.c b/gst-libs/gst/video/gstvideosink.c
index 26b7df21c..47045933a 100644
--- a/gst-libs/gst/video/gstvideosink.c
+++ b/gst-libs/gst/video/gstvideosink.c
@@ -87,8 +87,8 @@ gst_video_sink_center_rect (GstVideoRectangle src, GstVideoRectangle dst,
if (!scaling) {
result->w = MIN (src.w, dst.w);
result->h = MIN (src.h, dst.h);
- result->x = dst.x + (dst.w - result->w) / 2;
- result->y = dst.y + (dst.h - result->h) / 2;
+ result->x = (dst.w - result->w) / 2;
+ result->y = (dst.h - result->h) / 2;
} else {
gdouble src_ratio, dst_ratio;
@@ -98,16 +98,16 @@ gst_video_sink_center_rect (GstVideoRectangle src, GstVideoRectangle dst,
if (src_ratio > dst_ratio) {
result->w = dst.w;
result->h = dst.w / src_ratio;
- result->x = dst.x;
- result->y = dst.y + (dst.h - result->h) / 2;
+ result->x = 0;
+ result->y = (dst.h - result->h) / 2;
} else if (src_ratio < dst_ratio) {
result->w = dst.h * src_ratio;
result->h = dst.h;
- result->x = dst.x + (dst.w - result->w) / 2;
- result->y = dst.y;
+ result->x = (dst.w - result->w) / 2;
+ result->y = 0;
} else {
- result->x = dst.x;
- result->y = dst.y;
+ result->x = 0;
+ result->y = 0;
result->w = dst.w;
result->h = dst.h;
}
diff --git a/tests/check/libs/video.c b/tests/check/libs/video.c
index b8e5ba084..d7cac0673 100644
--- a/tests/check/libs/video.c
+++ b/tests/check/libs/video.c
@@ -1693,66 +1693,6 @@ GST_START_TEST (test_overlay_composition_global_alpha)
GST_END_TEST;
-
-GST_START_TEST (test_video_center_rect)
-{
- GstVideoRectangle src, dest, result, expected;
-
-#define NEW_RECT(x,y,w,h) ((GstVideoRectangle) {x,y,w,h})
-#define CHECK_RECT(res, exp) \
- fail_unless_equals_int(exp.x, res.x);\
- fail_unless_equals_int(exp.y, res.y);\
- fail_unless_equals_int(exp.w, res.w);\
- fail_unless_equals_int(exp.h, res.h);
-
- /* 1:1 Aspect Ratio */
- src = NEW_RECT (0, 0, 100, 100);
- dest = NEW_RECT (0, 0, 100, 100);
- expected = NEW_RECT (0, 0, 100, 100);
- gst_video_sink_center_rect (src, dest, &result, TRUE);
- CHECK_RECT (result, expected);
-
- src = NEW_RECT (0, 0, 100, 100);
- dest = NEW_RECT (0, 0, 50, 50);
- expected = NEW_RECT (0, 0, 50, 50);
- gst_video_sink_center_rect (src, dest, &result, TRUE);
- CHECK_RECT (result, expected);
-
- src = NEW_RECT (0, 0, 100, 100);
- dest = NEW_RECT (50, 50, 100, 100);
- expected = NEW_RECT (50, 50, 100, 100);
- gst_video_sink_center_rect (src, dest, &result, TRUE);
- CHECK_RECT (result, expected);
-
- /* Aspect ratio scaling (tall) */
- src = NEW_RECT (0, 0, 50, 100);
- dest = NEW_RECT (0, 0, 50, 50);
- expected = NEW_RECT (12, 0, 25, 50);
- gst_video_sink_center_rect (src, dest, &result, TRUE);
- CHECK_RECT (result, expected);
-
- src = NEW_RECT (0, 0, 50, 100);
- dest = NEW_RECT (50, 50, 50, 50);
- expected = NEW_RECT (62, 50, 25, 50);
- gst_video_sink_center_rect (src, dest, &result, TRUE);
- CHECK_RECT (result, expected);
-
- /* Aspect ratio scaling (wide) */
- src = NEW_RECT (0, 0, 100, 50);
- dest = NEW_RECT (0, 0, 50, 50);
- expected = NEW_RECT (0, 12, 50, 25);
- gst_video_sink_center_rect (src, dest, &result, TRUE);
- CHECK_RECT (result, expected);
-
- src = NEW_RECT (0, 0, 100, 50);
- dest = NEW_RECT (50, 50, 50, 50);
- expected = NEW_RECT (50, 62, 50, 25);
- gst_video_sink_center_rect (src, dest, &result, TRUE);
- CHECK_RECT (result, expected);
-}
-
-GST_END_TEST;
-
static Suite *
video_suite (void)
{
@@ -1774,7 +1714,6 @@ video_suite (void)
tcase_add_test (tc_chain, test_overlay_composition);
tcase_add_test (tc_chain, test_overlay_composition_premultiplied_alpha);
tcase_add_test (tc_chain, test_overlay_composition_global_alpha);
- tcase_add_test (tc_chain, test_video_center_rect);
return s;
}