1ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang/* 2ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * Copyright (c) 2012 The WebM project authors. All Rights Reserved. 3ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * 4ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * Use of this source code is governed by a BSD-style license 5ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * that can be found in the LICENSE file in the root of the source 6ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * tree. An additional intellectual property rights grant can be found 7ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * in the file PATENTS. All contributing project authors may 8ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * be found in the AUTHORS file in the root of the source tree. 9ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang */ 10ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 11ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#ifndef VP9_COMMON_VP9_SEG_COMMON_H_ 12ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#define VP9_COMMON_VP9_SEG_COMMON_H_ 13ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#include "vpx_dsp/prob.h" 15b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 16b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifdef __cplusplus 17b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianextern "C" { 18b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif 1991037db265ecdd914a26e056cf69207b4f50924ehkuang 2091037db265ecdd914a26e056cf69207b4f50924ehkuang#define SEGMENT_DELTADATA 0 2191037db265ecdd914a26e056cf69207b4f50924ehkuang#define SEGMENT_ABSDATA 1 2291037db265ecdd914a26e056cf69207b4f50924ehkuang 2391037db265ecdd914a26e056cf69207b4f50924ehkuang#define MAX_SEGMENTS 8 2491037db265ecdd914a26e056cf69207b4f50924ehkuang#define SEG_TREE_PROBS (MAX_SEGMENTS-1) 2591037db265ecdd914a26e056cf69207b4f50924ehkuang 2691037db265ecdd914a26e056cf69207b4f50924ehkuang#define PREDICTION_PROBS 3 2791037db265ecdd914a26e056cf69207b4f50924ehkuang 2891037db265ecdd914a26e056cf69207b4f50924ehkuang// Segment level features. 2991037db265ecdd914a26e056cf69207b4f50924ehkuangtypedef enum { 3091037db265ecdd914a26e056cf69207b4f50924ehkuang SEG_LVL_ALT_Q = 0, // Use alternate Quantizer .... 3191037db265ecdd914a26e056cf69207b4f50924ehkuang SEG_LVL_ALT_LF = 1, // Use alternate loop filter value... 3291037db265ecdd914a26e056cf69207b4f50924ehkuang SEG_LVL_REF_FRAME = 2, // Optional Segment reference frame 3391037db265ecdd914a26e056cf69207b4f50924ehkuang SEG_LVL_SKIP = 3, // Optional Segment (0,0) + skip mode 3491037db265ecdd914a26e056cf69207b4f50924ehkuang SEG_LVL_MAX = 4 // Number of features supported 3591037db265ecdd914a26e056cf69207b4f50924ehkuang} SEG_LVL_FEATURES; 3691037db265ecdd914a26e056cf69207b4f50924ehkuang 3791037db265ecdd914a26e056cf69207b4f50924ehkuang 3891037db265ecdd914a26e056cf69207b4f50924ehkuangstruct segmentation { 3991037db265ecdd914a26e056cf69207b4f50924ehkuang uint8_t enabled; 4091037db265ecdd914a26e056cf69207b4f50924ehkuang uint8_t update_map; 4191037db265ecdd914a26e056cf69207b4f50924ehkuang uint8_t update_data; 4291037db265ecdd914a26e056cf69207b4f50924ehkuang uint8_t abs_delta; 4391037db265ecdd914a26e056cf69207b4f50924ehkuang uint8_t temporal_update; 4491037db265ecdd914a26e056cf69207b4f50924ehkuang 457ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian vpx_prob tree_probs[SEG_TREE_PROBS]; 467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian vpx_prob pred_probs[PREDICTION_PROBS]; 4791037db265ecdd914a26e056cf69207b4f50924ehkuang 4891037db265ecdd914a26e056cf69207b4f50924ehkuang int16_t feature_data[MAX_SEGMENTS][SEG_LVL_MAX]; 4991037db265ecdd914a26e056cf69207b4f50924ehkuang unsigned int feature_mask[MAX_SEGMENTS]; 5091037db265ecdd914a26e056cf69207b4f50924ehkuang}; 5191037db265ecdd914a26e056cf69207b4f50924ehkuang 527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE int segfeature_active(const struct segmentation *seg, 537ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int segment_id, 547ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian SEG_LVL_FEATURES feature_id) { 557ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian return seg->enabled && 567ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (seg->feature_mask[segment_id] & (1 << feature_id)); 577ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 58ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 5991037db265ecdd914a26e056cf69207b4f50924ehkuangvoid vp9_clearall_segfeatures(struct segmentation *seg); 60ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 6191037db265ecdd914a26e056cf69207b4f50924ehkuangvoid vp9_enable_segfeature(struct segmentation *seg, 62ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang int segment_id, 63ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang SEG_LVL_FEATURES feature_id); 64ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 65ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangint vp9_seg_feature_data_max(SEG_LVL_FEATURES feature_id); 66ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 67ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangint vp9_is_segfeature_signed(SEG_LVL_FEATURES feature_id); 68ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 6991037db265ecdd914a26e056cf69207b4f50924ehkuangvoid vp9_set_segdata(struct segmentation *seg, 70ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang int segment_id, 71ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang SEG_LVL_FEATURES feature_id, 72ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang int seg_data); 73ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE int get_segdata(const struct segmentation *seg, int segment_id, 757ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian SEG_LVL_FEATURES feature_id) { 767ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian return seg->feature_data[segment_id][feature_id]; 777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 78ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 797ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianextern const vpx_tree_index vp9_segment_tree[TREE_SIZE(MAX_SEGMENTS)]; 80ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 81b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifdef __cplusplus 82b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian} // extern "C" 83b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif 84b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 85ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#endif // VP9_COMMON_VP9_SEG_COMMON_H_ 86ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 87