Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/third_party/jpeg-xl/lib/jxl/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 4 kB image not shown  

Quelle  icc_codec_common.h   Sprache: C

 
// 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.

#ifndef LIB_JXL_ICC_CODEC_COMMON_H_
#define LIB_JXL_ICC_CODEC_COMMON_H_

// Compressed representation of ICC profiles.

#include <array>
#include <cstddef>
#include <cstdint>

#include "lib/jxl/base/status.h"

namespace jxl {

class PaddedBytes;

static constexpr size_t kICCHeaderSize = 128;

typedef std::array<uint8_t, 4> Tag;

static const Tag kAcspTag = {{'a''c''s''p'}};
static const Tag kBkptTag = {{'b''k''p''t'}};
static const Tag kBtrcTag = {{'b''T''R''C'}};
static const Tag kBxyzTag = {{'b''X''Y''Z'}};
static const Tag kChadTag = {{'c''h''a''d'}};
static const Tag kChrmTag = {{'c''h''r''m'}};
static const Tag kCprtTag = {{'c''p''r''t'}};
static const Tag kCurvTag = {{'c''u''r''v'}};
static const Tag kDescTag = {{'d''e''s''c'}};
static const Tag kDmddTag = {{'d''m''d''d'}};
static const Tag kDmndTag = {{'d''m''n''d'}};
static const Tag kGbd_Tag = {{'g''b''d'' '}};
static const Tag kGtrcTag = {{'g''T''R''C'}};
static const Tag kGxyzTag = {{'g''X''Y''Z'}};
static const Tag kKtrcTag = {{'k''T''R''C'}};
static const Tag kKxyzTag = {{'k''X''Y''Z'}};
static const Tag kLumiTag = {{'l''u''m''i'}};
static const Tag kMab_Tag = {{'m''A''B'' '}};
static const Tag kMba_Tag = {{'m''B''A'' '}};
static const Tag kMlucTag = {{'m''l''u''c'}};
static const Tag kMntrTag = {{'m''n''t''r'}};
static const Tag kParaTag = {{'p''a''r''a'}};
static const Tag kRgb_Tag = {{'R''G''B'' '}};
static const Tag kRtrcTag = {{'r''T''R''C'}};
static const Tag kRxyzTag = {{'r''X''Y''Z'}};
static const Tag kSf32Tag = {{'s''f''3''2'}};
static const Tag kTextTag = {{'t''e''x''t'}};
static const Tag kVcgtTag = {{'v''c''g''t'}};
static const Tag kWtptTag = {{'w''t''p''t'}};
static const Tag kXyz_Tag = {{'X''Y''Z'' '}};

// Tag names focused on RGB and GRAY monitor profiles
static constexpr size_t kNumTagStrings = 17;
static constexpr const Tag* kTagStrings[kNumTagStrings] = {
    &kCprtTag, &kWtptTag, &kBkptTag, &kRxyzTag, &kGxyzTag, &kBxyzTag,
    &kKxyzTag, &kRtrcTag, &kGtrcTag, &kBtrcTag, &kKtrcTag, &kChadTag,
    &kDescTag, &kChrmTag, &kDmndTag, &kDmddTag, &kLumiTag};

static constexpr size_t kCommandTagUnknown = 1;
static constexpr size_t kCommandTagTRC = 2;
static constexpr size_t kCommandTagXYZ = 3;
static constexpr size_t kCommandTagStringFirst = 4;

// Tag types focused on RGB and GRAY monitor profiles
static constexpr size_t kNumTypeStrings = 8;
static constexpr const Tag* kTypeStrings[kNumTypeStrings] = {
    &kXyz_Tag, &kDescTag, &kTextTag, &kMlucTag,
    &kParaTag, &kCurvTag, &kSf32Tag, &kGbd_Tag};

static constexpr size_t kCommandInsert = 1;
static constexpr size_t kCommandShuffle2 = 2;
static constexpr size_t kCommandShuffle4 = 3;
static constexpr size_t kCommandPredict = 4;
static constexpr size_t kCommandXYZ = 10;
static constexpr size_t kCommandTypeStartFirst = 16;

static constexpr size_t kFlagBitOffset = 64;
static constexpr size_t kFlagBitSize = 128;

static constexpr size_t kNumICCContexts = 41;

uint32_t DecodeUint32(const uint8_t* data, size_t size, size_t pos);
Status AppendUint32(uint32_t value, PaddedBytes* data);
Tag DecodeKeyword(const uint8_t* data, size_t size, size_t pos);
void EncodeKeyword(const Tag& keyword, uint8_t* data, size_t size, size_t pos);
Status AppendKeyword(const Tag& keyword, PaddedBytes* data);

// Checks if a + b > size, taking possible integer overflow into account.
Status CheckOutOfBounds(uint64_t a, uint64_t b, uint64_t size);
Status CheckIs32Bit(uint64_t v);

std::array<uint8_t, kICCHeaderSize> ICCInitialHeaderPrediction(uint32_t size);
void ICCPredictHeader(const uint8_t* icc, size_t size, uint8_t* header,
                      size_t pos);
uint8_t LinearPredictICCValue(const uint8_t* data, size_t start, size_t i,
                              size_t stride, size_t width, int order);
size_t ICCANSContext(size_t i, size_t b1, size_t b2);

}  // namespace jxl

#endif  // LIB_JXL_ICC_CODEC_COMMON_H_

Messung V0.5
C=93 H=93 G=92

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.