| /* |
| * Copyright (C) 2011 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /////////////////////////////////////////////////// |
| // MosaicTypes.h |
| // S.O. # : |
| // Author(s): zkira |
| // $Id: MosaicTypes.h,v 1.15 2011/06/17 13:35:48 mbansal Exp $ |
| |
| |
| #ifndef MOSAIC_TYPES_H |
| #define MOSAIC_TYPES_H |
| |
| #include "ImageUtils.h" |
| |
| /** |
| * Definition of rectangle in a mosaic. |
| */ |
| class MosaicRect |
| { |
| public: |
| MosaicRect() |
| { |
| left = right = top = bottom = 0.0; |
| } |
| |
| inline int Width() |
| { |
| return right - left; |
| } |
| |
| inline int Height() |
| { |
| return bottom - top; |
| } |
| |
| /** |
| * Bounds of the rectangle |
| */ |
| int left, right, top, bottom; |
| }; |
| |
| class BlendRect |
| { |
| public: |
| double lft, rgt, top, bot; |
| }; |
| |
| /** |
| * A frame making up the mosaic. |
| * Note: Currently assumes a YVU image |
| * containing separate Y,V, and U planes |
| * in contiguous memory (in that order). |
| */ |
| class MosaicFrame { |
| public: |
| ImageType image; |
| double trs[3][3]; |
| int width, height; |
| BlendRect brect; // This frame warped to the Mosaic coordinate system |
| BlendRect vcrect; // brect clipped using the voronoi neighbors |
| bool internal_allocation; |
| |
| MosaicFrame() { }; |
| MosaicFrame(int _width, int _height, bool allocate=true) |
| { |
| width = _width; |
| height = _height; |
| internal_allocation = allocate; |
| if(internal_allocation) |
| image = ImageUtils::allocateImage(width, height, ImageUtils::IMAGE_TYPE_NUM_CHANNELS); |
| } |
| |
| |
| ~MosaicFrame() |
| { |
| if(internal_allocation) |
| if (image) |
| free(image); |
| } |
| |
| /** |
| * Get the V plane of the image. |
| */ |
| inline ImageType getV() |
| { |
| return (image + (width*height)); |
| } |
| |
| /** |
| * Get the U plane of the image. |
| */ |
| inline ImageType getU() |
| { |
| return (image + (width*height*2)); |
| } |
| |
| /** |
| * Get a pixel from the V plane of the image. |
| */ |
| inline int getV(int y, int x) |
| { |
| ImageType U = image + (width*height); |
| return U[y*width+x]; |
| } |
| |
| /** |
| * Get a pixel from the U plane of the image. |
| */ |
| inline int getU(int y, int x) |
| { |
| ImageType U = image + (width*height*2); |
| return U[y*width+x]; |
| } |
| |
| }; |
| |
| /** |
| * Structure for describing a warp. |
| */ |
| typedef struct { |
| int horizontal; |
| double theta; |
| double x; |
| double y; |
| double width; |
| double radius; |
| double direction; |
| double correction; |
| int blendRange; |
| int blendRangeUV; |
| int nlevs; |
| int nlevsC; |
| int blendingType; |
| int stripType; |
| // Add an overlap to prevent a gap between pictures due to roundoffs |
| double roundoffOverlap;// 1.5 |
| |
| } BlendParams; |
| |
| #endif |