0%

libyuv 使用中的一些坑

介绍

1
2
libyuv是Google开源的yuv图像处理库,实现对各种yuv数据之间的转换,
包括数据转换,裁剪,缩放,旋转等功能,由于其性能出色,被广泛使用。

问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
我在使用中发现一些接口的功能,与预期有不一致的情况,如下:

## rgb 转 rgb
# RGBAToARGB
预期是 rgba -> argb
实际是 rgba -> gbar
产生的效果是后三个通道前移一列,第一个通道移到第四列,实际与预期不一致

# ARGBToRGBA
预期是 argb -> rgba
实际是 argb -> barg
产生的效果是前三个通道后移一列,第四个通道移到第一列,实际与预期不一致

# ARGBToABGR
预期是 argb -> abgr
实际是 argb -> grab
产生的效果是第一个通道与第三个通道交换位置,实际与预期不一致

# ABGRToARGB
预期是 abgr -> argb
实际是 abgr -> gbar
产生的效果是第一个通道与第三个通道交换位置,实际与预期不一致

# ARGBToBGRA
预期是 argb -> bgra
实际是 argb -> bgra
四个通道顺序颠倒,实际与预期一致

# BGRAToARGB
预期是 bgra -> argb
实际是 bgra -> argb
四个通道顺序颠倒,实际与预期一致

## rgb 转 yuv
# ARGBToI420
实际与预期相反,需要 BGRAToI420 才能正确转换

# ABGRToI420
实际与预期相反,需要 RGBAToI420 才能正确转换

# BGRAToI420
实际与预期相反,需要 ARGBToI420 才能正确转换

# RGBAToI420
实际与预期相反,需要 ABGRToI420 才能正确转换

# yuv 转 rgb
# I420ToARGB
实际与预期相反,需要 I420ToBGRA 才能正确转换

# I420ToABGR
实际与预期相反,需要 I420ToRGBA 才能正确转换

# I420ToBGRA
实际与预期相反,需要 I420ToARGB 才能正确转换

# I420ToRGBA
实际与预期相反,需要 I420ToABGR 才能正确转换

总结

1
2
3
推测是大小端的问题造成上面的转换功能与预期不一致的情况;
rgb 转换接口可不按名字意思只按实际效果来调用;
比如:rgba->argb 就可以使用 ARGBToRGBA 来转换,rgba->argb 可以使用 ARGBToRGBA 来转换;
用户的需求就是我的追求!