Re: Android libjpeg
I still posit that it's possible to avoid many of those inefficiencies by using a sufficiently large buffer in libjpeg-turbo and using an in-memory source/destination manager. Much of the inefficiency in the code relates to the buffering that it does to avoid reading the entire image into memory. I also hasten to point out that not all of the compute-intensive parts of the code are NEON-accelerated. The general speedup we're seeing in NEON vs non-NEON is about 1.5-2x rather than the 3-4x we see with x86-64. Not sure whether ARM is 64-bit, but using 64-bit code will improve Huffman en/decoding performance significantly. It may also be the case that the hand-tuned code I wrote in the Huffman codec is making performance assumptions based on x86 that aren't true for ARM. It would be interesting to see what the speedup is with the unoptimized Huffman code out of libjpeg. At least on x86, Huffman can account for 40% of the compute time, so optimizing it further has a potentially big pay-off. However, I've personally spent hundreds of hours getting it where it is, and I have a gut feeling that further optimization of it would require dropping down to assembly. On Jun 29, 2011, at 3:03 PM, Måns Rullgård wrote: > Vladimir Pantelic writes: > >> Mandeep Kumar wrote: >>> Hi All, >>> >>> I have done some benchmarking on OMAP4 running Ubuntu for various versions >>> of libjpegs. Benchmarks were collected with >>> modified version of djpeg that prints out ms time taken for decoding. >>> Sample used for benchmarking is a 12MP image >>> downloaded from a photography website. Here are the results: >> >> ... >> >>> libjpeg-turbo trunk version that has NEON patches (5 runs). >>> *http://libjpeg-turbo.svn.sourceforge.net/viewvc/libjpeg-turbo/* >>> * Decoding Time for Run 1: 1068 ms >>> Decoding Time for Run 2: 1065 ms >>> Decoding Time for Run 3: 1093 ms >>> Decoding Time for Run 4: 1066 ms >>> Decoding Time for Run 5: 1067 ms >>> *Median Decoding Time: 1067 ms* >> >> One remark: >> >> a 12MP image decoded in 1076ms equals ~12MP/s decoding speed. >> >> decoding a 640x480 MJPEG file on a 1GHz OMAP4 using libavcodec >> gives me an average decoding time per frame of ~10ms which yields: >> >> 640x480/10ms = ~30MP/s >> >> so roughly 2.5 times faster. >> >> Either I am doing something wrong or this libjpeg-turbo is not so turbo. > > Libjpeg (turbo or regular) is full of inefficiencies. I guess they all > add up. > > -- > Måns Rullgård > m...@mansr.com ___ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev
Re: Android libjpeg
Mandeep Kumar writes: >> Vladimir Pantelic writes: >> >> > Mandeep Kumar wrote: >> >> Hi All, >> >> >> >> I have done some benchmarking on OMAP4 running Ubuntu for various >> >> versions of libjpegs. Benchmarks were collected with >> >> modified version of djpeg that prints out ms time taken for decoding. >> >> Sample used for benchmarking is a 12MP image >> >> downloaded from a photography website. Here are the results: >> > >> > ... >> > >> >> libjpeg-turbo trunk version that has NEON patches (5 runs). * >> >> http://libjpeg-turbo.svn.sourceforge.net/viewvc/libjpeg-turbo/* >> >> * Decoding Time for Run 1: 1068 ms >> >> Decoding Time for Run 2: 1065 ms >> >> Decoding Time for Run 3: 1093 ms >> >> Decoding Time for Run 4: 1066 ms >> >> Decoding Time for Run 5: 1067 ms >> >> *Median Decoding Time: 1067 ms* >> > >> > One remark: >> > >> > a 12MP image decoded in 1076ms equals ~12MP/s decoding speed. >> > >> > decoding a 640x480 MJPEG file on a 1GHz OMAP4 using libavcodec >> > gives me an average decoding time per frame of ~10ms which yields: >> > >> > 640x480/10ms = ~30MP/s >> > >> > so roughly 2.5 times faster. >> > >> > Either I am doing something wrong or this libjpeg-turbo is not so turbo. >> >> Libjpeg (turbo or regular) is full of inefficiencies. I guess they all >> add up. >> > My numbers should only be used for relative comparison purpose as djpeg > decoding time that I sent also include time to read input file from > filessystem. Actual decoding speed may be higher when special modification > are done in djpeg application to read input from memory. I doubt reading from a cached file can account for that much time. Besides, I presume Vladimir was reading his file from somewhere too. However, no matter how slow libjpeg is, that's what lots of apps use, and thus improving it should be beneficial to them insofar jpeg decoding is a bottleneck. -- Måns Rullgård m...@mansr.com ___ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev
Re: Android libjpeg
Vladimir Pantelic writes: > Mandeep Kumar wrote: >> Hi All, >> >> I have done some benchmarking on OMAP4 running Ubuntu for various versions >> of libjpegs. Benchmarks were collected with >> modified version of djpeg that prints out ms time taken for decoding. Sample >> used for benchmarking is a 12MP image >> downloaded from a photography website. Here are the results: > > ... > >> libjpeg-turbo trunk version that has NEON patches (5 runs). >> *http://libjpeg-turbo.svn.sourceforge.net/viewvc/libjpeg-turbo/* >> * Decoding Time for Run 1: 1068 ms >> Decoding Time for Run 2: 1065 ms >> Decoding Time for Run 3: 1093 ms >> Decoding Time for Run 4: 1066 ms >> Decoding Time for Run 5: 1067 ms >> *Median Decoding Time: 1067 ms* > > One remark: > > a 12MP image decoded in 1076ms equals ~12MP/s decoding speed. > > decoding a 640x480 MJPEG file on a 1GHz OMAP4 using libavcodec > gives me an average decoding time per frame of ~10ms which yields: > > 640x480/10ms = ~30MP/s > > so roughly 2.5 times faster. > > Either I am doing something wrong or this libjpeg-turbo is not so turbo. Libjpeg (turbo or regular) is full of inefficiencies. I guess they all add up. -- Måns Rullgård m...@mansr.com ___ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev
Re: Android libjpeg
Måns Rullgård wrote: > Mandeep Kumar writes: > >>> Vladimir Pantelic writes: >>> > Either I am doing something wrong or this libjpeg-turbo is not so turbo. >>> >>> Libjpeg (turbo or regular) is full of inefficiencies. I guess they all >>> add up. >>> >> My numbers should only be used for relative comparison purpose as djpeg >> decoding time that I sent also include time to read input file from >> filessystem. Actual decoding speed may be higher when special modification >> are done in djpeg application to read input from memory. > > I doubt reading from a cached file can account for that much time. > Besides, I presume Vladimir was reading his file from somewhere too. my times have been measured around the libavcodec decode() call and include colorspace conversion to YUYV interleaved. I realize that libjpeg might have an additional YUV to RGB step that I did not do since my display is YUV capable. > However, no matter how slow libjpeg is, that's what lots of apps use, > and thus improving it should be beneficial to them insofar jpeg decoding > is a bottleneck. sure, I did not mean for you to stop working on it :) ___ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev
Re: Android libjpeg
My numbers should only be used for relative comparison purpose as djpeg decoding time that I sent also include time to read input file from filessystem. Actual decoding speed may be higher when special modification are done in djpeg application to read input from memory. Thanks & Regards, Mandeep 2011/6/29 Måns Rullgård > Vladimir Pantelic writes: > > > Mandeep Kumar wrote: > >> Hi All, > >> > >> I have done some benchmarking on OMAP4 running Ubuntu for various > versions of libjpegs. Benchmarks were collected with > >> modified version of djpeg that prints out ms time taken for decoding. > Sample used for benchmarking is a 12MP image > >> downloaded from a photography website. Here are the results: > > > > ... > > > >> libjpeg-turbo trunk version that has NEON patches (5 runs). * > http://libjpeg-turbo.svn.sourceforge.net/viewvc/libjpeg-turbo/* > >> * Decoding Time for Run 1: 1068 ms > >> Decoding Time for Run 2: 1065 ms > >> Decoding Time for Run 3: 1093 ms > >> Decoding Time for Run 4: 1066 ms > >> Decoding Time for Run 5: 1067 ms > >> *Median Decoding Time: 1067 ms* > > > > One remark: > > > > a 12MP image decoded in 1076ms equals ~12MP/s decoding speed. > > > > decoding a 640x480 MJPEG file on a 1GHz OMAP4 using libavcodec > > gives me an average decoding time per frame of ~10ms which yields: > > > > 640x480/10ms = ~30MP/s > > > > so roughly 2.5 times faster. > > > > Either I am doing something wrong or this libjpeg-turbo is not so turbo. > > Libjpeg (turbo or regular) is full of inefficiencies. I guess they all > add up. > > -- > Måns Rullgård > m...@mansr.com > ___ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev
Re: Android libjpeg
Mandeep Kumar wrote: Hi All, I have done some benchmarking on OMAP4 running Ubuntu for various versions of libjpegs. Benchmarks were collected with modified version of djpeg that prints out ms time taken for decoding. Sample used for benchmarking is a 12MP image downloaded from a photography website. Here are the results: ... libjpeg-turbo trunk version that has NEON patches (5 runs). *http://libjpeg-turbo.svn.sourceforge.net/viewvc/libjpeg-turbo/* * Decoding Time for Run 1: 1068 ms Decoding Time for Run 2: 1065 ms Decoding Time for Run 3: 1093 ms Decoding Time for Run 4: 1066 ms Decoding Time for Run 5: 1067 ms *Median Decoding Time: 1067 ms* One remark: a 12MP image decoded in 1076ms equals ~12MP/s decoding speed. decoding a 640x480 MJPEG file on a 1GHz OMAP4 using libavcodec gives me an average decoding time per frame of ~10ms which yields: 640x480/10ms = ~30MP/s so roughly 2.5 times faster. Either I am doing something wrong or this libjpeg-turbo is not so turbo. Regards, Vladimir ___ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev
Re: Android libjpeg
Hi All, I have done some benchmarking on OMAP4 running Ubuntu for various versions of libjpegs. Benchmarks were collected with modified version of djpeg that prints out ms time taken for decoding. Sample used for benchmarking is a 12MP image downloaded from a photography website. Here are the results: *Non Optimized libjpeg-turbo(5 runs):* Decoding Time for Run 1: 2022 ms Decoding Time for Run 2: 2029 ms Decoding Time for Run 3: 2165 ms Decoding Time for Run 4: 2027 ms Decoding Time for Run 5: 2150 ms * Median Decoding Time: 2029 ms* *Linaro's NEON Optimized libjpeg-turbo done in last cycle (5 runs)* http://git.linaro.org/gitweb?p=people/mandeep-ti/libjpeg-turbo-1.1.0_linaro.git;a=summary Decoding Time for Run 1: 1634 ms Decoding Time for Run 2: 1634 ms Decoding Time for Run 3: 1636 ms Decoding Time for Run 4: 1739 ms Decoding Time for Run 5: 1738 ms * Median Decoding Time: 1636 ms* *Mans Rullgard's libjpeg based of libjpeg 6b (5 runs)* http://git.mansr.com/?p=libjpeg;a=summary Decoding Time for Run 1: 1101 ms Decoding Time for Run 2: 1081 ms Decoding Time for Run 3: 1081 ms Decoding Time for Run 4: 1125 ms Decoding Time for Run 5: 1089 ms * Median Decoding Time: 1089 ms libjpeg-turbo trunk version that has NEON patches (5 runs). * http://libjpeg-turbo.svn.sourceforge.net/viewvc/libjpeg-turbo/* * Decoding Time for Run 1: 1068 ms Decoding Time for Run 2: 1065 ms Decoding Time for Run 3: 1093 ms Decoding Time for Run 4: 1066 ms Decoding Time for Run 5: 1067 ms *Median Decoding Time: 1067 ms* So basically libjpeg-turbo as of now is pretty much as optimized as anything out there. As a part of my last cycle work I also produced additional color conversion routines that I will submit to libjpeg-turbo project after that libjpeg-turbo should be best library to go (given that it is also highly optimized for Intel processors). Thanks & Regards, Mandeep * * On 24 June 2011 17:09, Zach Pfeffer wrote: > We've got a BP for this: > > > https://blueprints.launchpad.net/linaro-android/+spec/linaro-android-try-libjpeg-turbo > > On 23 June 2011 03:30, Alexander Sack wrote: > > On Thu, Jun 23, 2011 at 3:30 AM, 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. > > > > sounds good. Seems like a great starter project for MM WG to get their > > hands dirty on android. > > > > They could have three builds: > > > > 1. plain LEB > > 2. LEB with mans optimized libjpeg > > 3. LEB with libjpeg-turbo > > > > Then benchmark all three and keep AOSP community posted on our intent, > > progress and results. > > > > -- > > > > - Alexander > > > ___ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev
Re: Android libjpeg
Vladimir Pantelic writes: > On 06/24/2011 08:13 PM, Woodruff, Richard wrote: > >>> 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. >> >> You have to be a little careful as ARM did drop some bad NEON errata >> in A9 which require care to work around. Some CPU versions are >> impacted while others are not, tanstaafl. > > AFAIK ARM has a tool that can scan object code for "bad" neon > sequences, maybe they are willing to make that generally available? I asked them about the that tool, and they confirmed its existence, but expressed some reluctance about releasing it, mainly due to lack of internal procedures for doing so. If more people asked about it, perhaps they could be persuaded to release it. -- Måns Rullgård m...@mansr.com ___ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev
Re: Android libjpeg
We've got a BP for this: https://blueprints.launchpad.net/linaro-android/+spec/linaro-android-try-libjpeg-turbo On 23 June 2011 03:30, Alexander Sack wrote: > On Thu, Jun 23, 2011 at 3:30 AM, 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. > > sounds good. Seems like a great starter project for MM WG to get their > hands dirty on android. > > They could have three builds: > > 1. plain LEB > 2. LEB with mans optimized libjpeg > 3. LEB with libjpeg-turbo > > Then benchmark all three and keep AOSP community posted on our intent, > progress and results. > > -- > > - Alexander > ___ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev
Re: Android libjpeg
On 06/24/2011 08:13 PM, Woodruff, Richard wrote: 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. You have to be a little careful as ARM did drop some bad NEON errata in A9 which require care to work around. Some CPU versions are impacted while others are not, tanstaafl. AFAIK ARM has a tool that can scan object code for "bad" neon sequences, maybe they are willing to make that generally available? ___ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev
RE: Android libjpeg
> From: linaro-dev-boun...@lists.linaro.org [mailto:linaro-dev- > boun...@lists.linaro.org] On Behalf Of Christian Robottom Reis > Sent: Wednesday, June 22, 2011 8:30 PM > 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. You have to be a little careful as ARM did drop some bad NEON errata in A9 which require care to work around. Some CPU versions are impacted while others are not, tanstaafl. Regards, Richard W. ___ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev
Re: Android libjpeg
On 23/06/11 11:30, Alexander Sack wrote: > sounds good. Seems like a great starter project for MM WG to get their > hands dirty on android. > > They could have three builds: > > 1. plain LEB > 2. LEB with mans optimized libjpeg > 3. LEB with libjpeg-turbo > > Then benchmark all three and keep AOSP community posted on our intent, > progress and results. Hi folks since we have been busy to get the public plan review material going, this deliverable to Android AOSP will not make it for 11.06 under the current pressure of time. Pending Kurt and Mandeep saying otherwise, we will aim for this to happen in 11.07 Many thanks, -- Ilias Biris, Aallonkohina 2D 19, 02320 Espoo, Finland Tel: +358 50 4839608 (mobile) Email: ilias dot biris at linaro dot org Skype: ilias_biris ___ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev
Re: Android libjpeg
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! ___ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev
Re: Android libjpeg
On Thu, Jun 23, 2011 at 3:30 AM, 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. sounds good. Seems like a great starter project for MM WG to get their hands dirty on android. They could have three builds: 1. plain LEB 2. LEB with mans optimized libjpeg 3. LEB with libjpeg-turbo Then benchmark all three and keep AOSP community posted on our intent, progress and results. -- - Alexander ___ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev
Android libjpeg
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! -- Christian Robottom Reis, Engineering VP Brazil (GMT-3) | [+55] 16 9112 6430 | [+1] 612 216 4935 Linaro.org: Open Source Software for ARM SoCs ___ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev