| Index: source/libvpx/vp9/decoder/vp9_detokenize.c
|
| ===================================================================
|
| --- source/libvpx/vp9/decoder/vp9_detokenize.c (revision 207064)
|
| +++ source/libvpx/vp9/decoder/vp9_detokenize.c (working copy)
|
| @@ -8,15 +8,16 @@
|
| * be found in the AUTHORS file in the root of the source tree.
|
| */
|
|
|
| +#include "vpx_mem/vpx_mem.h"
|
| +#include "vpx_ports/mem.h"
|
|
|
| #include "vp9/common/vp9_blockd.h"
|
| #include "vp9/common/vp9_common.h"
|
| -#include "vp9/decoder/vp9_onyxd_int.h"
|
| -#include "vpx_mem/vpx_mem.h"
|
| -#include "vpx_ports/mem.h"
|
| -#include "vp9/decoder/vp9_detokenize.h"
|
| #include "vp9/common/vp9_seg_common.h"
|
|
|
| +#include "vp9/decoder/vp9_detokenize.h"
|
| +#include "vp9/decoder/vp9_onyxd_int.h"
|
| +
|
| #if CONFIG_BALANCED_COEFTREE
|
| #define ZERO_CONTEXT_NODE 0
|
| #define EOB_CONTEXT_NODE 1
|
| @@ -24,6 +25,7 @@
|
| #define EOB_CONTEXT_NODE 0
|
| #define ZERO_CONTEXT_NODE 1
|
| #endif
|
| +
|
| #define ONE_CONTEXT_NODE 2
|
| #define LOW_VAL_CONTEXT_NODE 3
|
| #define TWO_CONTEXT_NODE 4
|
| @@ -89,13 +91,12 @@
|
| val += 1 << bits_count; \
|
| } while (0);
|
|
|
| -static int decode_coefs(VP9D_COMP *dx, const MACROBLOCKD *xd,
|
| +static int decode_coefs(FRAME_CONTEXT *fc, const MACROBLOCKD *xd,
|
| vp9_reader *r, int block_idx,
|
| PLANE_TYPE type, int seg_eob, int16_t *qcoeff_ptr,
|
| TX_SIZE txfm_size, const int16_t *dq,
|
| ENTROPY_CONTEXT *A, ENTROPY_CONTEXT *L) {
|
| ENTROPY_CONTEXT above_ec, left_ec;
|
| - FRAME_CONTEXT *const fc = &dx->common.fc;
|
| int pt, c = 0, pad, default_eob;
|
| int band;
|
| vp9_prob (*coef_probs)[PREV_COEF_CONTEXTS][UNCONSTRAINED_NODES];
|
| @@ -298,10 +299,10 @@
|
|
|
| struct decode_block_args {
|
| VP9D_COMP *pbi;
|
| - MACROBLOCKD *xd;
|
| vp9_reader *r;
|
| int *eobtotal;
|
| };
|
| +
|
| static void decode_block(int plane, int block,
|
| BLOCK_SIZE_TYPE bsize,
|
| int ss_txfrm_size,
|
| @@ -310,42 +311,37 @@
|
| const int bw = b_width_log2(bsize);
|
|
|
| // find the maximum eob for this transform size, adjusted by segment
|
| - MACROBLOCKD *xd = arg->xd;
|
| - const int segment_id = arg->xd->mode_info_context->mbmi.segment_id;
|
| + MACROBLOCKD *xd = &arg->pbi->mb;
|
| + struct macroblockd_plane* pd = &xd->plane[plane];
|
| + const int segment_id = xd->mode_info_context->mbmi.segment_id;
|
| const TX_SIZE ss_tx_size = ss_txfrm_size / 2;
|
| - const int seg_eob = get_eob(arg->xd, segment_id, 16 << ss_txfrm_size);
|
| - int16_t* const qcoeff_base = arg->xd->plane[plane].qcoeff;
|
| + const int seg_eob = get_eob(xd, segment_id, 16 << ss_txfrm_size);
|
| const int off = block >> ss_txfrm_size;
|
| - const int mod = bw - ss_tx_size - arg->xd->plane[plane].subsampling_x;
|
| + const int mod = bw - ss_tx_size - pd->subsampling_x;
|
| const int aoff = (off & ((1 << mod) - 1)) << ss_tx_size;
|
| const int loff = (off >> mod) << ss_tx_size;
|
| - int pt;
|
| - ENTROPY_CONTEXT *A = arg->xd->plane[plane].above_context + aoff;
|
| - ENTROPY_CONTEXT *L = arg->xd->plane[plane].left_context + loff;
|
| - const int eob = decode_coefs(arg->pbi, arg->xd, arg->r, block,
|
| - arg->xd->plane[plane].plane_type, seg_eob,
|
| - BLOCK_OFFSET(qcoeff_base, block, 16),
|
| - ss_tx_size, arg->xd->plane[plane].dequant,
|
| - A,
|
| - L);
|
|
|
| + ENTROPY_CONTEXT *A = pd->above_context + aoff;
|
| + ENTROPY_CONTEXT *L = pd->left_context + loff;
|
| + const int eob = decode_coefs(&arg->pbi->common.fc, xd, arg->r, block,
|
| + pd->plane_type, seg_eob,
|
| + BLOCK_OFFSET(pd->qcoeff, block, 16),
|
| + ss_tx_size, pd->dequant, A, L);
|
| +
|
| if (xd->mb_to_right_edge < 0 || xd->mb_to_bottom_edge < 0) {
|
| set_contexts_on_border(xd, bsize, plane, ss_tx_size, eob, aoff, loff, A, L);
|
| } else {
|
| - for (pt = 0; pt < (1 << ss_tx_size); pt++) {
|
| + int pt;
|
| + for (pt = 0; pt < (1 << ss_tx_size); pt++)
|
| A[pt] = L[pt] = eob > 0;
|
| - }
|
| }
|
| - arg->xd->plane[plane].eobs[block] = eob;
|
| - arg->eobtotal[0] += eob;
|
| + pd->eobs[block] = eob;
|
| + *arg->eobtotal += eob;
|
| }
|
|
|
| -int vp9_decode_tokens(VP9D_COMP* const pbi,
|
| - MACROBLOCKD* const xd,
|
| - vp9_reader *r,
|
| - BLOCK_SIZE_TYPE bsize) {
|
| +int vp9_decode_tokens(VP9D_COMP *pbi, vp9_reader *r, BLOCK_SIZE_TYPE bsize) {
|
| int eobtotal = 0;
|
| - struct decode_block_args args = {pbi, xd, r, &eobtotal};
|
| - foreach_transformed_block(xd, bsize, decode_block, &args);
|
| + struct decode_block_args args = {pbi, r, &eobtotal};
|
| + foreach_transformed_block(&pbi->mb, bsize, decode_block, &args);
|
| return eobtotal;
|
| }
|
|
|