/* * Copyright (c) 2016, Alliance for Open Media. All rights reserved. * * This source code is subject to the terms of the BSD 2 Clause License and * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License * was not distributed with this source code in the LICENSE file, you can * obtain it at www.aomedia.org/license/software. If the Alliance for Open * Media Patent License 1.0 was not distributed with this source code in the * PATENTS file, you can obtain it at www.aomedia.org/license/patent. */ #ifndef AOM_AV1_COMMON_ENTROPYMODE_H_ #define AOM_AV1_COMMON_ENTROPYMODE_H_ #include "aom_ports/bitops.h" #include "av1/common/entropy.h" #include "av1/common/entropymv.h" #include "av1/common/filter.h" #include "av1/common/seg_common.h" #ifdef __cplusplus extern "C" { #endif #define BLOCK_SIZE_GROUPS … #define TX_SIZE_CONTEXTS … #define INTER_OFFSET(mode) … #define INTER_COMPOUND_OFFSET(mode) … // Number of possible contexts for a color index. // As can be seen from av1_get_palette_color_index_context(), the possible // contexts are (2,0,0), (2,2,1), (3,2,0), (4,1,0), (5,0,0). These are mapped to // a value from 0 to 4 using 'av1_palette_color_index_context_lookup' table. #define PALETTE_COLOR_INDEX_CONTEXTS … // Palette Y mode context for a block is determined by number of neighboring // blocks (top and/or left) using a palette for Y plane. So, possible Y mode' // context values are: // 0 if neither left nor top block uses palette for Y plane, // 1 if exactly one of left or top block uses palette for Y plane, and // 2 if both left and top blocks use palette for Y plane. #define PALETTE_Y_MODE_CONTEXTS … // Palette UV mode context for a block is determined by whether this block uses // palette for the Y plane. So, possible values are: // 0 if this block doesn't use palette for Y plane. // 1 if this block uses palette for Y plane (i.e. Y palette size > 0). #define PALETTE_UV_MODE_CONTEXTS … // Map the number of pixels in a block size to a context // 64(BLOCK_8X8, BLOCK_4x16, BLOCK_16X4) -> 0 // 128(BLOCK_8X16, BLOCK_16x8) -> 1 // ... // 4096(BLOCK_64X64) -> 6 #define PALATTE_BSIZE_CTXS … #define MAX_COLOR_CONTEXT_HASH … #define NUM_PALETTE_NEIGHBORS … #define KF_MODE_CONTEXTS … struct AV1Common; SCAN_ORDER; FRAME_CONTEXT; static const int av1_ext_tx_ind[EXT_TX_SET_TYPES][TX_TYPES] = …; static const int av1_ext_tx_inv[EXT_TX_SET_TYPES][TX_TYPES] = …; void av1_set_default_ref_deltas(int8_t *ref_deltas); void av1_set_default_mode_deltas(int8_t *mode_deltas); void av1_setup_frame_contexts(struct AV1Common *cm); void av1_setup_past_independence(struct AV1Common *cm); // Returns (int)ceil(log2(n)). static inline int av1_ceil_log2(int n) { … } // Returns the context for palette color index at row 'r' and column 'c', // along with the 'color_order' of neighbors and the 'color_idx'. // The 'color_map' is a 2D array with the given 'stride'. int av1_get_palette_color_index_context(const uint8_t *color_map, int stride, int r, int c, int palette_size, uint8_t *color_order, int *color_idx); extern const int av1_palette_color_index_context_lookup[MAX_COLOR_CONTEXT_HASH + 1]; #ifdef __cplusplus } // extern "C" #endif #endif // AOM_AV1_COMMON_ENTROPYMODE_H_