版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
大家好,又见面了,我是你们的朋友全栈 YV12和NV12都是YUV420平面格式中的一种,其中YV12格式在我所接触的项目中使用得比较多,而NV12是Intel制定的的格式,在Intel的平台显示和支持性能最值 ,NV12 是用于 DirectX VA 的首选 4:2:0 像素格式。 关于YV12和NV12的内存布局格式说明如下: 1.YV12格式内存布局为 2.NV12格式内存布局为 3.YV12转RGB 在项目的前期由于时间过紧,在截图功能时没有考虑周全,截图之后有两个问题:
nv12 格式 nv12 转 rgb 两种格式 代码 void NV12_T_RGB(unsigned int width, unsigned int height, unsigned char* Y,
yuv420sp的分两种,nv21和nv12。 ,需要将nv21转为nv12 private void NV21ToNV12(byte[] nv21,byte[] nv12,int width,int height){ if(nv21 == (nv21, 0, nv12, 0, framesize); for(i = 0; i < framesize; i++){ nv12[i] = nv21[i]; } for (j = 0; j < framesize/2; j+=2) { nv12[framesize + j-1] = nv21[j+framesize]; } for (j = 0; j < framesize/2; j+=2) { nv12[framesize + j] = nv21[j+framesize-1]; } } 发布者
截图原理参考: 从NV12中裁剪子画面注意事项 这是源码: //裁剪的坐标X和Y必须是偶数,否则UV和Y会有偏差, 注意点,linesize对其为1 int NV12CropTo420P(uint8_
YU12格式也叫I420格式,是YUV420p其中的一种,NV12是YUV420sp的一种。 YU12和NV21中YUV数据的排列方式为: YU12:YYYYYYYY UU VV NV12:YYYYYYYY UV UV 针对数据的排列结构,本文将NV12转为YU12。 主要转换接口实现为: int NV12toYU12(char *data, char *out, int width, int height); 功能描述 : Nv12格式转YU12 输入参数 : data : NV12图片数据指针 out :YU12图片地址 width: 图像宽度 height : 图像高度 输出参数 : out,YU12图片地址 返 回 值 : int类型 NV12:YYYYYYYY UVUV => YU12: YYYYYYYY UU VV //Y memcpy(out, data, width * height); printf("Y分量转换完成!
libyuv实现nv resize 标签:src,nv21,dst,uv,uint8,height,width,nv12,resize 来源: https://www.cnblogs.com/cyssmile
NV12格式是yuv420格式的一种,NV12格式的u,v排布顺序为交错排布,假如一幅图像尺寸为W*H,则先Y分量有W*H个,然后U分量和V分量交错排布,U分量和V分量各有W*H/4个,U,V加起来总数是 NV12内存YUV分量排布如下所示: ? 下面是CUDA实现的NV12格式到BGR格式的转换代码。
故事的背景要从之前的FFMpeg系列文章演示代码说起,有大佬留言工程中的NV12渲染shader中存在一个问题 确实是uv的取值写反了,渲染下来图像的颜色会不对 之前这个shader并没有做过测试 librender内,新增RenderTestActivity 运行下useRenderTestActivity,效果如下,可以看到画面颜色异常 RenderTestActivity的逻辑非常简单 NV12 的数据我们通过ffmpeg来生成 修复渲染颜色异常 在NV12Drawer中,UV纹理采用的是GL_LUMINANCE_ALPHA 查看官方文档对这个format的解释 结合NV12的YUV排布可以得到 内部做了一些常用格式的渲染支持、切换和缓存管理,目前能力虽然比较简陋,但是后续还会逐步迭代、重构和支持Vulkan(Vulkan简介) 用法也很简单,可以参考RenderTestActivity 上面NV12 渲染的流程控制在draw()中,会先将NV12数据绘制到FBO,中间可以加一些filter处理,最后再draw上屏 完整代码可以点击文末的"阅读原文"获取,欢迎各位大佬提issue和PR ~~END~
NV12是英特尔定义的视频格式,它在英特尔硬件平台上是原生态支持,它的格式如下: 在YV12中U和V都是连续排布的,而在NV12中,U和V就交错排布的。
下面代码实现了如何使用FFmpeg库将NV12格式的视频数据编码为H.265格式的数据,并将其保存在内存中。函数接受NV12数据、宽度和高度作为输入,并返回编码后的H.265数据和数据大小。 二、NV12和H265格式详细介绍 NV12和H265都是视频编码中经常使用的像素格式,下面分别介绍这两种格式的特点和使用场景。 【1】NV12像素格式 NV12是一种YUV像素格式,常用于视频编码和解码过程中。它是一种planar格式,即Y和UV分量分别存储在不同的平面中。其中,Y分量表示亮度信息,UV分量表示色度信息。 NV12格式的存储顺序为:先存储所有的Y分量,然后存储所有的U和V分量,U和V交错存储。因此,NV12格式的数据大小为(1.5 x 图像宽度 x 图像高度)字节。 需要提供NV12格式的输入文件路径、输出H.265格式文件路径以及图像的宽度和高度。
MPSoC VCU Ctrl-SW 2020.2 输出NV12的YUV文件 付汉杰 hankf@xilinx.com 目录 MPSoC VCU Ctrl-SW 2020.2 输出NV12的YUV文件 1 RAW yuv player的NV12格式,也是Ctrl-SW的NV12格式,可以显示修改后的Ctrl-SW输出的YUV NV12文件。 2.1.1. 技巧 各种YUV文件,第一片数据一般都是分量Y。 输出NV12/NV16格式文件 如果Ctrl-SW能输出NV12/NV16格式的文件,Ctrl-SW就能直接对自己的文件进行编码,测试时更加方便。 所以输出NV12/NV16的视频时,也有多种组合。为了测试方便,实现了输出各种组合的NV12/NV16的视频。 如果没有特殊说明,图像都是NV12格式的,也是以NV12格式显示。 查看YUV文件时,必须设置正确的分辨率和格式,否则数据显示会混乱。
在测试MPSoC VCU的编解码时,经常需要使用NV12 YUV文件。YUV文件很大,所以经常依靠解压MP4等文件来产生NV12 YUV文件。 FFMpeg是一个强大的工具,可以用来从MP4文件生成NV12 YUV文件。 但是在使用FFMpeg时,发现使用选项“-pixel_format nv12”时,得到的文件实际上是yuv420p格式的,不是NV12格式。 需要使用选项“-pix_fmt nv12”,才能得到NV12格式的文件。如果格式不对,播放出来的图像是不正确的。 / 0x3231564E), nv12”,说明它使用了NV12格式。
导言本文是一个优化的NV12图像缩放程序。有不同类型的图像缩放算法。它图像缩放算法的复杂性与图像质量损失和性能低下有关。我决定选择最简单的“最近邻居插值”和双线性插值,以调整NV12图像的大小。 背景NV12是一种YUV系列格式。在你阅读我的提示之前。你需要对格式有一些基本的概念。并且知道什么是插值缩放算法。如果您之前厌倦了RGBA格式的图像比例,您会更容易理解我的程序是如何工作的。 NV12格式内存中的NV12格式图像阵列类似于:YYYYYYYY…UVUV…NV12是一种平面格式。它也被称为YUV420sp。有三架飞机:内存中Y平面的长度为“宽度*高度”。 the function * @param srcWidth width of the input nv12 image * @param srcHeight height of the input Resizing NV12 image using Nearest Neighbor Interpolation and Bilinear Interpolation algorithms
video/x-raw, format=NV12, width=1280, height=720, framerate=30/1 ! videoconvert ! video/x-raw, format=NV12, width=1280, height=720, framerate=30/1 ! videoconvert ! video/x-raw, format=NV12, width=1280, height=720, framerate=30/1 ! videoconvert ! video/x-raw, format=NV12, width=1280, height=720, framerate=30/1 ! videoconvert ! video/x-raw, format=NV12, width=1280, height=720, framerate=30/1 ! videoconvert !
网上关于使用libyuv库在Linux下对NV12格式进行缩放的教程是在太少了,对于博主这种菜鸡来说简直就是煎熬,因为本人阅读源码的能力实在很差啊!!! 执行可执行文件,可将像素为1920*1080的NV12格式的图片缩小成1280*720。 ---- 2、YUV420简介 libyuv不能对NV12格式的图片直接缩放,必须先把NV12转化成I420(内存分布格式是与YV12一样的),其实NV12和YV12同属YUV420,只是UV分量的内存分布形式不一样而已 ---- 3、程序实现缩小NV12格式图片 实现算法:利用libyuv库的libyuv::NV12ToI420()函数将NV12转换成I420,再利用libyuv::I420Scale()函数将I420 http://download.csdn.net/detail/sinat_36684217/9888652 5、NV12加矩形方框效果 想了解关于在NV12格式图片上加上矩形方框的效果可以去看我的另一博客篇
摘要 关于像素格式转换,搜到的帖子基本是NV16转RGB24 或 NV12转RGB24,对于NV16转NV12并没太多资料,因此我打算参照这两个像素格式的结构,实现这个转换接口。 像素格式介绍 NV12则属于YUV420SP类型,整帧图像的大小为 Width * Height * 3 / 2。 NV12的 Ubxx取值NV16奇数行的Cbxx NV12的 Urxx取值NV16偶数行的Crxx 例如: NV16 NV12 Cb00 Cb01 ----> Ub00 Ub01 * nv12_buff:NV12格式的一帧数据,大小为 w * h * 3 / 2,作为函数输出。 * w:图像的宽度。 * h:图像高度。 nv12 test.nv12 由图可见,转换后色度都是正确的。
本文针对NV12像素格式图像的叠加(两张图片均为NV12格式),如果想扩展叠加其他图片,则需先将其他图片转为NV12,然后再进行叠加。 如下提供bmp格式的顶图转换路径: 顶图(bmp) —> RGB24 —> NV12 —> 执行叠加操作 NV12格式阐述 nv12像素的存储格式可参考:https://blog.csdn.net Y数据内的红框 顶图的宽高为144×48,根据NV12的像素组织特点可知,(x,y)对应的红框大小也为144×48,此处的(x,y)对应代码中的(pos_x, pos_y)。 *w; for (j=0; j < 144; j++) { Y(x+j, y+i) = rect_tmp_y + j; } } UV数据内的红框 顶图的宽高为144×48,根据NV12 images/top.nv12 查看叠加后底图命令:ffplay -s 1920x1080 -f rawvideo -pixel_format nv12 images/output.nv12
常用的CODEC格式-planar,如图: YV12 NV12 W即图像的宽度,H即图像的高度,Stride表示图像行的跨度,超出W部分为填充数据,主要目的是为了字节对齐,一般以16 而NV12的UV是在一个Plane中交错存放,因此用两个Plane表示即可。 从右侧的数据排布图可见YV12和NV12都是YUV 4:2:0采样,每四个Y共用一组UV分量,已用颜色标明Y1、Y2、Y7、Y8共用U1、V1,并且在内存中连续排布。 (5)NV12、NV21(属于YUV420) NV12和NV21属于YUV420格式,是一种two-plane模式,即Y和UV分为两个Plane,但是UV(CbCr)为交错存储,而不是分为三个plane YUV420SP, Y分量平面格式,UV打包格式, 即NV12。 NV12与NV21类似,U 和 V 交错排列,不同在于UV顺序。
案例使用LinuxSDK开发包所提供的libvencoder.so库文件,支持输入像素格式为NV12、NV21、I420、YV12,支持输出编码格式为JPEG。 本案例使用输入像素格式为NV12,输出编码格式为JPEG。案例测试本案例使用逸森(Eviresn)公司的倒车后视高清CCD摄像头,NTSC制式,帧率可达30fps。 /v4l2_enc_udp -m list -c 0 -d /dev/video4备注:目前摄像头仅支持NV12格式的图像。由于官方Linux系统驱动存在缺陷,上图查询摄像头的信息不准确。 参数"-m save"设置运行模式为save,"-d /dev/video4"设置设备节点"/dev/video4","-F NV12"设置采集图像格式为NV12,"-i 720*480"设置摄像头分辨率为 /v4l2_enc_udp -m save -c 0 -d /dev/video4 -F NV12 -i 720*480 -I 720*480 -f 30 -e .