libjxl

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

preview_test.cc (2210B)


      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/cms.h>
      7 
      8 #include <cstddef>
      9 #include <cstdint>
     10 #include <string>
     11 #include <vector>
     12 
     13 #include "lib/extras/codec.h"
     14 #include "lib/jxl/base/span.h"
     15 #include "lib/jxl/codec_in_out.h"
     16 #include "lib/jxl/enc_params.h"
     17 #include "lib/jxl/headers.h"
     18 #include "lib/jxl/image_bundle.h"
     19 #include "lib/jxl/test_utils.h"
     20 #include "lib/jxl/testing.h"
     21 
     22 namespace jxl {
     23 namespace {
     24 using test::ButteraugliDistance;
     25 using test::ReadTestData;
     26 using test::Roundtrip;
     27 
     28 TEST(PreviewTest, RoundtripGivenPreview) {
     29   const std::vector<uint8_t> orig =
     30       ReadTestData("external/wesaturate/500px/u76c0g_bliznaca_srgb8.png");
     31   CodecInOut io;
     32   ASSERT_TRUE(SetFromBytes(Bytes(orig), &io));
     33   io.ShrinkTo(io.xsize() / 8, io.ysize() / 8);
     34   // Same as main image
     35   JXL_ASSIGN_OR_DIE(io.preview_frame, io.Main().Copy());
     36   const size_t preview_xsize = 15;
     37   const size_t preview_ysize = 27;
     38   io.preview_frame.ShrinkTo(preview_xsize, preview_ysize);
     39   io.metadata.m.have_preview = true;
     40   ASSERT_TRUE(io.metadata.m.preview_size.Set(io.preview_frame.xsize(),
     41                                              io.preview_frame.ysize()));
     42 
     43   CompressParams cparams;
     44   cparams.butteraugli_distance = 2.0;
     45   cparams.speed_tier = SpeedTier::kSquirrel;
     46   cparams.SetCms(*JxlGetDefaultCms());
     47 
     48   CodecInOut io2;
     49   JXL_EXPECT_OK(Roundtrip(&io, cparams, {}, &io2, _));
     50   EXPECT_EQ(preview_xsize, io2.metadata.m.preview_size.xsize());
     51   EXPECT_EQ(preview_ysize, io2.metadata.m.preview_size.ysize());
     52   EXPECT_EQ(preview_xsize, io2.preview_frame.xsize());
     53   EXPECT_EQ(preview_ysize, io2.preview_frame.ysize());
     54 
     55   EXPECT_LE(ButteraugliDistance(io.preview_frame, io2.preview_frame,
     56                                 ButteraugliParams(), *JxlGetDefaultCms(),
     57                                 /*distmap=*/nullptr),
     58             2.5);
     59   EXPECT_LE(ButteraugliDistance(io.Main(), io2.Main(), ButteraugliParams(),
     60                                 *JxlGetDefaultCms(),
     61                                 /*distmap=*/nullptr),
     62             2.5);
     63 }
     64 
     65 }  // namespace
     66 }  // namespace jxl