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.
157 lines
5.4 KiB
157 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__ */
|
|
|