Java YUVFormat.YUV_420和ColorSpace.YUV420之间有什么区别?

Java YUVFormat.YUV_420和ColorSpace.YUV420之间有什么区别?,java,jmf,color-space,fmj,jcodec,Java,Jmf,Color Space,Fmj,Jcodec,我搜索了很多资料,读了很多,但似乎找不到答案。我认为这些“类型”是相等的,但当我使用jcodec将h264解码为字节时,我假设数据输出是YUV4:2:O平面(YUV420P);这是我的VPX编码器的预期输入类型。VPX编码的图像如下所示: 所以我不得不假设,虽然YUVFormat.YUV_420很可能是YUV420P,但ColorSpace.YUV420是YUV420的另一个变体。有没有人知道它是哪一种变体,这样我就可以找到一个转换例程?一种格式将u和v数据隔行扫描一整行。另一个写入整个U,然

我搜索了很多资料,读了很多,但似乎找不到答案。我认为这些“类型”是相等的,但当我使用jcodec将h264解码为字节时,我假设数据输出是YUV4:2:O平面(YUV420P);这是我的VPX编码器的预期输入类型。VPX编码的图像如下所示:


所以我不得不假设,虽然YUVFormat.YUV_420很可能是YUV420P,但ColorSpace.YUV420是YUV420的另一个变体。有没有人知道它是哪一种变体,这样我就可以找到一个转换例程?

一种格式将u和v数据隔行扫描一整行。另一个写入整个U,然后写入整个v数据。这些是在整个Y图像之后。yuv420和yuv420p指定了哪个布局。yuv420写入所有u,然后写入所有v数据,yv420p逐扫描线交错u和v数据扫描。此图像可能有点误导,因为数据大小足够小,无法显示u和v像素的大块


我相信yuv420p将交错U1U2U3 V1V2V3 U4U5U6 V4V5V6

一种格式交错u和v数据以获得完整扫描线。另一个写入整个U,然后写入整个v数据。这些是在整个Y图像之后。yuv420和yuv420p指定了哪个布局。yuv420写入所有u,然后写入所有v数据,yv420p逐扫描线交错u和v数据扫描。此图像可能有点误导,因为数据大小足够小,无法显示u和v像素的大块


我相信yuv420p会将U1U2U3 V1V2V3 U4U5U6 V4V5V6交织在一起,而不是yuv420p。这将解释图像中的水平条。半平面格式交错U平面和V平面

// 420p to 420sp
int frameSize = width * height;
int qFrameSize = frameSize / 4;
for (int i = 0; i < (qFrameSize); i++) {  
    input[frameSize + i*2] = (input[frameSize + qFrameSize + i]);  
    input[frameSize + i*2 + 1] = (input[frameSize + i]);   
} 
//420p到420sp
int frameSize=宽度*高度;
int qFrameSize=frameSize/4;
对于(int i=0;i<(qFrameSize);i++){
输入[frameSize+i*2]=(输入[frameSize+qFrameSize+i]);
输入[frameSize+i*2+1]=(输入[frameSize+i]);
} 

我认为您得到的是yuv420p而不是yuv420p。这将解释图像中的水平条。半平面格式交错U平面和V平面

// 420p to 420sp
int frameSize = width * height;
int qFrameSize = frameSize / 4;
for (int i = 0; i < (qFrameSize); i++) {  
    input[frameSize + i*2] = (input[frameSize + qFrameSize + i]);  
    input[frameSize + i*2 + 1] = (input[frameSize + i]);   
} 
//420p到420sp
int frameSize=宽度*高度;
int qFrameSize=frameSize/4;
对于(int i=0;i<(qFrameSize);i++){
输入[frameSize+i*2]=(输入[frameSize+qFrameSize+i]);
输入[frameSize+i*2+1]=(输入[frameSize+i]);
} 

我试着换u型和v型,但图片没有太大变化,仍然有很多pink@Andy-S:我相信上面的图像是YUV420P,首先是带有Y值的块,然后是带有U值的块,最后是带有V值的块。我尝试交换U和V,但没有太大改变图片,还有很多pink@Andy-S:我相信上面的图像是YUV420P,首先是带有Y值的块,然后是带有U值的块,最后是带有V值的块。