From c7ec6746b0069101f754a3c1e7221b90631c2ee2 Mon Sep 17 00:00:00 2001 From: ChenHengming Date: Wed, 12 Aug 2015 07:44:06 +0000 Subject: [PATCH] [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 --- inc/vpu_api.h | 64 ++++++++++++++++++++++++++++++++++++++---- mpp/legacy/vpu_api.cpp | 56 ++++++++++++++++++++++++++++++++++++ test/vpu_api_test.c | 11 ++------ 3 files changed, 116 insertions(+), 15 deletions(-) diff --git a/inc/vpu_api.h b/inc/vpu_api.h index 30db5be1..60dbfe5a 100644 --- a/inc/vpu_api.h +++ b/inc/vpu_api.h @@ -35,6 +35,40 @@ typedef enum VPU_API_CMD VPU_API_SET_INFO_CHANGE, } 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 { RK_S64 pts; /* 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 */ -typedef struct VPUMem { - RK_U32 phy_addr; - RK_U32 *vir_addr; - RK_U32 size; - RK_U32 *offset; -} VPUMemLinear_t; +typedef struct vpu_display_mem_pool vpu_display_mem_pool; + +struct vpu_display_mem_pool { + int (*commit_hdl)(vpu_display_mem_pool *p, int hdl, int size); + void* (*get_free)(vpu_display_mem_pool *p); + 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 extern "C" { #endif +/* + * vpu memory handle interface + */ RK_S32 VPUMallocLinear(VPUMemLinear_t *p, RK_U32 size); RK_S32 VPUFreeLinear(VPUMemLinear_t *p); 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 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 } #endif diff --git a/mpp/legacy/vpu_api.cpp b/mpp/legacy/vpu_api.cpp index d649bd87..f1a17634 100644 --- a/mpp/legacy/vpu_api.cpp +++ b/mpp/legacy/vpu_api.cpp @@ -240,3 +240,59 @@ RK_S32 vpu_close_context(VpuCodecContext **ctx) 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) +{ +} + diff --git a/test/vpu_api_test.c b/test/vpu_api_test.c index 53a7664c..4f18c840 100644 --- a/test/vpu_api_test.c +++ b/test/vpu_api_test.c @@ -478,14 +478,13 @@ static RK_S32 vpu_decode_demo(VpuApiDemoCmdContext_t *cmd) FILE* pOutFile = NULL; struct VpuCodecContext* ctx = NULL; 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; VideoPacket_t demoPkt; VideoPacket_t* pkt =NULL; DecoderOut_t *pOut = NULL; -#if HAVE_VPU_FRME VPU_FRAME *frame = NULL; -#endif RK_S64 fakeTimeUs =0; RK_U8* pExtra = NULL; RK_U32 extraSize = 0; @@ -536,13 +535,11 @@ static RK_S32 vpu_decode_demo(VpuApiDemoCmdContext_t *cmd) memset(&decOut, 0, sizeof(DecoderOut_t)); pOut = &decOut; -#if HAVE_VPU_FRAME pOut->data = (RK_U8*)(malloc)(sizeof(VPU_FRAME)); if (pOut->data ==NULL) { DECODE_ERR_RET(ERROR_MEMORY); } memset(pOut->data, 0, sizeof(VPU_FRAME)); -#endif ret = vpu_open_context(&ctx); 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 ** sure you have done VPUMemLink before. */ -#if HAVE_VPU_FRAME if ((pOut->size) && (pOut->data)) { VPU_FRAME *frame = (VPU_FRAME *)(pOut->data); VPUMemLink(&frame->vpumem); @@ -664,9 +660,6 @@ static RK_S32 vpu_decode_demo(VpuApiDemoCmdContext_t *cmd) VPUFreeLinear(&frame->vpumem); pOut->size = 0; } -#else - (void)frame_count; -#endif } msleep(3);