1.帧捕获
在前面的实现过程中,采用了QVideoProbe捕获摄像头数据,在信号绑定之后,传输到QSmartVenc,编码模块是额外放在另外一个线程处理的
QVencParm param;
param.width = 1280;
param.height = 720;
param.code = MPP_VIDEO_CodingAVC;
param.fmt = MPP_FMT_YUV420P;
m_venc.reset(new QSmartVenc(param));
QThread *vencThread = new QThread(this);
m_venc->moveToThread(vencThread);
vencThread->start();
将probe数据绑定到编码模块
connect(m_probe.data(),&QVideoProbe::videoFrameProbed,m_venc.data(),&QSmartVenc::needHandleImage);
2.编码
编码是使用的瑞芯微MPP,参考历程mpi_enc_test,整体接口略显麻烦,基本可以跟着流程不动进行修改。其中需要注意一点的是stride在MPP中需要是16字节对齐,这里最好将输入分辨率也做16字节对齐,这样宽和高就刚好和stride匹配,避免后面填充的时候还有手动计算YUV分量位置.
MppFrame frame = NULL;
MppPacket packet = NULL;
void *buf = mpp_buffer_get_ptr(frm_buf);
f.map(QAbstractVideoBuffer::Rea