1474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/*
2474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *
4474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  Use of this source code is governed by a BSD-style license
5474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  that can be found in the LICENSE file in the root of the source
6474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  tree. An additional intellectual property rights grant can be found
7474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  in the file PATENTS.  All contributing project authors may
8474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *  be found in the AUTHORS file in the root of the source tree.
9474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org */
10474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
11474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
12474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "blockd.h"
13474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
14474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_setup_block_dptrs(MACROBLOCKD *x)
15474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int r, c;
17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    for (r = 0; r < 4; r++)
19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    {
20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        for (c = 0; c < 4; c++)
21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        {
22474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            x->block[r*4+c].predictor = x->predictor + r * 4 * 16 + c * 4;
23474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        }
24474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    }
25474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
26474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    for (r = 0; r < 2; r++)
27474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    {
28474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        for (c = 0; c < 2; c++)
29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        {
30474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            x->block[16+r*2+c].predictor = x->predictor + 256 + r * 4 * 8 + c * 4;
31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        }
33474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    }
34474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    for (r = 0; r < 2; r++)
36474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    {
37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        for (c = 0; c < 2; c++)
38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        {
39474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org            x->block[20+r*2+c].predictor = x->predictor + 320 + r * 4 * 8 + c * 4;
40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
41474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        }
42474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    }
43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
44474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    for (r = 0; r < 25; r++)
45474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    {
46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        x->block[r].qcoeff  = x->qcoeff  + r * 16;
47474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        x->block[r].dqcoeff = x->dqcoeff + r * 16;
48167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org        x->block[r].eob     = x->eobs + r;
49474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    }
50474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
51474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_build_block_doffsets(MACROBLOCKD *x)
53474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
545c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    int block;
55474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
565c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    for (block = 0; block < 16; block++) /* y blocks */
575c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    {
585c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org        x->block[block].offset =
595c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            (block >> 2) * 4 * x->dst.y_stride + (block & 3) * 4;
605c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    }
615c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org
625c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    for (block = 16; block < 20; block++) /* U and V blocks */
635c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    {
645c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org        x->block[block+4].offset =
655c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org        x->block[block].offset =
665c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org            ((block - 16) >> 1) * 4 * x->dst.uv_stride + (block & 1) * 4;
675c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org    }
68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
69