tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

preview_test.cc (2460B)


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