YUV格式学习:NV12和YUV420P格式互换
NV12和YUV420的转换是在相同采样空间的转换,只是个别分量位置的调整,只要明白了Y、U、V分量的布置,就很容易写出来。
代码如下:
/**
yyyy yyyy
uv uv
->
yyyy yyyy
uu
vv
*/
void yuv420sp_to_yuv420p(unsigned char* yuv420sp, unsigned char* yuv420p, int width, int height)
{int i, j;int y_size = width * height;unsigned char* y = yuv420sp;unsigned char* uv = yuv420sp + y_size;unsigned char* y_tmp = yuv420p;unsigned char* u_tmp = yuv420p + y_size;unsigned char* v_tmp = yuv420p + y_size * 5 / 4;// ymemcpy(y_tmp, y, y_size);// ufor (j = 0, i = 0; j < y_size/2; j+=2, i++){u_tmp[i] = uv[j];v_tmp[i] = uv[j+1];}
}/**
yyyy yyyy
uu
vv
->
yyyy yyyy
uv uv
*/
void yuv420p_to_yuv420sp(unsigned char* yuv420p, unsigned char* yuv420sp, int width, int height)
{int i, j;int y_size = width * height;unsigned char* y = yuv420p;unsigned char* u = yuv420p + y_size;unsigned char* v = yuv420p + y_size * 5 / 4;unsigned char* y_tmp = yuv420sp;unsigned char* uv_tmp = yuv420sp + y_size;// ymemcpy(y_tmp, y, y_size);// ufor (j = 0, i = 0; j < y_size/2; j+=2, i++){// 此处可调整U、V的位置,变成NV12或NV21
#if 01uv_tmp[j] = u[i];uv_tmp[j+1] = v[i];
#elseuv_tmp[j] = v[i];uv_tmp[j+1] = u[i];
#endif}
}
后记:
一口气把自己研究很久的东西写出来,好像都没写到点子上。以前也尝试过写技术性很强的文章,到处找资料,找出处,但后来发觉自己不是那块料,于是就直接贴代码,理论的东西反而不说——因为说不清,也怕说错。
关于YUV,初步听说是在6、7年前的大学,开始接触是在4、5年前,而真正了解其原理,却是近些年。学习进度不可谓不慢。写出来,也算有个交待。也为自己准备实现的YUV播放器做些准备。
迟 2015.8.5 晚上
YUV格式学习:NV12和YUV420P格式互换相关推荐
- 【Android】直播必备之YUV使用总结 —— 常用的几种格式:NV21/NV12/YV12/YUV420P的区别
转载自 gitzzp 的博客 [Android]直播必备之YUV使用总结 -- 常用的几种格式:NV21/NV12/YV12/YUV420P的区别 转自:http://www.cnblogs.com/ ...
- 学习记录:RGBA格式数据加边框
项目场景: 最近学习使用ffmpeg在做一个视频缩略图的例子.在这里做一个记录. 在网上找了很多资料,加边框都是更改图片外围数据,这样图片会缺失一部分,不太符合我的需求. 按照这个思路,下面是一种实现 ...
- ffmpeg4.4项目学习--音视频基本格式
目录 一.引言 二.音视频基本格式学习 ------> 2.1.图像压缩数据格式 ------> 2.2.PCM ------> 2.3.H264 ------> 2.4.AA ...
- FFMPEG 将YUV420P格式数据编码成H.264
FFMPEG学习 将YUV420P格式数据编码成H.264 前言 一.编码流程 二.代码实现 三.实现效果 四.总结 前言 在学习FFMPEG过程中,我们需要获取到H264码流,但是我们采集到的一般都 ...
- android nv21 nv12,視頻存儲格式YUV420 NV12 NV21 i420 YV12
1)YUV簡介 YUV格式有兩大類:planar和packed. 對於planar的YUV格式,先連續存儲所有像素點的Y,緊接着存儲所有像素點的U,隨后是所有像素點的V. 對於packed的YUV格式 ...
- YUV的plannar,packet及semi-planar格式及RGB
plannar模式:三维分开存储 在AVFrame::data[]中存储如下: data[0]---Y分量, Y1, Y2, Y3, Y4, Y5, Y6, Y7, Y8-, Y16, - data[ ...
- FFmpeg学习4:音频格式转换
前段时间,在学习试用FFmpeg播放音频的时候总是有杂音,网上的很多教程是基于之前版本的FFmpeg的,而新的FFmepg3中audio增加了平面(planar)格式,而SDL播放音频是不支持平面格式 ...
- AVI音视频封装格式学习(三)——AVI 数据结构解析
这里介绍AVI会使用到的数据结构,为了避免翻译引入歧义,决定该部分还是使用英文原文,如后续有时间再进行翻译. AVIMAINHEADER structure The AVIMAINHEADER str ...
- FFmpeg视频解码中的YUV420P格式
参考文章 在做基于FFmpeg解码的视频播放时,需要涉及到帧数据存储的YUV与RGB格式,所以了解了一下,参考下述博文. https://blog.csdn.net/lanxiaziyi/articl ...
最新文章
- 如何在 Linux 中创建一个共享目录
- java中的枚举类_java中的枚举类型
- concurrent(四)Condition
- Introduction-to-React-JS -- 2 Helloworld
- 新年中国节必备背景素材|传统纹样,这便是中国之美!
- python 生成excel_python 数据生成excel导出(xlwt,wlsxwrite)代码实例
- [20] 鼓状物(Drum)图形的生成算法
- 《别输在不会表达上》— 综合素质提升书籍
- axure文件如何加密_Axure教程:密码可见与不可见的切换设置
- C、C++编程学习资料收藏
- 用HTML和CSS制作一个带图片的旋转立方体
- Linux和windows导入scv数据文件
- SQLSERVER Agent服务无法启动
- unpack python_python数据处理之 ddt,@data, @unpack
- Reflector、ReflectorFactory的前世
- CentOS下删除和安装JDK
- 傅里叶变换(真正的通俗易懂)
- Specular/Glossiness传统材质简单转换金属度流程材质metallic/roughness小记
- 一文了解什么是财务RPA机器人
- Vmware虚拟机无法识别系统移动硬盘或者虚拟机右下角没有USB图标
热门文章
- 苹果下周将推出紫色版iPhone 13 但只有高端版本
- 被美列入投资黑名单后 商汤重启公开招股发行规模定价没变
- 太畅销了!AirTag送货时间延长至4-5周
- 杨笠代言电脑遭投诉抵制,网友吵翻!英特尔回应了...
- Redmi K40系统截图曝光:配备顶级2K屏幕+骁龙870移动平台
- 1月25日再次开抢!三星Galaxy S21系列标准版已多次开售即罄
- 豪宅周边5家盒马却不配送?盒马回应...
- iPhone 12 Pro最新概念图:五摄相机模组也带下巴
- 教育部官宣延期开学 这些教培机构在线捐课捐资
- 高通孟樸:5G+AI将会是移动互联网主流趋势