rv1126使用rockit的mpi问题

#1 · open · 0 comments

View on GitHub ↗

jiale-gdyd

[RKMEDIA][SYS][Info]:text is all=3 [RKMEDIA][SYS][Info]:module is all, log_level is 3 [New LWP 672] [ 2945.879077] pgd = bda53909 [ 2945.879135] [00000000] *pgd=2d73a835, *pte=00000000, *ppte=00000000 [ 2945.879172] CPU: 1 PID: 669 Comm: rvrpem_rockit Tainted: G W O 4.19.111 #32 [ 2945.879193] Hardware name: Generic DT based system [ 2945.879210] PC is Thread 1 "rvrpem_rockit" received signal SIGSEGV, Segmentaation fault. t 0x9be60494 [ 2945.879222] LR is at 0x9be602c0 [ 2945.879233] pc : [<9be60494>] lr : [<9be602c0>] psr: 600b0010 [ 2945.879246] sp : aec08a88 ip : 9c06ed94 fp : 00000000 [ 2945.879258] r10: a6fb0000 r9 : 00000000 r8 : 00000000 [ 2945.879273] r7 : aec08acc r6 : 00000000 r5 : 00000000 r4 : 00000000 [ 2945.879286] r3 : 00000000 r2 : 00000000 r1 : aec08acc r0 : 00000000 [ 2945.879300] Flags: nZCv IRQs on FIQs on Mode USER_32 ISA ARM Segment user [ 2945.879314] Control: 10c5387d Table: 2ca1406a DAC: 00000055 [ 2945.879332] CPU: 1 PID: 669 Comm: rvrpem_rockit Tainted: G W O 4.19.111 #32 [ 2945.879343] Hardware name: Generic DT based system [ 2945.879379] [<b010f408>] (unwind_backtrace) from [<b010b96c>] (show_stack+0x10/0x14) [ 2945.879411] [<b010b96c>] (show_stack) from [<b07ecd04>] (dump_stack+0x90/0xa4) [ 2945.879436] [<b07ecd04>] (dump_stack) from [<b011373c>] (__do_user_fault+0x130/0x134) [ 2945.879460] [<b011373c>] (__do_user_fault) from [<b0113980>] (do_page_fault+0x240/0x348) [ 2945.879483] [<b0113980>] (do_page_fault) from [<b0113c18>] (do_DataAbort+0x4c/0xec) [ 2945.879512] [<b0113c18>] (do_DataAbort) from [<b0101d7c>] (__dabt_usr+0x3c/0x40) [ 2945.879527] Exception stack(0xee903fb0 to 0xee903ff8) [ 2945.879544] 3fa0: 00000000 aec08acc 00000000 00000000 [ 2945.879561] 3fc0: 00000000 00000000 00000000 aec08acc 00000000 00000000 a6fb0000 00000000 [ 2945.879577] 3fe0: 9c06ed94 aec08a88 9be602c0 9be60494 600b0010 ffffffff 0x9be60494 in vi_set_dev_attr () from /usr/lib/librockit.so (gdb) (gdb) bt #0 0x9be60494 in vi_set_dev_attr () from /usr/lib/librockit.so #1 0x00071d94 in rv11xx_rockit_vi_main(int, char**) () #2 0x9a49b4e4 in __libc_start_main () from /lib/libc.so.6 #3 0x0001816c in _start () at ../sysdeps/arm/start.S:124 Backtrace stopped: previous frame identical to this frame (corrupt stack?) (gdb) 很简单的源码: int rv11xx_rockit_vi_main(int argc, char *argv[]) { int ret = 0; int devId = 0; int chnId = 1; int loopCount = 0; int waitTime = 33; VI_FRAME_S stViFrame; VI_CHN_ATTR_S stViChnAttr; VI_DEV_ATTR_S stViDevAttr; VI_CHN_STATUS_S stViChnStatus; VI_DEV_BIND_PIPE_S stViBindPipe; if (RK_MPI_SYS_Init() != RK_SUCCESS) { return -1; } // 0.获取设备配置状态 ret = RK_MPI_VI_GetDevAttr(devId, &stViDevAttr); if (ret == RK_ERR_VI_NOT_CONFIG) { // 0-1.配置设备 ret = RK_MPI_VI_SetDevAttr(devId, &stViDevAttr); if (ret != RK_SUCCESS) { goto FAILED_EXIT; } } else { printf("RK_MPI_VI_SetDevAttr already\n"); } // 1.获取设备使能状态 ret = RK_MPI_VI_GetDevIsEnable(devId); if (ret != RK_SUCCESS) { // 1-2.使能设备 ret = RK_MPI_VI_EnableDev(devId); if (ret != RK_SUCCESS) { goto FAILED_EXIT; } // 1-3.绑定设备管道 stViBindPipe.u32Num = devId; stViBindPipe.PipeId[0] = devId; ret = RK_MPI_VI_SetDevBindPipe(devId, &stViBindPipe); if (ret != RK_SUCCESS) { goto FAILED_EXIT; } } else { printf("RK_MPI_VI_EnableDev already\n"); } // 2.配置通道 strcpy(stViChnAttr.stIspOpt.aEntityName, "/dev/video0"); stViChnAttr.stIspOpt.u32BufCount = 3; stViChnAttr.stIspOpt.enMemoryType = VI_V4L2_MEMORY_TYPE_MMAP; stViChnAttr.u32Depth = 2; stViChnAttr.enPixelFormat = RK_FMT_YUV420SP; stViChnAttr.stFrameRate.s32SrcFrameRate = -1; stViChnAttr.stFrameRate.s32DstFrameRate = -1; stViChnAttr.stSize.u32Width = 1280; stViChnAttr.stSize.u32Height = 720; ret = RK_MPI_VI_SetChnAttr(devId, chnId, &stViChnAttr); if (ret != RK_SUCCESS) { goto FAILED_EXIT; } // 3.使能通道 ret = RK_MPI_VI_EnableChn(devId, chnId); if (ret != RK_SUCCESS) { goto FAILED_EXIT; } while (loopCount < 100) { // 5.获取帧 ret = RK_MPI_VI_GetChnFrame(devId, chnId, &stViFrame, waitTime); if (ret == RK_SUCCESS) { void *data = RK_MPI_MB_Handle2VirAddr(stViFrame.pMbBlk); printf("loop:[%03d], seq:[%d], pts:[%lld]ms\n", loopCount, stViFrame.s32Seq, stViFrame.s64PTS / 1000); // 6.获取通道状态 ret = RK_MPI_VI_QueryChnStatus(devId, chnId, &stViChnStatus); printf("return:[%d], w:[%d], h:[%d], state:[%d], lost:[%d], frameRate:[%d], vbfail:[%d]\n", ret, stViChnStatus.stSize.u32Width, stViChnStatus.stSize.u32Height, stViChnStatus.bEnable, stViChnStatus.u32LostFrame, stViChnStatus.u32FrameRate, stViChnStatus.u32VbFail); // 7.释放帧 ret = RK_MPI_VI_ReleaseChnFrame(devId, chnId, &stViFrame); if (ret != RK_SUCCESS) { printf("RK_MPI_VI_ReleaseChnFrame failed, return:[%d]\n", ret); } loopCount++; } else { printf("RK_MPI_VI_GetChnFrame failed, timeout, return[%d]\n", ret); } usleep(10 * 1000); } // 8.停止通道 ret = RK_MPI_VI_DisableChn(devId, chnId); // 9.停止设备 ret = RK_MPI_VI_DisableDev(devId); FAILED_EXIT: RK_MPI_SYS_Exit(); return ret; }

Comments