0

我已经搜索并阅读了大量资料,但我似乎找不到答案。我认为这些“类型”是相等的,但是当我使用 jcodec 将 h264 解码为字节时,我假设数据输出是 YUV 4:2:O Planar (YUV420P);这是我的 VPX 编码器的预期输入类型。VPX 编码的图像如下所示: 在此处输入图像描述

所以我不得不假设,虽然 YUVFormat.YUV_420 很可能是 YUV420P,但 ColorSpace.YUV420 是 YUV420 的其他一些变体。有谁知道它是哪个变体,以便我可以找到转换例程?

4

2 回答 2

5

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

yuv420非P

我相信yuv420p会交错U1U2U3 V1V2V3 U4U5U6 V4V5V6

于 2014-10-10T19:49:55.907 回答
1

我认为你得到的是 yuv420sp 而不是 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]);   
} 
于 2014-10-19T01:09:14.203 回答