SmartAudio/package/allwinner/liballwinner_tina/liballwinner/LIBRARY/libcedarc/include/vdecoder.h

422 lines
12 KiB
C
Executable File

/*
* Copyright (c) 2008-2016 Allwinner Technology Co. Ltd.
* All rights reserved.
*
* File : vdecoder.h
* Description :
* History :
* Author : xyliu <xyliu@allwinnertech.com>
* Date : 2016/04/13
* Comment :
*
*
*/
#ifndef VDECODER_H
#define VDECODER_H
#include <unistd.h>
#include <stdlib.h>
#include <stdint.h>
#include "typedef.h"
#include <sc_interface.h>
#ifdef __cplusplus
extern "C" {
#endif
enum EVIDEOCODECFORMAT
{
VIDEO_CODEC_FORMAT_UNKNOWN = 0,
VIDEO_CODEC_FORMAT_MJPEG = 0x101,
VIDEO_CODEC_FORMAT_MPEG1 = 0x102,
VIDEO_CODEC_FORMAT_MPEG2 = 0x103,
VIDEO_CODEC_FORMAT_MPEG4 = 0x104,
VIDEO_CODEC_FORMAT_MSMPEG4V1 = 0x105,
VIDEO_CODEC_FORMAT_MSMPEG4V2 = 0x106,
VIDEO_CODEC_FORMAT_DIVX3 = 0x107,
VIDEO_CODEC_FORMAT_DIVX4 = 0x108,
VIDEO_CODEC_FORMAT_DIVX5 = 0x109,
VIDEO_CODEC_FORMAT_XVID = 0x10a,
VIDEO_CODEC_FORMAT_H263 = 0x10b,
VIDEO_CODEC_FORMAT_SORENSSON_H263 = 0x10c,
VIDEO_CODEC_FORMAT_RXG2 = 0x10d,
VIDEO_CODEC_FORMAT_WMV1 = 0x10e,
VIDEO_CODEC_FORMAT_WMV2 = 0x10f,
VIDEO_CODEC_FORMAT_WMV3 = 0x110,
VIDEO_CODEC_FORMAT_VP6 = 0x111,
VIDEO_CODEC_FORMAT_VP8 = 0x112,
VIDEO_CODEC_FORMAT_VP9 = 0x113,
VIDEO_CODEC_FORMAT_RX = 0x114,
VIDEO_CODEC_FORMAT_H264 = 0x115,
VIDEO_CODEC_FORMAT_H265 = 0x116,
VIDEO_CODEC_FORMAT_AVS = 0x117,
VIDEO_CODEC_FORMAT_MAX = VIDEO_CODEC_FORMAT_AVS,
VIDEO_CODEC_FORMAT_MIN = VIDEO_CODEC_FORMAT_MJPEG,
};
enum EPIXELFORMAT
{
PIXEL_FORMAT_DEFAULT = 0,
PIXEL_FORMAT_YUV_PLANER_420 = 1,
PIXEL_FORMAT_YUV_PLANER_422 = 2,
PIXEL_FORMAT_YUV_PLANER_444 = 3,
PIXEL_FORMAT_YV12 = 4,
PIXEL_FORMAT_NV21 = 5,
PIXEL_FORMAT_NV12 = 6,
PIXEL_FORMAT_YUV_MB32_420 = 7,
PIXEL_FORMAT_YUV_MB32_422 = 8,
PIXEL_FORMAT_YUV_MB32_444 = 9,
PIXEL_FORMAT_RGBA = 10,
PIXEL_FORMAT_ARGB = 11,
PIXEL_FORMAT_ABGR = 12,
PIXEL_FORMAT_BGRA = 13,
PIXEL_FORMAT_YUYV = 14,
PIXEL_FORMAT_YVYU = 15,
PIXEL_FORMAT_UYVY = 16,
PIXEL_FORMAT_VYUY = 17,
PIXEL_FORMAT_PLANARUV_422 = 18,
PIXEL_FORMAT_PLANARVU_422 = 19,
PIXEL_FORMAT_PLANARUV_444 = 20,
PIXEL_FORMAT_PLANARVU_444 = 21,
PIXEL_FORMAT_MIN = PIXEL_FORMAT_DEFAULT,
PIXEL_FORMAT_MAX = PIXEL_FORMAT_PLANARVU_444,
};
enum EVDECODERESULT
{
VDECODE_RESULT_UNSUPPORTED = -1,
VDECODE_RESULT_OK = 0,
VDECODE_RESULT_FRAME_DECODED = 1,
VDECODE_RESULT_CONTINUE = 2,
VDECODE_RESULT_KEYFRAME_DECODED = 3,
VDECODE_RESULT_NO_FRAME_BUFFER = 4,
VDECODE_RESULT_NO_BITSTREAM = 5,
VDECODE_RESULT_RESOLUTION_CHANGE = 6,
VDECODE_RESULT_MIN = VDECODE_RESULT_UNSUPPORTED,
VDECODE_RESULT_MAX = VDECODE_RESULT_RESOLUTION_CHANGE,
};
//*for new display
typedef struct FBMBUFINFO
{
int nBufNum;
int nBufWidth;
int nBufHeight;
int ePixelFormat;
int nAlignValue;
int bProgressiveFlag;
int bIsSoftDecoderFlag;
}FbmBufInfo;
typedef struct VIDEOSTREAMINFO
{
int eCodecFormat;
int nWidth;
int nHeight;
int nFrameRate;
int nFrameDuration;
int nAspectRatio;
int bIs3DStream;
int nCodecSpecificDataLen;
char* pCodecSpecificData;
int bSecureStreamFlag;
int bSecureStreamFlagLevel1;
int bIsFramePackage; /* 1: frame package; 0: stream package */
int h265ReferencePictureNum;
int bReOpenEngine;
int bIsFrameCtsTestFlag;
}VideoStreamInfo;
typedef struct VCONFIG
{
int bScaleDownEn;
int bRotationEn;
int bSecOutputEn;
int nHorizonScaleDownRatio;
int nVerticalScaleDownRatio;
int nSecHorizonScaleDownRatio;
int nSecVerticalScaleDownRatio;
int nRotateDegree;
int bThumbnailMode;
int eOutputPixelFormat;
int eSecOutputPixelFormat;
int bNoBFrames;
int bDisable3D;
int bSupportMaf;
int bDispErrorFrame;
int nVbvBufferSize;
int nFrameBufferNum;
int bSecureosEn;
int bGpuBufValid;
int nAlignStride;
int bIsSoftDecoderFlag;
int bVirMallocSbm;
int bSupportPallocBufBeforeDecode;
//only used for xuqi, set this flag to 1 meaning palloc the fbm buffer before
// decode the sequence, to short the first frame decoing time
int nDeInterlaceHoldingFrameBufferNum;
int nDisplayHoldingFrameBufferNum;
int nRotateHoldingFrameBufferNum;
int nDecodeSmoothFrameBufferNum;
int bIsTvStream;
struct ScMemOpsS *memops;
}VConfig;
typedef struct VIDEOSTREAMDATAINFO
{
char* pData;
int nLength;
int64_t nPts;
int64_t nPcr;
int bIsFirstPart;
int bIsLastPart;
int nID;
int nStreamIndex;
int bValid;
unsigned int bVideoInfoFlag;
void* pVideoInfo;
}VideoStreamDataInfo;
typedef struct VIDEOPICTURE
{
int nID;
int nStreamIndex;
int ePixelFormat;
int nWidth;
int nHeight;
int nLineStride;
int nTopOffset;
int nLeftOffset;
int nBottomOffset;
int nRightOffset;
int nFrameRate;
int nAspectRatio;
int bIsProgressive;
int bTopFieldFirst;
int bRepeatTopField;
int64_t nPts;
int64_t nPcr;
char* pData0;
char* pData1;
char* pData2;
char* pData3;
int bMafValid;
char* pMafData;
int nMafFlagStride;
int bPreFrmValid;
int nBufId;
size_addr phyYBufAddr;
size_addr phyCBufAddr;
void* pPrivate;
int nBufStatus;
int bTopFieldError;
int bBottomFieldError;
int nColorPrimary; // default value is 0xffffffff, valid value id 0x0000xxyy
// xx: is video full range code
// yy: is matrix coefficient
}VideoPicture;
typedef struct VIDEOFBMINFO
{
unsigned int nValidBufNum;
void* pFbmFirst;
void* pFbmSecond;
FbmBufInfo pFbmBufInfo;
unsigned int bIs3DStream;
unsigned int bTwoStreamShareOneFbm;
VideoPicture* pMajorDispFrame;
VideoPicture* pMajorDecoderFrame;
unsigned int nMinorYBufOffset;
unsigned int nMinorCBufOffset;
int bIsFrameCtsTestFlag;
int nExtraFbmBufferNum;
int nDecoderNeededMiniFbmNum;
int nDecoderNeededMiniFbmNumSD;
}VideoFbmInfo;
typedef struct JPEGSKIACONFIG
{
int mode_selection;
int filed_alpha;
int imcu_int_minus1;
int region_top;
int region_bot;
int region_left;
int region_right;
int nScaleDownRatio;
void* pFrameBuffer;
void* pInputIndexBuffer;
int nInputIndexSize;
void* pTileVbvBuffer;
int nTileVbvVBufferSize;
}JpegSkiaConfig;
//added by xyliu for set and get the decoder debug command
enum EVDECODERSETPERFORMCMD
{
VDECODE_SETCMD_DEFAULT = 0,
VDECODE_SETCMD_START_CALDROPFRAME = 1,
VDECODE_SETCMD_STOP_CALDROPFRAME = 2,
};
enum EVDECODERGETPERFORMCMD
{
VDECODE_GETCMD_DEFAULT = 0,
VDECODE_GETCMD_DROPFRAME_INFO = 1,
};
typedef struct VID_PERFORMANCE
{
unsigned int nDropFrameNum;
// this variable is valid for VDECODE_GETCMD_DROPFRAME_INFO command
int nFrameDuration;
}VDecodePerformaceInfo;
typedef void* VideoDecoder;
extern void AddVDPlugin(void);
VideoDecoder* CreateVideoDecoder(void);
void DestroyVideoDecoder(VideoDecoder* pDecoder);
int InitializeVideoDecoder(VideoDecoder* pDecoder,
VideoStreamInfo* pVideoInfo,
VConfig* pVconfig);
void ResetVideoDecoder(VideoDecoder* pDecoder);
int DecodeVideoStream(VideoDecoder* pDecoder,
int bEndOfStream,
int bDecodeKeyFrameOnly,
int bDropBFrameIfDelay,
int64_t nCurrentTimeUs);
int DecoderSetSpecialData(VideoDecoder* pDecoder, void *pArg);
int GetVideoStreamInfo(VideoDecoder* pDecoder,
VideoStreamInfo* pVideoInfo);
int RequestVideoStreamBuffer(VideoDecoder* pDecoder,
int nRequireSize,
char** ppBuf,
int* pBufSize,
char** ppRingBuf,
int* pRingBufSize,
int nStreamBufIndex);
int SubmitVideoStreamData(VideoDecoder* pDecoder,
VideoStreamDataInfo* pDataInfo,
int nStreamBufIndex);
int VideoStreamBufferSize(VideoDecoder* pDecoder, int nStreamBufIndex);
int VideoStreamDataSize(VideoDecoder* pDecoder, int nStreamBufIndex);
int VideoStreamFrameNum(VideoDecoder* pDecoder, int nStreamBufIndex);
void* VideoStreamDataInfoPointer(VideoDecoder* pDecoder, int nStreamBufIndex);
VideoPicture* RequestPicture(VideoDecoder* pDecoder, int nStreamIndex);
int ReturnPicture(VideoDecoder* pDecoder, VideoPicture* pPicture);
VideoPicture* NextPictureInfo(VideoDecoder* pDecoder, int nStreamIndex);
int TotalPictureBufferNum(VideoDecoder* pDecoder, int nStreamIndex);
int EmptyPictureBufferNum(VideoDecoder* pDecoder, int nStreamIndex);
int ValidPictureNum(VideoDecoder* pDecoder, int nStreamIndex);
int ConfigHorizonScaleDownRatio(VideoDecoder* pDecoder, int nScaleDownRatio);
int ConfigVerticalScaleDownRatio(VideoDecoder* pDecoder, int nScaleDownRatio);
int ConfigRotation(VideoDecoder* pDecoder, int nRotateDegree);
int ConfigDeinterlace(VideoDecoder* pDecoder, int bDeinterlace);
int ConfigThumbnailMode(VideoDecoder* pDecoder, int bOpenThumbnailMode);
int ConfigOutputPicturePixelFormat(VideoDecoder* pDecoder, int ePixelFormat);
int ConfigNoBFrames(VideoDecoder* pDecoder, int bNoBFrames);
int ConfigDisable3D(VideoDecoder* pDecoder, int bDisable3D);
int ConfigVeMemoryThresh(VideoDecoder* pDecoder, int nMemoryThresh);
int ReopenVideoEngine(VideoDecoder* pDecoder,
VConfig* pVConfig,
VideoStreamInfo* pStreamInfo);
int RotatePicture(struct ScMemOpsS* memOps,
VideoPicture* pPictureIn,
VideoPicture* pPictureOut,
int nRotateDegree,
int nGpuYAlign,
int nGpuCAlign);
int RotatePictureHw(VideoDecoder* pDecoder,
VideoPicture* pPictureIn,
VideoPicture* pPictureOut,
int nRotateDegree);
VideoPicture* AllocatePictureBuffer(struct ScMemOpsS* memOps,
int nWidth,
int nHeight,
int nLineStride,
int ePixelFormat);
int FreePictureBuffer(struct ScMemOpsS* memOps,
VideoPicture* pPicture);
char* VideoRequestSecureBuffer(VideoDecoder* pDecoder,
int nBufferSize);
void VideoReleaseSecureBuffer(VideoDecoder* pDecoder,
char* pBuf);
VideoPicture* ReturnRelasePicture(VideoDecoder* pDecoder,
VideoPicture* pVpicture,
int bForbidUseFlag);
VideoPicture* RequestReleasePicture(VideoDecoder* pDecoder);
int SetVideoFbmBufRelease(VideoDecoder* pDecoder);
VideoPicture* SetVideoFbmBufAddress(VideoDecoder* pDecoder,
VideoPicture* pVideoPicture,
int bForbidUseFlag);
FbmBufInfo* GetVideoFbmBufInfo(VideoDecoder* pDecoder);
int DecoderSendToDisplayPictureNum(VideoDecoder* pDecoder,
int nStreamIndex);
int ConfigExtraScaleInfo(VideoDecoder* pDecoder,
int nWidthTh,
int nHeightTh,
int nHorizonScaleRatio,
int nVerticalScaleRatio);
int SetDecodePerformCmd(VideoDecoder* pDecoder,
enum EVDECODERSETPERFORMCMD performCmd);
int GetDecodePerformInfo(VideoDecoder* pDecoder,
enum EVDECODERGETPERFORMCMD performCmd,
VDecodePerformaceInfo** performInfo);
#ifdef __cplusplus
}
#endif
#endif