summaryrefslogtreecommitdiff
path: root/vp9/decoder
diff options
context:
space:
mode:
authorPaul Wilkins <paulwilkins@google.com>2013-04-24 13:04:45 +0100
committerPaul Wilkins <paulwilkins@google.com>2013-04-24 16:36:47 +0100
commit31ee193a9ccfccef65dad0fba3462b9f83db97fa (patch)
treea2d5f3cfb21c928911173031951c78604f37284c /vp9/decoder
parentc77aff1286df07fb9f3b49feaacf384703813eca (diff)
downloadlibvpx-31ee193a9ccfccef65dad0fba3462b9f83db97fa.tar
libvpx-31ee193a9ccfccef65dad0fba3462b9f83db97fa.tar.gz
libvpx-31ee193a9ccfccef65dad0fba3462b9f83db97fa.tar.bz2
libvpx-31ee193a9ccfccef65dad0fba3462b9f83db97fa.zip
Extension of segmentation to 8 segments.
Also some further simplification following removal of top node code. There is an issue in regards to the shared file vp8cx.h in regard to the roi_map as this interface assumes that there are only 4 segments. I have left the value here as 4 for now meaning that the roi_map interface is broken for VP9. Note that this change would have been easier if I hadn't had to search for hard wire instances of the number 4 and <= 3. Change-Id: Ia8b6deea4be4dbd20deb1656e689dd43a5f190e8
Diffstat (limited to 'vp9/decoder')
-rw-r--r--vp9/decoder/vp9_decodemv.c18
-rw-r--r--vp9/decoder/vp9_decodframe.c2
2 files changed, 17 insertions, 3 deletions
diff --git a/vp9/decoder/vp9_decodemv.c b/vp9/decoder/vp9_decodemv.c
index 801e41a43..5352a0839 100644
--- a/vp9/decoder/vp9_decodemv.c
+++ b/vp9/decoder/vp9_decodemv.c
@@ -75,8 +75,22 @@ static MB_PREDICTION_MODE read_uv_mode(vp9_reader *r, const vp9_prob *p) {
static int read_mb_segid(vp9_reader *r, MACROBLOCKD *xd) {
const vp9_prob *const p = xd->mb_segment_tree_probs;
- return vp9_read(r, p[0]) ? 2 + vp9_read(r, p[2])
- : vp9_read(r, p[1]);
+ int ret_val;
+
+ if (vp9_read(r, p[0])) {
+ if (vp9_read(r, p[4])) {
+ ret_val = 6 + vp9_read(r, p[6]);
+ } else {
+ ret_val = 4 + vp9_read(r, p[5]);
+ }
+ } else {
+ if (vp9_read(r, p[1])) {
+ ret_val = 2 + vp9_read(r, p[3]);
+ } else {
+ ret_val = vp9_read(r, p[2]);
+ }
+ }
+ return ret_val;
}
static void set_segment_id(VP9_COMMON *cm, MB_MODE_INFO *mbmi,
diff --git a/vp9/decoder/vp9_decodframe.c b/vp9/decoder/vp9_decodframe.c
index 2bd200ef7..864eb82fd 100644
--- a/vp9/decoder/vp9_decodframe.c
+++ b/vp9/decoder/vp9_decodframe.c
@@ -1107,7 +1107,7 @@ static void setup_segmentation(VP9_COMMON *pc, MACROBLOCKD *xd, vp9_reader *r) {
xd->allow_implicit_segment_update = vp9_read_bit(r);
#endif
if (xd->update_mb_segmentation_map) {
- for (i = 0; i < MB_FEATURE_TREE_PROBS; i++)
+ for (i = 0; i < MB_SEG_TREE_PROBS; i++)
xd->mb_segment_tree_probs[i] = vp9_read_bit(r) ? vp9_read_prob(r)
: MAX_PROB;