1 /* 2 * Copyright (c) 2012 The WebM project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef VP9_COMMON_VP9_SEG_COMMON_H_ 12 #define VP9_COMMON_VP9_SEG_COMMON_H_ 13 14 #include "vp9/common/vp9_treecoder.h" 15 16 #define SEGMENT_DELTADATA 0 17 #define SEGMENT_ABSDATA 1 18 19 #define MAX_SEGMENTS 8 20 #define SEG_TREE_PROBS (MAX_SEGMENTS-1) 21 22 #define PREDICTION_PROBS 3 23 24 // Segment level features. 25 typedef enum { 26 SEG_LVL_ALT_Q = 0, // Use alternate Quantizer .... 27 SEG_LVL_ALT_LF = 1, // Use alternate loop filter value... 28 SEG_LVL_REF_FRAME = 2, // Optional Segment reference frame 29 SEG_LVL_SKIP = 3, // Optional Segment (0,0) + skip mode 30 SEG_LVL_MAX = 4 // Number of features supported 31 } SEG_LVL_FEATURES; 32 33 34 struct segmentation { 35 uint8_t enabled; 36 uint8_t update_map; 37 uint8_t update_data; 38 uint8_t abs_delta; 39 uint8_t temporal_update; 40 41 vp9_prob tree_probs[SEG_TREE_PROBS]; 42 vp9_prob pred_probs[PREDICTION_PROBS]; 43 44 int16_t feature_data[MAX_SEGMENTS][SEG_LVL_MAX]; 45 unsigned int feature_mask[MAX_SEGMENTS]; 46 }; 47 48 int vp9_segfeature_active(const struct segmentation *seg, 49 int segment_id, 50 SEG_LVL_FEATURES feature_id); 51 52 void vp9_clearall_segfeatures(struct segmentation *seg); 53 54 void vp9_enable_segfeature(struct segmentation *seg, 55 int segment_id, 56 SEG_LVL_FEATURES feature_id); 57 58 void vp9_disable_segfeature(struct segmentation *seg, 59 int segment_id, 60 SEG_LVL_FEATURES feature_id); 61 62 int vp9_seg_feature_data_max(SEG_LVL_FEATURES feature_id); 63 64 int vp9_is_segfeature_signed(SEG_LVL_FEATURES feature_id); 65 66 void vp9_clear_segdata(struct segmentation *seg, 67 int segment_id, 68 SEG_LVL_FEATURES feature_id); 69 70 void vp9_set_segdata(struct segmentation *seg, 71 int segment_id, 72 SEG_LVL_FEATURES feature_id, 73 int seg_data); 74 75 int vp9_get_segdata(const struct segmentation *seg, 76 int segment_id, 77 SEG_LVL_FEATURES feature_id); 78 79 extern const vp9_tree_index vp9_segment_tree[TREE_SIZE(MAX_SEGMENTS)]; 80 81 #endif // VP9_COMMON_VP9_SEG_COMMON_H_ 82 83