80,351
社区成员
发帖
与我相关
我的任务
分享
List<Integer> pvFmts = parameters.getSupportedPreviewFormats();//Camera.Parameters parameters
if (pvFmts == null || !pvFmts.contains(ImageFormat.NV21))//例如
{
Log.v(TAG, "手机不支持ImageFormat.NV21");
}
关于nv21
http://blog.csdn.net/vblittleboy/article/details/10945143
参考过的一篇,了解uv的排列
旋转的思路大概是:
先对Y进行排列,再对UV进行排列,不同的编码格式的差异在于UV。
我项目中用的是YV12的转换算法。排列是U在前V在后,而I420是V在前U在后,所占位子一样。
NV21除了Y是一样的,UV是排列在一起的。
就这么多资料了。靠你自己了
/**
* 旋转数据
*
* @param dst
* 目标数据
* @param src
* 源数据
* @param srcWidth
* 源数据宽
* @param height
* 源数据高
*/
private void YV12RotateNegative90(byte[] dst, byte[] src, int srcWidth,
int height)
{
int t = 0;
int i, j;
int wh = srcWidth * height;
for (i = srcWidth - 1; i >= 0; i--)
{
for (j = height - 1; j >= 0; j--)
{
dst[t++] = src[j * srcWidth + i];
}
}
for (i = srcWidth / 2 - 1; i >= 0; i--)
{
for (j = height / 2 - 1; j >= 0; j--)
{
dst[t++] = src[wh + j * srcWidth / 2 + i];
}
}
for (i = srcWidth / 2 - 1; i >= 0; i--)
{
for (j = height / 2 - 1; j >= 0; j--)
{
dst[t++] = src[wh * 5 / 4 + j * srcWidth / 2 + i];
}
}
}