From 578bb80ee73e58d9c068b13882ae41430f1521d3 Mon Sep 17 00:00:00 2001 From: Hongjin Li Date: Thu, 27 Jan 2022 18:16:55 +0800 Subject: [PATCH] [mpi_enc_test]: add iep2 slt testcase slt verify file: iep2_test -w -h -i -o -v iep2.verfy -f TFF Change-Id: I9924b827d6c30abf9124cdab89dcac2e6fb96591 Signed-off-by: Hongjin Li --- mpp/vproc/iep2/test/iep2_test.c | 39 ++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/mpp/vproc/iep2/test/iep2_test.c b/mpp/vproc/iep2/test/iep2_test.c index 70e46d73..1706921f 100644 --- a/mpp/vproc/iep2/test/iep2_test.c +++ b/mpp/vproc/iep2/test/iep2_test.c @@ -42,9 +42,12 @@ typedef struct iep2_test_cfg_t { char src_url[MAX_URL_LEN]; char dst_url[MAX_URL_LEN]; + char slt_url[MAX_URL_LEN]; FILE *fp_src; FILE *fp_dst; + FILE *fp_slt; + RK_U32 field_order; } iep2_test_cfg; static OptionInfo iep2_test_cmd[] = { @@ -53,7 +56,8 @@ static OptionInfo iep2_test_cmd[] = { {"c", "format", "input image format in ASCII string"}, {"i", "src_file", "input image file name"}, {"C", "dst_format", "output image format in ASCII string"}, - {"o", "dst_file", "output image file name"} + {"o", "dst_file", "output image file name"}, + {"v", "slt_file", "slt verify data file"} }; static void iep2_test_help() @@ -205,6 +209,7 @@ void iep2_test(iep2_test_cfg *cfg) RK_U32 i; RK_S32 field_order = IEP2_FIELD_ORDER_TFF; RK_S32 out_order = field_order == IEP2_FIELD_ORDER_TFF ? 0 : 1; + DataCrc checkcrc; // NOTISE, used IepImg structure for version compatibility consideration, // only addresses in this structure are useful in iep2 @@ -215,6 +220,9 @@ void iep2_test(iep2_test_cfg *cfg) mpp_assert(iep2); + memset(&checkcrc, 0, sizeof(checkcrc)); + checkcrc.sum = mpp_malloc(RK_ULONG, 512); + mpp_buffer_get(NULL, &srcbuf[0], srcfrmsize); mpp_buffer_get(NULL, &srcbuf[1], srcfrmsize); mpp_buffer_get(NULL, &srcbuf[2], srcfrmsize); @@ -262,7 +270,7 @@ void iep2_test(iep2_test_cfg *cfg) params.ptype = IEP2_PARAM_TYPE_MODE; params.param.mode.dil_mode = IEP2_DIL_MODE_I5O2; params.param.mode.out_mode = IEP2_OUT_MODE_LINE; - params.param.mode.dil_order = IEP2_FIELD_ORDER_BFF; + params.param.mode.dil_order = cfg->field_order; iep2->ops->control(iep2->priv, IEP_CMD_SET_DEI_CFG, ¶ms); @@ -308,6 +316,13 @@ void iep2_test(iep2_test_cfg *cfg) memset(pdst[1], 0, dstfrmsize); iep2->ops->control(iep2->priv, IEP_CMD_RUN_SYNC, NULL); + if (cfg->fp_slt) { + calc_data_crc(pdst[out_order], dstfrmsize, &checkcrc); + write_data_crc(cfg->fp_slt, &checkcrc); + calc_data_crc(pdst[1 - out_order], dstfrmsize, &checkcrc); + write_data_crc(cfg->fp_slt, &checkcrc); + } + if (dstfrmsize > fwrite(pdst[out_order], 1, dstfrmsize, cfg->fp_dst)) { mpp_err("destination dump failed\n"); break; @@ -330,6 +345,8 @@ ret: mpp_buffer_put(dstbuf[0]); mpp_buffer_put(dstbuf[1]); + MPP_FREE(checkcrc.sum); + iep2->ops->deinit(iep2->priv); rockchip_iep2_api_release_ctx(iep2); @@ -353,7 +370,7 @@ int main(int argc, char **argv) /// get options opterr = 0; - while ((ch = getopt(argc, argv, "i:w:h:c:o:C:")) != -1) { + while ((ch = getopt(argc, argv, "i:w:h:c:o:C:v:f:")) != -1) { switch (ch) { case 'w': { cfg.w = atoi(optarg); @@ -379,6 +396,17 @@ int main(int argc, char **argv) strncpy(cfg.dst_url, optarg, sizeof(cfg.dst_url)); cfg.fp_dst = fopen(cfg.dst_url, "w+b"); } break; + case 'v': { + mpp_log("verify file: %s\n", optarg); + strncpy(cfg.slt_url, optarg, sizeof(cfg.slt_url)); + cfg.fp_slt = fopen(cfg.slt_url, "w+b"); + } break; + case 'f': { + if (!strcmp(optarg, "TFF")) + cfg.field_order = IEP2_FIELD_ORDER_TFF; + else + cfg.field_order = IEP2_FIELD_ORDER_BFF; + } break; default: { } break; } @@ -402,5 +430,10 @@ int main(int argc, char **argv) cfg.fp_dst = NULL; } + if (cfg.fp_slt) { + fclose(cfg.fp_slt); + cfg.fp_slt = NULL; + } + return 0; }