luckfox-pico-sdk/media/ive/ive/simulator/Dilate.c
2023-08-08 20:36:47 +08:00

83 lines
3.0 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "rk_mpi_ive.h"
#include "rve_tests.h"
#include "sample_assist.h"
#include "sample_define.h"
#include "sample_file.h"
RK_VOID DilateSample(RK_U8 *pu8Mask, const RK_CHAR *moduleName, RK_CHAR *fileName,
RK_CHAR *outDir, RK_U32 u32Width, RK_U32 u32Height) {
IVE_SRC_IMAGE_S stSrc;
IVE_DST_IMAGE_S stDst;
IVE_DILATE_CTRL_S stCtrlDilate;
IVE_THRESH_CTRL_S stCtrlThresh;
RK_S32 s32Result;
FILE *fp = NULL, *fo = NULL;
IVE_HANDLE handle;
RK_DOUBLE dTime;
RK_CHAR outFile[RK_MAX_FILE_LEN];
memset(&stSrc, 0, sizeof(IVE_SRC_IMAGE_S));
memset(&stDst, 0, sizeof(IVE_DST_IMAGE_S));
memset(&stCtrlDilate, 0, sizeof(IVE_DILATE_CTRL_S));
memset(&stCtrlThresh, 0, sizeof(IVE_THRESH_CTRL_S));
s32Result =
RK_CreateIveImage(&stSrc, IVE_IMAGE_TYPE_U8C1, u32Width, u32Height);
RK_CHECK_ET_GOTO(s32Result, RK_FAILURE, FAILURE);
s32Result =
RK_CreateIveImage(&stDst, IVE_IMAGE_TYPE_U8C1, u32Width, u32Height);
RK_CHECK_ET_GOTO(s32Result, RK_FAILURE, FAILURE);
s32Result = RK_ReadFile(fileName, &stSrc, &fp);
RK_CHECK_ET_GOTO(s32Result, RK_FAILURE, FAILURE);
memcpy(stCtrlDilate.au8Mask, pu8Mask, sizeof(RK_U8) * 25);
dTime = (RK_DOUBLE)RK_GetTickCount();
s32Result =
RK_MPI_IVE_Dilate(&handle, &stSrc, &stDst, &stCtrlDilate, RK_TRUE);
RK_CHECK_ET_GOTO(s32Result, RK_FAILURE, FAILURE);
dTime = (RK_DOUBLE)RK_GetTickCount() - dTime;
printf("Dilate time = %g ms\n",
dTime / ((RK_DOUBLE)RK_GetTickFrequency() * 1000.));
if (outDir == NULL) {
RK_WriteFile(NULL, (void *)stDst.au64VirAddr[0],
stDst.u32Width * stDst.u32Height, &fo);
} else {
RK_SPRINTF(outFile, RK_MAX_FILE_LEN, "%s/rve_%s_out.yuv", outDir, moduleName);
RK_WriteFile(outFile, (void *)stDst.au64VirAddr[0],
stDst.u32Width * stDst.u32Height, &fo);
}
#if BUILD_SIMULATOR
gfx_show_img("dilate", (void *)stDst.au64VirAddr[0], stDst.u32Width,
stDst.u32Height, IVE_IMAGE_TYPE_U8C1, 0);
#endif
FAILURE:
RK_FCLOSE(fp);
RK_FCLOSE(fo);
RK_DestroyIveImage(&stSrc);
RK_DestroyIveImage(&stDst);
}
RK_VOID DilateSample3x3(const RK_CHAR *moduleName, RK_CHAR *fileName, RK_CHAR *outDir,
RK_U32 u32Width, RK_U32 u32Height) {
RK_U8 mask[25] = {0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 255, 255,
255, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0};
DilateSample(mask, moduleName, fileName, outDir, u32Width, u32Height);
}
RK_VOID DilateSample5x5(const RK_CHAR *moduleName, RK_CHAR *fileName, RK_CHAR *outDir,
RK_U32 u32Width, RK_U32 u32Height) {
RK_U8 mask[25] = {0, 0, 255, 0, 0, 0, 0, 255, 0, 0, 255, 255, 255,
255, 255, 0, 0, 255, 0, 0, 0, 0, 255, 0, 0};
DilateSample(mask, moduleName, fileName, outDir, u32Width, u32Height);
}