Android视频录制之NV21和NV12

从Camera.PreviewCallback接口回调方法onPreviewFrame(byte[] data, Camera camera)回调的data数据,为NV21图像数据,而Android手机识别的是NV12图像数据,所以需要将NV21转化为NV12图像数据。NV21图像数据包括三块区域数据,分别为YVU三块,一个XY像素的图片,他的NV21数据大小为 **byte[XY3/2]**,其中byte[XY]为Y区域,剩下的1/2U和V区域各占1/4;“Y”表示明亮度,“U”和“V”则是色度、浓度。
图1-1 NV21图像数据
在这里插入图片描述
可以发现NV21和NV12数据唯一的区别就是V、U区域的不同,而Y区域数据是相同的。其实data数据只是一个一维数组,但是为了更好理解所以排列成这样。所以NV21->NV12的数据变化其实就是矩阵数据的变化。以下各图分别表示NV12数据的旋转(仅提供90度和270度变化)和镜像变化。
在这里插入图片描述
经过NV12的镜像变化可以为上图所示的数据展示,NV12的镜像变化是分区域的,不是矩阵完全镜像变化,是按照Y,VU区域两个区域分别变化的,而VU是作为一个整体。其实如果你仔细点你会发现NV12的镜像矩阵是NV21的完全镜像矩阵,所以如果你真的要自己完成矩阵的这两步变化,可以直接将NV21进行完全矩阵变化,两步合成一步,可以节省一部分的时间。
NV12数据的旋转
在这里插入图片描述
其实矩阵的变化,我自己已经完成了,但是最终的视频有一定的问题,就是视频中有的帧会出现纵向的分割线,所以自己的方法搁置了,采用了libyuv框架完成的。libyuv才用的是将NV21变成I420,然后通过对I420进行变化,然后将I420变成NV12数据。所以你是打算自己写NV21的数据变化吗?希望这些可以帮助到你。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值