美文网首页
YUV420格式学习

YUV420格式学习

作者: 慌乱的蚂蚁 | 来源:发表于2017-09-07 14:18 被阅读0次

最初在项目中做实时视频流的时候,采用的方案是,设置Camera Preview格式是NV21,最终MediaCodec需要的格式是I420,由于之前对YUV一无所知,所以一些旋转算法也是在网上淘的,导致有部分是在NV21的时候进行旋转,有部分则是在I420的时候进行旋转,最终还是实现了功能。

最近时间比较多,也要在视频流上增加水印,决定对这部分性能进行优化,所以着重学习了解了一下YUV格式。

在Android文档,Camera里面有这样一句话

If this is never called, the default format will beNV21, which uses the NV21 encoding format.

UsegetSupportedPreviewFormats()to get a list of the available preview formats.

It is strongly recommended that eitherNV21orYV12is used, since they are supported by all camera devices.

在Camera中推荐使用NV21和YV12,因为这两种格式支持所有的相机设备。

但是在Camera2中,推荐使用的格式则是YUV_420_888。

总的来说,在Android里面YUV用得比较多的应该是I420, YV12, NV12和NV21,其中I420和YV12都是Y420P,NV12和NV21都是Y420SP。

这几种格式相同点和区别呢可以这样看:

YUV420SP格式

YUV420SP:图中Y1,Y2,Y9,Y10共用一对UV:U1和V1

YUV420P格式

YUV420P:图中Y1,Y2,Y9,Y10共用一对UV:U1和V1

I420: YYYYYYYY UU VV    =>YUV420P

YV12: YYYYYYYY VV UU    =>YUV420P

NV12: YYYYYYYY UVUV     =>YUV420SP

NV21: YYYYYYYY VUVU     =>YUV420SP

他们的共同点是一个Y代表一个像素点,Y的大小就等于width * height,由于它们都说420格式,所以UV总长位width * height / 2,其中U和V各占一般长度。所以在代码中新建一个byte[]的时候长度为 width * height * 3 / 2。

YV12:

YV12 is a 4:2:0 YCrCb planar format comprised of a WxH Y plane followed by (W/2) x (H/2) Cr and Cb planes.

所以我针对之前项目的改进方案就是,预览输出使用YV12格式,通过转换和旋转转成I420格式。

因为YV12和I420的结构很相似,只需要调换UV分量的位置即可,更方便在同一个循环中同时进行旋转和转换,相比之前的方案旋转和转换是两个循环,这样效率更高。

最终实测,各个方向分别统计了几百帧的数据求算术平均值,YV12->I420比NV21->I420的旋转+转换,每帧少花3ms左右,不管各位看管觉得怎么样,对我来说是个不错的鼓舞。

我的YV12转NV21的代码,虽然是Java层的,速度还不错,每帧耗时小于1ms

下一步优化的目标就是把耗时算法放到JNI层去做。

参考:blog.csdn.net/jefry_xdz/article/details/7931018

www.cnblogs.com/samaritan/p/YUV.html

作者:黄河远去楼依在

链接:http://www.jianshu.com/p/102b8b0797b7

來源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

  • YUV转rgb

    图文详解YUV420数据格式

  • YUV软硬解数据的复制与渲染实现方式

    零. 前言 在之前的YUV420数据格式学习[https://www.jianshu.com/p/f5d8c166...

  • openGL第一天

    前言 工作需要, 要做openGL渲染ffmpeg解码后的yuv420格式的视频流, 索性就把openGL学习一下...

  • YUV420格式学习

    最初在项目中做实时视频流的时候,采用的方案是,设置Camera Preview格式是NV21,最终MediaCod...

  • YUV420格式学习

    最初在项目中做实时视频流的时候,采用的方案是,设置Camera Preview格式是NV21,最终MediaCod...

  • 常见视频格式

    最近一直在做YUV数据的处理和渲染的工作,记录一下常用的YUV420格式。 YUV420的y、u、v通道不是连续交...

  • Android音视频—YUV格式深入浅出

    文章参考: 图文详解YUV420数据格式 YUV主要采样格式理解 YUV格式详解 百度百科和维基百科 概述 本文基...

  • YUV420格式的CVPixelBuffer转换为RGB格式

    ARKit中提取到的CVPixelBuffer为YUV420格式,很多时候我们需要把它转换为RGB格式,然后再进行...

  • 音视频相关问题

    视频相关的问与答: 一、YUV的内存存储格式YUV格式有很多种,比如YUV420,YUV422,YUV444等。比...

  • LibYUV转码裁剪缩放 C++

    32bgra to yuv420转换 yuv420 旋转和镜像 yuv420镜像 yuv保持最大可视范围缩放和裁剪...

网友评论

      本文标题:YUV420格式学习

      本文链接:https://www.haomeiwen.com/subject/ffjijxtx.html