Chinaunix首页 | 论坛 | 博客
  • 博客访问: 39416
  • 博文数量: 23
  • 博客积分: 30
  • 博客等级: 民兵
  • 技术积分: 137
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-07 10:58
个人简介

http://blog.csdn.net/shanshanpt/article/details/7419184

文章存档

2017年(22)

2012年(1)

我的朋友

分类: 嵌入式

2017-02-09 14:36:53

前言


    飞思卡尔的vpu可以实现硬件的编解码,同时也提供了ipu接口,可以实现视频流格式的转换,例如YUV422转为YUV420,YUV422转化为RGB888,当然我们也可以通过软件纯代码实现这些功能,但有时候代码实现总是有许多的缺陷,当你视频流很大时,纯代码就无法实现我们想要的效果。


一、ipu环境配置



    首先,你需要配置好LTIB环境,如果你没配置好,可以参考文档飞思卡尔I.MX6Q-LTIB安装配置去配置,配置完成可以在/ltib/rpm/BUILD/-3.0.35/include/linux/目录下找到ipu.h和mxcfb.h,还有一个ipu的库文件/ltib/rootfs/usr/lib/libipu.so,如果你没找到或者没有去配置LTIB环境,也可以直接去下载这些头文件和库文件:,有了ipu的配置环境,后面的程序才能编译通过。


二、ipu视频流格式转换例子实现



    ipu不仅可以实现YUV到YUV的转换,还可以实现YUV到RGB转换,同时也可以实现分辨率的改变;对于有些摄像头只支持YUV422的输出,但是如果你编码需要YUV420的视频流,这时候你就需要IPU的转化;如果你需要对摄像头采集数据通过界面显示刷新出来,摄像头采集YUV的数据,通过IPU转化为RGB,就可以通过界面刷新显示;IPU改变分辨率可以实现不同屏幕大小的适配,但需特别强调,输入分辨率只能实现输入小于1024X1024,大于这两个数值会出错。实现上面这些功能代码基本差不多,就改变一些参数就可以了。核心代码如下:

[cpp] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1.      // Input image size and format  
  2. task.input.width    = 1920;  
  3. task.input.height   = 1080;  
  4. task.input.format   = v4l2_fourcc('N''V''1''2');  
  5.   
  6. // Output image size and format  
  7. task.output.width   = 640;  
  8. task.output.height  = 480;  
  9. task.output.format  = v4l2_fourcc('R''G''B''3');"white-space:pre">    


width、height可以改变输入、输出的分辨率;
v4l2_fourcc里面的参数可以实现YUV到YUV的转换,或者YUV到RGB的转换,对于有哪些格式,你可以去ipu.h中去看;
例子代码下载:

阅读(1028) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~