1e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen/* 2e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * Copyright (C) 2011 The Android Open Source Project 3e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * 4e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * Licensed under the Apache License, Version 2.0 (the "License"); 5e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * you may not use this file except in compliance with the License. 6e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * You may obtain a copy of the License at 7e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * 8e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * http://www.apache.org/licenses/LICENSE-2.0 9e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * 10e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * Unless required by applicable law or agreed to in writing, software 11e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * distributed under the License is distributed on an "AS IS" BASIS, 12e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * See the License for the specific language governing permissions and 14e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * limitations under the License. 15e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen */ 16e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 17e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen/////////////////////////////////////////////////////////// 18e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen// Interp.h 19e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen// $Id: Interp.h,v 1.2 2011/06/17 13:35:48 mbansal Exp $ 20e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 21e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen#ifndef INTERP_H 22e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen#define INTERP_H 23e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 24e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen#include "Pyramid.h" 25e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 26e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen#define CTAPS 40 27e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chenstatic double ciTable[81] = { 28e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 1, 0.998461, 0.993938, 0.98657, 0.9765, 29e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 0.963867, 0.948813, 0.931477, 0.912, 0.890523, 30e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 0.867188, 0.842133, 0.8155, 0.78743, 0.758062, 31e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 0.727539, 0.696, 0.663586, 0.630437, 0.596695, 32e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 0.5625, 0.527992, 0.493312, 0.458602, 0.424, 33e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 0.389648, 0.355687, 0.322258, 0.2895, 0.257555, 34e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 0.226562, 0.196664, 0.168, 0.140711, 0.114937, 35e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 0.0908203, 0.0685, 0.0481172, 0.0298125, 0.0137266, 36e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 0, -0.0118828, -0.0225625, -0.0320859, -0.0405, 37e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen -0.0478516, -0.0541875, -0.0595547, -0.064, -0.0675703, 38e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen -0.0703125, -0.0722734, -0.0735, -0.0740391, -0.0739375, 39e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen -0.0732422, -0.072, -0.0702578, -0.0680625, -0.0654609, 40e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen -0.0625, -0.0592266, -0.0556875, -0.0519297, -0.048, 41e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen -0.0439453, -0.0398125, -0.0356484, -0.0315, -0.0274141, 42e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen -0.0234375, -0.0196172, -0.016, -0.0126328, -0.0095625, 43e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen -0.00683594, -0.0045, -0.00260156, -0.0011875, -0.000304687, 0.0 44e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen}; 45e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 46e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Cheninline double ciCalc(PyramidShort *img, int xi, int yi, double xfrac, double yfrac) 47e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen{ 48e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen double tmpf[4]; 49e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 50e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen // Interpolate using 16 points 51e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen ImageTypeShortBase *in = img->ptr[yi-1] + xi - 1; 52e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen int off = (int)(xfrac * CTAPS); 53e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 54e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen tmpf[0] = in[0] * ciTable[off + 40]; 55e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen tmpf[0] += in[1] * ciTable[off]; 56e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen tmpf[0] += in[2] * ciTable[40 - off]; 57e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen tmpf[0] += in[3] * ciTable[80 - off]; 58e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen in += img->pitch; 59e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen tmpf[1] = in[0] * ciTable[off + 40]; 60e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen tmpf[1] += in[1] * ciTable[off]; 61e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen tmpf[1] += in[2] * ciTable[40 - off]; 62e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen tmpf[1] += in[3] * ciTable[80 - off]; 63e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen in += img->pitch; 64e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen tmpf[2] = in[0] * ciTable[off + 40]; 65e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen tmpf[2] += in[1] * ciTable[off]; 66e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen tmpf[2] += in[2] * ciTable[40 - off]; 67e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen tmpf[2] += in[3] * ciTable[80 - off]; 68e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen in += img->pitch; 69e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen tmpf[3] = in[0] * ciTable[off + 40]; 70e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen tmpf[3] += in[1] * ciTable[off]; 71e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen tmpf[3] += in[2] * ciTable[40 - off]; 72e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen tmpf[3] += in[3] * ciTable[80 - off]; 73e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 74e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen // this is the final interpolation 75e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen off = (int)(yfrac * CTAPS); 76e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen return (ciTable[off + 40] * tmpf[0] + ciTable[off] * tmpf[1] + 77e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen ciTable[40 - off] * tmpf[2] + ciTable[80 - off] * tmpf[3]); 78e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen} 79e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 80e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen#endif 81