blob: 395ec458655f66cfbc982315e6afd4415e29630d [file] [log] [blame]
/*
* 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