Luckfox Pico Ultra W (RV1106) VI bind VO Segmentation fault (core dumped)
Posted: 2025-10-30 8:41
我的开发板Luckfox Pico Ultra W(RV1106),我想通过 VI 绑定到 VO 将摄像头画面显示到480*854屏幕上。取帧转发的方式(先用 RK_MPI_VI_GetChnFrame 获取 VI帧,再用RK_MPI_VO_SendFrame 将VI帧发送给VO) 屏幕能正常显示摄像头画面,但占用CPU,所以 我想 通过 RK_MPI_SYS_Bind 将 VI直接绑定到VO,但是 执行到 RK_MPI_SYS_Bind时 就会报错Segmentation fault (core dumped),我在SDK中没找到VI bind VO 的示例代码,不知道是我的参数设置有问题,还是其他问题,具体情况如下:
我的代码 ( 通过 VI_bin_VO 来切换 取帧转发的方式 和 VI-bind-VI 方式)
在 Luckfox Pico Ultra W(RV1106)上执行输出
我的代码 ( 通过 VI_bin_VO 来切换 取帧转发的方式 和 VI-bind-VI 方式)
Code: Select all
#include <errno.h>
#include <pthread.h>
#include <signal.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/poll.h>
#include <sys/prctl.h>
#include <time.h>
#include <unistd.h>
#include "rk_debug.h"
#include "rk_defines.h"
#include "rk_mpi_sys.h"
#include "rk_mpi_vi.h"
#include "rk_mpi_vo.h"
#include "sample_comm.h"
#define VI_bin_VO 1
static bool quit = false;
static int u32Width = 480; //1024;
static int u32Height = 854; //600;
static int s32chnlId = 0;
static int VoLayer = 0;
static int VoDev = 0;
static int VoChn = 0;
static ROTATION_E VoRotation = ROTATION_90;
static void sigterm_handler(int sig) {
fprintf(stderr, "signal %d\n", sig);
quit = true;
}
static void *GetMediaBuffer0_thread(void *arg) {
printf("========%s========\n", __func__);
// prctl(PR_SET_NAME, "RkipcSendJPEG", 0, 0, 0);
prctl(PR_SET_NAME, __func__, 0, 0, 0);
int s32Ret;
RK_S32 waitTime = 1000;
int pipeId = 0;
VIDEO_FRAME_INFO_S stViFrame;
while (!quit) {
s32Ret = RK_MPI_VI_GetChnFrame(pipeId, s32chnlId, &stViFrame, waitTime);
if (s32Ret == RK_SUCCESS) {
s32Ret = RK_MPI_VO_SendFrame(VoLayer, VoChn, &stViFrame, -1);
if (s32Ret != RK_SUCCESS) {
RK_LOGE("%s RK_MPI_VO_SendFrame fail 0x%X", __func__, s32Ret);
}
// 7.release the frame
s32Ret = RK_MPI_VI_ReleaseChnFrame(pipeId, s32chnlId, &stViFrame);
if (s32Ret != RK_SUCCESS) {
RK_LOGE("%s RK_MPI_VI_ReleaseChnFrame fail 0x%X", __func__, s32Ret);
}
} else {
RK_LOGE("%s RK_MPI_VI_GetChnFrame timeout 0x%X", __func__, s32Ret);
}
}
return NULL;
}
// demo板dev默认都是0,根据不同的channel 来选择不同的vi节点
int vi_dev_init() {
printf("%s\n", __func__);
int ret = 0;
int devId = 0;
int pipeId = devId;
VI_DEV_ATTR_S stDevAttr;
VI_DEV_BIND_PIPE_S stBindPipe;
memset(&stDevAttr, 0, sizeof(stDevAttr));
memset(&stBindPipe, 0, sizeof(stBindPipe));
// 0. get dev config status
ret = RK_MPI_VI_GetDevAttr(devId, &stDevAttr);
if (ret == RK_ERR_VI_NOT_CONFIG) {
// 0-1.config dev
ret = RK_MPI_VI_SetDevAttr(devId, &stDevAttr);
if (ret != RK_SUCCESS) {
printf("RK_MPI_VI_SetDevAttr %x\n", ret);
return -1;
}
} else {
printf("RK_MPI_VI_SetDevAttr already\n");
}
// 1.get dev enable status
ret = RK_MPI_VI_GetDevIsEnable(devId);
if (ret != RK_SUCCESS) {
// 1-2.enable dev
ret = RK_MPI_VI_EnableDev(devId);
if (ret != RK_SUCCESS) {
printf("RK_MPI_VI_EnableDev %x\n", ret);
return -1;
}
// 1-3.bind dev/pipe
stBindPipe.u32Num = 1;
stBindPipe.PipeId[0] = pipeId;
ret = RK_MPI_VI_SetDevBindPipe(devId, &stBindPipe);
if (ret != RK_SUCCESS) {
printf("RK_MPI_VI_SetDevBindPipe %x\n", ret);
return -1;
}
} else {
printf("RK_MPI_VI_EnableDev already\n");
}
return 0;
}
int vi_chn_init(int channelId, int width, int height) {
int ret;
int buf_cnt = 2;
// VI init
VI_CHN_ATTR_S vi_chn_attr;
memset(&vi_chn_attr, 0, sizeof(vi_chn_attr));
vi_chn_attr.stIspOpt.u32BufCount = buf_cnt;
// vi_chn_attr.stIspOpt.enMemoryType = VI_V4L2_MEMORY_TYPE_DMABUF; // VI_V4L2_MEMORY_TYPE_MMAP;
vi_chn_attr.stIspOpt.enMemoryType = VI_V4L2_MEMORY_TYPE_MMAP; // VI_V4L2_MEMORY_TYPE_MMAP;
vi_chn_attr.stSize.u32Width = width;
vi_chn_attr.stSize.u32Height = height;
vi_chn_attr.enPixelFormat = RK_FMT_YUV420SP;
vi_chn_attr.enCompressMode = COMPRESS_MODE_NONE;
vi_chn_attr.u32Depth = 2; //0, get fail, 1 - u32BufCount, can get, if bind to other device, must be < u32BufCount
ret = RK_MPI_VI_SetChnAttr(0, channelId, &vi_chn_attr);
ret |= RK_MPI_VI_EnableChn(0, channelId);
if (ret) {
printf("ERROR: create VI error! ret=%d\n", ret);
return ret;
}
return ret;
}
static int vo_init(int VoLayer, int VoDev, int VoChn, int width, int height, ROTATION_E rotation) {
int ret = RK_SUCCESS;
VO_PUB_ATTR_S stVoPubAttr;
VO_VIDEO_LAYER_ATTR_S stLayerAttr;
VO_CHN_ATTR_S stChnAttr;
ret = RK_MPI_VO_BindLayer(VoLayer, VoDev, VO_LAYER_MODE_VIDEO);
if (ret != RK_SUCCESS) {
RK_LOGE("%s RK_MPI_VO_BindLayer failed, ret = 0x%X", __func__, ret);
return ret;
}
memset(&stVoPubAttr, 0, sizeof(VO_PUB_ATTR_S));
memset(&stLayerAttr, 0, sizeof(VO_VIDEO_LAYER_ATTR_S));
memset(&stChnAttr, 0, sizeof(VO_CHN_ATTR_S));
stVoPubAttr.enIntfType = VO_INTF_DEFAULT;
stVoPubAttr.enIntfSync = VO_OUTPUT_DEFAULT;
ret = RK_MPI_VO_SetPubAttr(VoDev, &stVoPubAttr);
if (ret != RK_SUCCESS) {
RK_LOGE("%s RK_MPI_VO_SetPubAttr failed, ret = 0x%X", __func__, ret);
return ret;
}
ret = RK_MPI_VO_Enable(VoDev);
if (ret != RK_SUCCESS) {
RK_LOGE("%s RK_MPI_VO_Enable failed, ret = 0x%X", __func__, ret);
return ret;
}
/* Enable Layer */
stLayerAttr.enPixFormat = RK_FMT_RGB888;
stLayerAttr.enCompressMode = COMPRESS_AFBC_16x16;
// stLayerAttr.enPixFormat = RK_FMT_YUV420SP;
// stLayerAttr.enCompressMode = COMPRESS_MODE_NONE;
stLayerAttr.stDispRect.s32X = 0;
stLayerAttr.stDispRect.s32Y = 0;
stLayerAttr.stDispRect.u32Width = width;
stLayerAttr.stDispRect.u32Height = height;
stLayerAttr.stImageSize.u32Width = width;
stLayerAttr.stImageSize.u32Height = height;
stLayerAttr.u32DispFrmRt = 25;
ret = RK_MPI_VO_SetLayerAttr(VoLayer, &stLayerAttr);
if (ret != RK_SUCCESS) {
RK_LOGE("%s RK_MPI_VO_SetLayerAttr failed, ret = 0x%X", __func__, ret);
return ret;
}
RK_MPI_VO_SetLayerSpliceMode(VoLayer, VO_SPLICE_MODE_RGA);
ret = RK_MPI_VO_EnableLayer(VoLayer);
if (ret != RK_SUCCESS) {
RK_LOGE("%s RK_MPI_VO_EnableLayer failed, ret = 0x%X", __func__, ret);
return ret;
}
stChnAttr.stRect.s32X = 0;
stChnAttr.stRect.s32Y = 0;
stChnAttr.stRect.u32Width = width;
stChnAttr.stRect.u32Height = height;
stChnAttr.u32FgAlpha = 255;
stChnAttr.u32BgAlpha = 0;
stChnAttr.enMirror = MIRROR_NONE;
// stChnAttr.enRotation = ROTATION_90;
stChnAttr.enRotation = rotation;
stChnAttr.u32Priority = 1;
ret = RK_MPI_VO_SetChnAttr(VoLayer, VoChn, &stChnAttr);
if (ret != RK_SUCCESS) {
RK_LOGE("%s RK_MPI_VO_SetChnAttr failed, ret = 0x%X", __func__, ret);
return ret;
}
ret = RK_MPI_VO_EnableChn(VoLayer, VoChn);
if (ret != RK_SUCCESS) {
RK_LOGE("%s RK_MPI_VO_EnableChn failed, ret = 0x%X", __func__, ret);
return ret;
}
RK_LOGI("%s Create vo [dev: %d, layer: %d, chn: %d] success!", __func__, VoDev, VoLayer, VoChn);
return ret;
}
static int vo_deinit(int VoLayer, int VoDev, int VoChn) {
int ret = 0;
ret = RK_MPI_VO_DisableChn(VoLayer, VoChn);
if (ret != RK_SUCCESS) {
RK_LOGE("%s RK_MPI_VO_DisableChn failed, ret = 0x%X", __func__, ret);
return ret;
}
ret = RK_MPI_VO_DisableLayer(VoLayer);
if (ret != RK_SUCCESS) {
RK_LOGE("%s RK_MPI_VO_DisableLayer failed, ret = 0x%X", __func__, ret);
return ret;
}
ret = RK_MPI_VO_Disable(VoDev);
if (ret != RK_SUCCESS) {
RK_LOGE("%s RK_MPI_VO_Disable failed, ret = 0x%X", __func__, ret);
return ret;
}
ret = RK_MPI_VO_UnBindLayer(VoLayer, VoDev);
if (ret != RK_SUCCESS) {
RK_LOGE("%s RK_MPI_VO_UnBindLayer failed, ret = 0x%X", __func__, ret);
return ret;
}
RK_MPI_VO_CloseFd();
RK_LOGE("%s Destroy vo [dev: %d, layer: %d, chn: %d] success!", __func__, VoDev, VoLayer, VoChn);
return ret;
}
static RK_CHAR optstr[] = "?::w:h:I:l:d:r:";
static void print_usage(const RK_CHAR *name) {
printf("usage example:\n");
printf("\t%s simple_vi_get_frame_send_vo -w 1024 -h 600 -I 0 -l 0 -d 0\n", name);
printf("\t-w | --width: VI width, Default:1920\n");
printf("\t-h | --heght: VI height, Default:1080\n");
printf("\t-I | --camid: camera ctx id, Default 0. "
"0:rkisp_mainpath,1:rkisp_selfpath,2:rkisp_bypasspath\n");
printf("\t-l | --layer: Vo layer, Default 0. ");
printf("\t-d | --device: Vo device, Default 0. ");
printf("\t-r | --device: Vo device rotation, Default 0. ");
}
// /oem/usr/bin/simple_vi_get_frame_send_vo_rv1106 -w 480 -h 854 -I 0 -l 0 -d 0
// ./luckfox_pico_rtsp_yolov5 -w 480 -h 854 -I 0 -l 0 -d 0
// ./luckfox_pico_rtsp_yolov5 -r 1
int main(int argc, char *argv[]) {
RK_S32 s32Ret = RK_FAILURE;
MPP_CHN_S stSrcChn, stVoChn;
int c;
int ret = -1;
while ((c = getopt(argc, argv, optstr)) != -1) {
switch (c) {
case 'w':
u32Width = atoi(optarg);
break;
case 'h':
u32Height = atoi(optarg);
break;
case 'I':
s32chnlId = atoi(optarg);
break;
case 'l':
VoLayer = atoi(optarg);
break;
case 'd':
VoDev = atoi(optarg);
break;
case 'r':
VoRotation = (ROTATION_E)atoi(optarg);
break;
case '?':
default:
print_usage(argv[0]);
return -1;
}
}
printf("#Resolution: %dx%d\n", u32Width, u32Height);
printf("#CameraIdx: %d\n\n", s32chnlId);
printf("#Vo Layer: %d\n\n", VoLayer);
printf("#Vo Devices: %d\n\n", VoDev);
signal(SIGINT, sigterm_handler);
// rkaiq init
RK_BOOL multi_sensor = RK_FALSE;
const char *iq_dir = "/etc/iqfiles";
rk_aiq_working_mode_t hdr_mode = RK_AIQ_WORKING_MODE_NORMAL;
SAMPLE_COMM_ISP_Init(0, hdr_mode, multi_sensor, iq_dir);
SAMPLE_COMM_ISP_Run(0);
if (RK_MPI_SYS_Init() != RK_SUCCESS) {
RK_LOGE("rk mpi sys init fail!");
goto __FAILED;
}
vi_dev_init();
vi_chn_init(s32chnlId, u32Width, u32Height);
s32Ret = vo_init(VoLayer, VoDev, VoChn, u32Width, u32Height, VoRotation);
// s32Ret = vo_init(VoLayer, VoDev, VoChn, u32Height, u32Width, VoRotation);
if (s32Ret != RK_SUCCESS) {
printf("vo[%d:%d:%d:%dx%d r%d] init failed 0x%X", VoLayer, VoDev, VoChn, u32Height, u32Width, (int)VoRotation *90, s32Ret);
goto __FAILED;
}
// VI → VO
stSrcChn.enModId = RK_ID_VI;
stSrcChn.s32DevId = 0;
stSrcChn.s32ChnId = s32chnlId;
stVoChn.enModId = RK_ID_VO;
stVoChn.s32DevId = 0;
stVoChn.s32ChnId = VoChn;
#if VI_bin_VO
printf("====RK_MPI_SYS_Bind VI[0] to VO[0]====\n");
s32Ret = RK_MPI_SYS_Bind(&stSrcChn, &stVoChn);
printf("====bind ret 0x%X====\n", s32Ret);
if (s32Ret != RK_SUCCESS) {
printf("VI[0] bind VO[0] ch failed 0x%X", s32Ret);
goto __FAILED;
}
printf("====bind OK====\n");
#else
pthread_t main_tid;
pthread_create(&main_tid, NULL, GetMediaBuffer0_thread, NULL);
#endif
while (!quit) {
usleep(50000);
}
#if not VI_bin_VO
pthread_join(main_tid, NULL);
#endif
s32Ret = RK_MPI_SYS_UnBind(&stSrcChn, &stVoChn);
if (s32Ret != RK_SUCCESS) {
printf("RK_MPI_SYS_UnBind fail %x", s32Ret);
}
s32Ret = RK_MPI_VI_DisableChn(0, s32chnlId);
printf("%s RK_MPI_VI_DisableChn 0x%X", __func__, s32Ret);
s32Ret = RK_MPI_VI_DisableDev(0);
printf("%s RK_MPI_VI_DisableDev 0x%X", __func__, s32Ret);
vo_deinit(VoLayer, VoDev, VoChn);
ret = 0;
__FAILED:
printf("test running exit:%d", s32Ret);
RK_MPI_SYS_Exit();
return ret;
}
在 Luckfox Pico Ultra W(RV1106)上执行输出
Code: Select all
[root@luckfox luckfox_pico_rtsp_yolov5_demo]# ./luckfox_pico_rtsp_yolov5
#Resolution: 480x854
#CameraIdx: 0
#Vo Layer: 0
#Vo Devices: 0
rkaiq log level ff1
XCORE:K:rk_aiq_init_lib, ISP HW ver: 32
XCORE:K:
************************** VERSION INFOS **************************
version release date: 2024-2-18
AIQ: AIQ v5.0x5.0
git logs:
25bd14e RV1106: smart_door: release rga/isp/mpp for V1.3.0
99d080a RV1106/RV1103: Battery/Doorbell: release kmpp/rockit-ko for V1.3.2
6458e2a RV1106/RV1103: Battery/Doorbell: release kmpp/rockit-ko for V1.3.1
e8dab39 RV1106: CVR: release rga/isp/mpp for V1.1.0
a021b32 RV1106/RV1103: Battery/Doorbell: release kmpp/rockit-ko for V1.3.0
************************ VERSION INFOS END ************************
ID: 0, sensor_name is m00_f_gc2053 4-0037, iqfiles is /etc/iqfiles
XCORE:K:rk_aiq_uapi_sysctl_preInit_devBufCnt: dev_ent:rkraw_rx, buf_cnt:2
IPCSERVER:K:cid[0] Process path:/tmp/UNIX.domain0, sockfd:13
XCORE:K:cid[0] rk_aiq_uapi_sysctl_init success. iq:/etc/iqfiles/gc2053_CMK-OT2274-V10_28IRC-F20.json
CAMHW:E:failed to set hdr mode 0
XCORE:K:cid[0] rk_aiq_uapi_sysctl_prepare success. mode:0
rk_aiq_uapi2_sysctl_init/prepare succeed
CAMHW:K:cid[0] start success. isGroup:0, isOnline:1, isMultiIsp:0, init_ens:0x1bfc8ffc473b
XCORE:K:cid[0] rk_aiq_uapi_sysctl_start success.
rk_aiq_uapi2_sysctl_start succeed
rockit log path (null), log_size = 0, can use export rt_log_path=, export rt_log_size= change
log_file = (nil)
RTVersion 13:46:17-188 {dump :064} ---------------------------------------------------------
RTVersion 13:46:17-190 {dump :065} rockit version: git-4720dc10a Tue Apr 30 15:47:55 2024 +0800
RTVersion 13:46:17-191 {dump :066} rockit building: built- 2024-04-30 15:54:26
RTVersion 13:46:17-192 {dump :067} ---------------------------------------------------------
(null) 13:46:17-192 {log_level_init :207}
please use echo name=level > /tmp/rt_log_level set log level
name: all cmpi mb sys vdec venc rgn vpss vgs tde avs wbc vo vi ai ao aenc adec
log_level: 0 1 2 3 4 5 6
rockit default level 4, can use export rt_log_level=x, x=0,1,2,3,4,5,6 change
(null) 13:46:17-193 {read_log_level :098} text is all=4
(null) 13:46:17-194 {read_log_level :100} module is all, log_level is 4
vi_dev_init
(null) 13:46:17-200 {monitor_log_level :149} #Start monitor_log_level thread, arg:(nil)
RKViDev 13:46:17-202 {vi_set_dev_attr :612} VI_DEV_ATTR_S all parameter reserved
RTIsp3x 13:46:17-204 {ispInitDevice :591} sensor name = m00_f_gc2053 4-0037
RTDeviceSensorV4 13:46:17-241 {ispOpenDevice :502} v4l2_open(/dev/video0), handler=45
RTDeviceSensorV4 13:46:17-242 {ispOpenDevice :502} v4l2_open(/dev/v4l-subdev2), handler=47
RTDeviceSensorV4 13:46:17-242 {close :112} do RTDeviceSensorV4L2 close
RTDeviceSensorV4 13:46:17-253 {close :112} do RTDeviceSensorV4L2 close
RKViChn 13:46:17-254 {prepareRuntime :354} ---------------------------------------------------------
RKViChn 13:46:17-254 {prepareRuntime :356} vi version: 1.22, name:vvi
RKViChn 13:46:17-257 {prepareRuntime :357} rockit-ko version: vmpi:28ee389dbc33
RKViChn 13:46:17-258 {prepareRuntime :358} rockit-ko building: -2024-05-24-18:15:06
RKViChn 13:46:17-259 {prepareRuntime :359} ---------------------------------------------------------
cmpi 13:46:17-260 {prepareRuntime :378} mb pool create success, MBCnt= 2
RTIsp3x 13:46:17-261 {ispInitDevice :591} sensor name = m00_f_gc2053 4-0037
cmpi 13:46:17-283 {createRuntime :634} >>>>>>>>> Sensor link info dump: <<<<<<<<<
cmpi 13:46:17-283 {createRuntime :636} vicap media name : /dev/media0
cmpi 13:46:17-284 {createRuntime :637} vicap model name : rkcif-mipi-lvds
cmpi 13:46:17-284 {createRuntime :638} camera id : 0
cmpi 13:46:17-285 {createRuntime :639} sensor name : m00_f_gc2053 4-0037
cmpi 13:46:17-285 {createRuntime :641} stream_cif_mipi_id0 video name: /dev/video0
cmpi 13:46:17-286 {createRuntime :642} stream_cif_mipi_id1 video name: /dev/video1
cmpi 13:46:17-286 {createRuntime :643} stream_cif_mipi_id2 video name: /dev/video2
cmpi 13:46:17-287 {createRuntime :644} stream_cif_mipi_id3 video name: /dev/video3
cmpi 13:46:17-287 {createRuntime :646} sensor raw width : 1920
cmpi 13:46:17-287 {createRuntime :647} sensor raw height : 1080
cmpi 13:46:17-288 {createRuntime :648} ---------------------------------------------------------
cmpi 13:46:17-288 {createRuntime :654} isp media name : /dev/media1
cmpi 13:46:17-289 {createRuntime :655} isp model name : rkisp0
cmpi 13:46:17-289 {createRuntime :656} isp driver name : rkisp-vir0
cmpi 13:46:17-289 {createRuntime :657} isp dev name : /dev/v4l-subdev3
cmpi 13:46:17-290 {createRuntime :659} isp rawrd0_m_path : /dev/video17
cmpi 13:46:17-290 {createRuntime :660} isp rawrd1_l_path :
cmpi 13:46:17-290 {createRuntime :661} isp rawrd2_s_path : /dev/video18
cmpi 13:46:17-290 {createRuntime :664} mainpath video name : /dev/video11
cmpi 13:46:17-291 {createRuntime :665} selfpath video name : /dev/video12
cmpi 13:46:17-291 {createRuntime :666} bypasspath video name : /dev/video13
cmpi 13:46:17-291 {createRuntime :667} sensor link type : 2
cmpi 13:46:17-291 {createRuntime :668} sensor is united : 0
cmpi 13:46:17-291 {createRuntime :672} ---------------------------------------------------------
cmpi 13:46:17-291 {createRuntime :711} [non-WRAP MODE]: buff size = 622080
cmpi 13:46:17-292 {open :869} use mmap memory the node_buff_type:0 must be extern(1)!
RTIsp3x 13:46:17-294 {ispInitDevice :591} sensor name = m00_f_gc2053 4-0037
RTDeviceV4L2 13:46:17-316 {open :137} cameraIndex:0, entityName:rkisp_mainpath
RTDeviceV4L2 13:46:17-316 {open :143} open video name(/dev/video11)
RKViChn 13:46:17-317 {setFrameRate :1469} [vi] dev(0) ch(0) illegal param s32SrcFrameRate(0) s32DstFrameRate(0)
RTDeviceV4L2 13:46:17-318 {ispCameraInfo :567} current device:/dev/video11 isn't compatible(cap:0x84201000) device,memoryType:1, retry:0
RTDeviceV4L2 13:46:17-318 {ispInitFormat :767} ioctl VIDIOC_S_FMT OK
cmpi 13:46:17-319 {start :1093} =========== vi Start startRuntime ===========
RTDeviceV4L2 13:46:17-319 {ispStreamOn :458} do ispStreamOn start
CAMHW:K:camId:0, notify_isp_stream_status on
RTDeviceV4L2 13:46:17-473 {ispStreamOn :511} do ispStreamOn done
=== 0 ===
=== 1 ===
mpi_vo 13:46:17-709 {vo_init :071} find a plane type = 1, index = 0, zpos = 0
get a connect id = 70 ,type = 17, type_id = 1, encoder_type = 8
drm_output_create crtc id 66
mpi_vo 13:46:17-711 {RK_MPI_VO_Enable :369} Vodev 0 enable ok
cmpi 13:46:17-713 {vo_init :219} vo_init Create vo [dev: 0, layer: 0, chn: 0] success!
====RK_MPI_SYS_Bind VI[0] to VO[0]====
Segmentation fault (core dumped)
[root@luckfox luckfox_pico_rtsp_yolov5_demo]#