You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hardware_samsung/exynos5/hal/include/SecJpegEncoder.h

158 lines
5.4 KiB

/*
* 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.
*/
#ifndef __SEC_JPG_ENC_H__
#define __SEC_JPG_ENC_H__
#include "Exif.h"
#include "SecJpegCodecHal.h"
#include <sys/mman.h>
#include "ion.h"
#define JPEG_THUMBNAIL_QUALITY 60
#define EXIF_LIMIT_SIZE 64*1024
//#define JPEG_WA_FOR_PAGEFAULT
#define JPEG_WA_BUFFER_SIZE 64
class SecJpegEncoder {
public :
;
enum ERROR {
ERROR_ALREADY_CREATE = -0x200,
ERROR_CANNOT_CREATE_SEC_JPEG_ENC_HAL,
ERROR_NOT_YET_CREATED,
ERROR_ALREADY_DESTROY,
ERROR_INPUT_DATA_SIZE_TOO_LARGE,
ERROR_OUT_BUFFER_SIZE_TOO_SMALL,
ERROR_EXIFOUT_ALLOC_FAIL,
ERROR_MAKE_EXIF_FAIL,
ERROR_INVALID_SCALING_WIDTH_HEIGHT,
ERROR_CANNOT_CREATE_SEC_THUMB,
ERROR_THUMB_JPEG_SIZE_TOO_SMALL,
ERROR_IMPLEMENT_NOT_YET,
ERROR_JPEG_DEVICE_ALREADY_CREATE = -0x100,
ERROR_CANNOT_OPEN_JPEG_DEVICE,
ERROR_JPEG_DEVICE_ALREADY_CLOSED,
ERROR_JPEG_DEVICE_ALREADY_DESTROY,
ERROR_JPEG_DEVICE_NOT_CREATE_YET,
ERROR_INVALID_COLOR_FORMAT,
ERROR_INVALID_JPEG_FORMAT,
ERROR_JPEG_CONFIG_POINTER_NULL,
ERROR_INVALID_JPEG_CONFIG,
ERROR_IN_BUFFER_CREATE_FAIL,
ERROR_OUT_BUFFER_CREATE_FAIL,
ERROR_EXCUTE_FAIL,
ERROR_JPEG_SIZE_TOO_SMALL,
ERROR_CANNOT_CHANGE_CACHE_SETTING,
ERROR_SIZE_NOT_SET_YET,
ERROR_BUFFR_IS_NULL,
ERROR_BUFFER_TOO_SMALL,
ERROR_GET_SIZE_FAIL,
ERROR_REQBUF_FAIL,
ERROR_INVALID_V4l2_BUF_TYPE = -0x80,
ERROR_MMAP_FAILED,
ERROR_FAIL,
ERROR_NONE = 0
};
SecJpegEncoder();
virtual ~SecJpegEncoder();
bool flagCreate();
int create(void);
int destroy(void);
int setSize(int w, int h);
int setQuality(int quality);
int setColorFormat(int colorFormat);
int setJpegFormat(int jpegFormat);
int updateConfig(void);
char *getInBuf(int *input_size);
char *getOutBuf(int *output_size);
int setInBuf(char *buf, int size);
int setOutBuf(char *buf, int size);
int encode(int *size, exif_attribute_t *exifInfo);
int setThumbnailSize(int w, int h);
int makeExif(unsigned char *exifOut,
exif_attribute_t *exifIn,
unsigned int *size,
bool useMainbufForThumb = false);
private:
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 m_scaleDownYuv422(char *srcBuf, uint32_t srcWidth, uint32_t srcHight,
char *dstBuf, uint32_t dstWidth, uint32_t dstHight);
// thumbnail
int encodeThumbnail(unsigned int *size, bool useMain = true);
int allocJpegIonMemory(ion_client ionClient, ion_buffer *ionBuffer, char **buffer, int size);
void freeJpegIonMemory(ion_client ionClient, ion_buffer *ionBuffer, char **buffer, int size);
bool m_flagCreate;
SecJpegEncoderHal *m_jpegMain;
SecJpegEncoderHal *m_jpegThumb;
char *m_pThumbInputBuffer;
char *m_pThumbOutputBuffer;
#ifdef JPEG_WA_FOR_PAGEFAULT
char *m_pExtInBuf;
char *m_pJpegInputBuffer;
int m_iInBufSize;
#endif // JPEG_WA_FOR_PAGEFAULT
ion_client m_ionJpegClient;
ion_buffer m_ionThumbInBuffer, m_ionThumbOutBuffer;
#ifdef JPEG_WA_FOR_PAGEFAULT
ion_buffer m_ionJpegInBuffer;
#endif // JPEG_WA_FOR_PAGEFAULT
int m_thumbnailW;
int m_thumbnailH;
};
#endif /* __SEC_JPG_ENC_H__ */