123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 |
- /*
- * Copyright (c) 2018, Chips&Media
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- #ifndef JPUHELPER_H_INCLUDED
- #define JPUHELPER_H_INCLUDED
- #ifdef USE_FEEDING_METHOD_BUFFER
- #include "codaj12/jpuapi/jpuapi.h"
- #include "codaj12/sample/helper/jpulog.h"
- #include "codaj12/sample/helper/cnm_fpga.h"
- #include "codaj12/sample/helper/yuv_feeder.h"
- #else
- #include "jpulog.h"
- #include "jpuapi.h"
- #include "cnm_fpga.h"
- #include "yuv_feeder.h"
- #endif
- #define MAX_FILE_PATH 256
- typedef struct {
- Uint32 Format;
- Uint32 Index;
- jpu_buffer_t vbY;
- jpu_buffer_t vbCb;
- jpu_buffer_t vbCr;
- Uint32 strideY;
- Uint32 strideC;
- } FRAME_BUF;
- typedef struct {
- FRAME_BUF frameBuf[MAX_FRAME];
- jpu_buffer_t vb_base;
- int instIndex;
- int last_num;
- int last_addr;
- } fb_context;
- typedef enum {
- FEEDING_METHOD_FIXED_SIZE,
- FEEDING_METHOD_FRAME_SIZE, /*!<< use FFMPEG demuxer */
- #ifdef USE_FEEDING_METHOD_BUFFER
- FEEDING_METHOD_BUFFER,
- #endif
- FEEDING_METHOD_MAX
- } FeedingMethod;
- typedef enum {
- BSWRITER_ES,
- BSWRITER_CONTAINER,
- BSWRITER_MAX
- } BSWriterType;
- typedef struct
- {
- char yuvFileName[MAX_FILE_PATH];
- char bitstreamFileName[MAX_FILE_PATH];
- char huffFileName[MAX_FILE_PATH];
- char qMatFileName[MAX_FILE_PATH];
- char cfgFileName[MAX_FILE_PATH];
- Uint32 picWidth;
- Uint32 picHeight;
- Uint32 mjpgChromaFormat;
- Uint32 mjpgFramerate;
- Uint32 outNum;
- Uint32 StreamEndian;
- Uint32 FrameEndian;
- FrameFormat sourceSubsample;
- CbCrInterLeave chromaInterleave;
- PackedFormat packedFormat;
- Uint32 bEnStuffByte;
- Uint32 encHeaderMode;
- char strCfgDir[MAX_FILE_PATH];
- char strYuvDir[MAX_FILE_PATH];
- Uint32 bsSize;
- Uint32 encQualityPercentage;
- Uint32 tiledModeEnable;
- Uint32 sliceHeight;
- Uint32 sliceInterruptEnable;
- BOOL extendedSequential;
- Uint32 pixelJustification;
- Uint32 rotation;
- JpgMirrorDirection mirror;
- BSWriterType writerType;
- } EncConfigParam;
- typedef struct
- {
- char yuvFileName[MAX_FILE_PATH];
- char bitstreamFileName[MAX_FILE_PATH];
- Uint32 outNum;
- Uint32 checkeos;
- Uint32 StreamEndian;
- Uint32 FrameEndian;
- Uint32 iHorScaleMode;
- Uint32 iVerScaleMode;
- //ROI
- Uint32 roiEnable;
- Uint32 roiWidth;
- Uint32 roiHeight;
- Uint32 roiOffsetX;
- Uint32 roiOffsetY;
- Uint32 roiWidthInMcu;
- Uint32 roiHeightInMcu;
- Uint32 roiOffsetXInMcu;
- Uint32 roiOffsetYInMcu;
- Uint32 rotation;
- JpgMirrorDirection mirror;
- FrameFormat subsample;
- PackedFormat packedFormat;
- CbCrInterLeave cbcrInterleave;
- Uint32 bsSize;
- Uint32 pixelJustification;
- FeedingMethod feedingMode;
- } DecConfigParam;
- typedef struct {
- char SrcFileName[256];
- Uint32 NumFrame;
- Uint32 PicX;
- Uint32 PicY;
- Uint32 FrameRate;
- // MJPEG ONLY
- char HuffTabName[256];
- char QMatTabName[256];
- Uint32 VersionID;
- Uint32 FrmFormat;
- FrameFormat SrcFormat;
- Uint32 RstIntval;
- Uint32 ThumbEnable;
- Uint32 ThumbSizeX;
- Uint32 ThumbSizeY;
- Uint32 prec;
- Uint32 QMatPrec0;
- Uint32 QMatPrec1;
- } ENC_CFG;
- typedef struct {
- Uint32 sourceFormat;
- Uint32 restartInterval;
- BYTE huffBits[4][256];
- BYTE huffVal[4][256];
- short qMatTab[4][64];
- BOOL lumaQ12bit;
- BOOL chromaQ12bit;
- BOOL extendedSequence; /* 12bit JPEG */
- } EncMjpgParam;
- typedef enum {
- JPU_ENCODER,
- JPU_DECODER,
- JPU_NONE,
- } JPUComponentType;
- typedef struct {
- Uint32 numInstances;
- JPUComponentType type[MAX_NUM_INSTANCE];
- union {
- DecConfigParam decConfig;
- EncConfigParam encConfig;
- } u[MAX_NUM_INSTANCE];
- TestDevConfig devConfig;
- } TestMultiConfig;
- typedef enum { YUV444, YUV422, YUV420, NV12, NV21, YUV400, YUYV, YVYU, UYVY, VYUY, YYY, RGB_PLANAR, RGB32, RGB24, RGB16 } yuv2rgb_color_format;
- #if defined (__cplusplus)
- extern "C"{
- #endif
- extern BOOL TestDecoder(DecConfigParam *param);
- extern BOOL TestEncoder(EncConfigParam *param);
- extern int jpgGetHuffTable(char *huffFileName, EncMjpgParam *param, int prec);
- extern int jpgGetQMatrix(char *qMatFileName, EncMjpgParam *param);
- extern int getJpgEncOpenParamDefault(JpgEncOpenParam *pEncOP, EncConfigParam *pEncConfig);
- extern BOOL GetJpgEncOpenParam(JpgEncOpenParam *pEncOP, EncConfigParam *pEncConfig);
- extern int parseJpgCfgFile(ENC_CFG *pEncCfg, char *FileName);
- extern JpgRet ReadJpgBsBufHelper(JpgEncHandle handle,
- FILE *bsFp,
- JpgEncOpenParam *pEncOP,
- JpgEncOutputInfo *pEncOutput);
- extern int LoadYuvImageHelperFormat_V20( int prec, FILE *yuvFp,
- Uint8 *pYuv,
- PhysicalAddress addrY,
- PhysicalAddress addrCb,
- PhysicalAddress addrCr,
- int picWidth,
- int picHeight,
- int stride,
- int interleave,
- int format,
- int endian,
- int packed,
- Uint32 justification);
- extern int SaveYuvImageHelperFormat_V20(
- FILE* yuvFp,
- Uint8* pYuv,
- FrameBuffer* fb,
- CbCrInterLeave interLeave,
- PackedFormat packed,
- Uint32 picWidth,
- Uint32 picHeight,
- Uint32 bitDepth,
- BOOL tiled2Linear
- );
- extern int GetFrameBufSize(int framebufFormat, int picWidth, int picHeight);
- extern void GetMcuUnitSize(int format, int *mcuWidth, int *mcuHeight);
- //DPBBufSize may not same with FrameBufSize due to format convert rounding
- extern int GetDPBBufSize(int framebufFormat, int picWidth, int picHeight, int picWidth_C, int interleave);
- extern BOOL ParseDecTestLongArgs(void* config, const char* argName, char* value);
- extern BOOL ParseEncTestLongArgs(void* config, const char* argName, char* value);
- extern BOOL ParseMultiLongOptions(TestMultiConfig* config, const char* argName, char* value);
- extern BOOL AllocateFrameBuffer(Uint32 instIdx, FrameFormat subsample, CbCrInterLeave cbcrIntlv, PackedFormat packed,
- Uint32 rotation, BOOL scalerOn, Uint32 width, Uint32 height, Uint32 bitDepth, Uint32 num);
- extern void FreeFrameBuffer(int instIdx);
- extern FRAME_BUF *GetFrameBuffer(int instIdx, int index);
- extern int GetFrameBufBase(int instIdx);
- extern int GetFrameBufAllocSize(int instIdx);
- extern FRAME_BUF* FindFrameBuffer(int instIdx, PhysicalAddress addrY);
- /* --------------------------------------------------------------------------
- * BS feeder
- -------------------------------------------------------------------------- */
- typedef struct {
- void* data;
- Uint32 size;
- BOOL eos; //!<< End of stream
- } BSChunk;
- typedef void* BSFeeder;
- extern BSFeeder BitstreamFeeder_Create(const char* path, FeedingMethod method, EndianMode endian);
- extern Uint32 BitstreamFeeder_Act(BSFeeder feeder, JpgDecHandle handle, jpu_buffer_t* bsBuffer);
- extern BOOL BitstreamFeeder_Destroy(BSFeeder feeder);
- extern BOOL BitstreamFeeder_IsEos(BSFeeder feeder);
- /* --------------------------------------------------------------------------
- * BS writer
- -------------------------------------------------------------------------- */
- typedef void* BSWriter;
- typedef struct BitstreamWriterImpl {
- void* context;
- BOOL (*Create)(struct BitstreamWriterImpl* impl, EncConfigParam* config, const char* path);
- Uint32 (*Act)(struct BitstreamWriterImpl* impl, Uint8* es, Uint32 size);
- BOOL (*Destroy)(struct BitstreamWriterImpl* impl);
- } BitstreamWriterImpl;
- extern BSWriter BitstreamWriter_Create(BSWriterType type, EncConfigParam* config, const char* path);
- extern BOOL BitstreamWriter_Act(BSWriter writer, Uint8* es, Uint32 size, BOOL delayedWrite);
- extern void BitstreamWriter_Destroy(BSWriter writer);
- /* --------------------------------------------------------------------------
- * String
- -------------------------------------------------------------------------- */
- extern char* GetFileExtension(const char* filename);
- #if defined (__cplusplus)
- }
- #endif
- #endif /* JPUHELPER_H_INCLUDED */
|