80,354
社区成员
发帖
与我相关
我的任务
分享
回复一下:首先拿到帧数据,旋转90°后 只要把宽高对换就行,我的问题主要是推流那边的平台宽高没对换,对换后就正确了。还有手机拍摄的比例,例如是3:4等等的,不是常见的4:3或者16:9的,所以手机拍摄的是竖屏显示的
public static byte[] nv21data_rotate_to_90(byte[] nv21_src_data, int width, int height)
{
int y_size = width * height;
int buffser_size = y_size * 3 / 2;
byte[] nv21Data = new byte[buffser_size];
// Rotate the Y luma
int i = 0;
int startPos = (height - 1)*width;
for (int x = 0; x < width; x++)
{
int offset = startPos;
for (int y = height - 1; y >= 0; y--)
{
nv21Data[i] = nv21_src_data[offset + x];
i++;
offset -= width;
}
}
// Rotate the U and V color components
i = buffser_size - 1;
for (int x = width - 1; x > 0; x = x - 2)
{
int offset = y_size;
for (int y = 0; y < height / 2; y++)
{
nv21Data[i] = nv21_src_data[offset + x];
i--;
nv21Data[i] = nv21_src_data[offset + (x - 1)];
i--;
offset += width;
}
}
return nv21Data;
}
试试这个
public void rotateYUV420sp(byte[] src, byte[] des, int width, int height) {
int length = width * height;
int k = 0;
for(int i = 0; i < width; i++) {
for(int j = 0; j < height; j++) {
des[k] = src[width * j + i];
k++;
}
}
for(int i = 0; i < width; i + =2) {
for(int j = 0; j < height / 2; j++) {
des[k] = src[length + width * j + i];
des[k + 1] = src[length + width * j + i + 1];
k += 2;
}
}
}
试试这一个