YUYV编码成h.264:Linux视频采集与编码(二)
来源:互联网 发布:张爱玲作品 知乎 编辑:程序博客网 时间:2024/06/07 06:53
YUYV编码成h.264:Linux视频采集与编码(二)
标签: h.264linux存储
2012-05-01 20:39 12737人阅读 评论(5)收藏举报
本文章已收录于:
分类:
作者同类文章X
版权声明:本文为博主原创文章,未经博主允许不得转载。
用V4L2成功采集到了YUYV视频,然后需要将它编码成h.264文件,因为之前有做过将yuv420编码成h.264的程序,所以觉得将yuv422编码成h.264也是大同小异,应该挺简单的。
于是我很开心的写编码函数了,编码yuv420我是参考的这篇和这篇博文,我马上下手,我感到圣母玛丽亚正在向我招手,我觉得我马上就要成功啦 ^_^
可是,我知道,作为一个程序员,如果不遇上一些问题,不遇到一些困难,都会不好意思滴 ^_^
是啊,我遇到困难了,我编码出来的视频是花的,红红绿绿,好像春天百花齐放!
因为参考编码yuv420的代码中也是隔行扫描的,它的yuv序列是下面这样:
YYYY
YYYY
UVUV
于是我天真的认为我的yuv422保存的也是这样的序列,因为它们都是隔行扫描啊。
后来知道了YUYV隔行扫描序列不是这样的,yuv422的序列应该是下面这样:
YU YV YU YV YU YV
就是说UV确实是交叉存储,只不过得和Y一起交叉。
知道了这样的存储序列,要把其编码成h.264就简单啦。
下面看我的编码代码:
- char *y = en->picture->img.plane[0];
- char *u = en->picture->img.plane[1];
- char *v = en->picture->img.plane[2];
- int is_y = 1, is_u = 1;
- int y_index = 0, u_index = 0, v_index = 0;
- int yuv422_length = 2 * en->param->i_width * en->param->i_height;
- //序列为YU YV YU YV,一个yuv422帧的长度 width * height * 2 个字节
- for (i = 0; i < yuv422_length; ++i) {
- if (is_y) {
- *(y + y_index) = *(in + i);
- ++y_index;
- is_y = 0;
- } else {
- if (is_u) {
- *(u + u_index) = *(in + i);
- ++u_index;
- is_u = 0;
- } else {
- *(v + v_index) = *(in + i);
- ++v_index;
- is_u = 1;
- }
- is_y = 1;
- }
- }
注:in 是指向yuv422序列的指针,即指向了yuv422的起始地址。
我们只要将yuv422序列中的
y 赋值给 plane[0]
u 赋值给 plane[1]
v 赋值给 plane[2], 就可以编码了。
- 顶
- 2
- 踩
- 0
- 上一篇V4L2采集yuv视频花屏:Linux视频采集与编码(一)
- 下一篇V4L2视频采集与H.264编码源码大放送:Linux视频采集与编码(三)
我的同类文章
http://blog.csdn.net
- •V4L2视频采集与H.264编码源码大放送:Linux视频采集与编码(三)2012-05-03
- •V4L2采集yuv视频花屏:Linux视频采集与编码(一)2012-05-01
0 0
- YUYV编码成h.264:Linux视频采集与编码(二)
- YUYV编码成h.264:Linux视频采集与编码(二)
- V4L2视频采集与H.264编码源码大放送:Linux视频采集与编码
- V4L2视频采集与H.264编码源码大放送:Linux视频采集与编码(三)
- Android视频数据采集,H.264编码
- V4L2采集YUYV数据—X264编码H264视频实例
- V4L2采集YUYV数据—X264编码H264视频实例
- Linux视频采集与编码 V4L2
- V4L2采集yuv视频花屏:Linux视频采集与编码(一)
- V4L2采集yuv视频花屏:Linux视频采集与编码(一)
- V4L2采集yuv视频花屏:Linux视频采集与编码(一)
- linux视频采集X264编码
- H.264-AVC视频编码原理及实现(二)
- H.264-AVC视频编码原理及实现(二)
- H.264-AVC视频编码原理及实现(二)
- H.264视频编码
- H.264 视频编码
- H.264视频编码
- JAVA求学之路第十七天(File&&InputStream&&OutputStream)
- 设计模式 精华一页纸
- JavaScript基础
- remove needs a query at src/mongo/shell/collection.js:299
- Tab标签页(面试常考)分别用原生js和jquery实现
- YUYV编码成h.264:Linux视频采集与编码(二)
- boost库多线程特性
- 光棍节程序员闯关秀 writeup
- 【ssm个人博客项目实战01】SSM环境搭建
- fortran动态结构体数组的实现
- 阿里云虚拟主机连接MySQL报错 bdm267037493_db.tablename donot exist
- perror 和 strerror 区别
- 《TCP/IP详解卷一:协议》学习笔记六
- 【算法题之路】从尾到头打印链表