视频网站如何推广,蕲春网站建设,在线制作h5网页,阿里云做网站需要些什么上面两个函数的目标都是将NV21格式的数据转换为YUV420P格式#xff0c;但是它们在处理U和V分量的方式上有所不同。
在第一个函数NV21toYUV420P_1中#xff0c;U和V分量的处理方式是这样的#xff1a;对于U分量#xff0c;它从NV21数据的Y分量之后的每个奇数位置取数据但是它们在处理U和V分量的方式上有所不同。
在第一个函数NV21toYUV420P_1中U和V分量的处理方式是这样的对于U分量它从NV21数据的Y分量之后的每个奇数位置取数据对于V分量它从NV21数据的Y分量之后的每个偶数位置取数据。
而在第二个函数NV21toYUV420P中U和V分量的处理方式是这样的对于U分量它从NV21数据的Y分量之后的每个偶数位置取数据对于V分量它从NV21数据的Y分量之后的每个奇数位置取数据。
因此这两个函数并不完全相同。如果你的NV21数据是标准的即V和U分量是交错存储的首先是V然后是U那么你应该使用第二个函数NV21toYUV420P。 private byte[] NV21toYUV420P_1(byte[] nv21, int width, int height) {
byte[] yuv420p new byte[widthheight3/2];
int i, j;
int ySize width * height;// 拷贝Y分量System.arraycopy(nv21, 0, yuv420p, 0, ySize);// 处理并拷贝U分量for (i 0; i ySize/4; i) {yuv420p[ySize i] nv21[ySize 2 * i 1];}// 处理并拷贝V分量for (j 0; j ySize/4; j) {yuv420p[ySize i j] nv21[ySize 2 * j];}return yuv420p;
}public static byte[] NV21toYUV420P(byte[] nv21, int width, int height) {byte[] yuv420p new byte[width*height*3/2];int i, j;int ySize width * height;// Copy YSystem.arraycopy(nv21, 0, yuv420p, 0, ySize);// Copy U and Vfor (i 0; i ySize/2; i 2) {yuv420p[ySize i/2] nv21[ySize i]; // Uyuv420p[ySize ySize/4 i/2] nv21[ySize i 1]; // V}return yuv420p;
}