summaryrefslogtreecommitdiffstats
path: root/jni/feature_mos/src/mosaic/ImageUtils.h
diff options
context:
space:
mode:
Diffstat (limited to 'jni/feature_mos/src/mosaic/ImageUtils.h')
-rw-r--r--jni/feature_mos/src/mosaic/ImageUtils.h171
1 files changed, 171 insertions, 0 deletions
diff --git a/jni/feature_mos/src/mosaic/ImageUtils.h b/jni/feature_mos/src/mosaic/ImageUtils.h
new file mode 100644
index 0000000..9a47cc1
--- /dev/null
+++ b/jni/feature_mos/src/mosaic/ImageUtils.h
@@ -0,0 +1,171 @@
+/*
+ * 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.
+ */
+
+///////////////////////////////////////////////////
+// ImageUtils.h
+// $Id: ImageUtils.h,v 1.9 2011/05/16 15:33:06 mbansal Exp $
+
+#ifndef IMAGE_UTILS_H
+#define IMAGE_UTILS_H
+
+#include <stdlib.h>
+
+/**
+ * Definition of basic image types
+ */
+typedef unsigned char ImageTypeBase;
+typedef ImageTypeBase *ImageType;
+
+typedef short ImageTypeShortBase;
+typedef ImageTypeShortBase *ImageTypeShort;
+
+typedef float ImageTypeFloatBase;
+typedef ImageTypeFloatBase *ImageTypeFloat;
+
+
+class ImageUtils {
+public:
+
+ /**
+ * Default number of channels in image.
+ */
+ static const int IMAGE_TYPE_NUM_CHANNELS = 3;
+
+ /**
+ * Definition of an empty image.
+ */
+ static const int IMAGE_TYPE_NOIMAGE = NULL;
+
+ /**
+ * Convert image from BGR (interlaced) to YVU (non-interlaced)
+ *
+ * Arguments:
+ * out: Resulting image (note must be preallocated before
+ * call)
+ * in: Input image
+ * width: Width of input image
+ * height: Height of input image
+ */
+ static void rgb2yvu(ImageType out, ImageType in, int width, int height);
+
+ /**
+ * Convert image from YVU (non-interlaced) to BGR (interlaced)
+ *
+ * Arguments:
+ * out: Resulting image (note must be preallocated before
+ * call)
+ * in: Input image
+ * width: Width of input image
+ * height: Height of input image
+ */
+ static void yvu2rgb(ImageType out, ImageType in, int width, int height);
+ static void yvu2bgr(ImageType out, ImageType in, int width, int height);
+
+ /**
+ * Convert image from BGR to grayscale
+ *
+ * Arguments:
+ * in: Input image
+ * width: Width of input image
+ * height: Height of input image
+ *
+ * Return:
+ * Pointer to resulting image (allocation is done here, free
+ * must be done by caller)
+ */
+ static ImageType rgb2gray(ImageType in, int width, int height);
+ static ImageType rgb2gray(ImageType out, ImageType in, int width, int height);
+
+ /**
+ * Read a binary PPM image
+ */
+ static ImageType readBinaryPPM(const char *filename, int &width, int &height);
+
+ /**
+ * Write a binary PPM image
+ */
+ static void writeBinaryPPM(ImageType image, const char *filename, int width, int height, int numChannels = IMAGE_TYPE_NUM_CHANNELS);
+
+ /**
+ * Allocate space for a standard image.
+ */
+ static ImageType allocateImage(int width, int height, int numChannels, short int border = 0);
+
+ /**
+ * Free memory of image
+ */
+ static void freeImage(ImageType image);
+
+ static ImageType *imageTypeToRowPointers(ImageType out, int width, int height);
+ /**
+ * Get time.
+ */
+ static double getTime();
+
+protected:
+
+ /**
+ * Constants for YVU/RGB conversion
+ */
+ static const int REDY = 257;
+ static const int REDV = 439;
+ static const int REDU = 148;
+ static const int GREENY = 504;
+ static const int GREENV = 368;
+ static const int GREENU = 291;
+ static const int BLUEY = 98;
+ static const int BLUEV = 71;
+ static const int BLUEU = 439;
+
+};
+
+/**
+ * Structure containing an image and other bookkeeping items.
+ * Used in YUVinfo to store separate YVU image planes.
+ */
+typedef struct {
+ ImageType *ptr;
+ unsigned short width;
+ unsigned short height;
+ unsigned short border;
+ unsigned short pitch;
+} BimageInfo;
+
+/**
+ * A YUV image container,
+ */
+class YUVinfo {
+public:
+ static YUVinfo *allocateImage(unsigned short width, unsigned short height);
+ static void mapYUVInfoToImage(YUVinfo *img, unsigned char *position);
+
+ /**
+ * Y Plane
+ */
+ BimageInfo Y;
+
+ /**
+ * V (1st color) plane
+ */
+ BimageInfo V;
+
+ /**
+ * U (1st color) plane
+ */
+ BimageInfo U;
+};
+
+#endif