Skip to content

Commit 192e969

Browse files
theomonnomcloudwebrtc
authored andcommitted
ABGRToI420, ARGBToI420 & ARGBToRGB24 (#65)
1 parent a34fb56 commit 192e969

File tree

2 files changed

+300
-224
lines changed

2 files changed

+300
-224
lines changed

api/video/yuv_helper.cc

Lines changed: 163 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -16,157 +16,203 @@
1616

1717
#include "yuv_helper.h"
1818

19+
#include "libyuv/convert.h"
1920
#include "third_party/libyuv/include/libyuv.h"
2021
#include "video_rotation.h"
2122

2223
namespace webrtc {
2324

24-
void I420Rotate(const uint8_t* src_y,
25-
int src_stride_y,
26-
const uint8_t* src_u,
27-
int src_stride_u,
28-
const uint8_t* src_v,
29-
int src_stride_v,
30-
uint8_t* dst_y,
31-
int dst_stride_y,
32-
uint8_t* dst_u,
33-
int dst_stride_u,
34-
uint8_t* dst_v,
35-
int dst_stride_v,
36-
int width,
37-
int height,
38-
VideoRotation mode) {
39-
libyuv::I420Rotate(src_y, src_stride_y, src_u, src_stride_u, src_v,
40-
src_stride_v, dst_y, dst_stride_y, dst_u, dst_stride_u,
41-
dst_v, dst_stride_v, width, height,
42-
static_cast<libyuv::RotationMode>(mode));
25+
int I420Rotate(const uint8_t* src_y,
26+
int src_stride_y,
27+
const uint8_t* src_u,
28+
int src_stride_u,
29+
const uint8_t* src_v,
30+
int src_stride_v,
31+
uint8_t* dst_y,
32+
int dst_stride_y,
33+
uint8_t* dst_u,
34+
int dst_stride_u,
35+
uint8_t* dst_v,
36+
int dst_stride_v,
37+
int width,
38+
int height,
39+
VideoRotation mode) {
40+
return libyuv::I420Rotate(src_y, src_stride_y, src_u, src_stride_u, src_v,
41+
src_stride_v, dst_y, dst_stride_y, dst_u,
42+
dst_stride_u, dst_v, dst_stride_v, width, height,
43+
static_cast<libyuv::RotationMode>(mode));
4344
}
4445

45-
void I420ToNV12(const uint8_t* src_y,
46-
int src_stride_y,
47-
const uint8_t* src_u,
48-
int src_stride_u,
49-
const uint8_t* src_v,
50-
int src_stride_v,
51-
uint8_t* dst_y,
52-
int dst_stride_y,
53-
uint8_t* dst_uv,
54-
int dst_stride_uv,
55-
int width,
56-
int height) {
57-
libyuv::I420ToNV12(src_y, src_stride_y, src_u, src_stride_u, src_v,
58-
src_stride_v, dst_y, dst_stride_y, dst_uv, dst_stride_uv,
59-
width, height);
46+
int I420ToNV12(const uint8_t* src_y,
47+
int src_stride_y,
48+
const uint8_t* src_u,
49+
int src_stride_u,
50+
const uint8_t* src_v,
51+
int src_stride_v,
52+
uint8_t* dst_y,
53+
int dst_stride_y,
54+
uint8_t* dst_uv,
55+
int dst_stride_uv,
56+
int width,
57+
int height) {
58+
return libyuv::I420ToNV12(src_y, src_stride_y, src_u, src_stride_u, src_v,
59+
src_stride_v, dst_y, dst_stride_y, dst_uv,
60+
dst_stride_uv, width, height);
6061
}
6162

62-
void NV12ToI420(const uint8_t* src_y,
63-
int src_stride_y,
64-
const uint8_t* src_uv,
65-
int src_stride_uv,
66-
uint8_t* dst_y,
67-
int dst_stride_y,
68-
uint8_t* dst_u,
69-
int dst_stride_u,
70-
uint8_t* dst_v,
71-
int dst_stride_v,
72-
int width,
73-
int height) {
74-
libyuv::NV12ToI420(src_y, src_stride_y, src_uv, src_stride_uv, dst_y,
75-
dst_stride_y, dst_u, dst_stride_u, dst_v, dst_stride_v,
76-
width, height);
63+
int NV12ToI420(const uint8_t* src_y,
64+
int src_stride_y,
65+
const uint8_t* src_uv,
66+
int src_stride_uv,
67+
uint8_t* dst_y,
68+
int dst_stride_y,
69+
uint8_t* dst_u,
70+
int dst_stride_u,
71+
uint8_t* dst_v,
72+
int dst_stride_v,
73+
int width,
74+
int height) {
75+
return libyuv::NV12ToI420(src_y, src_stride_y, src_uv, src_stride_uv, dst_y,
76+
dst_stride_y, dst_u, dst_stride_u, dst_v,
77+
dst_stride_v, width, height);
7778
}
7879

79-
void I420ToARGB(const uint8_t* src_y,
80-
int src_stride_y,
81-
const uint8_t* src_u,
82-
int src_stride_u,
83-
const uint8_t* src_v,
84-
int src_stride_v,
85-
uint8_t* dst_argb,
86-
int dst_stride_argb,
87-
int width,
88-
int height) {
89-
libyuv::I420ToARGB(src_y, src_stride_y, src_u, src_stride_u, src_v,
90-
src_stride_v, dst_argb, dst_stride_argb, width, height);
80+
int I420ToARGB(const uint8_t* src_y,
81+
int src_stride_y,
82+
const uint8_t* src_u,
83+
int src_stride_u,
84+
const uint8_t* src_v,
85+
int src_stride_v,
86+
uint8_t* dst_argb,
87+
int dst_stride_argb,
88+
int width,
89+
int height) {
90+
return libyuv::I420ToARGB(src_y, src_stride_y, src_u, src_stride_u, src_v,
91+
src_stride_v, dst_argb, dst_stride_argb, width,
92+
height);
9193
}
9294

93-
void I420ToBGRA(const uint8_t* src_y,
94-
int src_stride_y,
95-
const uint8_t* src_u,
96-
int src_stride_u,
97-
const uint8_t* src_v,
98-
int src_stride_v,
99-
uint8_t* dst_bgra,
100-
int dst_stride_bgra,
101-
int width,
102-
int height) {
103-
libyuv::I420ToBGRA(src_y, src_stride_y, src_u, src_stride_u, src_v,
104-
src_stride_v, dst_bgra, dst_stride_bgra, width, height);
95+
int I420ToBGRA(const uint8_t* src_y,
96+
int src_stride_y,
97+
const uint8_t* src_u,
98+
int src_stride_u,
99+
const uint8_t* src_v,
100+
int src_stride_v,
101+
uint8_t* dst_bgra,
102+
int dst_stride_bgra,
103+
int width,
104+
int height) {
105+
return libyuv::I420ToBGRA(src_y, src_stride_y, src_u, src_stride_u, src_v,
106+
src_stride_v, dst_bgra, dst_stride_bgra, width,
107+
height);
105108
}
106109

107-
void I420ToABGR(const uint8_t* src_y,
108-
int src_stride_y,
109-
const uint8_t* src_u,
110-
int src_stride_u,
111-
const uint8_t* src_v,
112-
int src_stride_v,
113-
uint8_t* dst_abgr,
114-
int dst_stride_abgr,
115-
int width,
116-
int height) {
117-
libyuv::I420ToABGR(src_y, src_stride_y, src_u, src_stride_u, src_v,
118-
src_stride_v, dst_abgr, dst_stride_abgr, width, height);
110+
int I420ToABGR(const uint8_t* src_y,
111+
int src_stride_y,
112+
const uint8_t* src_u,
113+
int src_stride_u,
114+
const uint8_t* src_v,
115+
int src_stride_v,
116+
uint8_t* dst_abgr,
117+
int dst_stride_abgr,
118+
int width,
119+
int height) {
120+
return libyuv::I420ToABGR(src_y, src_stride_y, src_u, src_stride_u, src_v,
121+
src_stride_v, dst_abgr, dst_stride_abgr, width,
122+
height);
119123
}
120124

121-
void I420ToRGBA(const uint8_t* src_y,
125+
int I420ToRGBA(const uint8_t* src_y,
126+
int src_stride_y,
127+
const uint8_t* src_u,
128+
int src_stride_u,
129+
const uint8_t* src_v,
130+
int src_stride_v,
131+
uint8_t* dst_rgba,
132+
int dst_stride_rgba,
133+
int width,
134+
int height) {
135+
return libyuv::I420ToRGBA(src_y, src_stride_y, src_u, src_stride_u, src_v,
136+
src_stride_v, dst_rgba, dst_stride_rgba, width,
137+
height);
138+
}
139+
140+
int I420ToRGB24(const uint8_t* src_y,
122141
int src_stride_y,
123142
const uint8_t* src_u,
124143
int src_stride_u,
125144
const uint8_t* src_v,
126145
int src_stride_v,
127-
uint8_t* dst_rgba,
128-
int dst_stride_rgba,
146+
uint8_t* dst_rgb24,
147+
int dst_stride_rgb24,
129148
int width,
130149
int height) {
131-
libyuv::I420ToRGBA(src_y, src_stride_y, src_u, src_stride_u, src_v,
132-
src_stride_v, dst_rgba, dst_stride_rgba, width, height);
150+
return libyuv::I420ToRGB24(src_y, src_stride_y, src_u, src_stride_u, src_v,
151+
src_stride_v, dst_rgb24, dst_stride_rgb24, width,
152+
height);
133153
}
134154

135-
void I420ToRGB24(const uint8_t* src_y,
136-
int src_stride_y,
137-
const uint8_t* src_u,
138-
int src_stride_u,
139-
const uint8_t* src_v,
140-
int src_stride_v,
141-
uint8_t* dst_rgb24,
142-
int dst_stride_rgb24,
143-
int width,
144-
int height) {
145-
libyuv::I420ToRGB24(src_y, src_stride_y, src_u, src_stride_u, src_v,
146-
src_stride_v, dst_rgb24, dst_stride_rgb24, width, height);
155+
int I420Scale(const uint8_t* src_y,
156+
int src_stride_y,
157+
const uint8_t* src_u,
158+
int src_stride_u,
159+
const uint8_t* src_v,
160+
int src_stride_v,
161+
int src_width,
162+
int src_height,
163+
uint8_t* dst_y,
164+
int dst_stride_y,
165+
uint8_t* dst_u,
166+
int dst_stride_u,
167+
uint8_t* dst_v,
168+
int dst_stride_v,
169+
int dst_width,
170+
int dst_height,
171+
libyuv::FilterMode filtering) {
172+
return libyuv::I420Scale(src_y, src_stride_y, src_u, src_stride_u, src_v,
173+
src_stride_v, src_width, src_height, dst_y,
174+
dst_stride_y, dst_u, dst_stride_u, dst_v,
175+
dst_stride_v, dst_width, dst_height, filtering);
147176
}
148177

149-
void I420Scale(const uint8_t* src_y,
150-
int src_stride_y,
151-
const uint8_t* src_u,
152-
int src_stride_u,
153-
const uint8_t* src_v,
154-
int src_stride_v,
155-
int src_width,
156-
int src_height,
178+
int ARGBToI420(const uint8_t* src_argb,
179+
int src_stride_argb,
157180
uint8_t* dst_y,
158181
int dst_stride_y,
159182
uint8_t* dst_u,
160183
int dst_stride_u,
161184
uint8_t* dst_v,
162185
int dst_stride_v,
163-
int dst_width,
164-
int dst_height,
165-
libyuv::FilterMode filtering) {
166-
libyuv::I420Scale(src_y, src_stride_y, src_u, src_stride_u, src_v,
167-
src_stride_v, src_width, src_height, dst_y, dst_stride_y,
168-
dst_u, dst_stride_u, dst_v, dst_stride_v, dst_width,
169-
dst_height, filtering);
186+
int width,
187+
int height) {
188+
return libyuv::ARGBToI420(src_argb, src_stride_argb, dst_y, dst_stride_y,
189+
dst_u, dst_stride_u, dst_v, dst_stride_v, width,
190+
height);
191+
}
192+
193+
int ABGRToI420(const uint8_t* src_abgr,
194+
int src_stride_abgr,
195+
uint8_t* dst_y,
196+
int dst_stride_y,
197+
uint8_t* dst_u,
198+
int dst_stride_u,
199+
uint8_t* dst_v,
200+
int dst_stride_v,
201+
int width,
202+
int height) {
203+
return libyuv::ABGRToI420(src_abgr, src_stride_abgr, dst_y, dst_stride_y,
204+
dst_u, dst_stride_u, dst_v, dst_stride_v, width,
205+
height);
206+
}
207+
208+
int ARGBToRGB24(const uint8_t* src_argb,
209+
int src_stride_argb,
210+
uint8_t* dst_rgb24,
211+
int dst_stride_rgb24,
212+
int width,
213+
int height) {
214+
return libyuv::ARGBToRGB24(src_argb, src_stride_argb, dst_rgb24,
215+
dst_stride_rgb24, width, height);
170216
}
171217

172218
} // namespace webrtc

0 commit comments

Comments
 (0)