Chromium YUV requirements
GoogleCodeExporter opened this issue · comments
In this crbug some libyuv concerns are raised:
http://code.google.com/p/chromium/issues/detail?id=142518
Comment 11 by yongshen...@intel.com, Yesterday (19 hours ago)
1. libYUV supports convertions between RGB32(different packing formats, ARGB,
ABGR, BGRA, etc) to YUV but seems it misses some features(mirroring, filter
modes FILTER_BILINEAR_H and FILTER_BILINEAR_V).
2. LibYUV provides basic functions but no functions which implement several
features in one function. for example, ScaleYUVToRGB32 combines many basic
features like scale, convert, rotate. I think it might be implemented with APIs
of libYUV and need support from libYUV.
3. For platform support, now the implementation in media/base supports MMX and
SSE instructions. libYUV doesn't only support them but also NEON, etc.
API mapping between YUV related APIs in media/base and libYUV:
a) ConvertYUVToRGB32: (convert YV12 and YV16 to rgb formats)
libYUV: ConvertToARGB(I420ToARGB, I422ToARGB), I420ToABGR, I420ToBGRA, etc
b) ConvertRGB32ToYUV:
libYUV: ARGBToI420, BGRAToI420
c) ScaleYUVToRGB32:
Actually this function combines scale, convert, rotate features. libYUV doesn't have this kind of function. Another thing is that I don't find libYUV support mirroring.
d) ScaleYUVToRGB32WithRect: libYUV seems not have this kind of function. may
need implementation in libYUV.
e) ConvertRGB24ToYUV:
libYUV: RGB24ToI420
f) ConvertYUY2ToYUV: no need to use libyuv
g) ConvertNV21ToYUV: no need to use libyuv
Original issue reported on code.google.com by fbarch...@google.com
on 23 Aug 2012 at 3:35
Chromoting has 2 requirements
1. speed up libyuv unittests
2. run libyuv unittests from chromium builds.
Original comment by fbarch...@chromium.org
on 30 Aug 2012 at 7:42
Progress update:
1. speed up unittests. Done. Was 5 minutes. Now 10 seconds.
try server and build bots added to libyuv.
valgrind added. tsan and asan pass. TODO memcheck.
webrtc has additional unittests and builds/runs bots, including Android.
RGBA to/from ARGB added and optimized for SSSE3.
Original comment by fbarch...@chromium.org
on 14 Sep 2012 at 6:29
- Changed state: Started
RGBA to/from I420 optimized for SSSE3.
Original comment by fbarch...@chromium.org
on 18 Sep 2012 at 6:07
NEON optimized I420ToRGBA. RGBA, ARGB, BGRA and ARGB are all supported.
Re
f) ConvertYUY2ToYUV: no need to use libyuv
libyuv version is fully optimized for SSE2.
NEON version coming soon.
g) ConvertNV21ToYUV: no need to use libyuv
libyuv version is fully optimized for NV12/21, on NEON and SSE2 and including
fully register based rotate by 90/180/270. 32 bit version rotates 8x8 blocks
while 64 bit rotates 16x8.
NV12 is the most common mobile format, so rotation is important.
Also NV12ToARGB is a one step direct conversion with SSSE3, and theres an
NV12toRGB565 for mobile.
Original comment by fbarch...@google.com
on 19 Sep 2012 at 4:37
r431 ARGBToRGB565/555/4444 optimized for NEON.
f) g) optimized unaligned versions of YUY2 and NV12 for Neon and SSSE3.
Original comment by fbarch...@chromium.org
on 20 Oct 2012 at 7:00
b) ConvertRGB32ToYUV
r481 optimized for Neon.
Original comment by fbarch...@chromium.org
on 13 Nov 2012 at 7:00
r548 optimizes YUV bilinear scale for SSE2 (was SSSE3).
Original comment by fbarch...@google.com
on 22 Jan 2013 at 8:04
Step 1 complete. RGB to YUV and YUV to RGB use libyuv. 10% overall
performance improvement.
Original comment by phthor...@gmail.com
on 3 May 2013 at 7:01
RGBToI420 tested for Chrome media capture. 20x faster (was C)
Original comment by fbarch...@google.com
on 10 Sep 2013 at 8:22
RGBAToBGRA used. Now optimized for AVX2 and SSE2, as well as SSSE3 and Neon
circa r810.
Original comment by fbarch...@google.com
on 13 Oct 2013 at 2:51
A number of media functions now use libyuv. The main unsatisfied requirement
is YUV to ARGB scaling.
Original comment by phthor...@gmail.com
on 25 Feb 2014 at 8:50
Closing overall issue. libyuv is in use in various parts of chromium.
Open specific bugs for followup.
Original comment by fbarch...@google.com
on 9 Feb 2015 at 7:02
- Changed state: Fixed