From 93c3328e2c460473ca1d8ffc58c8a62a78a15081 Mon Sep 17 00:00:00 2001 From: Haesu Gwon Date: Tue, 5 Jul 2022 16:28:55 +0900 Subject: [PATCH] [TCSACR-490][ImageUtil] Support JPEG XL image encoder, decoder Change-Id: Ie4d77b7298d7c94ecb80889f3e35f7a1f5415e36 --- .../Tizen.MultimediaUtil.Tests/res/test_jxl.jxl | Bin 0 -> 32517 bytes .../testcase/ImageUtil/TSImageDecoder.cs | 59 +++++++++++++-- .../testcase/ImageUtil/TSImageEncoder.cs | 79 +++++++++++++++++++- .../testcase/ImageUtil/TSJpegXlDecoder.cs | 33 ++++++++ .../testcase/ImageUtil/TSJpegXlEncoder.cs | 83 +++++++++++++++++++++ .../testcase/support/ImageUtilConstants.cs | 1 + 6 files changed, 245 insertions(+), 10 deletions(-) create mode 100755 tct-suite-vs/Tizen.MultimediaUtil.Tests/res/test_jxl.jxl create mode 100755 tct-suite-vs/Tizen.MultimediaUtil.Tests/testcase/ImageUtil/TSJpegXlDecoder.cs create mode 100644 tct-suite-vs/Tizen.MultimediaUtil.Tests/testcase/ImageUtil/TSJpegXlEncoder.cs diff --git a/tct-suite-vs/Tizen.MultimediaUtil.Tests/res/test_jxl.jxl b/tct-suite-vs/Tizen.MultimediaUtil.Tests/res/test_jxl.jxl new file mode 100755 index 0000000000000000000000000000000000000000..70c7665f626ce256965c7e40c286cec99178494d GIT binary patch literal 32517 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 literal 0 HcmV?d00001 diff --git a/tct-suite-vs/Tizen.MultimediaUtil.Tests/testcase/ImageUtil/TSImageDecoder.cs b/tct-suite-vs/Tizen.MultimediaUtil.Tests/testcase/ImageUtil/TSImageDecoder.cs index 0ac20b3..cb17c13 100755 --- a/tct-suite-vs/Tizen.MultimediaUtil.Tests/testcase/ImageUtil/TSImageDecoder.cs +++ b/tct-suite-vs/Tizen.MultimediaUtil.Tests/testcase/ImageUtil/TSImageDecoder.cs @@ -21,6 +21,7 @@ namespace Tizen.Multimedia.Util.Tests private BmpDecoder _bmpDecoder; private GifDecoder _gifDecoder; private JpegDecoder _jpegDecoder; + private JpegXlDecoder _jpegXlDecoder; private PngDecoder _pngDecoder; private WebPDecoder _webPDecoder; private HeifDecoder _heifDecoder; @@ -31,12 +32,15 @@ namespace Tizen.Multimedia.Util.Tests _bmpDecoder = new BmpDecoder(); _gifDecoder = new GifDecoder(); _jpegDecoder = new JpegDecoder(); + _jpegXlDecoder = new JpegXlDecoder(); _pngDecoder = new PngDecoder(); _webPDecoder = new WebPDecoder(); _heifDecoder = new HeifDecoder(); + Assert.IsNotNull(_bmpDecoder, "Object(BmpDecoder) should not be null to start test"); Assert.IsNotNull(_gifDecoder, "Object(GifDecoder) should not be null to start test"); Assert.IsNotNull(_jpegDecoder, "Object(JpegDecoder) should not be null to start test"); + Assert.IsNotNull(_jpegXlDecoder, "Object(JpegXlDecoder) should not be null to start test"); Assert.IsNotNull(_pngDecoder, "Object(PngDecoder) should not be null to start test"); Assert.IsNotNull(_webPDecoder, "Object(WebPDecoder) should not be null to start test"); Assert.IsNotNull(_heifDecoder, "Object(HeifDecoder) should not be null to start test"); @@ -45,12 +49,13 @@ namespace Tizen.Multimedia.Util.Tests [TearDown] public void Destroy() { - _bmpDecoder.Dispose(); - _gifDecoder.Dispose(); - _jpegDecoder.Dispose(); - _pngDecoder.Dispose(); - _webPDecoder.Dispose(); - _heifDecoder.Dispose(); + _bmpDecoder?.Dispose(); + _gifDecoder?.Dispose(); + _jpegDecoder?.Dispose(); + _jpegXlDecoder?.Dispose(); + _pngDecoder?.Dispose(); + _webPDecoder?.Dispose(); + _heifDecoder?.Dispose(); } [Test] @@ -330,6 +335,36 @@ namespace Tizen.Multimedia.Util.Tests } [Test] + [Category("P1")] + [Description("Decode jpegxl image using input buffer")] + [Property("SPEC", "Tizen.Multimedia.Util.ImageDecoder.DecodeAsync M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Haesu Gwon, haesu.gwon@samsung.com")] + [Property("COVPARAM", "byte[]")] + public async Task DecodeAsync_INPUTBUFFER_JPEGXL_CHECK_RETURN_VALUE() + { + var frame = (await _jpegXlDecoder.DecodeAsync(File.ReadAllBytes(ImageUtilConstants.JpegXlPath))).FirstOrDefault(); + + Assert.That(frame.Size.Height, Is.Positive); + } + + [Test] + [Category("P1")] + [Description("Decode jpegxl image using input path")] + [Property("SPEC", "Tizen.Multimedia.Util.ImageDecoder.DecodeAsync M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Haesu Gwon, haesu.gwon@samsung.com")] + [Property("COVPARAM", "string")] + public async Task DecodeAsync_INPUTPATH_JPEGXL_CHECK_RETURN_VALUE() + { + var frame = (await _jpegXlDecoder.DecodeAsync(ImageUtilConstants.JpegXlPath)).FirstOrDefault(); + + Assert.That(frame.Size.Height, Is.Positive); + } + + [Test] [Category("P2")] [Description("Check if it throws argument exception for setting color space with an invalid color space value")] [Property("SPEC", "Tizen.Multimedia.Util.ImageDecoder.SetColorSpace M")] @@ -439,5 +474,17 @@ namespace Tizen.Multimedia.Util.Tests { Assert.That(_heifDecoder.InputFormat, Is.EqualTo(ImageFormat.Heif)); } + + [Test] + [Category("P1")] + [Description("Get input format for jpegxl object")] + [Property("SPEC", "Tizen.Multimedia.Util.ImageDecoder.InputFormat A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRE")] + [Property("AUTHOR", "Haesu Gwon, haesu.gwon@samsung.com")] + public void InputFormat_PROPERTY_GET_ENUM_IMAGEFORMAT_JPEGXL() + { + Assert.That(_jpegXlDecoder.InputFormat, Is.EqualTo(ImageFormat.JpegXl)); + } } } diff --git a/tct-suite-vs/Tizen.MultimediaUtil.Tests/testcase/ImageUtil/TSImageEncoder.cs b/tct-suite-vs/Tizen.MultimediaUtil.Tests/testcase/ImageUtil/TSImageEncoder.cs index 8f43c80..2120159 100755 --- a/tct-suite-vs/Tizen.MultimediaUtil.Tests/testcase/ImageUtil/TSImageEncoder.cs +++ b/tct-suite-vs/Tizen.MultimediaUtil.Tests/testcase/ImageUtil/TSImageEncoder.cs @@ -23,7 +23,9 @@ namespace Tizen.Multimedia.Util.Tests private BmpEncoder _bmpEncoder; private GifEncoder _gifEncoder; private JpegEncoder _jpegEncoder; + private JpegXlEncoder _jpegXlEncoder; private PngEncoder _pngEncoder; + private WebPEncoder _webPEncoder; [SetUp] public void Init() @@ -31,20 +33,27 @@ namespace Tizen.Multimedia.Util.Tests _bmpEncoder = new BmpEncoder(); _gifEncoder = new GifEncoder(); _jpegEncoder = new JpegEncoder(); + _jpegXlEncoder = new JpegXlEncoder(); _pngEncoder = new PngEncoder(); + _webPEncoder = new WebPEncoder(); + Assert.IsNotNull(_bmpEncoder, "Object(BmpEncoder) should not be null to start test"); Assert.IsNotNull(_gifEncoder, "Object(GifEncoder) should not be null to start test"); Assert.IsNotNull(_jpegEncoder, "Object(JpegEncoder) should not be null to start test"); + Assert.IsNotNull(_jpegXlEncoder, "Object(JpegXlEncoder) should not be null to start test"); Assert.IsNotNull(_pngEncoder, "Object(PngEncoder) should not be null to start test"); + Assert.IsNotNull(_webPEncoder, "Object(WebPEncoder) should not be null to start test"); } [TearDown] public void Destroy() { - _bmpEncoder.Dispose(); - _gifEncoder.Dispose(); - _jpegEncoder.Dispose(); - _pngEncoder.Dispose(); + _bmpEncoder?.Dispose(); + _gifEncoder?.Dispose(); + _jpegEncoder?.Dispose(); + _jpegXlEncoder?.Dispose(); + _pngEncoder?.Dispose(); + _webPEncoder?.Dispose(); } [Test] @@ -221,6 +230,44 @@ namespace Tizen.Multimedia.Util.Tests [Test] [Category("P1")] + [Description("Test EncodeAsync with WebP whether throws exception or not.")] + [Property("SPEC", "Tizen.Multimedia.Util.ImageEncoder.EncodeAsync M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Haesu Gwon, haesu.gwon@samsung.com")] + public async Task EncodeAsync_WEBP_CHECK_RETURN_VALUE() + { + using (var outStream = File.Create(OutputPath)) + using (var webPDecoder = new WebPDecoder()) + { + var frame = (await webPDecoder.DecodeAsync(ImageUtilConstants.WebPPath)).FirstOrDefault(); + + _webPEncoder.SetResolution(new Size(100, 100)); + Assert.That(() => _webPEncoder.EncodeAsync(frame.Buffer, outStream), Throws.Nothing); + } + } + + [Test] + [Category("P1")] + [Description("Test EncodeAsync with JpegXl whether throws exception or not.")] + [Property("SPEC", "Tizen.Multimedia.Util.ImageEncoder.EncodeAsync M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Haesu Gwon, haesu.gwon@samsung.com")] + public async Task EncodeAsync_JPEGXL_CHECK_RETURN_VALUE() + { + using (var outStream = File.Create(OutputPath)) + using (var jpegXlDecoder = new JpegXlDecoder()) + { + var frame = (await jpegXlDecoder.DecodeAsync(ImageUtilConstants.JpegXlPath)).FirstOrDefault(); + + _jpegXlEncoder.SetResolution(new Size(100, 100)); + Assert.That(() => _jpegXlEncoder.EncodeAsync(frame.Buffer, outStream), Throws.Nothing); + } + } + + [Test] + [Category("P1")] [Description("Get output format for jpeg object")] [Property("SPEC", "Tizen.Multimedia.Util.ImageEncoder.OutputFormat A")] [Property("SPEC_URL", "-")] @@ -266,5 +313,29 @@ namespace Tizen.Multimedia.Util.Tests { Assert.That(_bmpEncoder.OutputFormat, Is.EqualTo(ImageFormat.Bmp)); } + + [Test] + [Category("P1")] + [Description("Get output format for webp object")] + [Property("SPEC", "Tizen.Multimedia.Util.ImageEncoder.OutputFormat A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRE")] + [Property("AUTHOR", "Haesu Gwon, haesu.gwon@samsung.com")] + public void OutputFormat_PROPERTY_GET_ENUM_IMAGEFORMAT_WEBP() + { + Assert.That(_webPEncoder.OutputFormat, Is.EqualTo(ImageFormat.WebP)); + } + + [Test] + [Category("P1")] + [Description("Get output format for jpegxl object")] + [Property("SPEC", "Tizen.Multimedia.Util.ImageEncoder.OutputFormat A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRE")] + [Property("AUTHOR", "Haesu Gwon, haesu.gwon@samsung.com")] + public void OutputFormat_PROPERTY_GET_ENUM_IMAGEFORMAT_JPEGXL() + { + Assert.That(_jpegXlEncoder.OutputFormat, Is.EqualTo(ImageFormat.JpegXl)); + } } } diff --git a/tct-suite-vs/Tizen.MultimediaUtil.Tests/testcase/ImageUtil/TSJpegXlDecoder.cs b/tct-suite-vs/Tizen.MultimediaUtil.Tests/testcase/ImageUtil/TSJpegXlDecoder.cs new file mode 100755 index 0000000..882d3dd --- /dev/null +++ b/tct-suite-vs/Tizen.MultimediaUtil.Tests/testcase/ImageUtil/TSJpegXlDecoder.cs @@ -0,0 +1,33 @@ +// Copyright 2022 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using NUnit.Framework; + +namespace Tizen.Multimedia.Util.Tests +{ + [TestFixture] + [Description("Tests Tizen.Multimedia.Util.JpegXlDecoder class")] + public class JpegXlDecoderTests + { + [Test] + [Category("P1")] + [Description("Test: Constructor for JpegXl decoder - Object should not be null after initialization")] + [Property("SPEC", "Tizen.Multimedia.Util.JpegXlDecoder.JpegXlDecoder C")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "CONSTR")] + [Property("AUTHOR", "Haesu Gwon, haesu.gwon@samsung.com")] + public void JpegXlDecoder_INIT() + { + using (var decoder = new JpegXlDecoder()) + { + Assert.IsNotNull(decoder, "Should not null."); + Assert.IsInstanceOf(decoder, "Should return JpegXlDecoder instance."); + } + } + } +} diff --git a/tct-suite-vs/Tizen.MultimediaUtil.Tests/testcase/ImageUtil/TSJpegXlEncoder.cs b/tct-suite-vs/Tizen.MultimediaUtil.Tests/testcase/ImageUtil/TSJpegXlEncoder.cs new file mode 100644 index 0000000..49add5d --- /dev/null +++ b/tct-suite-vs/Tizen.MultimediaUtil.Tests/testcase/ImageUtil/TSJpegXlEncoder.cs @@ -0,0 +1,83 @@ +// Copyright 2022 by Samsung Electronics, Inc., +// +// This software is the confidential and proprietary information +// of Samsung Electronics, Inc. ("Confidential Information"). You +// shall not disclose such Confidential Information and shall use +// it only in accordance with the terms of the license agreement +// you entered into with Samsung. + +using NUnit.Framework; + +namespace Tizen.Multimedia.Util.Tests +{ + [TestFixture] + [Description("Tests Tizen.Multimedia.Util.JpegXlEncoder class")] + public class JpegXlEncoderTests + { + [Test] + [Category("P1")] + [Description("Test: Constructor for encoding JpegXl image - object should not be null after initializing")] + [Property("SPEC", "Tizen.Multimedia.Util.JpegXlEncoder.JpegXlEncoder C")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "CONSTR")] + [Property("AUTHOR", "Haesu Gwon, haesu.gwon@samsung.com")] + public void JpegXlEncoder_INIT() + { + using (var encoder = new JpegXlEncoder()) + { + Assert.IsNotNull(encoder, "Should not null."); + Assert.IsInstanceOf(encoder, "Should return JpegXlEncoder instance."); + Assert.AreEqual(encoder.Lossless, false, "The default lossless value Should be false."); + } + } + + [Test] + [Category("P1")] + [Description("Test: Constructor for encoding JpegXl image with lossless- object should not be null after initializing")] + [Property("SPEC", "Tizen.Multimedia.Util.JpegXlEncoder.JpegXlEncoder C")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "CONSTR")] + [Property("COVPARAM", "bool")] + [Property("AUTHOR", "Haesu Gwon, haesu.gwon@samsung.com")] + public void JpegXlEncoder_INIT_WITH_Lossless() + { + using (var encoder = new JpegXlEncoder(true)) + { + Assert.IsNotNull(encoder, "Should not null."); + Assert.IsInstanceOf(encoder, "Should return JpegXlEncoder instance."); + Assert.AreEqual(encoder.Lossless, true, "Should be same value."); + } + } + + [Test] + [Category("P1")] + [Description("Check whether Lossless property is readable and writable.")] + [Property("SPEC", "Tizen.Multimedia.Util.JpegXlEncoder.Lossless A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRW")] + [Property("AUTHOR", "Haesu Gwon, haesu.gwon@samsung.com")] + public void Lossless_READ_WRITE() + { + using (var encoder = new JpegXlEncoder()) + { + encoder.Lossless = true; + Assert.AreEqual(encoder.Lossless, true, "Should be same value."); + + encoder.Lossless = false; + Assert.AreEqual(encoder.Lossless, false, "Should be same value."); + } + } + + [Test] + [Category("P1")] + [Description("Check whether the default value of Lossless property is false.")] + [Property("SPEC", "Tizen.Multimedia.Util.JpegXlEncoder.Lossless A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PDV")] + [Property("AUTHOR", "Haesu Gwon, haesu.gwon@samsung.com")] + public void Lossless_CHECK_DEFAULT_VALUE() + { + Assert.AreEqual(new JpegXlEncoder().Lossless, false, "The default value should be false."); + } + } +} diff --git a/tct-suite-vs/Tizen.MultimediaUtil.Tests/testcase/support/ImageUtilConstants.cs b/tct-suite-vs/Tizen.MultimediaUtil.Tests/testcase/support/ImageUtilConstants.cs index ca31365..eabd76d 100755 --- a/tct-suite-vs/Tizen.MultimediaUtil.Tests/testcase/support/ImageUtilConstants.cs +++ b/tct-suite-vs/Tizen.MultimediaUtil.Tests/testcase/support/ImageUtilConstants.cs @@ -2,6 +2,7 @@ internal static class ImageUtilConstants { internal const string JpegPath = "/opt/usr/home/owner/share/res/test_jpeg.jpg"; + internal const string JpegXlPath = "/opt/usr/home/owner/share/res/test_jxl.jxl"; internal const string BitmapPath = "/opt/usr/home/owner/share/res/test_bmp.bmp"; internal const string GifPath = "/opt/usr/home/owner/share/res/test_gif.gif"; internal const string PngPath = "/opt/usr/home/owner/share/res/test_png.png"; -- 2.7.4