aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorRam Mohan <ram.mohan@ittiam.com>2024-05-20 01:14:38 +0530
committerDichenZhang1 <140119224+DichenZhang1@users.noreply.github.com>2024-05-23 10:44:39 -0700
commit3fafca08620678f2690fc797615b847c5e98bd8b (patch)
tree8b8141aefdd99dd342102dfdf7e745bb8fe0f3b6 /tests
parent06c2624491a79673149a99d5c597bd0ff388c867 (diff)
downloadlibultrahdr-3fafca08620678f2690fc797615b847c5e98bd8b.tar.gz
Updates to jpeg encoder helper class
- Add support for more sampling formats - RGB jpeg encode now defaults to 444 sampling format instead of 420 - For unaligned blocks memset chroma planes to 128 to create black borders - Add more fail safe checks, diagnostics - Ensure memory is released during encoding failures Test: ./ultrahdr_unit_test Test: ./ultrahdr_enc_fuzzer
Diffstat (limited to 'tests')
-rw-r--r--tests/jpegencoderhelper_test.cpp40
1 files changed, 26 insertions, 14 deletions
diff --git a/tests/jpegencoderhelper_test.cpp b/tests/jpegencoderhelper_test.cpp
index 784b946..1648390 100644
--- a/tests/jpegencoderhelper_test.cpp
+++ b/tests/jpegencoderhelper_test.cpp
@@ -105,35 +105,47 @@ void JpegEncoderHelperTest::TearDown() {}
TEST_F(JpegEncoderHelperTest, encodeAlignedImage) {
JpegEncoderHelper encoder;
- EXPECT_TRUE(encoder.compressImage(
- mAlignedImage.buffer.get(),
- mAlignedImage.buffer.get() + mAlignedImage.width * mAlignedImage.height, mAlignedImage.width,
- mAlignedImage.height, mAlignedImage.width, mAlignedImage.width / 2, JPEG_QUALITY, NULL, 0));
+ const uint8_t* yPlane = mAlignedImage.buffer.get();
+ const uint8_t* uPlane = yPlane + mAlignedImage.width * mAlignedImage.height;
+ const uint8_t* vPlane = uPlane + mAlignedImage.width * mAlignedImage.height / 4;
+ const uint8_t* planes[3]{yPlane, uPlane, vPlane};
+ const size_t strides[3]{mAlignedImage.width, mAlignedImage.width / 2, mAlignedImage.width / 2};
+ EXPECT_TRUE(encoder.compressImage(planes, strides, mAlignedImage.width, mAlignedImage.height,
+ JpegEncoderHelper::YUV420, JPEG_QUALITY, NULL, 0));
ASSERT_GT(encoder.getCompressedImageSize(), static_cast<uint32_t>(0));
}
TEST_F(JpegEncoderHelperTest, encodeUnalignedImage) {
JpegEncoderHelper encoder;
- EXPECT_TRUE(encoder.compressImage(
- mUnalignedImage.buffer.get(),
- mUnalignedImage.buffer.get() + mUnalignedImage.width * mUnalignedImage.height,
- mUnalignedImage.width, mUnalignedImage.height, mUnalignedImage.width,
- mUnalignedImage.width / 2, JPEG_QUALITY, NULL, 0));
+ const uint8_t* yPlane = mUnalignedImage.buffer.get();
+ const uint8_t* uPlane = yPlane + mUnalignedImage.width * mUnalignedImage.height;
+ const uint8_t* vPlane = uPlane + mUnalignedImage.width * mUnalignedImage.height / 4;
+ const uint8_t* planes[3]{yPlane, uPlane, vPlane};
+ const size_t strides[3]{mUnalignedImage.width, mUnalignedImage.width / 2,
+ mUnalignedImage.width / 2};
+ EXPECT_TRUE(encoder.compressImage(planes, strides, mUnalignedImage.width, mUnalignedImage.height,
+ JpegEncoderHelper::YUV420, JPEG_QUALITY, NULL, 0));
ASSERT_GT(encoder.getCompressedImageSize(), static_cast<uint32_t>(0));
}
TEST_F(JpegEncoderHelperTest, encodeSingleChannelImage) {
JpegEncoderHelper encoder;
- EXPECT_TRUE(encoder.compressImage(mSingleChannelImage.buffer.get(), nullptr,
- mSingleChannelImage.width, mSingleChannelImage.height,
- mSingleChannelImage.width, 0, JPEG_QUALITY, NULL, 0));
+ const uint8_t* yPlane = mSingleChannelImage.buffer.get();
+ const uint8_t* planes[1]{yPlane};
+ const size_t strides[1]{mSingleChannelImage.width};
+ EXPECT_TRUE(encoder.compressImage(planes, strides, mSingleChannelImage.width,
+ mSingleChannelImage.height, JpegEncoderHelper::GRAYSCALE,
+ JPEG_QUALITY, NULL, 0));
ASSERT_GT(encoder.getCompressedImageSize(), static_cast<uint32_t>(0));
}
TEST_F(JpegEncoderHelperTest, encodeRGBImage) {
JpegEncoderHelper encoder;
- EXPECT_TRUE(encoder.compressImage(mRgbImage.buffer.get(), mRgbImage.width, mRgbImage.height,
- JPEG_QUALITY, NULL, 0));
+ const uint8_t* rgbPlane = mRgbImage.buffer.get();
+ const uint8_t* planes[1]{rgbPlane};
+ const size_t strides[1]{mRgbImage.width * 3};
+ EXPECT_TRUE(encoder.compressImage(planes, strides, mRgbImage.width, mRgbImage.height,
+ JpegEncoderHelper::RGB, JPEG_QUALITY, NULL, 0));
ASSERT_GT(encoder.getCompressedImageSize(), static_cast<uint32_t>(0));
}