android Camera 出来的数据一般是NV21 也就是YUV420SP
我个人理解S 是 staggered 交错的意思 P就是plane 平面
YYYYYYYY VUVU 这种分布
420SP
H264呢 里面用的一般是I420(420P), YUV三个分量在三个平面上
420P
所以一般获取到图片 想用H264传出去,就得转换
像我这种懒蛋,一般找个模版代码一抄就行
图呢是我从网上找的,主要理解下转换过程
所以看图就能理解为啥 420计算的时候 都是宽高1.5 因为2组Y对应一个UV
复制数据的时候呢 Y就按照顺序完整复制,U需要从 Y的所有数据后 隔着一个复制一个,V同理
//挪动Y分量
memcpy(picture->img.plane[0], data, y_len);
for (int i = 0; i < uv_len; ++i) {
//挪动U分量
*(picture->img.plane[1] + i) = *(data + y_len + i * 2 + 1);
//挪动V分量
*(picture->img.plane[2] + i) = *(data + y_len + i * 2);
}
是不是看这段模版代码 越发有感觉了,能理解了吧
网友评论