精华内容
下载资源
问答
  • 是一个相互转换的工具,在android Camera parameters.setPreviewFormat(ImageFormat.YV12);...YUV420P、I420、NV12、YV12格式转NV12保存图片 // 将yv12的帧转化为h254的帧 ?如果你输出格式是nv21 或者 yuy2 转图片
  • android平台下基于Camera详解NV21(YUV420P)、NV12(YUV420SP)和RGBA、RGB、BGRA、BGR 概述 NV21 参考: https://blog.csdn.net/leixiaohua1020/article/details/50534150 ...

    音视频实践学习

    概述

    YUV模型是根据一个亮度(Y分量)和两个色度(UV分量)来定义颜色空间,常见的YUV格式有YUY2、YUYV、YVYU、UYVY、AYUV、Y41P、Y411、Y211、IF09、IYUV、YV12、YVU9、YUV411、YUV420等,其中比较常见的YUV420分为两种:YUV420P和YUV420SP

    我们在android平台下使用相机默认图像格式是NV21属于YUV420SP格式

    YUV采样

    YUV 4:4:4采样,每一个Y对应一组UV分量,一个YUV占8+8+8 = 24bits 3个字节。
    YUV 4:2:2采样,每两个Y共用一组UV分量,一个YUV占8+4+4 = 16bits 2个字节。
    YUV 4:2:0采样,每四个Y共用一组UV分量,一个YUV占8+2+2 = 12bits 1.5个字节。
    

    我们最常见的YUV420P和YUV420SP都是基于4:2:0采样的,所以如果图片的宽为width,高为heigth,在内存中占的空间为width * height * 3 / 2,其中前width * height的空间存放Y分量,接着width * height / 4存放U分量,最后width * height / 4存放V分量

    YUV420P(YU12和YV12)格式

    YUV420P又叫plane平面模式Y , U , V分别在不同平面,也就是有三个平面,它是YUV标准格式4:2:0,主要分为:YU12和YV12

    • YU12格式

    android平台下也叫作I420格式,首先是所有Y值,然后是所有U值,最后是所有V值

    YU12:亮度(行×列) + U(行×列/4) + V(行×列/4)

    • YV12格式

    YV12格式YU12基本相同,首先是所有Y值,然后是所有V值,最后是所有U值。只要注意从适当的位置提取U和V值YU12和YV12都可以使用相同的算法进行处理。

    YV12:亮度Y(行×列) + V(行×列/4) + U(行×列/4)

    YU12: YYYYYYYY UUVV    =>    YUV420P
    YV12: YYYYYYYY VVUU    =>    YUV420P
    

    YUV模型是根据一个亮度(Y分量)和两个色度(UV分量)来定义颜色空间,常见的YUV格式有YUY2、YUYV、YVYU、UYVY、AYUV、Y41P、Y411、Y211、IF09、IYUV、YV12、YVU9、YUV411、YUV420等,其中比较常见的YUV420分为两种:YUV420P和YUV420SP。

    我们在android平台下使用相机默认图像格式是NV21属于YUV420SP格式## YUV420SP(NV21和NV12)格式

    YUV420SP格式的图像阵列,首先是所有Y值,然后是UV或者VU交替存储,NV12和NV21属于YUV420SP格式,是一种two-plane模式,即Y和UV分为两个plane,但是UV(CbCr)为交错存储,而不是分为三个平面。

    • NV21格式

    android手机从摄像头采集的预览数据一般都是NV21,存储顺序是先存Y,再VU交替存储,NV21存储顺序是先存Y值,再VU交替存储:YYYYVUVUVU,以 4 X 4 图片为例子,占用内存为 4 X 4 X 3 / 2 = 24 个字节

    • NV12格式

    NV12与NV21类似,也属于YUV420SP格式,NV12存储顺序是先存Y值,再UV交替存储:YYYYUVUVUV,以 4 X 4 图片为例子,占用内存为 4 X 4 X 3 / 2 = 24 个字节

    注意:在DVD中,色度信号被存储成Cb和Cr(C代表颜色,b代表蓝色,r代表红色)

    NV12: YYYYYYYY UVUV    =>YUV420SP
    NV21: YYYYYYYY VUVU    =>YUV420SP
    

    YUV和RGB转换

    Y      =  (0.257 * R) + (0.504 * G) + (0.098 * B) + 16
    Cr = V =  (0.439 * R) - (0.368 * G) - (0.071 * B) + 128
    Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128
    
    B = 1.164(Y - 16) + 2.018(U - 128)
    G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
    R = 1.164(Y - 16) + 1.596(V - 128)
    

    分离YUV420P

    下面基于实例来理解Y,U,V分量的作用

    先使用ffmpeg将指定的图片转为yuv420p格式

    ffmpeg -i input.jpg -s 510x510 -pix_fmt yuv420p input.yuv
    
    • 分离YUV分量

    笔者使用的Clion直接运行下面这段代码,分离出所需的文件

    void split_yuv420(char *inputPath, int width, int height) {
    
        FILE *fp_yuv = fopen(inputPath, "rb+");
    
        FILE *fp_y = fopen("output_420_y.y", "wb+");
        FILE *fp_u = fopen("output_420_u.y", "wb+");
        FILE *fp_v = fopen("output_420_v.y", "wb+");
    
        unsigned char *data = (unsigned char *) malloc(width * height * 3 / 2);
    
        fread(data, 1, width * height * 3 / 2, fp_yuv);
        //Y
        fwrite(data, 1, width * height, fp_y);
        //U
        fwrite(data + width * height, 1, width * height / 4, fp_u);
        //V
        fwrite(data + width * height * 5 / 4, 1, width * height / 4, fp_v);
    
        //释放资源
        free(data);
    
        fclose(fp_yuv);
        fclose(fp_y);
        fclose(fp_u);
        fclose(fp_v);
    }
    

    笔者使用的是ubuntu系统,因此运行yuvplayer.exe文件,需要提前安装好winesudo apt install wine,运行yuvplayer之后,需要先设置像素格式为Y,否则你看到的图像可能会有问题

    先看output_420_y.y文件:(分辨率设置为510x510)

    output_420_u.y显示如下:(分辨率设置为255x255)

    output_420_v.y显示如下:(分辨率设置为255x255)

    • 生成灰度图

    上面的例子实际上已经生成了一个灰度图了,但是只保留了Y分量,你如果直接用ffplay工具查看会有问题,下面的函数将会生成一个标准的YUV文件并且保留Y分量,你可能会有疑问,为什么U分量和V分量要写入0x80,其实你可以参考上面的YUV转RGB的公式,YUV数据是无法直接显示的,最终需要转成RGB显示,因此我这里是只需要保留Y分量,忽略UV分量的影响,因此根据上面的公式,我在U和V分量中都写入128就是十六进制的0x80

    • 保留Y分量(生成灰度图)
    void yuv420p_y(char *inputPath, char *outputPath, int width, int height) {
    
        FILE *inFile = fopen(inputPath, "rb+");
        FILE *outFile = fopen(outputPath, "wb+");
    
        unsigned char *data = (unsigned char *) malloc(width * height * 3 / 2);
    
        fread(data, 1, width * height * 3 / 2, inFile);
    
        //Y分量
        fwrite(data, 1, width * height, outFile);
    
        unsigned char *buffer = (unsigned char *) malloc(width * height / 4);
        memset(buffer, 0x80, width * height / 4);
        //U分量
        fwrite(buffer, 1, width * height / 4, outFile);
        //V分量
        fwrite(buffer, 1, width * height / 4, outFile);
    
        free(buffer);
        free(data);
        fclose(inFile);
        fclose(outFile);
    }
    
    int main() {
    
        yuv420p_y("/home/byhook/media/input.yuv", "/home/byhook/media/output.yuv", 510, 510);
    
        return 0;
    }
    

    使用ffplay来播放yuv格式的文件:

    ffplay -f rawvideo -video_size 510x510 output.yuv
    

    要注意这里的分辨率不能错

    分离YUV422P

    YUV422P基于YUV 4:2:2采样,每两个Y共用一组UV分量,一个YUV占8+4+4 = 16bits 2个字节。分离代码如下:

    void split_yuv422(char *inputPath, int width, int height) {
    
        FILE *fp_yuv = fopen(inputPath, "rb+");
    
        FILE *fp_y = fopen("output_422_y.y", "wb+");
        FILE *fp_u = fopen("output_422_u.y", "wb+");
        FILE *fp_v = fopen("output_422_v.y", "wb+");
    
        unsigned char *data = (unsigned char *) malloc(width * height * 2);
    
        fread(data, 1, width * height * 2, fp_yuv);
        //Y
        fwrite(data, 1, width * height, fp_y);
        //U
        fwrite(data + width * height, 1, width * height / 2, fp_u);
        //V
        fwrite(data + width * height * 3 / 2, 1, width * height / 2, fp_v);
    
        //释放资源
        free(data);
    
        fclose(fp_yuv);
        fclose(fp_y);
        fclose(fp_u);
        fclose(fp_v);
    }
    

    分离YUV444P

    YUV444P基于YUV 4:4:4采样,每一个Y对应一组UV分量,一个YUV占8+8+8 = 24bits 3个字节。分离代码如下:

    void split_yuv444(char *inputPath, int width, int height) {
    
        FILE *fp_yuv = fopen(inputPath, "rb+");
    
        FILE *fp_y = fopen("output_444_y.y", "wb+");
        FILE *fp_u = fopen("output_444_u.y", "wb+");
        FILE *fp_v = fopen("output_444_v.y", "wb+");
    
        unsigned char *data = (unsigned char *) malloc(width * height * 3);
    
        fread(data, 1, width * height * 3, fp_yuv);
        //Y
        fwrite(data, 1, width * height, fp_y);
        //U
        fwrite(data + width * height, 1, width * height, fp_u);
        //V
        fwrite(data + width * height * 2, 1, width * height, fp_v);
    
        //释放资源
        free(data);
    
        fclose(fp_yuv);
        fclose(fp_y);
        fclose(fp_u);
        fclose(fp_v);
    }
    

    参考:
    https://blog.csdn.net/leixiaohua1020/article/details/50534150
    https://en.wikipedia.org/wiki/YUV

    展开全文
  • nv16_to_nv12.tar

    2019-07-31 19:23:10
    本示例提供了NV16帧转为NV12格式方法,是个完整工程,make后可直接运行,提供了输入所需的nv16图像。
  • NV16 转 NV12

    千次阅读 2019-07-31 19:31:28
    关于像素格式转换,搜到的帖子基本是NV16转RGB24 或 NV12转RGB24,对于NV16转NV12并没太多资料,因此我打算参照这两个像素格式的结构,实现这个转换接口。 NV16像素格式介绍 NV16可以理解为yuyv像素格式的变种,属于...

    摘要

    关于像素格式转换,搜到的帖子基本是NV16转RGB24 或 NV12转RGB24,对于NV16转NV12并没太多资料,因此我打算参照这两个像素格式的结构,实现这个转换接口。

    NV16像素格式介绍

    NV16可以理解为yuyv像素格式的变种,属于YUV422SP类型。整帧图像的大小为 Width * Height * 2。其像素格式如下:

    • start + 00: Y00 Y01 Y02 Y03
    • start + 04: Y10 Y11 Y12 Y13
    • start + 08: Y20 Y21 Y22 Y23
    • start + 12: Y30 Y31 Y32 Y33
    • start + 16: Cb00 Cr00 Cb01 Cr01
    • start + 20: Cb10 Cr10 Cb11 Cr11
    • start + 24: Cb20 Cr20 Cb21 Cr21
    • start + 28: Cb30 Cr30 Cb31 Cr31

    NV12像素格式介绍

    NV12则属于YUV420SP类型,整帧图像的大小为 Width * Height * 3 / 2。其像素格式如下:

    • start + 00: Y00 Y01 Y02 Y03
    • start + 04: Y10 Y11 Y12 Y13
    • start + 08: Y20 Y21 Y22 Y23
    • start + 12: Y30 Y31 Y32 Y33
    • start + 16: Ub00 Ur00 Ub01 Ur01
    • start + 20: Ub10 Ur10 Ub11 Ur11

    转换规则介绍

    • Y数据直接拷贝。
    • NV12的 Ubxx取值NV16奇数行的Cbxx
    • NV12的 Urxx取值NV16偶数行的Crxx

    例如:

    NV16              NV12
    Cb00 Cb01  ----> Ub00 Ub01
    Cr10 Cr11  ----> Vr00 Vr01
    Cb20 Cb21  ----> Ub10 Ub11
    Cr30 Cr31  ----> Vr10 Vr11
    

    代码

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <errno.h>
    
    /**
     * 功能:nv16像素格式转换为nv12像素格式
     * 参数介绍:
     * nv16_buff:NV16格式一帧数据,大小为 w * h * 2,作为函数输入。
     * nv12_buff:NV12格式的一帧数据,大小为 w * h * 3 / 2,作为函数输出。
     * w:图像的宽度。
     * h:图像高度。
     */
    int pixel_format_nv16_to_nv12(char *nv16_buff, char *nv12_buff, int w, int h)
    {
    	unsigned char *nv16_y = NULL;
    	unsigned char *nv16_uv = NULL;
    	unsigned char *nv12_y = NULL;
    	unsigned char *nv12_u = NULL;
    	unsigned char *nv12_v = NULL;
    	int i, j, offset;
    
    	if (!nv16_buff || !nv12_buff || ((w*h) <= 0)) {
    		printf("ERROR: %s input args invalid!\n", __func__);
    		return -EINVAL;
    	}
    
    	/* get the right point */
    	nv16_y = (unsigned char *)nv16_buff;
    	nv16_uv = (unsigned char *)nv16_buff + w * h;
    	nv12_y = (unsigned char *)nv12_buff;
    	nv12_u = (unsigned char *)nv12_buff + w * h;
    	nv12_v = nv12_u + 1;
    
    	/* copy y dates directly */
    	memcpy(nv12_y, nv16_y, w * h);
    	/* get nv12_uv dates from nv16_uv
    	 * 
    	 * >>>> nv16 pix formate:
    	 * start + 0:	Y'00	Y'01	Y'02	Y'03
    	 * start + 4:	Y'10	Y'11	Y'12	Y'13
    	 * start + 8:	Y'20	Y'21	Y'22	Y'23
    	 * start + 12:	Y'30	Y'31	Y'32	Y'33
    	 * start + 16:	Cb00	Cr00	Cb01	Cr01
    	 * start + 20:	Cb10	Cr10	Cb11	Cr11
    	 * start + 24:	Cb20	Cr20	Cb21	Cr21
    	 * start + 28:	Cb30	Cr30	Cb31	Cr31
    	 *
    	 * >>>> nv12 pix formate:
    	 * start + 0:	Y'00	Y'01	Y'02	Y'03
    	 * start + 4:	Y'10	Y'11	Y'12	Y'13
    	 * start + 8:	Y'20	Y'21	Y'22	Y'23
    	 * start + 12:	Y'30	Y'31	Y'32	Y'33
    	 * start + 16:	Ub00	Vr00
    	 * start + 18:	Ub01	Vr01
    	 * start + 20:	Ub10	Vr10
    	 * start + 22:	Ub11	Vr11
    	 *
    	 * nv16的uv分量与 nv12的uv分量对于关系:
    	 * 偶数行取Cb值,奇数行取Cr值
    	 * Cb00 Cb01  ----> Ub00 Ub01
    	 * Cr10 Cr11  ----> Vr00 Vr01
    	 * Cb20 Cb21  ----> Ub10 Ub11
    	 * Cr30 Cr31  ----> Vr10 Vr11
    	 */
    
    	/* 奇数行取Cb */
    	offset = 0;
    	for (i = 0; i < h; i+=2) {
    		offset = i * w;
    		for (j = 0; j < w; j+=2) {
    			*nv12_u = *(nv16_uv + offset + j);
    			nv12_u += 2;
    		}
    	}
    
    	/* 偶数行取Cr */
    	offset = 0;
    	for (i = 1; i < h; i+=2) {
    		offset = i * w;
    		for (j = 1; j < w; j+=2) {
    			*nv12_v = *(nv16_uv + offset + j);
    			nv12_v += 2;
    		}
    	}
    
    	return 0;
    }
    

    工程下载地址

    工程地址:https://download.csdn.net/download/lyy901135/11458140

    完整工程,包含main函数,以及测试输入的nv16图片,只需执行make编译后即可运行。

    运行命令:./nv16_to_nv12 test.nv16 test.nv12

    查看输出图片(nv12):ffplay -f rawvideo -video_size 1920x1080 -pixel_format nv12 test.nv12
    由图可见,转换后色度都是正确的。
    在这里插入图片描述

    展开全文
  • I420转NV21(NV12

    2018-04-19 17:17:16
    自封的纯C代码,可实现YUV数据基本的I420转NV21/NV12功能
  • python3 脚本 依赖opencv3 PIL,能够将jpg和NV21、NV12格式相互转化,附带YUV文件查看器 修改自大佬原有的代码,侵删
  • draw_nv12.tar

    2020-06-19 16:25:31
    嵌入式Linux平台nv12格式画目标识别选定,嵌入式Linux平台nv12格式画目标识别选定欢迎大家下载使用!
  • NV12截图

    2019-07-03 17:57:53
    截图原理参考: 从NV12中裁剪子画面注意事项 这是源码: ...int NV12CropTo420P(uint8_t *nv12data, int width, int height, int cropx, int cropy, uint8_t *yuv420pdata, int dscw, int dsc...

    截图原理参考:

    从NV12中裁剪子画面注意事项

    这是源码:

    //裁剪的坐标X和Y必须是偶数,否则UV和Y会有偏差, 注意点,linesize对其为1
    int NV12CropTo420P(uint8_t *nv12data, int width, int height, int cropx,
    		int cropy, uint8_t *yuv420pdata, int dscw, int dsch) {
    	uint8_t *ptry = yuv420pdata, *ptru, *ptrv;
    	uint8_t *nvptr = nv12data + width * height;
    
    	ptry = yuv420pdata;
    	ptru = yuv420pdata + dscw * dsch; //u
    	ptrv = yuv420pdata + dscw * dsch + (dscw * dsch) / 4; //v
    
    	for (int y = cropy; y < dsch + cropy /*pFrame->height*/; y++) {
    		memcpy(ptry, nv12data + y * width + cropx, dscw);
    		ptry += dscw;
    	}
    
    	for (int nvy = cropy / 2; nvy < dsch / 2 + cropy / 2 /*height / 2*/;
    			nvy++) {
    		//-----w-----
    		//Y  Y  Y  Y
    		//Y  Y  Y  Y
    		//Y  Y  Y  Y
    		//Y  Y  Y  Y
    		//U  V  U  V
    		//U  V  U  V
    		for (int nvx = cropx; nvx < dscw + cropx; nvx++) {
    			//如果目标是ffmpeg的avframe则需要注意的是linesize
    			if (nvx % 2 == 0) {
    				*ptru++ = nvptr[nvy * width + nvx]; //u
    			} else {
    				*ptrv++ = nvptr[nvy * width + nvx]; //v
    			}
    		}
    	}
    	return 0;
    }
    

    //-----w-----
    //Y00 Y01 Y02 Y03
    //Y10 Y11 Y12 Y13
    //Y20 Y21 Y22 Y23
    //Y30 Y31 Y32 Y33
    //U00 V01 U02 V03
    //U10 V11 U12 V13

    YUV对应关系为:
    Y00 Y01
    Y10 Y11
    U00 V01

    展开全文
  • yv12转nv12nv12转I420

    千次阅读 2014-11-27 14:26:59
    yv12跟I420区别其实就是u、v顺序不一样,是平面格式,内存中u、v在连续的一块,nv12是打包格式,u、v交叉。 yv12转nv12: void swapYV12toNV12(byte[] yv12bytes, byte[] nv12bytes, int width,int height) ...

    yv12跟I420区别其实就是u、v顺序不一样,是平面格式,内存中u、v在连续的一块,nv12是打包格式,u、v交叉。


    yv12转nv12:

    void swapYV12toNV12(byte[] yv12bytes, byte[] nv12bytes, int width,int height) {

    int nLenY = width * height;
    int nLenU = nLenY / 4;


    System.arraycopy(yv12bytes, 0, nv12bytes, 0, width * height);
    for (int i = 0; i < nLenU; i++) {
    nv12bytes[nLenY + 2 * i] = yv12bytes[nLenY + i];
    nv12bytes[nLenY + 2 * i + 1] = yv12bytes[nLenY + nLenU + i];
    }
    }



    nv12转I420:

    void swapNV12toI420(byte[] nv12bytes, byte[] i420bytes, int width,int height) {

    int nLenY = width * height;
    int nLenU = nLenY / 4;


    System.arraycopy(nv12bytes, 0, i420bytes, 0, width * height);
    for (int i = 0; i < nLenU; i++) {
    i420bytes[nLenY + i] = nv12bytes[nLenY + 2 * i + 1];
    i420bytes[nLenY + nLenU + i] = nv12bytes[nLenY + 2 * i];
    }
    }


    转换后如果发现颜色不对,u、v顺序换一下。

    展开全文
  • 从Camera.PreviewCallback接口回调方法onPreviewFrame(byte[] data, Camera camera)回调的data数据,为NV21图像数据,而Android手机识别的是NV12图像数据,所以需要将NV21转化为NV12图像数据。NV21图像数据包括三块...
  • NV21 旋转+转为NV12

    千次阅读 2018-12-01 17:43:09
    yuv420sp的分两种,nv21和nv12。Android 取摄像头中的数据 ,当使用camera1.0 时,onPreviewFrame返回的数据yuv420sp的nv21,并且camera中取出的数据显示时是偏转的,需要将其旋转顺时针旋转270或逆时针旋转90,注:...
  • YV12 and NV12

    千次阅读 2019-04-29 17:35:47
    发现支持2中图像格式,YV12和NV12。具体是怎么样的内存分布不知道。查了些文档。自己修改了几个图。看出了点端倪YV12先看看 http://www.fourcc.org/yuv.php 上比较标准的定义: YV12 This is the ...
  • bmp/rgb24转成nv21/nv12的java代码,经实际测试是正确的,网上很多提供的JAVA代码实际上转换成来的格式不对,附件里是java的完整代码,直接编译即可生成face.nv21 face.nv12两种格式文件,可使用yuvplayer.exe打开...
  • YUV420 NV12 NV21

    千次阅读 2017-07-12 14:09:00
    V4L2_PIX_FMT_NV12 ('NV12'), V4L2_PIX_FMT_NV21 ('NV21') V4L2_PIX_FMT_NV12 ('NV12'), V4L2_PIX_FMT_NV21 ('NV21') Prev  YUV Formats  Next Name V4L2_...
  • NV12转YV12格式420

    热门讨论 2013-10-16 08:35:39
    将yuv420格式图像文件的NV12排列转化成YV12的小程序。
  • Android OpenGL 针对YUV格式(I420,NV12,NV21)数据渲染
  • 1280x720-NV12.yuv

    2020-05-19 10:06:07
    1280x720的YUV裸数据,具体格式为NV12,大小为1280x720x1.5,没有宽高对齐,可以用7yuv工具查看
  • Android常用的几种格式:NV21/NV12/YV12/YUV420P相互转换 java代码, YV12 To NV21, I420 To NV21,YV12Resize, flipYUV420, NV21ToBitmap
  • nv12格式图片裁图

    2019-05-04 16:04:31
    可将任意图nv12图片大小的资源裁剪为所需要的图片的大小,YUV420SP(nv12)图片格式裁剪
  • java视频格式NV21/NV12/YV12/YUV420P的转换.....................................
  • libyuv 库基于Linux平台的NV12图片缩放demos
  • 本程序实现了简单的YUV数据之间的转换和YUV与RGB的转换。... 3)NV12_2_I420; 4)I420_2_NV12; 5)NV21_2_YV12; 6)YV12_2_NV21; 7)I420_2_rgb32; 8)rgb32_2_I420; 9)I420_2_rgb24; 10)rgb24_2_I420。
  • matlab如何rgb颜色代码Rgb2NV12 使用Matlab,IPP,Plain C和SSE优化代码将RGB转换为NV12色彩空间。 NV12格式定义: NV12格式是YUV 4:2:0格式,其在内存中的顺序是第一个Y平面,然后是在交错的UV平面中压缩的色度...
  • yuvplayer&nv12

    2017-07-04 17:33:15
    nv12格式的图片及查看yuv格式的查看器
  • 利用ffmpeg来实现: .\ffmpeg.exe -i 111.jpg -s 26881520 -pix_fmt nv12 test_nv12.yuv .\ffmpeg.exe -i 111.jpg -s 26881520 -pix_fmt nv21 test_nv21.yuv
  • yv12、I420、nv12、nv21相互转换

    万次阅读 2017-05-16 17:48:46
    YUV420P,Y,U,V三个分量都是平面格式,分为I420和YV12。I420格式和YV12格式的不同处在U平面和V...YUV420SP, Y分量平面格式,UV打包格式, 即NV12NV12与NV21类似,U 和 V 交错排列,不同在于UV顺序。 I420: YYYYY
  • 420ToNv12 将YUV 420转换为NV12 现在就这样。
  • libyuv NV12裁剪

    2019-11-15 17:39:03
    有时候想对摄像头采集的视频流进行区域裁剪,可以使用libyuv这个库,原理就是先把NV12转换为i420,对i420做裁剪,然后再把i420转换为NV12NV12再转换为CVPixelBufferRef,CVPixelBufferRef再转...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,885
精华内容 24,354
关键字:

nv12