Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(934)

Unified Diff: source/libvpx/vp9/encoder/vp9_context_tree.c

Issue 290653003: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: source/libvpx/vp9/encoder/vp9_context_tree.c
===================================================================
--- source/libvpx/vp9/encoder/vp9_context_tree.c (revision 271012)
+++ source/libvpx/vp9/encoder/vp9_context_tree.c (working copy)
@@ -8,14 +8,13 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-
#include "vp9/encoder/vp9_context_tree.h"
static const BLOCK_SIZE square[] = {
- BLOCK_8X8,
- BLOCK_16X16,
- BLOCK_32X32,
- BLOCK_64X64,
+ BLOCK_8X8,
+ BLOCK_16X16,
+ BLOCK_32X32,
+ BLOCK_64X64,
};
static void alloc_mode_context(VP9_COMMON *cm, int num_4x4_blk,
@@ -62,25 +61,27 @@
}
}
}
-static void free_tree_contexts(PC_TREE *this_pc) {
- free_mode_context(&this_pc->none);
- free_mode_context(&this_pc->horizontal[0]);
- free_mode_context(&this_pc->horizontal[1]);
- free_mode_context(&this_pc->vertical[0]);
- free_mode_context(&this_pc->vertical[1]);
-}
-static void alloc_tree_contexts(VP9_COMMON *cm, PC_TREE *this_pc,
+
+static void alloc_tree_contexts(VP9_COMMON *cm, PC_TREE *tree,
int num_4x4_blk) {
- alloc_mode_context(cm, num_4x4_blk, &this_pc->none);
- alloc_mode_context(cm, num_4x4_blk/2, &this_pc->horizontal[0]);
- alloc_mode_context(cm, num_4x4_blk/2, &this_pc->vertical[0]);
+ alloc_mode_context(cm, num_4x4_blk, &tree->none);
+ alloc_mode_context(cm, num_4x4_blk/2, &tree->horizontal[0]);
+ alloc_mode_context(cm, num_4x4_blk/2, &tree->vertical[0]);
/* TODO(Jbb): for 4x8 and 8x4 these allocated values are not used.
* Figure out a better way to do this. */
- alloc_mode_context(cm, num_4x4_blk/2, &this_pc->horizontal[1]);
- alloc_mode_context(cm, num_4x4_blk/2, &this_pc->vertical[1]);
+ alloc_mode_context(cm, num_4x4_blk/2, &tree->horizontal[1]);
+ alloc_mode_context(cm, num_4x4_blk/2, &tree->vertical[1]);
}
+static void free_tree_contexts(PC_TREE *tree) {
+ free_mode_context(&tree->none);
+ free_mode_context(&tree->horizontal[0]);
+ free_mode_context(&tree->horizontal[1]);
+ free_mode_context(&tree->vertical[0]);
+ free_mode_context(&tree->vertical[1]);
+}
+
// This function sets up a tree of contexts such that at each square
// partition level. There are contexts for none, horizontal, vertical, and
// split. Along with a block_size value and a selected block_size which
@@ -97,9 +98,9 @@
vpx_free(x->leaf_tree);
CHECK_MEM_ERROR(cm, x->leaf_tree, vpx_calloc(leaf_nodes,
- sizeof(PICK_MODE_CONTEXT)));
+ sizeof(*x->leaf_tree)));
vpx_free(x->pc_tree);
- CHECK_MEM_ERROR(cm, x->pc_tree, vpx_calloc(tree_nodes, sizeof(PC_TREE)));
+ CHECK_MEM_ERROR(cm, x->pc_tree, vpx_calloc(tree_nodes, sizeof(*x->pc_tree)));
this_pc = &x->pc_tree[0];
this_leaf = &x->leaf_tree[0];
@@ -111,45 +112,45 @@
// Sets up all the leaf nodes in the tree.
for (pc_tree_index = 0; pc_tree_index < leaf_nodes; ++pc_tree_index) {
- x->pc_tree[pc_tree_index].block_size = square[0];
- alloc_tree_contexts(cm, &x->pc_tree[pc_tree_index], 4);
- x->pc_tree[pc_tree_index].leaf_split[0] = this_leaf++;
- for (j = 1; j < 4; j++) {
- x->pc_tree[pc_tree_index].leaf_split[j] =
- x->pc_tree[pc_tree_index].leaf_split[0];
- }
+ PC_TREE *const tree = &x->pc_tree[pc_tree_index];
+ tree->block_size = square[0];
+ alloc_tree_contexts(cm, tree, 4);
+ tree->leaf_split[0] = this_leaf++;
+ for (j = 1; j < 4; j++)
+ tree->leaf_split[j] = tree->leaf_split[0];
}
// Each node has 4 leaf nodes, fill each block_size level of the tree
// from leafs to the root.
- for (nodes = 16; nodes > 0; nodes >>= 2, ++square_index) {
- for (i = 0; i < nodes; ++pc_tree_index, ++i) {
- alloc_tree_contexts(cm, &x->pc_tree[pc_tree_index],
- 4 << (2 * square_index));
- x->pc_tree[pc_tree_index].block_size = square[square_index];
- for (j = 0; j < 4; j++) {
- x->pc_tree[pc_tree_index].split[j] = this_pc++;
- }
+ for (nodes = 16; nodes > 0; nodes >>= 2) {
+ for (i = 0; i < nodes; ++i) {
+ PC_TREE *const tree = &x->pc_tree[pc_tree_index];
+ alloc_tree_contexts(cm, tree, 4 << (2 * square_index));
+ tree->block_size = square[square_index];
+ for (j = 0; j < 4; j++)
+ tree->split[j] = this_pc++;
+ ++pc_tree_index;
}
+ ++square_index;
}
- x->pc_root = &x->pc_tree[tree_nodes-1];
+ x->pc_root = &x->pc_tree[tree_nodes - 1];
x->pc_root[0].none.best_mode_index = 2;
}
-void vp9_free_pc_tree(MACROBLOCK *m) {
+void vp9_free_pc_tree(MACROBLOCK *x) {
const int tree_nodes = 64 + 16 + 4 + 1;
int i;
// Set up all 4x4 mode contexts
for (i = 0; i < 64; ++i)
- free_mode_context(&m->leaf_tree[i]);
+ free_mode_context(&x->leaf_tree[i]);
// Sets up all the leaf nodes in the tree.
- for (i = 0; i < tree_nodes; i++) {
- free_tree_contexts(&m->pc_tree[i]);
- }
- vpx_free(m->pc_tree);
- m->pc_tree = 0;
- vpx_free(m->leaf_tree);
- m->leaf_tree = 0;
+ for (i = 0; i < tree_nodes; ++i)
+ free_tree_contexts(&x->pc_tree[i]);
+
+ vpx_free(x->pc_tree);
+ x->pc_tree = NULL;
+ vpx_free(x->leaf_tree);
+ x->leaf_tree = NULL;
}

Powered by Google App Engine
This is Rietveld 408576698