1*fb1b10abSAndroid Build Coastguard Worker /* 2*fb1b10abSAndroid Build Coastguard Worker * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3*fb1b10abSAndroid Build Coastguard Worker * 4*fb1b10abSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*fb1b10abSAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*fb1b10abSAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*fb1b10abSAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*fb1b10abSAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*fb1b10abSAndroid Build Coastguard Worker */ 10*fb1b10abSAndroid Build Coastguard Worker 11*fb1b10abSAndroid Build Coastguard Worker #include "blockd.h" 12*fb1b10abSAndroid Build Coastguard Worker vp8_setup_block_dptrs(MACROBLOCKD * x)13*fb1b10abSAndroid Build Coastguard Workervoid vp8_setup_block_dptrs(MACROBLOCKD *x) { 14*fb1b10abSAndroid Build Coastguard Worker int r, c; 15*fb1b10abSAndroid Build Coastguard Worker 16*fb1b10abSAndroid Build Coastguard Worker for (r = 0; r < 4; ++r) { 17*fb1b10abSAndroid Build Coastguard Worker for (c = 0; c < 4; ++c) { 18*fb1b10abSAndroid Build Coastguard Worker x->block[r * 4 + c].predictor = x->predictor + r * 4 * 16 + c * 4; 19*fb1b10abSAndroid Build Coastguard Worker } 20*fb1b10abSAndroid Build Coastguard Worker } 21*fb1b10abSAndroid Build Coastguard Worker 22*fb1b10abSAndroid Build Coastguard Worker for (r = 0; r < 2; ++r) { 23*fb1b10abSAndroid Build Coastguard Worker for (c = 0; c < 2; ++c) { 24*fb1b10abSAndroid Build Coastguard Worker x->block[16 + r * 2 + c].predictor = 25*fb1b10abSAndroid Build Coastguard Worker x->predictor + 256 + r * 4 * 8 + c * 4; 26*fb1b10abSAndroid Build Coastguard Worker } 27*fb1b10abSAndroid Build Coastguard Worker } 28*fb1b10abSAndroid Build Coastguard Worker 29*fb1b10abSAndroid Build Coastguard Worker for (r = 0; r < 2; ++r) { 30*fb1b10abSAndroid Build Coastguard Worker for (c = 0; c < 2; ++c) { 31*fb1b10abSAndroid Build Coastguard Worker x->block[20 + r * 2 + c].predictor = 32*fb1b10abSAndroid Build Coastguard Worker x->predictor + 320 + r * 4 * 8 + c * 4; 33*fb1b10abSAndroid Build Coastguard Worker } 34*fb1b10abSAndroid Build Coastguard Worker } 35*fb1b10abSAndroid Build Coastguard Worker 36*fb1b10abSAndroid Build Coastguard Worker for (r = 0; r < 25; ++r) { 37*fb1b10abSAndroid Build Coastguard Worker x->block[r].qcoeff = x->qcoeff + r * 16; 38*fb1b10abSAndroid Build Coastguard Worker x->block[r].dqcoeff = x->dqcoeff + r * 16; 39*fb1b10abSAndroid Build Coastguard Worker x->block[r].eob = x->eobs + r; 40*fb1b10abSAndroid Build Coastguard Worker } 41*fb1b10abSAndroid Build Coastguard Worker } 42*fb1b10abSAndroid Build Coastguard Worker vp8_build_block_doffsets(MACROBLOCKD * x)43*fb1b10abSAndroid Build Coastguard Workervoid vp8_build_block_doffsets(MACROBLOCKD *x) { 44*fb1b10abSAndroid Build Coastguard Worker int block; 45*fb1b10abSAndroid Build Coastguard Worker 46*fb1b10abSAndroid Build Coastguard Worker for (block = 0; block < 16; ++block) /* y blocks */ 47*fb1b10abSAndroid Build Coastguard Worker { 48*fb1b10abSAndroid Build Coastguard Worker x->block[block].offset = 49*fb1b10abSAndroid Build Coastguard Worker (block >> 2) * 4 * x->dst.y_stride + (block & 3) * 4; 50*fb1b10abSAndroid Build Coastguard Worker } 51*fb1b10abSAndroid Build Coastguard Worker 52*fb1b10abSAndroid Build Coastguard Worker for (block = 16; block < 20; ++block) /* U and V blocks */ 53*fb1b10abSAndroid Build Coastguard Worker { 54*fb1b10abSAndroid Build Coastguard Worker x->block[block + 4].offset = x->block[block].offset = 55*fb1b10abSAndroid Build Coastguard Worker ((block - 16) >> 1) * 4 * x->dst.uv_stride + (block & 1) * 4; 56*fb1b10abSAndroid Build Coastguard Worker } 57*fb1b10abSAndroid Build Coastguard Worker } 58