From 2005ed4f42db25cfe38ae8febd7b2db445b10a8d Mon Sep 17 00:00:00 2001 From: Herman Chen Date: Wed, 20 May 2020 19:54:06 +0800 Subject: [PATCH] [test]: Remove vpu_api_test's dependence on mpp Remove all mpp object from vpu.so NOTE: link_directories should be before add_library or add_executable. Change-Id: Idee25e1ccc2c3182f7b8c26c277d396e28654f3e Signed-off-by: Herman Chen Signed-off-by: Jeffy Chen --- mpp/legacy/CMakeLists.txt | 7 +- test/CMakeLists.txt | 2 +- test/vpu_api_test.c | 184 ++++++++++++++++++++------------------ 3 files changed, 102 insertions(+), 91 deletions(-) diff --git a/mpp/legacy/CMakeLists.txt b/mpp/legacy/CMakeLists.txt index 45a37840..f13dc8e6 100644 --- a/mpp/legacy/CMakeLists.txt +++ b/mpp/legacy/CMakeLists.txt @@ -17,7 +17,11 @@ set (MPP_LEGACY_SRC set(VPU_VERSION "0") set(VPU_ABI_VERSION "1") +# NOTE: link_directories should be before add_library or add_executable +link_directories(${CMAKE_BINARY_DIR}/mpp) + add_library(${VPU_SHARED} SHARED ${MPP_LEGACY_SRC}) +add_dependencies(${VPU_SHARED} ${MPP_SHARED}) set_target_properties(${VPU_SHARED} PROPERTIES FOLDER "mpp/legacy") set_target_properties(${VPU_SHARED} PROPERTIES CLEAN_DIRECT_OUTPUT 1) set_target_properties(${VPU_SHARED} PROPERTIES C_VISIBILITY_PRESET default) @@ -29,6 +33,7 @@ set_target_properties(${VPU_SHARED} PROPERTIES VERSION ${MPP_VERSION}) set_target_properties(${VPU_SHARED} PROPERTIES SOVERSION ${MPP_ABI_VERSION}) endif() -target_link_libraries(${VPU_SHARED} dl ${MPP_SHARED}) +# force dynamic link +target_link_libraries(${VPU_SHARED} -Wl,-Bdynamic dl lib${MPP_SHARED}.so) install(TARGETS ${VPU_SHARED} LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index ab4944aa..d9d8133a 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -57,7 +57,7 @@ macro(add_legacy_test module) option(${test_tag} "Build legacy ${module} unit test" ON) if(${test_tag}) add_executable(${test_name} ${test_name}.c) - target_link_libraries(${test_name} -ldl utils) + target_link_libraries(${test_name} dl) set_target_properties(${test_name} PROPERTIES FOLDER "test") install(TARGETS ${test_name} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() diff --git a/test/vpu_api_test.c b/test/vpu_api_test.c index c3f9a4f0..dc9d2f4b 100644 --- a/test/vpu_api_test.c +++ b/test/vpu_api_test.c @@ -14,18 +14,13 @@ * limitations under the License. */ -#define MODULE_TAG "vpu_api_demo" - #include #include #include #include - -#include "mpp_log.h" -#include "mpp_time.h" +#include #include "vpu_api.h" -#include "utils.h" #define FOR_TEST_ENCODE 1 @@ -37,7 +32,6 @@ #define DECODE_ERR_RET(err) do { ret = err; goto DECODE_OUT; } while (0) #define ENCODE_ERR_RET(err) do { ret = err; goto ENCODE_OUT; } while (0) - typedef enum VPU_API_DEMO_RET { VPU_DEMO_OK = 0, VPU_DEMO_PARSE_HELP_OK = 1, @@ -70,7 +64,13 @@ typedef struct VpuApiEncInput { RK_U32 capability; } VpuApiEncInput; -static OptionInfo vpuApiCmd[] = { +typedef struct VpuApiOptionInfo_t { + const char* name; + const char* argname; + const char* help; +} VpuApiOptionInfo; + +static VpuApiOptionInfo vpuApiCmd[] = { { "i", "input_file", "input bitstream file" }, { "o", "output_file", "output bitstream file, " }, { "w", "width", "the width of input bitstream" }, @@ -91,16 +91,22 @@ RK_S32 (*vpuapi_mem_free)(VPUMemLinear_t *p); static void show_usage() { - mpp_log("usage: vpu_apiDemo [options] input_file, \n\n"); + printf("usage: vpu_apiDemo [options] input_file, \n\n"); - mpp_log("Getting help:\n"); - mpp_log("-help --print options of vpu api demo\n"); + printf("Getting help:\n"); + printf("-help --print options of vpu api demo\n"); } static RK_S32 show_help() { - mpp_log("usage: vpu_apiDemo [options] input_file, \n\n"); - show_options(vpuApiCmd); + RK_S32 i; + RK_S32 count = sizeof(vpuApiCmd) / sizeof(vpuApiCmd[0]); + VpuApiOptionInfo *opt = vpuApiCmd; + + printf("usage: vpu_apiDemo [opt] input_file, \n\n"); + for (i = 0; i < count; i++) + printf("-%s %-16s\t%s\n", opt[i].name, opt[i].argname, opt[i].help); + return 0; } @@ -110,7 +116,7 @@ static RK_S32 parse_options(int argc, char **argv, VpuApiDemoCmdContext_t *cmdCx RK_S32 optindex, handleoptions = 1, ret = 0; if ((argc < 2) || (cmdCxt == NULL)) { - mpp_log("vpu api demo, input parameter invalid\n"); + printf("vpu api demo, input parameter invalid\n"); show_usage(); return ERROR_INVALID_PARAM; } @@ -139,7 +145,7 @@ static RK_S32 parse_options(int argc, char **argv, VpuApiDemoCmdContext_t *cmdCx cmdCxt->input_file[strlen(argv[optindex])] = '\0'; cmdCxt->have_input = 1; } else { - mpp_log("input file is invalid\n"); + printf("input file is invalid\n"); ret = -1; goto PARSE_OPINIONS_OUT; } @@ -151,7 +157,7 @@ static RK_S32 parse_options(int argc, char **argv, VpuApiDemoCmdContext_t *cmdCx cmdCxt->have_output = 1; break; } else { - mpp_log("out file is invalid\n"); + printf("out file is invalid\n"); ret = -1; goto PARSE_OPINIONS_OUT; } @@ -160,7 +166,7 @@ static RK_S32 parse_options(int argc, char **argv, VpuApiDemoCmdContext_t *cmdCx cmdCxt->width = atoi(argv[optindex]); break; } else { - mpp_log("input width is invalid\n"); + printf("input width is invalid\n"); ret = -1; goto PARSE_OPINIONS_OUT; } @@ -172,7 +178,7 @@ static RK_S32 parse_options(int argc, char **argv, VpuApiDemoCmdContext_t *cmdCx } else if (argv[optindex]) { cmdCxt->height = atoi(argv[optindex]); } else { - mpp_log("input height is invalid\n"); + printf("input height is invalid\n"); ret = -1; goto PARSE_OPINIONS_OUT; } @@ -182,7 +188,7 @@ static RK_S32 parse_options(int argc, char **argv, VpuApiDemoCmdContext_t *cmdCx cmdCxt->codec_type = atoi(argv[optindex]); break; } else { - mpp_log("input codec_type is invalid\n"); + printf("input codec_type is invalid\n"); ret = -1; goto PARSE_OPINIONS_OUT; } @@ -190,8 +196,8 @@ static RK_S32 parse_options(int argc, char **argv, VpuApiDemoCmdContext_t *cmdCx default: if ((*(opt + 1) != '\0') && argv[optindex]) { if (!strncmp(opt, "coding", 6)) { - mpp_log("coding, argv[optindex]: %s", - argv[optindex]); + printf("coding, argv[optindex]: %s", + argv[optindex]); cmdCxt->coding = atoi(argv[optindex]); } else if (!strncmp(opt, "vframes", 7)) { cmdCxt->record_frames = atoi(argv[optindex]); @@ -214,7 +220,7 @@ static RK_S32 parse_options(int argc, char **argv, VpuApiDemoCmdContext_t *cmdCx PARSE_OPINIONS_OUT: if (ret < 0) { - mpp_log("vpu api demo, input parameter invalid\n"); + printf("vpu api demo, input parameter invalid\n"); show_usage(); return ERROR_INVALID_PARAM; } @@ -231,7 +237,7 @@ static RK_S32 readBytesFromFile(RK_U8 *buf, RK_S32 aBytes, FILE *file) ret = (RK_S32)fread(buf, 1, aBytes, file); if (ret != aBytes) { - mpp_log("read %d bytes from file fail\n", aBytes); + printf("read %d bytes from file fail\n", aBytes); return -1; } @@ -265,31 +271,31 @@ static RK_S32 vpu_encode_demo(VpuApiDemoCmdContext_t *cmd) if ((cmd->have_input == 0) || (cmd->width <= 0) || (cmd->height <= 0) || (cmd->coding <= OMX_RK_VIDEO_CodingAutoDetect)) { - mpp_log("Warning: missing needed parameters for vpu api demo\n"); + printf("Warning: missing needed parameters for vpu api demo\n"); } if (cmd->have_input) { - mpp_log("input bitstream w: %d, h: %d, coding: %d(%s), path: %s\n", - cmd->width, cmd->height, cmd->coding, - cmd->codec_type == CODEC_DECODER ? "decode" : "encode", - cmd->input_file); + printf("input bitstream w: %d, h: %d, coding: %d(%s), path: %s\n", + cmd->width, cmd->height, cmd->coding, + cmd->codec_type == CODEC_DECODER ? "decode" : "encode", + cmd->input_file); pInFile = fopen(cmd->input_file, "rb"); if (pInFile == NULL) { - mpp_log("input file not exsist\n"); + printf("input file not exsist\n"); ENCODE_ERR_RET(ERROR_INVALID_PARAM); } } else { - mpp_log("please set input bitstream file\n"); + printf("please set input bitstream file\n"); ENCODE_ERR_RET(ERROR_INVALID_PARAM); } if (cmd->have_output) { - mpp_log("vpu api demo output file: %s\n", - cmd->output_file); + printf("vpu api demo output file: %s\n", + cmd->output_file); pOutFile = fopen(cmd->output_file, "wb"); if (pOutFile == NULL) { - mpp_log("can not write output file\n"); + printf("can not write output file\n"); ENCODE_ERR_RET(ERROR_INVALID_PARAM); } } @@ -297,7 +303,7 @@ static RK_S32 vpu_encode_demo(VpuApiDemoCmdContext_t *cmd) #ifdef FOR_TEST_ENCODE ctx = (struct VpuCodecContext *)malloc(sizeof(struct VpuCodecContext)); if (!ctx) { - mpp_err("Input context has not been properly allocated"); + printf("Input context has not been properly allocated"); return -1; } memset(ctx, 0, sizeof(struct VpuCodecContext)); @@ -355,7 +361,7 @@ static RK_S32 vpu_encode_demo(VpuApiDemoCmdContext_t *cmd) enc_param->levelIdc = 40; if ((ret = ctx->init(ctx, NULL, 0)) != 0) { - mpp_log("init vpu api context fail, ret: 0x%X\n", ret); + printf("init vpu api context fail, ret: 0x%X\n", ret); ENCODE_ERR_RET(ERROR_INIT_VPU); } @@ -364,10 +370,10 @@ static RK_S32 vpu_encode_demo(VpuApiDemoCmdContext_t *cmd) ** sps and pps of encoder output, you need to save sps and pps ** after init. */ - mpp_log("encode init ok, sps len: %d\n", ctx->extradata_size); + printf("encode init ok, sps len: %d\n", ctx->extradata_size); if (pOutFile && (ctx->extradata_size > 0)) { - mpp_log("dump %d bytes enc output stream to file\n", - ctx->extradata_size); + printf("dump %d bytes enc output stream to file\n", + ctx->extradata_size); /* save sps and pps */ fwrite(ctx->extradata, 1, ctx->extradata_size, pOutFile); @@ -376,32 +382,32 @@ static RK_S32 vpu_encode_demo(VpuApiDemoCmdContext_t *cmd) ret = ctx->control(ctx, VPU_API_ENC_SETFORMAT, &Format); if (ret) - mpp_err("VPU_API_ENC_SETFORMAT ret %d\n", ret); + printf("VPU_API_ENC_SETFORMAT ret %d\n", ret); ret = ctx->control(ctx, VPU_API_ENC_GETCFG, enc_param); if (ret) - mpp_log("VPU_API_ENC_GETCFG ret %d\n", ret); + printf("VPU_API_ENC_GETCFG ret %d\n", ret); enc_param->rc_mode = 1; ret = ctx->control(ctx, VPU_API_ENC_SETCFG, enc_param); if (ret) - mpp_log("VPU_API_ENC_SETCFG ret %d\n", ret); + printf("VPU_API_ENC_SETCFG ret %d\n", ret); /* ** vpu api encode process. */ - mpp_log("init vpu api context ok, input yuv stream file size: %d\n", fileSize); + printf("init vpu api context ok, input yuv stream file size: %d\n", fileSize); w_align = ((ctx->width + 15) & (~15)); h_align = ((ctx->height + 15) & (~15)); size = w_align * h_align * 3 / 2; readOneFrameSize = ctx->width * ctx->height * 3 / 2; - mpp_log("%d %d %d %d %d", ctx->width, ctx->height, w_align, h_align, size); + printf("%d %d %d %d %d", ctx->width, ctx->height, w_align, h_align, size); nal = BSWAP32(nal); do { if (ftell(pInFile) >= fileSize) { - mpp_log("read end of file, complete\n"); + printf("read end of file, complete\n"); break; } @@ -430,16 +436,16 @@ static RK_S32 vpu_encode_demo(VpuApiDemoCmdContext_t *cmd) fakeTimeUs += 40000; } - mpp_log("read one frame, size: %d, timeUs: %lld, filePos: %ld\n", - enc_in->size, enc_in->timeUs, ftell(pInFile)); + printf("read one frame, size: %d, timeUs: %lld, filePos: %ld\n", + enc_in->size, enc_in->timeUs, ftell(pInFile)); } if ((ret = ctx->encode(ctx, enc_in, enc_out)) < 0) { ENCODE_ERR_RET(ERROR_VPU_DECODE); } else { enc_in->size = 0; // TODO encode completely, and set enc_in->size to 0 - mpp_log("vpu encode one frame, out len: %d, left size: %d\n", - enc_out->size, enc_in->size); + printf("vpu encode one frame, out len: %d, left size: %d\n", + enc_out->size, enc_in->size); /* ** encoder output stream is raw bitstream, you need to add nal @@ -447,8 +453,8 @@ static RK_S32 vpu_encode_demo(VpuApiDemoCmdContext_t *cmd) */ if ((enc_out->size) && (enc_out->data)) { if (pOutFile) { - mpp_log("dump %d bytes enc output stream to file\n", - enc_out->size); + printf("dump %d bytes enc output stream to file\n", + enc_out->size); //fwrite((RK_U8*)&nal, 1, 4, pOutFile); // because output stream have start code, so here mask this code fwrite(enc_out->data, 1, enc_out->size, pOutFile); fflush(pOutFile); @@ -458,7 +464,7 @@ static RK_S32 vpu_encode_demo(VpuApiDemoCmdContext_t *cmd) } } - msleep(3); + usleep(3000); } while (1); ENCODE_OUT: @@ -488,9 +494,9 @@ ENCODE_OUT: } if (ret) { - mpp_log("encode demo fail, err: %d\n", ret); + printf("encode demo fail, err: %d\n", ret); } else { - mpp_log("encode demo complete OK.\n"); + printf("encode demo complete OK.\n"); } return ret; @@ -521,31 +527,31 @@ static RK_S32 vpu_decode_demo(VpuApiDemoCmdContext_t *cmd) if ((cmd->have_input == 0) || (cmd->width <= 0) || (cmd->height <= 0) || (cmd->coding <= OMX_RK_VIDEO_CodingAutoDetect)) { - mpp_log("Warning: missing needed parameters for vpu api demo\n"); + printf("Warning: missing needed parameters for vpu api demo\n"); } if (cmd->have_input) { - mpp_log("input bitstream w: %d, h: %d, coding: %d(%s), path: %s\n", - cmd->width, cmd->height, cmd->coding, - cmd->codec_type == CODEC_DECODER ? "decode" : "encode", - cmd->input_file); + printf("input bitstream w: %d, h: %d, coding: %d(%s), path: %s\n", + cmd->width, cmd->height, cmd->coding, + cmd->codec_type == CODEC_DECODER ? "decode" : "encode", + cmd->input_file); pInFile = fopen(cmd->input_file, "rb"); if (pInFile == NULL) { - mpp_log("input file not exsist\n"); + printf("input file not exsist\n"); DECODE_ERR_RET(ERROR_INVALID_PARAM); } } else { - mpp_log("please set input bitstream file\n"); + printf("please set input bitstream file\n"); DECODE_ERR_RET(ERROR_INVALID_PARAM); } if (cmd->have_output) { - mpp_log("vpu api demo output file: %s\n", - cmd->output_file); + printf("vpu api demo output file: %s\n", + cmd->output_file); pOutFile = fopen(cmd->output_file, "wb"); if (pOutFile == NULL) { - mpp_log("can not write output file\n"); + printf("can not write output file\n"); DECODE_ERR_RET(ERROR_INVALID_PARAM); } if (cmd->record_frames == 0) @@ -577,7 +583,7 @@ static RK_S32 vpu_decode_demo(VpuApiDemoCmdContext_t *cmd) DECODE_ERR_RET(ERROR_IO); } - mpp_log("codec extra data size: %d\n", extraSize); + printf("codec extra data size: %d\n", extraSize); pExtra = (RK_U8 *)(malloc)(extraSize); if (pExtra == NULL) { @@ -600,18 +606,18 @@ static RK_S32 vpu_decode_demo(VpuApiDemoCmdContext_t *cmd) ctx->no_thread = 1; if ((ret = ctx->init(ctx, pExtra, extraSize)) != 0) { - mpp_log("init vpu api context fail, ret: 0x%X\n", ret); + printf("init vpu api context fail, ret: 0x%X\n", ret); DECODE_ERR_RET(ERROR_INIT_VPU); } /* ** vpu api decoder process. */ - mpp_log("init vpu api context ok, fileSize: %d\n", fileSize); + printf("init vpu api context ok, fileSize: %d\n", fileSize); do { if (ftell(pInFile) >= fileSize) { - mpp_log("read end of file, complete\n"); + printf("read end of file, complete\n"); break; } @@ -644,25 +650,25 @@ static RK_S32 vpu_decode_demo(VpuApiDemoCmdContext_t *cmd) fakeTimeUs += 40000; } - mpp_log("read one packet, size: %d, pts: %lld, filePos: %ld\n", - pkt->size, pkt->pts, ftell(pInFile)); + printf("read one packet, size: %d, pts: %lld, filePos: %ld\n", + pkt->size, pkt->pts, ftell(pInFile)); } /* note: must set out put size to 0 before do decoder. */ pOut->size = 0; if (ctx->decode_sendstream(ctx, pkt) != 0) { - mpp_log("send packet failed"); + printf("send packet failed"); DECODE_ERR_RET(ERROR_VPU_DECODE); } if ((ret = ctx->decode_getframe(ctx, pOut)) != 0) { - mpp_log("get decoded data failed\n"); + printf("get decoded data failed\n"); DECODE_ERR_RET(ERROR_VPU_DECODE); } else { - mpp_log("vpu decode one frame, out len: %d, left size: %d\n", - pOut->size, pkt->size); + printf("vpu decode one frame, out len: %d, left size: %d\n", + pOut->size, pkt->size); /* ** both virtual and physical address of the decoded frame are contained @@ -677,8 +683,8 @@ static RK_S32 vpu_decode_demo(VpuApiDemoCmdContext_t *cmd) frameSize = wAlign16 * hAlign16 * 3 / 2; if (pOutFile && (frame_count++ < cmd->record_frames)) { - mpp_log("write %d frame(yuv420sp) data, %d bytes to file\n", - frame_count, frameSize); + printf("write %d frame(yuv420sp) data, %d bytes to file\n", + frame_count, frameSize); fwrite((RK_U8 *)(frame->vpumem.vir_addr), 1, frameSize, pOutFile); fflush(pOutFile); @@ -696,7 +702,7 @@ static RK_S32 vpu_decode_demo(VpuApiDemoCmdContext_t *cmd) } } - msleep(3); + usleep(3000); } while (!(ctx->decoder_err)); DECODE_OUT: @@ -726,9 +732,9 @@ DECODE_OUT: } if (ret) { - mpp_log("decode demo fail, err: %d\n", ret); + printf("decode demo fail, err: %d\n", ret); } else { - mpp_log("encode demo complete OK.\n"); + printf("encode demo complete OK.\n"); } return ret; } @@ -740,7 +746,7 @@ int main(int argc, char **argv) VpuApiDemoCmdContext_t demoCmdCtx; VpuApiDemoCmdContext_t *cmd = NULL; - mpp_log("/******* vpu api demo in *******/\n"); + printf("/******* vpu api demo in *******/\n"); if (argc == 1) { show_usage(); return 0; @@ -749,7 +755,7 @@ int main(int argc, char **argv) /* open library for access */ vpuapi_hdl = dlopen("libvpu.so", RTLD_LAZY | RTLD_GLOBAL); if (NULL == vpuapi_hdl) { - mpp_log("failed to open libvpu.so\n"); + printf("failed to open libvpu.so\n"); ret = -1; goto DEMO_OUT; } @@ -761,16 +767,16 @@ int main(int argc, char **argv) if (NULL == vpuapi_open_ctx || NULL == vpuapi_close_ctx || NULL == vpuapi_mem_link || NULL == vpuapi_mem_free) { - mpp_log("failed to open vpu_open_context %p vpu_close_context %p\n", - vpuapi_open_ctx, vpuapi_close_ctx); - mpp_log("failed to open VPUMemLink %p VPUFreeLinear %p\n", - vpuapi_mem_link, vpuapi_mem_free); + printf("failed to open vpu_open_context %p vpu_close_context %p\n", + vpuapi_open_ctx, vpuapi_close_ctx); + printf("failed to open VPUMemLink %p VPUFreeLinear %p\n", + vpuapi_mem_link, vpuapi_mem_free); ret = -1; goto DEMO_OUT; } - mpp_log("get vpuapi handle %p vpu_open_context %p vpu_close_context %p\n", - vpuapi_hdl, vpuapi_open_ctx, vpuapi_close_ctx); + printf("get vpuapi handle %p vpu_open_context %p vpu_close_context %p\n", + vpuapi_hdl, vpuapi_open_ctx, vpuapi_close_ctx); cmd = &demoCmdCtx; memset(cmd, 0, sizeof(VpuApiDemoCmdContext_t)); @@ -780,7 +786,7 @@ int main(int argc, char **argv) return 0; } - mpp_log("parse_options fail\n\n"); + printf("parse_options fail\n\n"); show_usage(); DEMO_ERR_RET(ERROR_INVALID_PARAM); } @@ -799,13 +805,13 @@ int main(int argc, char **argv) DEMO_OUT: if (ret) { - mpp_log("vpu api demo fail, err: %d\n", ret); + printf("vpu api demo fail, err: %d\n", ret); if (vpuapi_hdl) { dlclose(vpuapi_hdl); vpuapi_hdl = NULL; } } else { - mpp_log("vpu api demo complete OK.\n"); + printf("vpu api demo complete OK.\n"); } return ret; }