diff options
| author | Carl Hetherington <cth@carlh.net> | 2015-08-17 00:41:58 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2015-08-17 00:41:58 +0100 |
| commit | 502475a5001f580a8540e84880564d9e4c7502d4 (patch) | |
| tree | c6d65e730d749dc47ff3345882da989b5eba201e | |
| parent | d8883a2742d289c2eab3dd4ef92839435b37c95c (diff) | |
Remove unused Image::crop.
| -rw-r--r-- | src/lib/image.cc | 28 | ||||
| -rw-r--r-- | src/lib/image.h | 1 | ||||
| -rw-r--r-- | test/image_test.cc | 100 |
3 files changed, 0 insertions, 129 deletions
diff --git a/src/lib/image.cc b/src/lib/image.cc index 30b997737..04771a24b 100644 --- a/src/lib/image.cc +++ b/src/lib/image.cc @@ -208,34 +208,6 @@ Image::scale (dcp::Size out_size, dcp::YUVToRGB yuv_to_rgb, AVPixelFormat out_fo return scaled; } -shared_ptr<Image> -Image::crop (Crop crop, bool aligned) const -{ - dcp::Size cropped_size = crop.apply (size ()); - shared_ptr<Image> out (new Image (pixel_format(), cropped_size, aligned)); - - for (int c = 0; c < components(); ++c) { - int const crop_left_in_bytes = bytes_per_pixel(c) * crop.left; - /* bytes_per_pixel() could be a fraction; in this case the stride will be rounded - up, and we need to make sure that we copy over the width (up to the stride) - rather than short of the width; hence the ceil() here. - */ - int const cropped_width_in_bytes = ceil (bytes_per_pixel(c) * cropped_size.width); - - /* Start of the source line, cropped from the top but not the left */ - uint8_t* in_p = data()[c] + (crop.top / out->line_factor(c)) * stride()[c]; - uint8_t* out_p = out->data()[c]; - - for (int y = 0; y < out->lines(c); ++y) { - memcpy (out_p, in_p + crop_left_in_bytes, cropped_width_in_bytes); - in_p += stride()[c]; - out_p += out->stride()[c]; - } - } - - return out; -} - /** Blacken a YUV image whose bits per pixel is rounded up to 16 */ void Image::yuv_16_black (uint16_t v, bool alpha) diff --git a/src/lib/image.h b/src/lib/image.h index 89cd98f7b..492f6212e 100644 --- a/src/lib/image.h +++ b/src/lib/image.h @@ -59,7 +59,6 @@ public: int lines (int) const; boost::shared_ptr<Image> scale (dcp::Size, dcp::YUVToRGB yuv_to_rgb, AVPixelFormat, bool aligned) const; - boost::shared_ptr<Image> crop (Crop c, bool aligned) const; boost::shared_ptr<Image> crop_scale_window (Crop c, dcp::Size, dcp::Size, dcp::YUVToRGB yuv_to_rgb, AVPixelFormat, bool aligned) const; void make_black (); diff --git a/test/image_test.cc b/test/image_test.cc index 21363b5ef..cb1aa35d7 100644 --- a/test/image_test.cc +++ b/test/image_test.cc @@ -131,106 +131,6 @@ BOOST_AUTO_TEST_CASE (compact_image_test) delete u; } -BOOST_AUTO_TEST_CASE (crop_image_test) -{ - /* This was to check out a bug with valgrind, and is probably not very useful */ - shared_ptr<Image> image (new Image (PIX_FMT_YUV420P, dcp::Size (16, 16), true)); - image->make_black (); - Crop crop; - crop.top = 3; - image->crop (crop, false); -} - -/* Test cropping of a YUV 4:2:0 image by 1 pixel, which used to fail because - the U/V copying was not rounded up to the next sample. -*/ -BOOST_AUTO_TEST_CASE (crop_image_test2) -{ - /* Here's a 1998 x 1080 image which is black */ - shared_ptr<Image> image (new Image (PIX_FMT_YUV420P, dcp::Size (1998, 1080), true)); - image->make_black (); - - /* Crop it by 1 pixel */ - Crop crop; - crop.left = 1; - image = image->crop (crop, true); - - /* Convert it back to RGB to make comparison to black easier */ - image = image->scale (image->size(), dcp::YUV_TO_RGB_REC601, PIX_FMT_RGB24, true); - - /* Check that its still black after the crop */ - uint8_t* p = image->data()[0]; - for (int y = 0; y < image->size().height; ++y) { - uint8_t* q = p; - for (int x = 0; x < image->size().width; ++x) { - BOOST_CHECK_EQUAL (*q++, 0); - BOOST_CHECK_EQUAL (*q++, 0); - BOOST_CHECK_EQUAL (*q++, 0); - } - p += image->stride()[0]; - } -} - -static -void -crop_scale_window_single (AVPixelFormat in_format, dcp::Size in_size, Crop crop, dcp::Size inter_size, dcp::Size out_size) -{ - /* Set up our test image */ - shared_ptr<Image> test (new Image (in_format, in_size, true)); - uint8_t n = 0; - for (int c = 0; c < test->components(); ++c) { - uint8_t* p = test->data()[c]; - for (int y = 0; y < test->lines(c); ++y) { - for (int x = 0; x < test->stride()[c]; ++x) { - *p++ = n++; - } - } - } - - /* Convert using separate methods */ - boost::shared_ptr<Image> sep = test->crop (crop, true); - sep = sep->scale (inter_size, dcp::YUV_TO_RGB_REC601, PIX_FMT_RGB24, true); - boost::shared_ptr<Image> sep_container (new Image (PIX_FMT_RGB24, out_size, true)); - sep_container->make_black (); - sep_container->copy (sep, Position<int> ((out_size.width - inter_size.width) / 2, (out_size.height - inter_size.height) / 2)); - - /* Convert using the all-in-one method */ - shared_ptr<Image> all = test->crop_scale_window (crop, inter_size, out_size, dcp::YUV_TO_RGB_REC601, PIX_FMT_RGB24, true); - - /* Compare */ - BOOST_CHECK_EQUAL (sep_container->size().width, all->size().width); - BOOST_CHECK_EQUAL (sep_container->size().height, all->size().height); - - /* Assuming RGB on these */ - BOOST_CHECK_EQUAL (sep_container->components(), 1); - BOOST_CHECK_EQUAL (all->components(), 1); - - uint8_t* p = sep_container->data()[0]; - uint8_t* q = all->data()[0]; - for (int y = 0; y < all->size().height; ++y) { - uint8_t* pp = p; - uint8_t* qq = q; - for (int x = 0; x < all->size().width * 3; ++x) { - BOOST_CHECK_EQUAL (*pp++, *qq++); - } - p += sep_container->stride()[0]; - q += all->stride()[0]; - } -} - -/** Test Image::crop_scale_window against separate calls to crop/scale/copy */ -BOOST_AUTO_TEST_CASE (crop_scale_window_test) -{ - crop_scale_window_single (AV_PIX_FMT_YUV422P, dcp::Size (640, 480), Crop (), dcp::Size (640, 480), dcp::Size (640, 480)); - crop_scale_window_single (AV_PIX_FMT_YUV422P, dcp::Size (640, 480), Crop (2, 4, 6, 8), dcp::Size (640, 480), dcp::Size (640, 480)); - crop_scale_window_single (AV_PIX_FMT_YUV422P, dcp::Size (640, 480), Crop (2, 4, 6, 8), dcp::Size (1920, 1080), dcp::Size (1998, 1080)); - crop_scale_window_single (AV_PIX_FMT_YUV422P, dcp::Size (640, 480), Crop (1, 4, 6, 8), dcp::Size (1920, 1080), dcp::Size (1998, 1080)); - crop_scale_window_single (AV_PIX_FMT_YUV420P, dcp::Size (640, 480), Crop (16, 16, 0, 0), dcp::Size (1920, 1080), dcp::Size (1998, 1080)); - crop_scale_window_single (AV_PIX_FMT_YUV420P, dcp::Size (640, 480), Crop (16, 3, 3, 0), dcp::Size (1920, 1080), dcp::Size (1998, 1080)); - crop_scale_window_single (AV_PIX_FMT_RGB24, dcp::Size (1000, 800), Crop (0, 0, 0, 0), dcp::Size (1920, 1080), dcp::Size (1998, 1080)); - crop_scale_window_single (AV_PIX_FMT_RGB24, dcp::Size (1000, 800), Crop (55, 0, 1, 9), dcp::Size (1920, 1080), dcp::Size (1998, 1080)); -} - /** Test Image::alpha_blend */ BOOST_AUTO_TEST_CASE (alpha_blend_test) { |
