前言
工作中,遇到将 一路一路码流从vi进入,通过vpss处理后,再送给智能算法处理。
软件大致流程:
使能对应物理通道 vpss_enablechn
创建获取码流线程HI_MPI_VPSS_GetChnFrame
HI_MPI_SYS_Mmap
交给算法模块
YUV_PRI_INFO yuv_priv;
yuv_priv.yuvPtr = y_vir_addr;//malloc(ysize+uvsize);
yuv_priv.yuvLen =ysize;//ysize+uvsize;
yuv_priv.yuv_w = pVBuf->u32Stride[0];
yuv_priv.yuv_h = pVBuf->u32Height;
yuv_priv.yuv_pts = pVBuf->u64pts;
yuv_priv.yuv_sequence = p_viextchan->seq;
yuv数据格式是sp420
主动丢帧跑算法,将yuv放入队列
queue_push(&priv->yuv_queue,&yuv_packet->entry))
struct yuvPacket {
struct list_head entry;
JW_FRAME_DATA data;
uint64 sequence;
int payloadtype;
};
算法处理线程
从对列中取出yuv数据
//从队列中得到一帧视频,进行处理
struct yuvPacket *packet = list_entry(queue_pop(&priv->yuv_queue), struct yuvPacket, entry);
交给算法处理,将结果放入队列中
编码和告警上报线程,从队列中取出结果,交给其他的模块处理。