网上找不到相关的,自已写了一段代码,欢迎指正:private byte[] YuvScaledH(byte[] yuvdata, int sourceWidth, int sourceHeight, int times){
byte[] scaledYuv=new byte[sourceHeight*sourceWidth*times*3/2]; //仅拉伸H,W不变
for(int i=0;i<sourceHeight;i+=2){
int inOffset=i*sourceWidth;
int outOffset=(i*times*sourceWidth);
for(int t=0;t<times;t++){
System.arraycopy(yuvdata, inOffset, scaledYuv, outOffset, sourceWidth*2);
outOffset+=sourceWidth*2;
}
}
int baseUV=sourceWidth*sourceHeight; //源图UV分量起始点
for(int i=0;i<sourceHeight/2;i++){
int inOffset=baseUV+i*sourceWidth;
int outOffset=(baseUV+i*sourceWidth)*times;
for(int t=0;t<times;t++){
System.arraycopy(yuvdata, inOffset, scaledYuv, outOffset, sourceWidth);
outOffset+=sourceWidth;
}
}
return scaledYuv;
}
byte[] scaledYuv=new byte[sourceHeight*sourceWidth*times*3/2]; //仅拉伸H,W不变
for(int i=0;i<sourceHeight;i+=2){
int inOffset=i*sourceWidth;
int outOffset=(i*times*sourceWidth);
for(int t=0;t<times;t++){
System.arraycopy(yuvdata, inOffset, scaledYuv, outOffset, sourceWidth*2);
outOffset+=sourceWidth*2;
}
}
int baseUV=sourceWidth*sourceHeight; //源图UV分量起始点
for(int i=0;i<sourceHeight/2;i++){
int inOffset=baseUV+i*sourceWidth;
int outOffset=(baseUV+i*sourceWidth)*times;
for(int t=0;t<times;t++){
System.arraycopy(yuvdata, inOffset, scaledYuv, outOffset, sourceWidth);
outOffset+=sourceWidth;
}
}
return scaledYuv;
}
可参考:
FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)
ffmpeg中的sws_scale算法性能测试