说明:项目中使用usb网络摄像头,在横屏版本使用后台看视频正常,但是需要适配竖屏版本的,竖屏视频传到后台是横着的,需要旋转90度。由于设备是嵌入式,编译耗时,单独截取一帧数据,用android方式来做,效率很高。
具体实现步骤:将nv12转成nv21,nv21再旋转90度,但是有些算法nv12转成nv21不支持
核心代码如下:
//调用,byteBuffer为nv12数据
byte[] raotaionData = port_nv12ToNv21(byteBuffer.array(), with, heiht);//没问题的旋转
byte[] des= rotateYUV420Degree90(raotaionData,with, heiht,90);
private byte[] port_nv12ToNv21(byte[] data, int width, int height) {
byte[] ret = new byte[width * height * 3 / 2];
int total = width * height;
ByteBuffer bufferY = ByteBuffer.wrap(ret, 0, total); // I420的Y分量
ByteBuffer bufferUV = ByteBuffer.wrap(ret, total, ret.length - total); // I420的U分量
// NV12 YYYYYYYY UVUV
bufferY.put(data, 0, total);
for (int i = total; i < data.length; i += 2) {
bufferUV.put(data[i + 1])