Open GoogleCodeExporter opened 9 years ago
There's an SkCanvasVideoRenderer unittest in media_blink_unittests
Original comment by dalecurtis@chromium.org
on 24 Jul 2015 at 10:00
Theres 3 ways to implement this:
1. Caller can do 2 steps: I420ToARGB and ARGBCopyYToAlpha
ARGBCopyYToAlpha takes a plane of data and copies it to the 4th byte of ARGB.
See planarfunctions.h
LIBYUV_API
int ARGBCopyYToAlpha(const uint8* src_y, int src_stride_y,
uint8* dst_argb, int dst_stride_argb,
int width, int height);
Advantages:
a. Allows any form of I420 conversion, including I422, J420 and ABGR
destination. b. works with existing libyuv.
c. both functions are highly optimized including AVX2.
Disadvantage:
a. less cache/memory friendly for large images where ARGB destination doesnt
fit cache.
2. Implement A420ToARGB (I420 with alpha), internally doing 2 steps per row.
Advantages:
a. faster - using a row buffer for intermediate ARGB is cache friendly.
b. abstracts implementation, which can be improved in future.
Disadvantage:
a. implements a specific color space. less flexible.
3. Implement optimized A420ToARGB.
Internally the I420ToARGB is done with 3 macros to implement the I420 fetch,
YUV conversion, and ARGB storing. The ARGB storing fills in 255. This macro
could implement a variation that fetches alpha from another pointer.
Advantage: fastest
Disadvantage: most complex, least flexible.
Original comment by fbarch...@chromium.org
on 11 Aug 2015 at 6:03
I420AlphaToARGB implemented in r1466
I420AlphaToARGB_Any (1373 ms)
I420AlphaToARGB_Unaligned (1625 ms)
I420AlphaToARGB_Invert (1303 ms)
I420AlphaToARGB_Opt (1302 ms)
I420ToARGB_Any (660 ms)
I420ToARGB_Unaligned (637 ms)
I420ToARGB_Invert (615 ms)
I420ToARGB_Opt (542 ms)
Original comment by fbarch...@chromium.org
on 18 Aug 2015 at 6:25
Original issue reported on code.google.com by
dalecurtis@chromium.org
on 24 Jul 2015 at 9:47