summaryrefslogtreecommitdiffstats
path: root/third_party/aom/av1/common/cfl.h
diff options
context:
space:
mode:
authortrav90 <travawine@palemoon.org>2018-10-17 05:59:08 -0500
committertrav90 <travawine@palemoon.org>2018-10-17 05:59:08 -0500
commitdf9477dfa60ebb5d31bc142e58ce46535c17abce (patch)
treec4fdd5d1b09d08c0514f208246260fc87372cb56 /third_party/aom/av1/common/cfl.h
parent0cc51bc106250988cc3b89cb5d743a5af52cd35a (diff)
downloadUXP-df9477dfa60ebb5d31bc142e58ce46535c17abce.tar
UXP-df9477dfa60ebb5d31bc142e58ce46535c17abce.tar.gz
UXP-df9477dfa60ebb5d31bc142e58ce46535c17abce.tar.lz
UXP-df9477dfa60ebb5d31bc142e58ce46535c17abce.tar.xz
UXP-df9477dfa60ebb5d31bc142e58ce46535c17abce.zip
Update aom to slightly newer commit ID
Diffstat (limited to 'third_party/aom/av1/common/cfl.h')
-rw-r--r--third_party/aom/av1/common/cfl.h41
1 files changed, 38 insertions, 3 deletions
diff --git a/third_party/aom/av1/common/cfl.h b/third_party/aom/av1/common/cfl.h
index 371df70be..c6b72a4d8 100644
--- a/third_party/aom/av1/common/cfl.h
+++ b/third_party/aom/av1/common/cfl.h
@@ -12,6 +12,8 @@
#ifndef AV1_COMMON_CFL_H_
#define AV1_COMMON_CFL_H_
+#include <assert.h>
+
#include "av1/common/enums.h"
// Forward declaration of AV1_COMMON, in order to avoid creating a cyclic
@@ -33,20 +35,53 @@ typedef struct {
int subsampling_x, subsampling_y;
// CfL Performs its own block level DC_PRED for each chromatic plane
- int dc_pred[CFL_PRED_PLANES];
+ double dc_pred[CFL_PRED_PLANES];
+
+ // The rate associated with each alpha codeword
+ int costs[CFL_ALPHABET_SIZE];
+
+ // Count the number of TX blocks in a predicted block to know when you are at
+ // the last one, so you can check for skips.
+ // TODO(any) Is there a better way to do this?
+ int num_tx_blk[CFL_PRED_PLANES];
} CFL_CTX;
+static const double cfl_alpha_mags[CFL_MAGS_SIZE] = {
+ 0., 0.125, -0.125, 0.25, -0.25, 0.5, -0.5
+};
+
+static const int cfl_alpha_codes[CFL_ALPHABET_SIZE][CFL_PRED_PLANES] = {
+ // barrbrain's simple 1D quant ordered by subset 3 likelihood
+ { 0, 0 }, { 1, 1 }, { 3, 0 }, { 3, 1 }, { 1, 0 }, { 3, 3 },
+ { 0, 1 }, { 5, 5 }, { 5, 3 }, { 1, 3 }, { 5, 3 }, { 3, 5 },
+ { 0, 3 }, { 5, 1 }, { 1, 5 }, { 0, 5 }
+};
+
void cfl_init(CFL_CTX *cfl, AV1_COMMON *cm, int subsampling_x,
int subsampling_y);
void cfl_dc_pred(MACROBLOCKD *xd, BLOCK_SIZE plane_bsize, TX_SIZE tx_size);
+static INLINE double cfl_idx_to_alpha(int alpha_idx, CFL_SIGN_TYPE alpha_sign,
+ CFL_PRED_TYPE pred_type) {
+ const int mag_idx = cfl_alpha_codes[alpha_idx][pred_type];
+ const double abs_alpha = cfl_alpha_mags[mag_idx];
+ if (alpha_sign == CFL_SIGN_POS) {
+ return abs_alpha;
+ } else {
+ assert(abs_alpha != 0.0);
+ assert(cfl_alpha_mags[mag_idx + 1] == -abs_alpha);
+ return -abs_alpha;
+ }
+}
+
void cfl_predict_block(const CFL_CTX *cfl, uint8_t *dst, int dst_stride,
- int row, int col, TX_SIZE tx_size, int dc_pred);
+ int row, int col, TX_SIZE tx_size, double dc_pred,
+ double alpha);
void cfl_store(CFL_CTX *cfl, const uint8_t *input, int input_stride, int row,
int col, TX_SIZE tx_size);
double cfl_load(const CFL_CTX *cfl, uint8_t *output, int output_stride, int row,
- int col, TX_SIZE tx_size);
+ int col, int width, int height);
#endif // AV1_COMMON_CFL_H_