/*------------------------------------------------------------------------------
|
-- --
|
-- This software is confidential and proprietary and may be used --
|
-- only as expressly authorized by a licensing agreement from --
|
-- --
|
-- Rockchip Products . --
|
-- --
|
-- (C) COPYRIGHT 2014 ROCKCHIP PRODUCTS --
|
-- ALL RIGHTS RESERVED --
|
-- --
|
-- The entire notice above must be reproduced --
|
-- on all copies and should not be removed. --
|
-- --
|
--------------------------------------------------------------------------------
|
--
|
-- Description : JPEG decoder header file
|
--
|
------------------------------------------------------------------------------
|
--
|
--
|
--
|
------------------------------------------------------------------------------*/
|
#ifndef __JPEGDECAPI_H__
|
#define __JPEGDECAPI_H__
|
|
#ifdef __cplusplus
|
extern "C"
|
{
|
#endif
|
|
/*------------------------------------------------------------------------------
|
|
Table of contents
|
|
1. Include headers
|
2. External compiler flags
|
3. Module defines
|
4. Local function prototypes
|
5. Functions
|
|
------------------------------------------------------------------------------*/
|
|
/*------------------------------------------------------------------------------
|
1. Include headers
|
------------------------------------------------------------------------------*/
|
#include "vpu_type.h"
|
#include "decapicommon.h"
|
#include "allocator_drm.h"
|
#ifndef DRM_LINUX
|
#include "vpu.h"
|
#include "vpu_api.h"
|
#endif
|
|
/*------------------------------------------------------------------------------
|
2. Module defines
|
------------------------------------------------------------------------------*/
|
#define JPEGDEC_YCbCr400 0x080000U
|
#define JPEGDEC_YCbCr420_SEMIPLANAR 0x020001U
|
#define JPEGDEC_YCbCr422_SEMIPLANAR 0x010001U
|
#define JPEGDEC_YCbCr440 0x010004U
|
#define JPEGDEC_YCbCr411_SEMIPLANAR 0x100000U
|
#define JPEGDEC_YCbCr444_SEMIPLANAR 0x200000U
|
|
#define JPEGDEC_BASELINE 0x0
|
#define JPEGDEC_PROGRESSIVE 0x1
|
#define JPEGDEC_NONINTERLEAVED 0x2
|
|
/*------------------------------------------------------------------------------
|
3. Data types
|
------------------------------------------------------------------------------*/
|
|
typedef void *JpegDecInst;
|
|
typedef enum {
|
JPEGDEC_SLICE_READY = 2,
|
JPEGDEC_FRAME_READY = 1,
|
JPEGDEC_STRM_PROCESSED = 3,
|
JPEGDEC_SCAN_PROCESSED = 4,
|
JPEGDEC_OK = 0,
|
JPEGDEC_ERROR = -1,
|
JPEGDEC_UNSUPPORTED = -2,
|
JPEGDEC_PARAM_ERROR = -3,
|
JPEGDEC_MEMFAIL = -4,
|
JPEGDEC_INITFAIL = -5,
|
JPEGDEC_INVALID_STREAM_LENGTH = -6,
|
JPEGDEC_STRM_ERROR = -7,
|
JPEGDEC_INVALID_INPUT_BUFFER_SIZE = -8,
|
JPEGDEC_HW_RESERVED = -9,
|
JPEGDEC_INCREASE_INPUT_BUFFER = -10,
|
JPEGDEC_SLICE_MODE_UNSUPPORTED = -11,
|
JPEGDEC_DWL_HW_TIMEOUT = -253,
|
JPEGDEC_DWL_ERROR = -254,
|
JPEGDEC_HW_BUS_ERROR = -255,
|
JPEGDEC_SYSTEM_ERROR = -256,
|
|
JPEGDEC_FORMAT_NOT_SUPPORTED = -1000
|
} JpegDecRet;
|
|
enum {
|
JPEGDEC_NO_UNITS = 0, /* No units, X and Y specify
|
* the pixel aspect ratio */
|
JPEGDEC_DOTS_PER_INCH = 1, /* X and Y are dots per inch */
|
JPEGDEC_DOTS_PER_CM = 2 /* X and Y are dots per cm */
|
};
|
|
enum {
|
JPEGDEC_THUMBNAIL_JPEG = 0x10,
|
JPEGDEC_THUMBNAIL_NOT_SUPPORTED_FORMAT = 0x11,
|
JPEGDEC_NO_THUMBNAIL = 0x12
|
};
|
|
enum {
|
JPEGDEC_IMAGE = 0,
|
JPEGDEC_THUMBNAIL = 1
|
};
|
|
typedef struct {
|
RK_U32 *pVirtualAddress;
|
RK_U32 busAddress;
|
} JpegDecLinearMem;
|
|
/* Image information */
|
typedef struct {
|
RK_U32 displayWidth;
|
RK_U32 displayHeight;
|
RK_U32 outputWidth; /* Number of pixels/line in the image */
|
RK_U32 outputHeight; /* Number of lines in in the image */
|
RK_U32 version;
|
RK_U32 units;
|
RK_U32 xDensity;
|
RK_U32 yDensity;
|
RK_U32 outputFormat; /* JPEGDEC_YCbCr400
|
* JPEGDEC_YCbCr420
|
* JPEGDEC_YCbCr422
|
*/
|
RK_U32 codingMode; /* JPEGDEC_BASELINE
|
* JPEGDEC_PROGRESSIVE
|
* JPEGDEC_NONINTERLEAVED
|
*/
|
|
RK_U32 thumbnailType; /* Thumbnail exist or not or not supported */
|
RK_U32 displayWidthThumb;
|
RK_U32 displayHeightThumb;
|
RK_U32 outputWidthThumb; /* Number of pixels/line in the image */
|
RK_U32 outputHeightThumb; /* Number of lines in in the image */
|
RK_U32 outputFormatThumb; /* JPEGDEC_YCbCr400
|
* JPEGDEC_YCbCr420
|
* JPEGDEC_YCbCr422
|
*/
|
RK_U32 codingModeThumb; /* JPEGDEC_BASELINE
|
* JPEGDEC_PROGRESSIVE
|
* JPEGDEC_NONINTERLEAVED
|
*/
|
|
} JpegDecImageInfo;
|
|
/* Decoder input JFIF information */
|
typedef struct {
|
JpegDecLinearMem streamBuffer; /* input stream buffer */
|
RK_U32 streamLength; /* input stream length or buffer size */
|
RK_U32 bufferSize; /* input stream buffer size */
|
RK_U32 decImageType; /* Full image or Thumbnail to be decoded */
|
RK_U32 sliceMbSet; /* slice mode: mcu rows to decode */
|
JpegDecLinearMem pictureBufferY; /* luma output address ==> if user allocated */
|
JpegDecLinearMem pictureBufferCbCr; /* chroma output address ==> if user allocated */
|
JpegDecLinearMem pictureBufferCr; /* chroma output address ==> if user allocated */
|
#ifdef DRM_LINUX
|
MppBufferInfo *pstreamMem;
|
#else
|
VPUMemLinear_t *pstreamMem;
|
#endif
|
} JpegDecInput;
|
|
/* Decoder output */
|
typedef struct {
|
JpegDecLinearMem outputPictureY; /* Pointer to the Luma output image */
|
JpegDecLinearMem outputPictureCbCr; /* Pointer to the Chroma output image */
|
JpegDecLinearMem outputPictureCr; /* Pointer to the Chroma output image */
|
|
} JpegDecOutput;
|
|
typedef struct {
|
RK_U32 major; /* API major version */
|
RK_U32 minor; /* API minor version */
|
|
} JpegDecApiVersion;
|
|
typedef struct {
|
RK_U32 swBuild; /* Software build ID */
|
RK_U32 hwBuild; /* Hardware build ID */
|
DecHwConfig hwConfig; /* hardware supported configuration */
|
|
} JpegDecBuild;
|
|
/*------------------------------------------------------------------------------
|
4. Function prototypes
|
------------------------------------------------------------------------------*/
|
|
/* Version information */
|
JpegDecApiVersion JpegGetAPIVersion(void);
|
|
/* Build information */
|
JpegDecBuild JpegDecGetBuild(void);
|
|
/* Initialization */
|
JpegDecRet JpegDecInit(JpegDecInst * pDecInst, RK_U32 color_conv);
|
|
/* Release */
|
void JpegDecRelease(JpegDecInst decInst);
|
|
/* Get image information of the JFIF */
|
JpegDecRet JpegDecGetImageInfo(JpegDecInst decInst,
|
JpegDecInput * pDecIn,
|
JpegDecImageInfo * pImageInfo);
|
|
/* Decode JFIF */
|
JpegDecRet JpegDecDecode(JpegDecInst decInst,
|
JpegDecInput * pDecIn, JpegDecOutput * pDecOut);
|
|
/*------------------------------------------------------------------------------
|
Prototype of the API trace funtion. Traces all API entries and returns.
|
This must be implemented by the application using the decoder API!
|
Argument:
|
string - trace message, a null terminated string
|
------------------------------------------------------------------------------*/
|
void JpegDecTrace(const char *string);
|
|
#ifdef __cplusplus
|
}
|
#endif
|
|
#endif
|