tor-browser

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

compressed_icc.cc (2199B)


      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/compressed_icc.h>
      7 
      8 #include "lib/jxl/base/span.h"
      9 #include "lib/jxl/enc_aux_out.h"
     10 #include "lib/jxl/enc_icc_codec.h"
     11 #include "lib/jxl/icc_codec.h"
     12 
     13 JXL_BOOL JxlICCProfileEncode(const JxlMemoryManager* memory_manager,
     14                             const uint8_t* icc, size_t icc_size,
     15                             uint8_t** compressed_icc,
     16                             size_t* compressed_icc_size) {
     17  JxlMemoryManager local_memory_manager;
     18  if (!jxl::MemoryManagerInit(&local_memory_manager, memory_manager)) {
     19    return JXL_FALSE;
     20  }
     21  jxl::BitWriter writer(&local_memory_manager);
     22  JXL_RETURN_IF_ERROR(jxl::WriteICC(jxl::Span<const uint8_t>(icc, icc_size),
     23                                    &writer, jxl::LayerType::Header, nullptr));
     24  writer.ZeroPadToByte();
     25  jxl::Bytes bytes = writer.GetSpan();
     26  *compressed_icc_size = bytes.size();
     27  *compressed_icc = static_cast<uint8_t*>(
     28      jxl::MemoryManagerAlloc(&local_memory_manager, *compressed_icc_size));
     29  memcpy(*compressed_icc, bytes.data(), bytes.size());
     30  return JXL_TRUE;
     31 }
     32 
     33 JXL_BOOL JxlICCProfileDecode(const JxlMemoryManager* memory_manager,
     34                             const uint8_t* compressed_icc,
     35                             size_t compressed_icc_size, uint8_t** icc,
     36                             size_t* icc_size) {
     37  JxlMemoryManager local_memory_manager;
     38  if (!jxl::MemoryManagerInit(&local_memory_manager, memory_manager)) {
     39    return JXL_FALSE;
     40  }
     41  jxl::ICCReader icc_reader(&local_memory_manager);
     42  jxl::PaddedBytes decompressed(&local_memory_manager);
     43  jxl::BitReader bit_reader(
     44      jxl::Span<const uint8_t>(compressed_icc, compressed_icc_size));
     45  JXL_RETURN_IF_ERROR(icc_reader.Init(&bit_reader));
     46  JXL_RETURN_IF_ERROR(icc_reader.Process(&bit_reader, &decompressed));
     47  JXL_RETURN_IF_ERROR(bit_reader.Close());
     48  *icc_size = decompressed.size();
     49  *icc = static_cast<uint8_t*>(
     50      jxl::MemoryManagerAlloc(&local_memory_manager, *icc_size));
     51  memcpy(*icc, decompressed.data(), *icc_size);
     52  return JXL_TRUE;
     53 }