mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 09:06:50 +08:00
[vpu_api]: integrate vpu_mem interface to vpu_api.h
git-svn-id: https://10.10.10.66:8443/svn/MediaProcessPlatform/trunk/mpp@85 6e48237b-75ef-9749-8fc9-41990f28c85a
This commit is contained in:
@@ -35,6 +35,40 @@ typedef enum VPU_API_CMD
|
|||||||
VPU_API_SET_INFO_CHANGE,
|
VPU_API_SET_INFO_CHANGE,
|
||||||
} VPU_API_CMD;
|
} VPU_API_CMD;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
RK_U32 TimeLow;
|
||||||
|
RK_U32 TimeHigh;
|
||||||
|
} TIME_STAMP;
|
||||||
|
|
||||||
|
typedef struct VPUMem {
|
||||||
|
RK_U32 phy_addr;
|
||||||
|
RK_U32 *vir_addr;
|
||||||
|
RK_U32 size;
|
||||||
|
RK_U32 *offset;
|
||||||
|
} VPUMemLinear_t;
|
||||||
|
|
||||||
|
typedef struct tVPU_FRAME
|
||||||
|
{
|
||||||
|
RK_U32 FrameBusAddr[2]; // 0: Y address; 1: UV address;
|
||||||
|
RK_U32 FrameWidth; // buffer horizontal stride
|
||||||
|
RK_U32 FrameHeight; // buffer vertical stride
|
||||||
|
RK_U32 OutputWidth; // deprecated
|
||||||
|
RK_U32 OutputHeight; // deprecated
|
||||||
|
RK_U32 DisplayWidth; // valid width for display
|
||||||
|
RK_U32 DisplayHeight; // valid height for display
|
||||||
|
RK_U32 CodingType;
|
||||||
|
RK_U32 FrameType; // frame; top_field_first; bot_field_first
|
||||||
|
RK_U32 ColorType;
|
||||||
|
RK_U32 DecodeFrmNum;
|
||||||
|
TIME_STAMP ShowTime;
|
||||||
|
RK_U32 ErrorInfo; // error information
|
||||||
|
RK_U32 employ_cnt;
|
||||||
|
VPUMemLinear_t vpumem;
|
||||||
|
struct tVPU_FRAME *next_frame;
|
||||||
|
RK_U32 Res[4];
|
||||||
|
} VPU_FRAME;
|
||||||
|
|
||||||
typedef struct VideoPacket {
|
typedef struct VideoPacket {
|
||||||
RK_S64 pts; /* with unit of us*/
|
RK_S64 pts; /* with unit of us*/
|
||||||
RK_S64 dts; /* with unit of us*/
|
RK_S64 dts; /* with unit of us*/
|
||||||
@@ -261,18 +295,28 @@ RK_S32 vpu_close_context(struct VpuCodecContext **ctx);
|
|||||||
* vpu_mem api
|
* vpu_mem api
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef struct VPUMem {
|
typedef struct vpu_display_mem_pool vpu_display_mem_pool;
|
||||||
RK_U32 phy_addr;
|
|
||||||
RK_U32 *vir_addr;
|
struct vpu_display_mem_pool {
|
||||||
RK_U32 size;
|
int (*commit_hdl)(vpu_display_mem_pool *p, int hdl, int size);
|
||||||
RK_U32 *offset;
|
void* (*get_free)(vpu_display_mem_pool *p);
|
||||||
} VPUMemLinear_t;
|
int (*inc_used)(vpu_display_mem_pool *p, int hdl);
|
||||||
|
int (*put_used)(vpu_display_mem_pool *p, int hdl);
|
||||||
|
int (*reset)(vpu_display_mem_pool *p);
|
||||||
|
int (*get_unused_num)(vpu_display_mem_pool *p);
|
||||||
|
int buff_size;
|
||||||
|
float version;
|
||||||
|
int res[18];
|
||||||
|
};
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* vpu memory handle interface
|
||||||
|
*/
|
||||||
RK_S32 VPUMallocLinear(VPUMemLinear_t *p, RK_U32 size);
|
RK_S32 VPUMallocLinear(VPUMemLinear_t *p, RK_U32 size);
|
||||||
RK_S32 VPUFreeLinear(VPUMemLinear_t *p);
|
RK_S32 VPUFreeLinear(VPUMemLinear_t *p);
|
||||||
RK_S32 VPUMemDuplicate(VPUMemLinear_t *dst, VPUMemLinear_t *src);
|
RK_S32 VPUMemDuplicate(VPUMemLinear_t *dst, VPUMemLinear_t *src);
|
||||||
@@ -281,6 +325,14 @@ RK_S32 VPUMemFlush(VPUMemLinear_t *p);
|
|||||||
RK_S32 VPUMemClean(VPUMemLinear_t *p);
|
RK_S32 VPUMemClean(VPUMemLinear_t *p);
|
||||||
RK_S32 VPUMemInvalidate(VPUMemLinear_t *p);
|
RK_S32 VPUMemInvalidate(VPUMemLinear_t *p);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* vpu memory allocator and manager interface
|
||||||
|
*/
|
||||||
|
vpu_display_mem_pool* open_vpu_memory_pool();
|
||||||
|
void close_vpu_memory_pool(vpu_display_mem_pool *p);
|
||||||
|
int create_vpu_memory_pool_allocator(vpu_display_mem_pool **ipool, int num, int size);
|
||||||
|
void release_vpu_memory_pool_allocator(vpu_display_mem_pool *ipool);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -240,3 +240,59 @@ RK_S32 vpu_close_context(VpuCodecContext **ctx)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RK_S32 VPUMallocLinear(VPUMemLinear_t *p, RK_U32 size)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
RK_S32 VPUFreeLinear(VPUMemLinear_t *p)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
RK_S32 VPUMemDuplicate(VPUMemLinear_t *dst, VPUMemLinear_t *src)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
RK_S32 VPUMemLink(VPUMemLinear_t *p)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
RK_S32 VPUMemFlush(VPUMemLinear_t *p)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
RK_S32 VPUMemClean(VPUMemLinear_t *p)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
RK_S32 VPUMemInvalidate(VPUMemLinear_t *p)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
vpu_display_mem_pool* open_vpu_memory_pool()
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void close_vpu_memory_pool(vpu_display_mem_pool *p)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int create_vpu_memory_pool_allocator(vpu_display_mem_pool **ipool, int num, int size)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void release_vpu_memory_pool_allocator(vpu_display_mem_pool *ipool)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -478,14 +478,13 @@ static RK_S32 vpu_decode_demo(VpuApiDemoCmdContext_t *cmd)
|
|||||||
FILE* pOutFile = NULL;
|
FILE* pOutFile = NULL;
|
||||||
struct VpuCodecContext* ctx = NULL;
|
struct VpuCodecContext* ctx = NULL;
|
||||||
RK_S32 fileSize =0, pkt_size =0;
|
RK_S32 fileSize =0, pkt_size =0;
|
||||||
RK_S32 ret = 0, frame_count = 0;
|
RK_S32 ret = 0;
|
||||||
|
RK_U32 frame_count = 0;
|
||||||
DecoderOut_t decOut;
|
DecoderOut_t decOut;
|
||||||
VideoPacket_t demoPkt;
|
VideoPacket_t demoPkt;
|
||||||
VideoPacket_t* pkt =NULL;
|
VideoPacket_t* pkt =NULL;
|
||||||
DecoderOut_t *pOut = NULL;
|
DecoderOut_t *pOut = NULL;
|
||||||
#if HAVE_VPU_FRME
|
|
||||||
VPU_FRAME *frame = NULL;
|
VPU_FRAME *frame = NULL;
|
||||||
#endif
|
|
||||||
RK_S64 fakeTimeUs =0;
|
RK_S64 fakeTimeUs =0;
|
||||||
RK_U8* pExtra = NULL;
|
RK_U8* pExtra = NULL;
|
||||||
RK_U32 extraSize = 0;
|
RK_U32 extraSize = 0;
|
||||||
@@ -536,13 +535,11 @@ static RK_S32 vpu_decode_demo(VpuApiDemoCmdContext_t *cmd)
|
|||||||
memset(&decOut, 0, sizeof(DecoderOut_t));
|
memset(&decOut, 0, sizeof(DecoderOut_t));
|
||||||
pOut = &decOut;
|
pOut = &decOut;
|
||||||
|
|
||||||
#if HAVE_VPU_FRAME
|
|
||||||
pOut->data = (RK_U8*)(malloc)(sizeof(VPU_FRAME));
|
pOut->data = (RK_U8*)(malloc)(sizeof(VPU_FRAME));
|
||||||
if (pOut->data ==NULL) {
|
if (pOut->data ==NULL) {
|
||||||
DECODE_ERR_RET(ERROR_MEMORY);
|
DECODE_ERR_RET(ERROR_MEMORY);
|
||||||
}
|
}
|
||||||
memset(pOut->data, 0, sizeof(VPU_FRAME));
|
memset(pOut->data, 0, sizeof(VPU_FRAME));
|
||||||
#endif
|
|
||||||
|
|
||||||
ret = vpu_open_context(&ctx);
|
ret = vpu_open_context(&ctx);
|
||||||
if (ret || (ctx ==NULL)) {
|
if (ret || (ctx ==NULL)) {
|
||||||
@@ -641,7 +638,6 @@ static RK_S32 vpu_decode_demo(VpuApiDemoCmdContext_t *cmd)
|
|||||||
** in structure named VPU_FRAME, if you want to use virtual address, make
|
** in structure named VPU_FRAME, if you want to use virtual address, make
|
||||||
** sure you have done VPUMemLink before.
|
** sure you have done VPUMemLink before.
|
||||||
*/
|
*/
|
||||||
#if HAVE_VPU_FRAME
|
|
||||||
if ((pOut->size) && (pOut->data)) {
|
if ((pOut->size) && (pOut->data)) {
|
||||||
VPU_FRAME *frame = (VPU_FRAME *)(pOut->data);
|
VPU_FRAME *frame = (VPU_FRAME *)(pOut->data);
|
||||||
VPUMemLink(&frame->vpumem);
|
VPUMemLink(&frame->vpumem);
|
||||||
@@ -664,9 +660,6 @@ static RK_S32 vpu_decode_demo(VpuApiDemoCmdContext_t *cmd)
|
|||||||
VPUFreeLinear(&frame->vpumem);
|
VPUFreeLinear(&frame->vpumem);
|
||||||
pOut->size = 0;
|
pOut->size = 0;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
(void)frame_count;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
msleep(3);
|
msleep(3);
|
||||||
|
Reference in New Issue
Block a user