libjxl

FORK: libjxl patches used on blog
git clone https://git.neptards.moe/blog/libjxl.git
Log | Files | Refs | Submodules | README | LICENSE

speed_tier_test.cc (4692B)


      1 // Copyright (c) the JPEG XL Project Authors. All rights reserved.
      2 //
      3 // Use of this source code is governed by a BSD-style
      4 // license that can be found in the LICENSE file.
      5 
      6 #include <jxl/encode.h>
      7 #include <jxl/types.h>
      8 
      9 #include <cstddef>
     10 #include <cstdint>
     11 #include <ios>
     12 #include <ostream>
     13 #include <string>
     14 #include <vector>
     15 
     16 #include "lib/extras/dec/jxl.h"
     17 #include "lib/extras/enc/jxl.h"
     18 #include "lib/jxl/enc_params.h"
     19 #include "lib/jxl/test_image.h"
     20 #include "lib/jxl/test_utils.h"
     21 #include "lib/jxl/testing.h"
     22 
     23 namespace jxl {
     24 namespace {
     25 
     26 struct SpeedTierTestParams {
     27   explicit SpeedTierTestParams(const SpeedTier speed_tier,
     28                                const bool shrink8 = false)
     29       : speed_tier(speed_tier), shrink8(shrink8) {}
     30   SpeedTier speed_tier;
     31   bool shrink8;
     32 };
     33 
     34 std::ostream& operator<<(std::ostream& os, SpeedTierTestParams params) {
     35   auto previous_flags = os.flags();
     36   os << std::boolalpha;
     37   os << "SpeedTierTestParams{" << static_cast<size_t>(params.speed_tier)
     38      << ", /*shrink8=*/" << params.shrink8 << "}";
     39   os.flags(previous_flags);
     40   return os;
     41 }
     42 
     43 class SpeedTierTest : public testing::TestWithParam<SpeedTierTestParams> {};
     44 
     45 JXL_GTEST_INSTANTIATE_TEST_SUITE_P(
     46     SpeedTierTestInstantiation, SpeedTierTest,
     47     testing::Values(SpeedTierTestParams{SpeedTier::kCheetah,
     48                                         /*shrink8=*/true},
     49                     SpeedTierTestParams{SpeedTier::kCheetah,
     50                                         /*shrink8=*/false},
     51                     SpeedTierTestParams{SpeedTier::kThunder,
     52                                         /*shrink8=*/true},
     53                     SpeedTierTestParams{SpeedTier::kThunder,
     54                                         /*shrink8=*/false},
     55                     SpeedTierTestParams{SpeedTier::kLightning,
     56                                         /*shrink8=*/true},
     57                     SpeedTierTestParams{SpeedTier::kLightning,
     58                                         /*shrink8=*/false},
     59                     SpeedTierTestParams{SpeedTier::kFalcon,
     60                                         /*shrink8=*/true},
     61                     SpeedTierTestParams{SpeedTier::kFalcon,
     62                                         /*shrink8=*/false},
     63                     SpeedTierTestParams{SpeedTier::kHare,
     64                                         /*shrink8=*/true},
     65                     SpeedTierTestParams{SpeedTier::kHare,
     66                                         /*shrink8=*/false},
     67                     SpeedTierTestParams{SpeedTier::kWombat,
     68                                         /*shrink8=*/true},
     69                     SpeedTierTestParams{SpeedTier::kWombat,
     70                                         /*shrink8=*/false},
     71                     SpeedTierTestParams{SpeedTier::kSquirrel,
     72                                         /*shrink8=*/true},
     73                     SpeedTierTestParams{SpeedTier::kSquirrel,
     74                                         /*shrink8=*/false},
     75                     SpeedTierTestParams{SpeedTier::kKitten,
     76                                         /*shrink8=*/false},
     77                     // Only downscaled image for Tortoise mode.
     78                     SpeedTierTestParams{SpeedTier::kTortoise,
     79                                         /*shrink8=*/true},
     80                     SpeedTierTestParams{SpeedTier::kGlacier,
     81                                         /*shrink8=*/true}));
     82 
     83 TEST_P(SpeedTierTest, Roundtrip) {
     84   const SpeedTierTestParams& params = GetParam();
     85   test::ThreadPoolForTests pool(8);
     86   const std::vector<uint8_t> orig = jxl::test::ReadTestData(
     87       "external/wesaturate/500px/u76c0g_bliznaca_srgb8.png");
     88   test::TestImage t;
     89   t.DecodeFromBytes(orig).ClearMetadata();
     90   if (params.speed_tier == SpeedTier::kGlacier) {
     91     // just a few pixels will already take enough time at this setting
     92     t.SetDimensions(8, 8);
     93   } else if (params.shrink8) {
     94     t.SetDimensions(t.ppf().xsize() / 8, t.ppf().ysize() / 8);
     95   }
     96 
     97   extras::JXLCompressParams cparams;
     98   cparams.distance = 1.0f;
     99   cparams.allow_expert_options = true;
    100   cparams.AddOption(JXL_ENC_FRAME_SETTING_EFFORT,
    101                     10 - static_cast<int>(params.speed_tier));
    102   extras::JXLDecompressParams dparams;
    103   dparams.accepted_formats = {{3, JXL_TYPE_UINT16, JXL_LITTLE_ENDIAN, 0}};
    104 
    105   {
    106     extras::PackedPixelFile ppf_out;
    107     test::Roundtrip(t.ppf(), cparams, dparams, nullptr, &ppf_out);
    108     EXPECT_LE(test::ButteraugliDistance(t.ppf(), ppf_out), 2.0);
    109   }
    110   if (params.shrink8) {
    111     cparams.distance = 0.0f;
    112     extras::PackedPixelFile ppf_out;
    113     test::Roundtrip(t.ppf(), cparams, dparams, nullptr, &ppf_out);
    114     EXPECT_EQ(0.0f, test::ComputeDistance2(t.ppf(), ppf_out));
    115   }
    116 }
    117 }  // namespace
    118 }  // namespace jxl