怎样得到竖屏的yuv420sp nv21

1429人阅读
Android(4)
setPreviewFormat(ImageFormat.NV21)
NV21 颜色空间排列 :YYYYYYYY VUVU
在用MediaCodec编码的时候,如果设置颜色空间为YUV420SP,那么则需要转换一下,
YUV420SP颜色排列顺序为:YYYYYYY UVUV
多说一下,YUV420 是于NV12对应的,但是5.0一下的安卓手机支持这个预览颜色的不多
则需要将VU顺序进行转换,具体算法如下:
private void NV21ToNV12(byte[] nv21,byte[] nv12,int width,int height){
if(nv21 == null || nv12 == null)
int framesize = width*
int i = 0,j = 0;
System.arraycopy(nv21, 0, nv12, 0, framesize);
for(i = 0; i & 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];
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:8209次
排名:千里之外
原创:12篇
(1)(2)(1)(5)(4)(2)转换YUV420SP到YUV420P-ffmpeg,yuv-CodeGo.net
转换YUV420SP到YUV420P
我怎么向YUV420SP转换为YUV420的ffmpeg sws_scale或其他
本文地址 :CodeGo.net/304973/
-------------------------------------------------------------------------------------------------------------------------
1. 有不同的YUV格式提供的量,作为起点看
你需要在你的问题,因为“半平面”和“平面”并没有真正告诉如何格式化数据更具体。
但作为一个一般性的建议,它只是原始数据存放所有您需要做的是从在流中读取正确的数据量,并将其写入到输出您喜欢的语言。
如果您是从的ffmpeg swscale库下面的代码可以帮助你。
static struct SwsContext *swsC
swsContext = sws_getContext(c-&width, c-&height,PIX_FMT_NV21,
c-&width, c-&height,
PIX_FMT_YUV420P,
SWS_FAST_BILINEAR, NULL, NULL, NULL);
avpicture_fill((AVPicture*)picture, data, PIX_FMT_NV21, c-&width, c-&height);
avpicture_fill((AVPicture*)outpic, outbuffer, PIX_FMT_YUV420P, c-&width, c-&height);
sws_scale(swsContext, picture-&data, picture-&linesize, 0, c-&height, outpic-&data, outpic-&linesize);
sws_freeContext(swsContext);
本文标题 :转换YUV420SP到YUV420P
本文地址 :CodeGo.net/304973/
Copyright (C) 2014 CodeGo.net1600人阅读
MutilMedia(2)
原文:http://blog.csdn.net/kl222/article/details/
&在做android摄像头捕获时,发现从android摄像头出来的原始视是逆时针旋转了90度的,所以需要把它顺时针旋转90。android视频支持的是NV21格式,它是一种YUV420的格式。当然,始果你用的是android sdk的话,其中image就提供这个能力。但是我是在ndk下开发,没有找到相应的功能(如果你知道请告诉我)。
&&&&&&&& 我本想用开源的图像处理库(opencv)做旋转,但是opencv只能处理bmp的图像。这样的话,需要先把NV21转换成BMP32。然后再做旋转。所以要操作两次,效率肯定低。最后也没找到好的方法(如果你知道一次用opencv做YUV420格式的旋转,请你告诉我)。所以只有自己写一个。
先从网上搜索了一个:
在android上运行了一下,发现视频非常卡。所以只有自己优化了。这段代码里有乘法,优化的重点就是去掉乘法用加法代替:
逆时针旋转90度:
&编译运行,捕获视频显示非常流畅 :)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:845570次
积分:10494
积分:10494
排名:第1232名
原创:151篇
转载:470篇
译文:19篇
评论:79条
(1)(1)(3)(7)(1)(1)(1)(1)(9)(2)(5)(1)(3)(4)(3)(2)(2)(1)(1)(1)(11)(12)(4)(10)(6)(11)(3)(2)(13)(7)(13)(2)(33)(17)(8)(14)(22)(30)(7)(51)(6)(29)(47)(17)(20)(37)(6)(38)(73)(31)(7)(5)Android Camera视频流格式转换(YUV420SP–RGB) - ZtyHome
> 文章正文
/ 浏览次数: 2,656 views /
& & & & &允许用户实时捕获摄像头的,这在利用摄像头的AR应用中非常有用。可以利用摄像流实时做画面图像的分析,并做出许多有用的应用。比如人脸识别,条码识别,特定图像替换等等.
& & & & 不过大多数图像处理软件在处理时是需要格式的图像,而默认的视频流是压缩的YUV格式,下也只能得到编码为YUV420SP的视频流。这就需要把YUV420SP的视频流转换成格式的图像,用于图像识别。
特贴出一个YUV420SP转的格式转换函数,方便大家使用。
代码如下:
static&public&void&decodeYUV420SP(byte[]&rgbBuf,byte[]&yuv420sp,int&width,int&height)&{&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&final&int&frameSize&=&width&*&&&&&&
&&&&&&&&&&&&&&&
&&&&if&(rgbBuf&==&null)&&&&&
&&&&&&&&throw&new&NullPointerException(&buffer&'rgbBuf'&is&null&);&&&&&&
&&&&if&(rgbBuf.length&&&frameSize&*&3)&&&&&
&&&&&&&&throw&new&IllegalArgumentException(&buffer&'rgbBuf'&size&&&&&&
&&&&&&&&&&&&&&&&&+&rgbBuf.length&+&&&&&minimum&&&+&frameSize&*&3);&&&&&
&&&&if&(yuv420sp&==&null)&&&&&
&&&&&&&&throw&new&NullPointerException(&buffer&'yuv420sp'&is&null&);&&&&&
&&&&if&(yuv420sp.length&&&frameSize&*&3&/&2)&&&&&
&&&&&&&&throw&new&IllegalArgumentException(&buffer&'yuv420sp'&size&&&
& & & & & & & & & & +&yuv420sp.length+&&&&&minimum&&&+&frameSize&*&3&/&2); & &&
&&&&&&&&&&&&&
&&&&&&&&int&i&=&0,&y&=&0;&&&&&
&&&&&&&&int&uvp&=&0,&u&=&0,&v&=&0;&&&&
&&&&&&&&&&&&&&&&&
&&&&&&&&int&y1192&=&0,&r&=&0,&g&=&0,&b&=&0;&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&for&(int&j&=&0,&yp&=&0;&j&&&&j++)&{&&&&&
&&&&&&&&&&&&&uvp&=&frameSize&+&(j&&&&1)&*&&&&&&
&&&&&&&&&&&&&u&=&0;&&&&&
&&&&&&&&&&&&&v&=&0;&&&&&
&&&&&&&&&&&&for&(i&=&0;&i&&&&i++,&yp++)&{&&&&&
&&&&&&&&&&&&&&&&&y&=&(0xff&&&((int)&yuv420sp[yp]))&-&16;&&&&&
&&&&&&&&&&&&&&&&if&(y&&&0)&y&=&0;&&&&&
&&&&&&&&&&&&&&&&if&((i&&&1)&==&0)&{&&&&&
&&&&&&&&&&&&&&&&&&&&&v&=&(0xff&&&yuv420sp[uvp++])&-&128;&&&&&
&&&&&&&&&&&&&&&&&&&&&u&=&(0xff&&&yuv420sp[uvp++])&-&128;&&&&&
&&&&&&&&&&&&&&&&&}&&&&&
&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&y1192&=&1192&*&y;&&&&&
&&&&&&&&&&&&&&&&&r&=&(y1192&+&1634&*&v);&&&&&
&&&&&&&&&&&&&&&&&g&=&(y1192&-&833&*&v&-&400&*&u);&&&&&
&&&&&&&&&&&&&&&&&b&=&(y1192&+&2066&*&u);&&&&&
&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&if&(r&&&0)&r&=&0;&else&if&(r&&&262143)&r&=&262143;&&&&&
&&&&&&&&&&&&&&&&if&(g&&&0)&g&=&0;&else&if&(g&&&262143)&g&=&262143;&&&&&
&&&&&&&&&&&&&&&&if&(b&&&0)&b&=&0;&else&if&(b&&&262143)&b&=&262143;&&&&&
&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&rgbBuf[yp&*&3]&=&(byte)(r&&&&10);&&&&&
&&&&&&&&&&&&&&&&&rgbBuf[yp&*&3&+&1]&=&(byte)(g&&&&10);&&&&&
&&&&&&&&&&&&&&&&&rgbBuf[yp&*&3&+&2]&=&(byte)(b&&&&10);&&&&&
&&&&&&&&&&&&&}&&&&&
&&&&&&&&&}&&&&&
&&&&&&&}&&&&
标签: , , ,
版权所有: , 转载请注明本文出处。
******************************************************************
*******************************************************************
上面是广告! 真的是广告!! 真的真的啊!!!
开始用微博啦
-----------------------------------------------------Copyright & ----------------------------
----------------------
------------------------}

我要回帖

更多关于 yuv420sp转rgb 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信