HI3531(20D)支持UVC摄像头2--显示
2 E币
成为会员,免费下载资料
文件大小:6.64 KB
上传者:goodman
时间:2016-02-27 23:10:13
下载量:126
本帖最后由 goodman 于 2016-2-27 23:13 编辑
前面我们已经可以使用V4L2采集到数据了,当然可以保存为YUV,大家都知道YUV数据是没有编码的数据,很大的,同时我们还不支持预览。
今天的修改主要是添加预览的支持,支持的链路为USB(v4l2)---->VPSS---->VO 首先要明白几个问题:
1.摄像机时通过v4l2来取数据并不是通过VI来采集数据的(如果哪位知道通过VI能接入UVC摄像头还请告知)
2.摄像头的采集的是YUV422是packed模式数据格式为(YUYVYUYV),而VPSS 仅支持 SemiPlannar422(数据格式为YYYYUVUV)和 SemiPlannar420(数据格式为YYYYUV)
这里需要转换,这里也产生一个问题就是转换效率问题。
我写了个简单的转换代码,但是这个算法代码效率不高,640x480的分辨率要跑满一个核了,目前还没有好的解决方案.
[code]
buf_start = buffers[buf.index].start;
for(i=0,j=0,k=0; i
y[j] = buf_start;
uv[k] = buf_start[i+3];
y[j+1] = buf_start[i+2];
uv[k+1] = buf_start[i+1];
}
[/code]
代码使用的是sample_vio.c裁剪的,具体请看附件代码sample_vio2.c,同时注意将 common/sample_comm.h 下的
SAMPLE_PIXEL_FORMAT格式改下
[code]
#define SAMPLE_PIXEL_FORMAT PIXEL_FORMAT_YUV_SEMIPLANAR_422
[/code]
编译运行sample_vio2就可以看到摄像头的数据了。
对于编码来说如果是H264的话还的将YUV422转为SemiPlannar420,需要降采样了,难度也不是很大,参看下sample_venc.c就可以做出来了
前面我们已经可以使用V4L2采集到数据了,当然可以保存为YUV,大家都知道YUV数据是没有编码的数据,很大的,同时我们还不支持预览。
今天的修改主要是添加预览的支持,支持的链路为USB(v4l2)---->VPSS---->VO 首先要明白几个问题:
1.摄像机时通过v4l2来取数据并不是通过VI来采集数据的(如果哪位知道通过VI能接入UVC摄像头还请告知)
2.摄像头的采集的是YUV422是packed模式数据格式为(YUYVYUYV),而VPSS 仅支持 SemiPlannar422(数据格式为YYYYUVUV)和 SemiPlannar420(数据格式为YYYYUV)
这里需要转换,这里也产生一个问题就是转换效率问题。
我写了个简单的转换代码,但是这个算法代码效率不高,640x480的分辨率要跑满一个核了,目前还没有好的解决方案.
[code]
buf_start = buffers[buf.index].start;
for(i=0,j=0,k=0; i
uv[k] = buf_start[i+3];
y[j+1] = buf_start[i+2];
uv[k+1] = buf_start[i+1];
}
[/code]
代码使用的是sample_vio.c裁剪的,具体请看附件代码sample_vio2.c,同时注意将 common/sample_comm.h 下的
SAMPLE_PIXEL_FORMAT格式改下
[code]
#define SAMPLE_PIXEL_FORMAT PIXEL_FORMAT_YUV_SEMIPLANAR_422
[/code]
编译运行sample_vio2就可以看到摄像头的数据了。
对于编码来说如果是H264的话还的将YUV422转为SemiPlannar420,需要降采样了,难度也不是很大,参看下sample_venc.c就可以做出来了
展开》
折叠》