From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- third_party/jpeg-xl/lib/jxl/speed_tier_test.cc | 118 +++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 third_party/jpeg-xl/lib/jxl/speed_tier_test.cc (limited to 'third_party/jpeg-xl/lib/jxl/speed_tier_test.cc') diff --git a/third_party/jpeg-xl/lib/jxl/speed_tier_test.cc b/third_party/jpeg-xl/lib/jxl/speed_tier_test.cc new file mode 100644 index 0000000000..7874bdc158 --- /dev/null +++ b/third_party/jpeg-xl/lib/jxl/speed_tier_test.cc @@ -0,0 +1,118 @@ +// Copyright (c) the JPEG XL Project Authors. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "lib/extras/dec/jxl.h" +#include "lib/extras/enc/jxl.h" +#include "lib/jxl/enc_params.h" +#include "lib/jxl/test_image.h" +#include "lib/jxl/test_utils.h" +#include "lib/jxl/testing.h" + +namespace jxl { +namespace { + +struct SpeedTierTestParams { + explicit SpeedTierTestParams(const SpeedTier speed_tier, + const bool shrink8 = false) + : speed_tier(speed_tier), shrink8(shrink8) {} + SpeedTier speed_tier; + bool shrink8; +}; + +std::ostream& operator<<(std::ostream& os, SpeedTierTestParams params) { + auto previous_flags = os.flags(); + os << std::boolalpha; + os << "SpeedTierTestParams{" << static_cast(params.speed_tier) + << ", /*shrink8=*/" << params.shrink8 << "}"; + os.flags(previous_flags); + return os; +} + +class SpeedTierTest : public testing::TestWithParam {}; + +JXL_GTEST_INSTANTIATE_TEST_SUITE_P( + SpeedTierTestInstantiation, SpeedTierTest, + testing::Values(SpeedTierTestParams{SpeedTier::kCheetah, + /*shrink8=*/true}, + SpeedTierTestParams{SpeedTier::kCheetah, + /*shrink8=*/false}, + SpeedTierTestParams{SpeedTier::kThunder, + /*shrink8=*/true}, + SpeedTierTestParams{SpeedTier::kThunder, + /*shrink8=*/false}, + SpeedTierTestParams{SpeedTier::kLightning, + /*shrink8=*/true}, + SpeedTierTestParams{SpeedTier::kLightning, + /*shrink8=*/false}, + SpeedTierTestParams{SpeedTier::kFalcon, + /*shrink8=*/true}, + SpeedTierTestParams{SpeedTier::kFalcon, + /*shrink8=*/false}, + SpeedTierTestParams{SpeedTier::kHare, + /*shrink8=*/true}, + SpeedTierTestParams{SpeedTier::kHare, + /*shrink8=*/false}, + SpeedTierTestParams{SpeedTier::kWombat, + /*shrink8=*/true}, + SpeedTierTestParams{SpeedTier::kWombat, + /*shrink8=*/false}, + SpeedTierTestParams{SpeedTier::kSquirrel, + /*shrink8=*/true}, + SpeedTierTestParams{SpeedTier::kSquirrel, + /*shrink8=*/false}, + SpeedTierTestParams{SpeedTier::kKitten, + /*shrink8=*/false}, + // Only downscaled image for Tortoise mode. + SpeedTierTestParams{SpeedTier::kTortoise, + /*shrink8=*/true}, + SpeedTierTestParams{SpeedTier::kGlacier, + /*shrink8=*/true})); + +TEST_P(SpeedTierTest, Roundtrip) { + const SpeedTierTestParams& params = GetParam(); + test::ThreadPoolForTests pool(8); + const std::vector orig = jxl::test::ReadTestData( + "external/wesaturate/500px/u76c0g_bliznaca_srgb8.png"); + test::TestImage t; + t.DecodeFromBytes(orig).ClearMetadata(); + if (params.speed_tier == SpeedTier::kGlacier) { + // just a few pixels will already take enough time at this setting + t.SetDimensions(8, 8); + } else if (params.shrink8) { + t.SetDimensions(t.ppf().xsize() / 8, t.ppf().ysize() / 8); + } + + extras::JXLCompressParams cparams; + cparams.distance = 1.0f; + cparams.allow_expert_options = true; + cparams.AddOption(JXL_ENC_FRAME_SETTING_EFFORT, + 10 - static_cast(params.speed_tier)); + extras::JXLDecompressParams dparams; + dparams.accepted_formats = {{3, JXL_TYPE_UINT16, JXL_LITTLE_ENDIAN, 0}}; + + { + extras::PackedPixelFile ppf_out; + test::Roundtrip(t.ppf(), cparams, dparams, nullptr, &ppf_out); + EXPECT_LE(test::ButteraugliDistance(t.ppf(), ppf_out), 1.6); + } + if (params.shrink8) { + cparams.distance = 0.0f; + extras::PackedPixelFile ppf_out; + test::Roundtrip(t.ppf(), cparams, dparams, nullptr, &ppf_out); + EXPECT_EQ(0.0f, test::ComputeDistance2(t.ppf(), ppf_out)); + } +} +} // namespace +} // namespace jxl -- cgit v1.2.3