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