当前位置:编程学习 > wap >>

android中YUV420SP显示问题

使用jni将c解析的YUV420P数据经转换后传到android,显示出来的是灰色的花屏,在网上搜了些YUV420SP与YUV420P转换的例子,基本就是
/*
YYYYYYYYYYYYY                                YYYYYYYYYYYYY
YYYYYYYYYYYYY       -->                      YYYYYYYYYYYYY
YYYYYYYYYYYYY                                YYYYYYYYYYYYY
YYYYYYYYYYYYY                                YYYYYYYYYYYYY
CbCrCbCr                                     CbCbCbCb
CbCrCbCr                                     CrCrCrCr

YYYYYYYY...      -->   YYYYYYYY...
CbCrCbCr....     -->   CbCb.....  CrCr......
*/

转换代码如下:
for (i = 0; i < length; i++)  
{  
buf[i] = picture->data[0][i];  
}  
i = 0;
for (j = 0; j < length/4; j++)  
{  
          buf[i + length] = picture->data[2][j];
i=i+2;  
}

i = 1;  
for(j = 0; j < length/4;j++)  
{  
buf[i+length] =picture->data[1][j]; 
i=i+2;  
}

android层的显示代码大致如下
Bitmap image = null;
                         
Rect rect = new Rect(0, 0, 352, 240);
YuvImage img = new YuvImage( b, ImageFormat.NV21, 352, 240, null);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
                        
if (img.compressToJpeg(rect, 100, baos))
{
       image =  BitmapFactory.decodeByteArray(baos.toByteArray(), 0, baos.size());
       showVideo.setImageBitmap(image);
}

牛人们帮忙看下,问题出在什么地方?现在感觉是出在YUV420P转YUV420SP上,还是没太搞懂 --------------------编程问答-------------------- 没人回复吗?自己顶 --------------------编程问答-------------------- i = 0;
for (j = 0; j < length/4; j++)  
{  
          buf[i + length] = picture->data[2][j];
i=i+2;  
}

i = 1;  
for(j = 0; j < length/4;j++)  
{  
buf[i+length] =picture->data[1][j]; 
i=i+2;  
}


=============》 兄弟,请问你 picture-> data怎么定义的啊?
YUV420SP与YUV420P的转换,就是讲 YY...Y  UVUV...UV 转换成
YYYY....
U.....
V....

你自己看着办吧,从SP的数据中,每隔一个去一个数据,得到的就是全U或者全V

很简单的。 祝一切顺利!!
补充:移动开发 ,  Android
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,