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// MosaicTypes.h 19e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen// S.O. # : 20e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen// Author(s): zkira 21e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen// $Id: MosaicTypes.h,v 1.15 2011/06/17 13:35:48 mbansal Exp $ 22e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 23e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 24e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen#ifndef MOSAIC_TYPES_H 25e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen#define MOSAIC_TYPES_H 26e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 27e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen#include "ImageUtils.h" 28e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 29e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen/** 30e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * Definition of rectangle in a mosaic. 31e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen */ 32e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chenclass MosaicRect 33e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen{ 34e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen public: 35e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen MosaicRect() 36e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen { 37e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen left = right = top = bottom = 0.0; 38e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen } 39e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 40e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen inline int Width() 41e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen { 42e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen return right - left; 43e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen } 44e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 45e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen inline int Height() 46e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen { 47e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen return bottom - top; 48e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen } 49e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 50e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen /** 51e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * Bounds of the rectangle 52e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen */ 53e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen int left, right, top, bottom; 54e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen}; 55e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 56e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chenclass BlendRect 57e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen{ 58e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen public: 59e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen double lft, rgt, top, bot; 60e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen}; 61e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 62e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen/** 63e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * A frame making up the mosaic. 64e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * Note: Currently assumes a YVU image 65e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * containing separate Y,V, and U planes 66e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * in contiguous memory (in that order). 67e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen */ 68e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chenclass MosaicFrame { 69e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chenpublic: 70e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen ImageType image; 71e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen double trs[3][3]; 72e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen int width, height; 73e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen BlendRect brect; // This frame warped to the Mosaic coordinate system 74e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen BlendRect vcrect; // brect clipped using the voronoi neighbors 75e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen bool internal_allocation; 76e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 77e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen MosaicFrame() { }; 78e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen MosaicFrame(int _width, int _height, bool allocate=true) 79e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen { 80e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen width = _width; 81e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen height = _height; 82e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen internal_allocation = allocate; 83e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen if(internal_allocation) 84e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen image = ImageUtils::allocateImage(width, height, ImageUtils::IMAGE_TYPE_NUM_CHANNELS); 85e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen } 86e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 87e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 88e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen ~MosaicFrame() 89e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen { 90e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen if(internal_allocation) 91e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen if (image) 92e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen free(image); 93e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen } 94e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 95e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen /** 96e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * Get the V plane of the image. 97e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen */ 98e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen inline ImageType getV() 99e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen { 100e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen return (image + (width*height)); 101e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen } 102e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 103e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen /** 104e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * Get the U plane of the image. 105e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen */ 106e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen inline ImageType getU() 107e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen { 108e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen return (image + (width*height*2)); 109e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen } 110e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 111e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen /** 112e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * Get a pixel from the V plane of the image. 113e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen */ 114e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen inline int getV(int y, int x) 115e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen { 116e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen ImageType U = image + (width*height); 117e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen return U[y*width+x]; 118e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen } 119e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 120e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen /** 121e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * Get a pixel from the U plane of the image. 122e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen */ 123e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen inline int getU(int y, int x) 124e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen { 125e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen ImageType U = image + (width*height*2); 126e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen return U[y*width+x]; 127e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen } 128e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 129e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen}; 130e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 131e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen/** 132e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen * Structure for describing a warp. 133e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen */ 134e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chentypedef struct { 135e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen int horizontal; 136e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen double theta; 137e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen double x; 138e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen double y; 139e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen double width; 140e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen double radius; 141e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen double direction; 142e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen double correction; 143e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen int blendRange; 144e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen int blendRangeUV; 145e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen int nlevs; 146e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen int nlevsC; 147e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen int blendingType; 148b28b9c0fa991bc97e8aa11da83d27f71fdfef6dambansal int stripType; 149e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen // Add an overlap to prevent a gap between pictures due to roundoffs 150e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen double roundoffOverlap;// 1.5 151e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 152e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen} BlendParams; 153e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen 154e295e32b68cf04f0d99138bf4a6d25555f3aef99Wei-Ta Chen#endif 155