Yes, I'd think we'd want to merge the v6 support into libjpeg-turbo and verify its correct operation before trying to replace the version of libjpeg in Android. Also, v6 would need to be selected using the same mechanisms (or similar) to the ones we currently use to select NEON.
I also wanted to let you guys know that I have set up a libjpeg-turbo-devel list (https://lists.sourceforge.net/lists/listinfo/libjpeg-turbo-devel) which can be used to submit patches to the project or talk about development topics specific to the libjpeg-turbo code. You can also use the Patch tracker on Sourceforge to submit patches and discuss them.
On 6/22/11 8:30 PM, Christian Robottom Reis wrote:
Hi there,
I took a look at the AOSP libjpeg code which is included in git://android.git.kernel.org/platform/external/jpeg
during my flight back home (which incidentally had been diverted and landed me in Rio de Janeiro; not sure if I celebrate or cry) and noted the following things:
- There is a v6 implementation of the fast IDCT algorithm which lives in armv6_idct.S. - The commit which adds this implementation was added October 2010, and there haven't been any changes since. - The code that selects the decoder IDCT implementation in jddctmgr.c always uses that implementation if ANDROID_ARMV6_IDCT is defined. - Google have an "ashmem" backing store implementation, and have code to enable tile-based mode. It's a fairly non-intrusive change to use ashmem since it just replaces jpeg_open_backing_store. - The code is pretty much standard libjpeg without any structural changes to it. - There isn't any NEON code in this branch. - Mans has an optimized version here: http://git.mansr.com/?p=libjpeg;a=summary I don't know if he's submitted this to AOSP or not.
This suggests to me that a simple drop-in of libjpeg-turbo might be actually easy to do, and that there is probably a significant performance benefit to be achieved. One thing to keep in mind is that this code still supports armv6, so we'd probably want to preserve that.
Thanks!