diff options
Diffstat (limited to 'third_party/aom/av1/common/seg_common.h')
-rw-r--r-- | third_party/aom/av1/common/seg_common.h | 60 |
1 files changed, 27 insertions, 33 deletions
diff --git a/third_party/aom/av1/common/seg_common.h b/third_party/aom/av1/common/seg_common.h index 6d16aedb6..c851d65fd 100644 --- a/third_party/aom/av1/common/seg_common.h +++ b/third_party/aom/av1/common/seg_common.h @@ -18,15 +18,12 @@ extern "C" { #endif -#define SEGMENT_DELTADATA 0 -#define SEGMENT_ABSDATA 1 - #define MAX_SEGMENTS 8 #define SEG_TREE_PROBS (MAX_SEGMENTS - 1) -#define PREDICTION_PROBS 3 +#define SEG_TEMPORAL_PRED_CTXS 3 +#define SPATIAL_PREDICTION_PROBS 3 -#if CONFIG_LOOPFILTER_LEVEL typedef enum { SEG_LVL_ALT_Q, // Use alternate Quantizer .... SEG_LVL_ALT_LF_Y_V, // Use alternate loop filter value on y plane vertical @@ -35,47 +32,31 @@ typedef enum { SEG_LVL_ALT_LF_V, // Use alternate loop filter value on v plane SEG_LVL_REF_FRAME, // Optional Segment reference frame SEG_LVL_SKIP, // Optional Segment (0,0) + skip mode -#if CONFIG_SEGMENT_ZEROMV - SEG_LVL_ZEROMV, - SEG_LVL_MAX -#else + SEG_LVL_GLOBALMV, SEG_LVL_MAX -#endif -} SEG_LVL_FEATURES; -#else // CONFIG_LOOPFILTER_LEVEL -// Segment level features. -typedef enum { - SEG_LVL_ALT_Q = 0, // Use alternate Quantizer .... - SEG_LVL_ALT_LF = 1, // Use alternate loop filter value... - SEG_LVL_REF_FRAME = 2, // Optional Segment reference frame - SEG_LVL_SKIP = 3, // Optional Segment (0,0) + skip mode -#if CONFIG_SEGMENT_ZEROMV - SEG_LVL_ZEROMV = 4, - SEG_LVL_MAX = 5 -#else - SEG_LVL_MAX = 4 -#endif } SEG_LVL_FEATURES; -#endif // CONFIG_LOOPFILTER_LEVEL struct segmentation { uint8_t enabled; uint8_t update_map; uint8_t update_data; - uint8_t abs_delta; uint8_t temporal_update; int16_t feature_data[MAX_SEGMENTS][SEG_LVL_MAX]; unsigned int feature_mask[MAX_SEGMENTS]; + int last_active_segid; // The highest numbered segment id that has some + // enabled feature. + uint8_t segid_preskip; // Whether the segment id will be read before the + // skip syntax element. + // 1: the segment id will be read first. + // 0: the skip syntax element will be read first. }; struct segmentation_probs { - aom_prob tree_probs[SEG_TREE_PROBS]; aom_cdf_prob tree_cdf[CDF_SIZE(MAX_SEGMENTS)]; - aom_prob pred_probs[PREDICTION_PROBS]; -#if CONFIG_NEW_MULTISYMBOL - aom_cdf_prob pred_cdf[PREDICTION_PROBS][CDF_SIZE(2)]; -#endif + aom_cdf_prob pred_cdf[SEG_TEMPORAL_PRED_CTXS][CDF_SIZE(2)]; + aom_cdf_prob spatial_pred_seg_cdf[SPATIAL_PREDICTION_PROBS] + [CDF_SIZE(MAX_SEGMENTS)]; }; static INLINE int segfeature_active(const struct segmentation *seg, @@ -84,11 +65,26 @@ static INLINE int segfeature_active(const struct segmentation *seg, return seg->enabled && (seg->feature_mask[segment_id] & (1 << feature_id)); } +static INLINE void segfeatures_copy(struct segmentation *dst, + const struct segmentation *src) { + int i, j; + for (i = 0; i < MAX_SEGMENTS; i++) { + dst->feature_mask[i] = src->feature_mask[i]; + for (j = 0; j < SEG_LVL_MAX; j++) { + dst->feature_data[i][j] = src->feature_data[i][j]; + } + } + dst->segid_preskip = src->segid_preskip; + dst->last_active_segid = src->last_active_segid; +} + void av1_clearall_segfeatures(struct segmentation *seg); void av1_enable_segfeature(struct segmentation *seg, int segment_id, SEG_LVL_FEATURES feature_id); +void calculate_segdata(struct segmentation *seg); + int av1_seg_feature_data_max(SEG_LVL_FEATURES feature_id); int av1_is_segfeature_signed(SEG_LVL_FEATURES feature_id); @@ -101,8 +97,6 @@ static INLINE int get_segdata(const struct segmentation *seg, int segment_id, return seg->feature_data[segment_id][feature_id]; } -extern const aom_tree_index av1_segment_tree[TREE_SIZE(MAX_SEGMENTS)]; - #ifdef __cplusplus } // extern "C" #endif |