Skip to content

Commit 2ebb2bc

Browse files
authored
fix: use libyuv directly in yuv_helper.h to fix win-arm64 linker errors
The webrtc::I420ToARGB etc. symbols from api/video/yuv_helper.h were not present in the webrtc.lib for aarch64-pc-windows-msvc, causing 22 linker errors. Replace the webrtc:: namespace wrappers with direct libyuv:: calls using third_party/libyuv/include/libyuv.h, which is already in the include path and whose symbols are always compiled into webrtc.lib. Also removes the erroneous duplicate i420_to_nv12 overload that incorrectly called NV12ToI420 instead of I420ToNV12.
1 parent b216c99 commit 2ebb2bc

1 file changed

Lines changed: 23 additions & 40 deletions

File tree

webrtc-sys/include/livekit/yuv_helper.h

Lines changed: 23 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
#include <stdexcept>
2121
#include <string>
2222

23-
#include "api/video/yuv_helper.h"
23+
#include "third_party/libyuv/include/libyuv.h"
2424
#include "webrtc-sys/src/yuv_helper.rs.h"
2525

2626
namespace livekit_ffi {
@@ -40,7 +40,7 @@ static void i420_to_argb(const uint8_t* src_y,
4040
int dst_stride_argb,
4141
int width,
4242
int height) {
43-
THROW_ON_ERROR(webrtc::I420ToARGB(src_y, src_stride_y, src_u, src_stride_u,
43+
THROW_ON_ERROR(libyuv::I420ToARGB(src_y, src_stride_y, src_u, src_stride_u,
4444
src_v, src_stride_v, dst_argb,
4545
dst_stride_argb, width, height));
4646
}
@@ -55,7 +55,7 @@ static void i420_to_bgra(const uint8_t* src_y,
5555
int dst_stride_bgra,
5656
int width,
5757
int height) {
58-
THROW_ON_ERROR(webrtc::I420ToBGRA(src_y, src_stride_y, src_u, src_stride_u,
58+
THROW_ON_ERROR(libyuv::I420ToBGRA(src_y, src_stride_y, src_u, src_stride_u,
5959
src_v, src_stride_v, dst_bgra,
6060
dst_stride_bgra, width, height));
6161
}
@@ -70,7 +70,7 @@ static void i420_to_abgr(const uint8_t* src_y,
7070
int dst_stride_abgr,
7171
int width,
7272
int height) {
73-
THROW_ON_ERROR(webrtc::I420ToABGR(src_y, src_stride_y, src_u, src_stride_u,
73+
THROW_ON_ERROR(libyuv::I420ToABGR(src_y, src_stride_y, src_u, src_stride_u,
7474
src_v, src_stride_v, dst_abgr,
7575
dst_stride_abgr, width, height));
7676
}
@@ -85,7 +85,7 @@ static void i420_to_rgba(const uint8_t* src_y,
8585
int dst_stride_rgba,
8686
int width,
8787
int height) {
88-
THROW_ON_ERROR(webrtc::I420ToRGBA(src_y, src_stride_y, src_u, src_stride_u,
88+
THROW_ON_ERROR(libyuv::I420ToRGBA(src_y, src_stride_y, src_u, src_stride_u,
8989
src_v, src_stride_v, dst_rgba,
9090
dst_stride_rgba, width, height));
9191
}
@@ -100,7 +100,7 @@ static void argb_to_i420(const uint8_t* src_argb,
100100
int dst_stride_v,
101101
int width,
102102
int height) {
103-
THROW_ON_ERROR(webrtc::ARGBToI420(src_argb, src_stride_argb, dst_y,
103+
THROW_ON_ERROR(libyuv::ARGBToI420(src_argb, src_stride_argb, dst_y,
104104
dst_stride_y, dst_u, dst_stride_u, dst_v,
105105
dst_stride_v, width, height));
106106
}
@@ -115,7 +115,7 @@ static void abgr_to_i420(const uint8_t* src_abgr,
115115
int dst_stride_v,
116116
int width,
117117
int height) {
118-
THROW_ON_ERROR(webrtc::ABGRToI420(src_abgr, src_stride_abgr, dst_y,
118+
THROW_ON_ERROR(libyuv::ABGRToI420(src_abgr, src_stride_abgr, dst_y,
119119
dst_stride_y, dst_u, dst_stride_u, dst_v,
120120
dst_stride_v, width, height));
121121
}
@@ -126,7 +126,7 @@ static void argb_to_rgb24(const uint8_t* src_argb,
126126
int dst_stride_rgb24,
127127
int width,
128128
int height) {
129-
THROW_ON_ERROR(webrtc::ARGBToRGB24(src_argb, src_stride_argb, dst_rgb24,
129+
THROW_ON_ERROR(libyuv::ARGBToRGB24(src_argb, src_stride_argb, dst_rgb24,
130130
dst_stride_rgb24, width, height));
131131
}
132132

@@ -142,7 +142,7 @@ static void i420_to_nv12(const uint8_t* src_y,
142142
int dst_stride_uv,
143143
int width,
144144
int height) {
145-
THROW_ON_ERROR(webrtc::I420ToNV12(src_y, src_stride_y, src_u, src_stride_u,
145+
THROW_ON_ERROR(libyuv::I420ToNV12(src_y, src_stride_y, src_u, src_stride_u,
146146
src_v, src_stride_v, dst_y, dst_stride_y,
147147
dst_uv, dst_stride_uv, width, height));
148148
}
@@ -159,28 +159,11 @@ static void nv12_to_i420(const uint8_t* src_y,
159159
int dst_stride_v,
160160
int width,
161161
int height) {
162-
THROW_ON_ERROR(webrtc::NV12ToI420(src_y, src_stride_y, src_uv, src_stride_uv,
162+
THROW_ON_ERROR(libyuv::NV12ToI420(src_y, src_stride_y, src_uv, src_stride_uv,
163163
dst_y, dst_stride_y, dst_u, dst_stride_u,
164164
dst_v, dst_stride_v, width, height));
165165
}
166166

167-
static void i420_to_nv12(const uint8_t* src_y,
168-
int src_stride_y,
169-
const uint8_t* src_u,
170-
int src_stride_u,
171-
uint8_t* src_v,
172-
int src_stride_v,
173-
uint8_t* dst_y,
174-
int dst_stride_y,
175-
uint8_t* dst_uv,
176-
int dst_stride_uv,
177-
int width,
178-
int height) {
179-
THROW_ON_ERROR(webrtc::NV12ToI420(src_y, src_stride_y, src_u, src_stride_u,
180-
src_v, src_stride_v, dst_y, dst_stride_y,
181-
dst_uv, dst_stride_uv, width, height));
182-
}
183-
184167
static void i444_to_i420(const uint8_t* src_y,
185168
int src_stride_y,
186169
const uint8_t* src_u,
@@ -195,7 +178,7 @@ static void i444_to_i420(const uint8_t* src_y,
195178
int dst_stride_v,
196179
int width,
197180
int height) {
198-
THROW_ON_ERROR(webrtc::I444ToI420(
181+
THROW_ON_ERROR(libyuv::I444ToI420(
199182
src_y, src_stride_y, src_u, src_stride_u, src_v, src_stride_v, dst_y,
200183
dst_stride_y, dst_u, dst_stride_u, dst_v, dst_stride_v, width, height));
201184
}
@@ -214,7 +197,7 @@ static void i422_to_i420(const uint8_t* src_y,
214197
int dst_stride_v,
215198
int width,
216199
int height) {
217-
THROW_ON_ERROR(webrtc::I422ToI420(
200+
THROW_ON_ERROR(libyuv::I422ToI420(
218201
src_y, src_stride_y, src_u, src_stride_u, src_v, src_stride_v, dst_y,
219202
dst_stride_y, dst_u, dst_stride_u, dst_v, dst_stride_v, width, height));
220203
}
@@ -233,7 +216,7 @@ static void i010_to_i420(const uint16_t* src_y,
233216
int dst_stride_v,
234217
int width,
235218
int height) {
236-
THROW_ON_ERROR(webrtc::I010ToI420(
219+
THROW_ON_ERROR(libyuv::I010ToI420(
237220
src_y, src_stride_y, src_u, src_stride_u, src_v, src_stride_v, dst_y,
238221
dst_stride_y, dst_u, dst_stride_u, dst_v, dst_stride_v, width, height));
239222
}
@@ -246,7 +229,7 @@ static void nv12_to_argb(const uint8_t* src_y,
246229
int dst_stride_argb,
247230
int width,
248231
int height) {
249-
THROW_ON_ERROR(webrtc::NV12ToARGB(src_y, src_stride_y, src_uv, src_stride_uv,
232+
THROW_ON_ERROR(libyuv::NV12ToARGB(src_y, src_stride_y, src_uv, src_stride_uv,
250233
dst_argb, dst_stride_argb, width, height));
251234
}
252235

@@ -258,7 +241,7 @@ static void nv12_to_abgr(const uint8_t* src_y,
258241
int dst_stride_abgr,
259242
int width,
260243
int height) {
261-
THROW_ON_ERROR(webrtc::NV12ToABGR(src_y, src_stride_y, src_uv, src_stride_uv,
244+
THROW_ON_ERROR(libyuv::NV12ToABGR(src_y, src_stride_y, src_uv, src_stride_uv,
262245
dst_abgr, dst_stride_abgr, width, height));
263246
}
264247

@@ -272,7 +255,7 @@ static void i444_to_argb(const uint8_t* src_y,
272255
int dst_stride_abgr,
273256
int width,
274257
int height) {
275-
THROW_ON_ERROR(webrtc::I444ToARGB(src_y, src_stride_y, src_u, src_stride_u,
258+
THROW_ON_ERROR(libyuv::I444ToARGB(src_y, src_stride_y, src_u, src_stride_u,
276259
src_v, src_stride_v, dst_abgr,
277260
dst_stride_abgr, width, height));
278261
}
@@ -287,7 +270,7 @@ static void i444_to_abgr(const uint8_t* src_y,
287270
int dst_stride_abgr,
288271
int width,
289272
int height) {
290-
THROW_ON_ERROR(webrtc::I444ToABGR(src_y, src_stride_y, src_u, src_stride_u,
273+
THROW_ON_ERROR(libyuv::I444ToABGR(src_y, src_stride_y, src_u, src_stride_u,
291274
src_v, src_stride_v, dst_abgr,
292275
dst_stride_abgr, width, height));
293276
}
@@ -302,7 +285,7 @@ static void i422_to_argb(const uint8_t* src_y,
302285
int dst_stride_argb,
303286
int width,
304287
int height) {
305-
THROW_ON_ERROR(webrtc::I422ToARGB(src_y, src_stride_y, src_u, src_stride_u,
288+
THROW_ON_ERROR(libyuv::I422ToARGB(src_y, src_stride_y, src_u, src_stride_u,
306289
src_v, src_stride_v, dst_argb,
307290
dst_stride_argb, width, height));
308291
}
@@ -317,7 +300,7 @@ static void i422_to_abgr(const uint8_t* src_y,
317300
int dst_stride_abgr,
318301
int width,
319302
int height) {
320-
THROW_ON_ERROR(webrtc::I422ToABGR(src_y, src_stride_y, src_u, src_stride_u,
303+
THROW_ON_ERROR(libyuv::I422ToABGR(src_y, src_stride_y, src_u, src_stride_u,
321304
src_v, src_stride_v, dst_abgr,
322305
dst_stride_abgr, width, height));
323306
}
@@ -332,7 +315,7 @@ static void i010_to_argb(const uint16_t* src_y,
332315
int dst_stride_argb,
333316
int width,
334317
int height) {
335-
THROW_ON_ERROR(webrtc::I010ToARGB(src_y, src_stride_y, src_u, src_stride_u,
318+
THROW_ON_ERROR(libyuv::I010ToARGB(src_y, src_stride_y, src_u, src_stride_u,
336319
src_v, src_stride_v, dst_argb,
337320
dst_stride_argb, width, height));
338321
}
@@ -347,7 +330,7 @@ static void i010_to_abgr(const uint16_t* src_y,
347330
int dst_stride_abgr,
348331
int width,
349332
int height) {
350-
THROW_ON_ERROR(webrtc::I010ToABGR(src_y, src_stride_y, src_u, src_stride_u,
333+
THROW_ON_ERROR(libyuv::I010ToABGR(src_y, src_stride_y, src_u, src_stride_u,
351334
src_v, src_stride_v, dst_abgr,
352335
dst_stride_abgr, width, height));
353336
}
@@ -360,7 +343,7 @@ static void abgr_to_nv12(const uint8_t* src_abgr,
360343
int dst_stride_uv,
361344
int width,
362345
int height) {
363-
THROW_ON_ERROR(webrtc::ABGRToNV12(src_abgr, src_stride_abgr, dst_y,
346+
THROW_ON_ERROR(libyuv::ABGRToNV12(src_abgr, src_stride_abgr, dst_y,
364347
dst_stride_y, dst_uv, dst_stride_uv, width,
365348
height));
366349
}
@@ -373,7 +356,7 @@ static void argb_to_nv12(const uint8_t* src_argb,
373356
int dst_stride_uv,
374357
int width,
375358
int height) {
376-
THROW_ON_ERROR(webrtc::ARGBToNV12(src_argb, src_stride_argb, dst_y,
359+
THROW_ON_ERROR(libyuv::ARGBToNV12(src_argb, src_stride_argb, dst_y,
377360
dst_stride_y, dst_uv, dst_stride_uv, width,
378361
height));
379362
}

0 commit comments

Comments
 (0)