entropy_coder.h (1515B)
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 #ifndef LIB_JXL_ENTROPY_CODER_H_ 7 #define LIB_JXL_ENTROPY_CODER_H_ 8 9 #include <jxl/memory_manager.h> 10 11 #include <cstddef> 12 #include <cstdint> 13 14 #include "lib/jxl/ac_context.h" 15 #include "lib/jxl/base/compiler_specific.h" 16 #include "lib/jxl/base/status.h" 17 #include "lib/jxl/dec_bit_reader.h" 18 #include "lib/jxl/field_encodings.h" 19 20 // Entropy coding and context modeling of DC and AC coefficients, as well as AC 21 // strategy and quantization field. 22 23 namespace jxl { 24 25 static JXL_INLINE int32_t PredictFromTopAndLeft( 26 const int32_t* const JXL_RESTRICT row_top, 27 const int32_t* const JXL_RESTRICT row, size_t x, int32_t default_val) { 28 if (x == 0) { 29 return row_top == nullptr ? default_val : row_top[x]; 30 } 31 if (row_top == nullptr) { 32 return row[x - 1]; 33 } 34 return (row_top[x] + row[x - 1] + 1) / 2; 35 } 36 37 static constexpr U32Enc kDCThresholdDist(Bits(4), BitsOffset(8, 16), 38 BitsOffset(16, 272), 39 BitsOffset(32, 65808)); 40 41 static constexpr U32Enc kQFThresholdDist(Bits(2), BitsOffset(3, 4), 42 BitsOffset(5, 12), BitsOffset(8, 44)); 43 44 Status DecodeBlockCtxMap(JxlMemoryManager* memory_manager, BitReader* br, 45 BlockCtxMap* block_ctx_map); 46 47 } // namespace jxl 48 49 #endif // LIB_JXL_ENTROPY_CODER_H_