Home | History | Annotate | Download | only in mosaic
      1 /*
      2  * Copyright (C) 2011 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 ///////////////////////////////////////////////////
     18 // MosaicTypes.h
     19 // S.O. # :
     20 // Author(s): zkira
     21 // $Id: MosaicTypes.h,v 1.15 2011/06/17 13:35:48 mbansal Exp $
     22 
     23 
     24 #ifndef MOSAIC_TYPES_H
     25 #define MOSAIC_TYPES_H
     26 
     27 #include "ImageUtils.h"
     28 
     29 /**
     30  *  Definition of rectangle in a mosaic.
     31  */
     32 class MosaicRect
     33 {
     34     public:
     35         MosaicRect()
     36         {
     37             left = right = top = bottom = 0.0;
     38         }
     39 
     40         inline int Width()
     41         {
     42             return right - left;
     43         }
     44 
     45         inline int Height()
     46         {
     47             return bottom - top;
     48         }
     49 
     50         /**
     51          *  Bounds of the rectangle
     52          */
     53         int left, right, top, bottom;
     54 };
     55 
     56 class BlendRect
     57 {
     58     public:
     59     double lft, rgt, top, bot;
     60 };
     61 
     62 /**
     63  *  A frame making up the mosaic.
     64  *  Note: Currently assumes a YVU image
     65  *  containing separate Y,V, and U planes
     66  *  in contiguous memory (in that order).
     67  */
     68 class MosaicFrame {
     69 public:
     70   ImageType image;
     71   double trs[3][3];
     72   int width, height;
     73   BlendRect brect;  // This frame warped to the Mosaic coordinate system
     74   BlendRect vcrect; // brect clipped using the voronoi neighbors
     75   bool internal_allocation;
     76 
     77   MosaicFrame() { };
     78   MosaicFrame(int _width, int _height, bool allocate=true)
     79   {
     80     width = _width;
     81     height = _height;
     82     internal_allocation = allocate;
     83     if(internal_allocation)
     84         image = ImageUtils::allocateImage(width, height, ImageUtils::IMAGE_TYPE_NUM_CHANNELS);
     85   }
     86 
     87 
     88   ~MosaicFrame()
     89   {
     90     if(internal_allocation)
     91         if (image)
     92         free(image);
     93   }
     94 
     95   /**
     96   *  Get the V plane of the image.
     97   */
     98   inline ImageType getV()
     99   {
    100     return (image + (width*height));
    101   }
    102 
    103   /**
    104   *  Get the U plane of the image.
    105   */
    106   inline ImageType getU()
    107   {
    108     return (image + (width*height*2));
    109   }
    110 
    111   /**
    112   *  Get a pixel from the V plane of the image.
    113   */
    114   inline int getV(int y, int x)
    115   {
    116     ImageType U = image + (width*height);
    117     return U[y*width+x];
    118   }
    119 
    120   /**
    121   *  Get a pixel from the U plane of the image.
    122   */
    123   inline int getU(int y, int x)
    124   {
    125     ImageType U = image + (width*height*2);
    126     return U[y*width+x];
    127   }
    128 
    129 };
    130 
    131 /**
    132  *  Structure for describing a warp.
    133  */
    134 typedef struct {
    135   int horizontal;
    136   double theta;
    137   double x;
    138   double y;
    139   double width;
    140   double radius;
    141   double direction;
    142   double correction;
    143   int blendRange;
    144   int blendRangeUV;
    145   int nlevs;
    146   int nlevsC;
    147   int blendingType;
    148   int stripType;
    149   // Add an overlap to prevent a gap between pictures due to roundoffs
    150   double roundoffOverlap;// 1.5
    151 
    152 } BlendParams;
    153 
    154 #endif
    155