~ubuntu-branches/ubuntu/vivid/gstreamer-vaapi/vivid

« back to all changes in this revision

Viewing changes to ext/libvpx/upstream/vp9/common/vp9_seg_common.c

  • Committer: Package Import Robot
  • Author(s): Vincent Cheng
  • Date: 2014-08-06 23:56:00 UTC
  • mfrom: (0.1.4 sid) (1.1.3)
  • Revision ID: package-import@ubuntu.com-20140806235600-fg1kcmiu67k315q5
Tags: 0.5.9-2
* Remove spurious build-deps: libva-drm1, libavcodec-dev. (Closes: #757283)
* Drop Build-Depends-Indep and build docs unconditionally on all archs.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *  Copyright (c) 2010 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
#include <assert.h>
 
12
 
 
13
#include "vp9/common/vp9_blockd.h"
 
14
#include "vp9/common/vp9_loopfilter.h"
 
15
#include "vp9/common/vp9_seg_common.h"
 
16
#include "vp9/common/vp9_quant_common.h"
 
17
 
 
18
static const int seg_feature_data_signed[SEG_LVL_MAX] = { 1, 1, 0, 0 };
 
19
 
 
20
static const int seg_feature_data_max[SEG_LVL_MAX] = {
 
21
  MAXQ, MAX_LOOP_FILTER, 3, 0 };
 
22
 
 
23
// These functions provide access to new segment level features.
 
24
// Eventually these function may be "optimized out" but for the moment,
 
25
// the coding mechanism is still subject to change so these provide a
 
26
// convenient single point of change.
 
27
 
 
28
int vp9_segfeature_active(const struct segmentation *seg, int segment_id,
 
29
                          SEG_LVL_FEATURES feature_id) {
 
30
  return seg->enabled &&
 
31
         (seg->feature_mask[segment_id] & (1 << feature_id));
 
32
}
 
33
 
 
34
void vp9_clearall_segfeatures(struct segmentation *seg) {
 
35
  vp9_zero(seg->feature_data);
 
36
  vp9_zero(seg->feature_mask);
 
37
}
 
38
 
 
39
void vp9_enable_segfeature(struct segmentation *seg, int segment_id,
 
40
                           SEG_LVL_FEATURES feature_id) {
 
41
  seg->feature_mask[segment_id] |= 1 << feature_id;
 
42
}
 
43
 
 
44
void vp9_disable_segfeature(struct segmentation *seg, int segment_id,
 
45
                            SEG_LVL_FEATURES feature_id) {
 
46
  seg->feature_mask[segment_id] &= ~(1 << feature_id);
 
47
}
 
48
 
 
49
int vp9_seg_feature_data_max(SEG_LVL_FEATURES feature_id) {
 
50
  return seg_feature_data_max[feature_id];
 
51
}
 
52
 
 
53
int vp9_is_segfeature_signed(SEG_LVL_FEATURES feature_id) {
 
54
  return seg_feature_data_signed[feature_id];
 
55
}
 
56
 
 
57
void vp9_clear_segdata(struct segmentation *seg, int segment_id,
 
58
                       SEG_LVL_FEATURES feature_id) {
 
59
  seg->feature_data[segment_id][feature_id] = 0;
 
60
}
 
61
 
 
62
void vp9_set_segdata(struct segmentation *seg, int segment_id,
 
63
                     SEG_LVL_FEATURES feature_id, int seg_data) {
 
64
  assert(seg_data <= seg_feature_data_max[feature_id]);
 
65
  if (seg_data < 0) {
 
66
    assert(seg_feature_data_signed[feature_id]);
 
67
    assert(-seg_data <= seg_feature_data_max[feature_id]);
 
68
  }
 
69
 
 
70
  seg->feature_data[segment_id][feature_id] = seg_data;
 
71
}
 
72
 
 
73
int vp9_get_segdata(const struct segmentation *seg, int segment_id,
 
74
                    SEG_LVL_FEATURES feature_id) {
 
75
  return seg->feature_data[segment_id][feature_id];
 
76
}
 
77
 
 
78
 
 
79
const vp9_tree_index vp9_segment_tree[TREE_SIZE(MAX_SEGMENTS)] = {
 
80
  2,  4,  6,  8, 10, 12,
 
81
  0, -1, -2, -3, -4, -5, -6, -7
 
82
};
 
83
 
 
84
 
 
85
// TBD? Functions to read and write segment data with range / validity checking