lemoon / libyuv

Automatically exported from code.google.com/p/libyuv

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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