SmartAudio/package/allwinner/tina_multimedia/libcedarc/vdecoder/include/sbmInterface.h

226 lines
5.1 KiB
C
Raw Normal View History

2018-07-13 01:31:50 +00:00
/*
* Copyright (c) 2008-2020 Allwinner Technology Co. Ltd.
* All rights reserved.
*
* File : sbmInterface.h
* Description :
* History :
* Author : wangxiwang <wangxiwang@allwinnertech.com>
* Date : 2017/04/06
* Comment :
*
*
*/
#ifndef __SBM_INTERFACE__
#define __SBM_INTERFACE__
#include "vdecoder.h"
#ifdef __cplusplus
extern "C" {
#endif
#define SBM_LESS_DATA_SIZE (8*1024) //8 kb
typedef struct SbmConfig
{
int bVirFlag;// only for jpeg tile mode create sbm buffer
int nSbmBufferTotalSize;
struct ScMemOpsS * memops;
VeOpsS* veOpsS;
void* pVeOpsSelf;
int bSecureVideoFlag;
}SbmConfig;
#define MAX_FRAME_PIC_NUM (100)
#define DEFAULT_NALU_NUM (32)
#define MAX_FRAME_PTS_LIST_NUM (10)
enum SbmInterfaceType
{
SBM_TYPE_STREAM = 0,
SBM_TYPE_FRAME = 1,
SBM_TYPE_FRAME_AVS = 2,
SBM_TYPE_FRAME_MPEG2 = 3,
SBM_TYPE_FRAME_AVC = 4
};
typedef struct STREAMNALUINFO
{
int nType;
int nNalRefIdc;
char* pDataBuf;
int nDataSize;
}NaluInfo;
typedef struct FRAMEPICINFO
{
NaluInfo* pNaluInfoList;
int nMaxNaluNum;
int nCurNaluIdx;
int nlength;
char* pDataStartAddr;
int64_t nPts;
int64_t nPcr;
int bValidFlag;
int nFrameNaluType;
unsigned int bVideoInfoFlag;
void* pVideoInfo;
}FramePicInfo;
typedef struct FRAMEPICFIFO
{
FramePicInfo* pFramePics;
int nMaxFramePicNum;
int nValidFramePicNum;
int nUnReadFramePicNum;
int nFPReadPos;
int nFPWritePos;
int nFPFlushPos;
}FramePicFifo;
typedef struct STREAMFRAMEFIFO
{
VideoStreamDataInfo* pFrames;
int nMaxFrameNum;
int nValidFrameNum;
int nUnReadFrameNum;
int nReadPos;
int nWritePos;
int nFlushPos;
}StreamFrameFifo;
typedef struct DETECTFRAMEPICINFO
{
VideoStreamDataInfo* pCurStream;
char* pCurStreamDataptr;
int nCurStreamDataSize;
int nCurStreamRebackFlag; // have two truck data buffer
FramePicInfo* pCurFramePic;
int bCurFrameStartCodeFound;
int64_t nCurFramePtsList[MAX_FRAME_PTS_LIST_NUM];
}DetectFramePicInfo;
typedef struct SbmInterface SbmInterface;
struct SbmInterface
{
int (*init)(SbmInterface* pSelf, SbmConfig* pSbmConfig);
void (*destroy)(SbmInterface* pSelf);
void (*reset)(SbmInterface* pSelf);
void* (*getBufferAddress)(SbmInterface* pSelf);
int (*getBufferSize)(SbmInterface* pSelf);
int (*getStreamFrameNum)(SbmInterface* pSelf);
int (*getStreamDataSize)(SbmInterface* pSelf);
int (*requestBuffer)(SbmInterface* pSelf, int nRequireSize, char** ppBuf, int* pBufSize);
int (*addStream)(SbmInterface* pSelf, VideoStreamDataInfo* pDataInfo);
VideoStreamDataInfo* (*requestStream)(SbmInterface* pSelf);
int (*returnStream)(SbmInterface* pSelf, VideoStreamDataInfo* pDataInfo);
int (*flushStream)(SbmInterface* pSelf, VideoStreamDataInfo* pDataInfo);
char* (*getBufferWritePointer)(SbmInterface* pSelf);
void* (*getBufferDataInfo)(SbmInterface* pSelf);
int (*setEos)(SbmInterface* pSelf, int nEosFlag);
int nType;
};
static inline int SbmInit(SbmInterface* pSelf, SbmConfig* pSbmConfig)
{
return pSelf->init(pSelf, pSbmConfig);
}
static inline void SbmDestroy(SbmInterface* pSelf)
{
pSelf->destroy(pSelf);
}
static inline void SbmReset(SbmInterface* pSelf)
{
pSelf->reset(pSelf);
}
static inline void* SbmBufferAddress(SbmInterface* pSelf)
{
return pSelf->getBufferAddress(pSelf);
}
static inline int SbmBufferSize(SbmInterface* pSelf)
{
return pSelf->getBufferSize(pSelf);
}
static inline int SbmStreamFrameNum(SbmInterface* pSelf)
{
return pSelf->getStreamFrameNum(pSelf);
}
static inline int SbmStreamDataSize(SbmInterface* pSelf)
{
return pSelf->getStreamDataSize(pSelf);
}
static inline int SbmRequestBuffer(SbmInterface* pSelf, int nRequireSize,
char** ppBuf, int* pBufSize)
{
return pSelf->requestBuffer(pSelf, nRequireSize, ppBuf, pBufSize);
}
static inline int SbmAddStream(SbmInterface* pSelf, VideoStreamDataInfo* pDataInfo)
{
return pSelf->addStream(pSelf, pDataInfo);
}
static inline VideoStreamDataInfo* SbmRequestStream(SbmInterface* pSelf)
{
return pSelf->requestStream(pSelf);
}
static inline int SbmReturnStream(SbmInterface* pSelf, VideoStreamDataInfo* pDataInfo)
{
return pSelf->returnStream(pSelf, pDataInfo);
}
static inline int SbmFlushStream(SbmInterface* pSelf, VideoStreamDataInfo* pDataInfo)
{
return pSelf->flushStream(pSelf, pDataInfo);
}
static inline char* SbmBufferWritePointer(SbmInterface* pSelf)
{
return pSelf->getBufferWritePointer(pSelf);
}
static inline void* SbmBufferDataInfo(SbmInterface* pSelf)
{
return pSelf->getBufferDataInfo(pSelf);
}
static inline int SbmSetEos(SbmInterface* pSelf, int nEosFlag)
{
return pSelf->setEos(pSelf, nEosFlag);
}
#ifdef __cplusplus
}
#endif
#endif