exynos3: initial commit

Patch Set 2: removed unused files,
as audio, camera and sensors are device specific

Patch Set 3: aries OMX

Patch Set 5: liblight patch for epic

Patch Set 9: liblight(s) is device specific, rmed it from here.

Change-Id: I57a3d5714037836bab441ee5a3e772c260fb21d4
diff --git a/exynos3/s5pc110/libs3cjpeg/JpegEncoder.h b/exynos3/s5pc110/libs3cjpeg/JpegEncoder.h
new file mode 100644
index 0000000..b95b1b1
--- /dev/null
+++ b/exynos3/s5pc110/libs3cjpeg/JpegEncoder.h
@@ -0,0 +1,240 @@
+/*
+ * Copyright Samsung Electronics Co.,LTD.
+ * Copyright (C) 2010 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.
+ *
+ * JPEG DRIVER MODULE (JpegEncoder.h)
+ * Author  : ge.lee       -- initial version
+ * Date    : 03 June 2010
+ * Purpose : This file implements the JPEG encoder APIs as needed by Camera HAL
+ */
+#ifndef __JPG_API_H__
+#define __JPG_API_H__
+
+#include <stdint.h>
+#include <sys/ioctl.h>
+
+#include "Exif.h"
+
+namespace android {
+#define MAX_JPG_WIDTH                   800
+#define MAX_JPG_HEIGHT                  480
+#define MAX_JPG_RESOLUTION              (MAX_JPG_WIDTH * MAX_JPG_HEIGHT)
+
+#define MAX_JPG_THUMBNAIL_WIDTH         320
+#define MAX_JPG_THUMBNAIL_HEIGHT        240
+#define MAX_JPG_THUMBNAIL_RESOLUTION    (MAX_JPG_THUMBNAIL_WIDTH *  \
+                                            MAX_JPG_THUMBNAIL_HEIGHT)
+
+#define MAX_RGB_WIDTH                   800
+#define MAX_RGB_HEIGHT                  480
+#define MAX_RGB_RESOLUTION              (MAX_RGB_WIDTH * MAX_RGB_HEIGHT)
+
+/*******************************************************************************/
+/* define JPG & image memory */
+/* memory area is 4k(PAGE_SIZE) aligned because of VirtualCopyEx() */
+#define JPG_STREAM_BUF_SIZE     \
+        (MAX_JPG_RESOLUTION / PAGE_SIZE + 1) * PAGE_SIZE
+#define JPG_STREAM_THUMB_BUF_SIZE   \
+        (MAX_JPG_THUMBNAIL_RESOLUTION / PAGE_SIZE + 1) * PAGE_SIZE
+#define JPG_FRAME_BUF_SIZE  \
+        ((MAX_JPG_RESOLUTION * 3) / PAGE_SIZE + 1) * PAGE_SIZE
+#define JPG_FRAME_THUMB_BUF_SIZE    \
+        ((MAX_JPG_THUMBNAIL_RESOLUTION * 3) / PAGE_SIZE + 1) * PAGE_SIZE
+#define JPG_RGB_BUF_SIZE    \
+        ((MAX_RGB_RESOLUTION * 4) / PAGE_SIZE + 1) * PAGE_SIZE
+
+#define JPG_TOTAL_BUF_SIZE  (JPG_STREAM_BUF_SIZE + \
+                             JPG_STREAM_THUMB_BUF_SIZE + \
+                             JPG_FRAME_BUF_SIZE + \
+                             JPG_FRAME_THUMB_BUF_SIZE + \
+                             JPG_RGB_BUF_SIZE)
+
+#define JPG_MAIN_START      0x00
+#define JPG_THUMB_START     JPG_STREAM_BUF_SIZE
+#define IMG_MAIN_START      (JPG_STREAM_BUF_SIZE + JPG_STREAM_THUMB_BUF_SIZE)
+#define IMG_THUMB_START     (IMG_MAIN_START + JPG_FRAME_BUF_SIZE)
+/*******************************************************************************/
+
+#define JPG_DRIVER_NAME     "/dev/s3c-jpg"
+
+#define JPEG_IOCTL_MAGIC                'J'
+#define IOCTL_JPG_DECODE                _IO(JPEG_IOCTL_MAGIC, 1)
+#define IOCTL_JPG_ENCODE                _IO(JPEG_IOCTL_MAGIC, 2)
+#define IOCTL_JPG_GET_STRBUF            _IO(JPEG_IOCTL_MAGIC, 3)
+#define IOCTL_JPG_GET_FRMBUF            _IO(JPEG_IOCTL_MAGIC, 4)
+#define IOCTL_JPG_GET_THUMB_STRBUF      _IO(JPEG_IOCTL_MAGIC, 5)
+#define IOCTL_JPG_GET_THUMB_FRMBUF      _IO(JPEG_IOCTL_MAGIC, 6)
+#define IOCTL_JPG_GET_PHY_FRMBUF        _IO(JPEG_IOCTL_MAGIC, 7)
+#define IOCTL_JPG_GET_PHY_THUMB_FRMBUF  _IO(JPEG_IOCTL_MAGIC, 8)
+
+typedef enum {
+    JPEG_SET_ENCODE_WIDTH,
+    JPEG_SET_ENCODE_HEIGHT,
+    JPEG_SET_ENCODE_QUALITY,
+    JPEG_SET_ENCODE_IN_FORMAT,
+    JPEG_SET_SAMPING_MODE,
+    JPEG_SET_THUMBNAIL_WIDTH,
+    JPEG_SET_THUMBNAIL_HEIGHT
+} jpeg_conf;
+
+typedef enum {
+    JPG_FAIL,
+    JPG_SUCCESS,
+    OK_HD_PARSING,
+    ERR_HD_PARSING,
+    OK_ENC_OR_DEC,
+    ERR_ENC_OR_DEC,
+    ERR_UNKNOWN
+} jpg_return_status;
+
+typedef enum {
+    JPG_RGB16,
+    JPG_YCBYCR,
+    JPG_TYPE_UNKNOWN
+} image_type_t;
+
+typedef enum {
+    JPG_444,
+    JPG_422,
+    JPG_420,
+    JPG_400,
+    RESERVED1,
+    RESERVED2,
+    JPG_411,
+    JPG_SAMPLE_UNKNOWN
+} sample_mode_t;
+
+typedef enum {
+    YCBCR_422,
+    YCBCR_420,
+    YCBCR_SAMPLE_UNKNOWN
+} out_mode_t;
+
+typedef enum {
+    JPG_MODESEL_YCBCR = 1,
+    JPG_MODESEL_RGB,
+    JPG_MODESEL_UNKNOWN
+} in_mode_t;
+
+typedef enum {
+    JPG_MAIN,
+    JPG_THUMBNAIL
+} encode_type_t;
+
+typedef enum {
+    JPG_QUALITY_LEVEL_1,        /* high */
+    JPG_QUALITY_LEVEL_2,
+    JPG_QUALITY_LEVEL_3,
+    JPG_QUALITY_LEVEL_4         /* low */
+} image_quality_type_t;
+
+typedef struct {
+    sample_mode_t   sample_mode;
+    encode_type_t   dec_type;
+    out_mode_t      out_format;
+    uint32_t        width;
+    uint32_t        height;
+    uint32_t        data_size;
+    uint32_t        file_size;
+} jpg_dec_proc_param;
+
+typedef struct {
+    sample_mode_t       sample_mode;
+    encode_type_t       enc_type;
+    in_mode_t           in_format;
+    image_quality_type_t quality;
+    uint32_t            width;
+    uint32_t            height;
+    uint32_t            data_size;
+    uint32_t            file_size;
+    uint32_t            set_framebuf;
+} jpg_enc_proc_param;
+
+typedef struct {
+    char    *in_buf;
+    char    *phy_in_buf;
+    int     in_buf_size;
+    char    *out_buf;
+    char    *phy_out_buf;
+    int     out_buf_size;
+    char    *in_thumb_buf;
+    char    *phy_in_thumb_buf;
+    int     in_thumb_buf_size;
+    char    *out_thumb_buf;
+    char    *phy_out_thumb_buf;
+    int     out_thumb_buf_size;
+    char    *mmapped_addr;
+    jpg_dec_proc_param  *dec_param;
+    jpg_enc_proc_param  *enc_param;
+    jpg_enc_proc_param  *thumb_enc_param;
+} jpg_args;
+
+class JpegEncoder {
+public:
+    JpegEncoder();
+    virtual ~JpegEncoder();
+
+    int openHardware();
+    jpg_return_status setConfig(jpeg_conf type, int32_t value);
+    void *getInBuf(uint64_t size);
+    void *getOutBuf(uint64_t *size);
+    void *getThumbInBuf(uint64_t size);
+    void *getThumbOutBuf(uint64_t *size);
+    jpg_return_status encode(unsigned int *size, exif_attribute_t *exifInfo);
+    jpg_return_status encodeThumbImg(unsigned int *size, bool useMain = true);
+    jpg_return_status makeExif(unsigned char *exifOut,
+                               exif_attribute_t *exifIn,
+                               unsigned int *size,
+                               bool useMainbufForThumb = false);
+
+private:
+    jpg_return_status checkMcu(sample_mode_t sampleMode, uint32_t width, uint32_t height, bool isThumb);
+    bool pad(char *srcBuf, uint32_t srcWidth, uint32_t srcHight,
+             char *dstBuf, uint32_t dstWidth, uint32_t dstHight);
+    bool scaleDownYuv422(char *srcBuf, uint32_t srcWidth, uint32_t srcHight,
+                         char *dstBuf, uint32_t dstWidth, uint32_t dstHight);
+
+    inline void writeExifIfd(unsigned char **pCur,
+                                 unsigned short tag,
+                                 unsigned short type,
+                                 unsigned int count,
+                                 uint32_t value);
+    inline void writeExifIfd(unsigned char **pCur,
+                                 unsigned short tag,
+                                 unsigned short type,
+                                 unsigned int count,
+                                 unsigned char *pValue);
+    inline void writeExifIfd(unsigned char **pCur,
+                                 unsigned short tag,
+                                 unsigned short type,
+                                 unsigned int count,
+                                 rational_t *pValue,
+                                 unsigned int *offset,
+                                 unsigned char *start);
+    inline void writeExifIfd(unsigned char **pCur,
+                                 unsigned short tag,
+                                 unsigned short type,
+                                 unsigned int count,
+                                 unsigned char *pValue,
+                                 unsigned int *offset,
+                                 unsigned char *start);
+    int mDevFd;
+    jpg_args mArgs;
+
+    bool available;
+
+};
+};
+#endif /* __JPG_API_H__ */