1
0
Fork 0
forked from len0rd/rockbox
foxbox/firmware
Cástor Muñoz b320bbaf61 iPod Classic: YUV to RGB optimizations for ARM v5+
Optimizes YUV to RGB conversion using ARMv5 multiply-accumulate
intructions for operations and data tables for saturation.

This first patch set includes the three versions i have developed.
Although iPod Classic need to use the latest version to reach 30fps,
old versions may serve other targets.

All versions are based on current SVN algorithm (round->scale->add)
using the same coefficients, so output results are identical.

Version history:

  ARMv4:
   - use all available registers to calculate four pixels within each
     loop iteration.
   - avoid LDR interlocks.

  ARMv5TE:
   - use ARMv5TE+ 1-cycle multiply-accumulate instructions.

  ARMv5TE_WST:
   - use data tables (256 bytes) for RBG565 saturation.

Benchmarks results using iPod Classic (ARM926EJ 216Mhz):

                 size    test_fps (1)    mpegplayer (2)
                 bytes   YUV  YUV1/4     average  min/max
                 -----   -----------     ------------------
  SVN-20141107   528     27.8  110.0     11035  10864/13397
  ARMv4          480     28.8  114.0      9767   9586/12126
  ARMv5TE        468     29.7  117.5      8751   8584/11118
  ARMv5TE_WST    544     33.6  133.0      6355   6316/6403

  (1) boosted
  (2) play full elephants_dream_320x240.mpg file (15693 frames) using
      mpegplayer, patched RB measures YUV to RGB565 frame conversion
      time (microseconds)

  Compared against the WST version, the ARMV5TE version w/o cached
  saturation tables is slower, but it is smaller and i have doubts
  about the power consumption.

Change-Id: I2b6a81804636658d85a1bb104ccb2055e77ac120
Reviewed-on: http://gerrit.rockbox.org/1034
Reviewed-by: Cástor Muñoz <cmvidal@gmail.com>
Tested: Cástor Muñoz <cmvidal@gmail.com>
2014-12-10 20:39:34 +01:00
..
asm Fix YUV generic C performance function on 24-bit framebuffer 2014-11-10 20:30:16 +01:00
common unicode: Fix getle16 and getbe16 2014-09-21 07:42:49 +02:00
decompressor Add KEEP() around vectors in linker scripts. 2011-12-18 06:43:08 +00:00
drivers Introducing Targets iBasso DX50 & iBasso DX90 2014-09-18 18:19:01 +02:00
export Add IS_ALIGNED(x, a) macro helper 2014-11-29 20:59:18 +03:00
include Hopefully fix most of the errors and warnings from the last push 2014-08-29 23:36:11 -04:00
kernel Remove I/O priority. It is harmful when used with the new file code. 2014-08-30 14:01:21 -04:00
libc Add normal alloca() definition and implement a strdupa and friends 2014-08-29 22:06:59 -04:00
target iPod Classic: YUV to RGB optimizations for ARM v5+ 2014-12-10 20:39:34 +01:00
test Make fat test tool build again, and make its sector size configurable. 2014-01-03 23:57:32 +01:00
usbstack Rewrite filesystem code (WIP) 2014-08-30 03:48:23 +02:00
arabjoin.c
arabjoin.h
ata_idle_notify.c Fix reds. 2014-03-14 23:43:45 +01:00
backlight-sw-fading.c change order of include headers and at the same time fix warning about 2014-03-27 19:50:47 +00:00
backlight.c All kernel objects in code shared amongs targets (core, plugins, codecs) should be declared SHAREDBSS_ATTR as any core could potentially touch them even though they seem only to involve threads on one core. The exception is target code for particular CPUs where proper allocation is fixed. playlist.c was a little odd too-- use one mutex for the current playlist and a separate one for created playlists (still pondering the necessity of more than one). 2011-02-14 11:27:45 +00:00
bidi.c bidi.c: Check buffer sizes. 2014-01-09 23:30:32 +01:00
buflib.c buflib: Add a define telling the per-alloc overhead. 2014-02-02 19:40:38 +01:00
COPYING
core_alloc.c buflib: Properly support allocations without any name, to avoid wasting space 2014-02-02 19:40:38 +01:00
debug.c Redirect (L)DEBUGFs to adb logcat in DEBUG enabled builds. 2010-09-20 17:38:47 +00:00
eeprom_settings.c
enc_base.c FS#12378 : Remove various unused code, and comment out some unused code and data for reference or future use. 2011-12-14 21:45:25 +00:00
events.c Fix stupid typo in 470989b that triggered panics easily. 2014-03-15 02:23:43 +01:00
firmware.make Prevent spurious recompiles on account of changed version. 2014-08-28 15:48:56 +02:00
font.c fonts: Fix regression(s) caused by c23ce62. 2014-01-26 14:01:48 +01:00
font_cache.c fonts: Do not unload completely on USB. 2014-01-15 23:37:39 +01:00
general.c kernel: Break out kernel primitives into separate files and move to separate dir. 2014-03-03 18:11:57 +01:00
hangul.c
ifp_usb_serial.c firmware/ : use lcd_putsf() (only in debug code) 2010-08-28 23:12:11 +00:00
load_code.c Fix various reds. Some includes needed fixup. 2014-03-03 19:10:48 +01:00
logf.c events: Rework event subsystem (add_event, send_event) to be more versatile. 2014-03-14 23:36:30 +01:00
lru.c Revert r30818 2011-10-22 08:02:38 +00:00
panic.c panicf doesn't return so why not tell GCC and $AVE : 2014-08-25 13:55:16 -04:00
pcm.c Greatly reduce volume-change zipper artifacts with SW volume. 2014-03-08 08:04:41 +01:00
pcm_mixer.c Enable setting of global output samplerate on certain targets. 2013-07-06 04:22:04 +02:00
pcm_sampr.c
pcm_sw_volume.c Greatly reduce volume-change zipper artifacts with SW volume. 2014-03-08 08:04:41 +01:00
powermgmt.c Introducing Targets iBasso DX50 & iBasso DX90 2014-09-18 18:19:01 +02:00
profile.c Remove last traces of sprintf.h 2010-05-07 02:13:47 +00:00
README
rolo.c Fix reds. Also apply the new scrolling to lcd charcell (this even uncovered an 2013-12-15 00:38:48 +01:00
rom.lds rombox: Do not copy .init section to ram on startup. 2014-01-20 10:42:02 +01:00
screendump.c lcd-24bit: Introduce a 24-bit mid-level LCD driver 2014-06-21 00:15:53 +02:00
scroll_engine.c scroll_engine: Fix FS#12894: Text scrolling stops working after a few seconds/minutes 2014-01-12 21:29:55 +01:00
sdmmc.c Various minor cleanups 2010-08-01 10:07:05 +00:00
sound.c Add DAC's oversampling filter roll-off selection to sound settings. 2013-05-24 11:18:16 +04:00
SOURCES HDD1630/HDD6330/SA9200: Integration of the clicker with the "Keyclick" menu. 2014-11-10 21:40:47 +01:00
storage.c Remove I/O priority. It is harmful when used with the new file code. 2014-08-30 14:01:21 -04:00
system.c Fix reds. 2011-12-24 12:21:16 +00:00
timer.c
tuner.c Add stub STFM1000 tuner driver 2012-05-19 16:10:52 +02:00
usb.c USB: Detect charging-only mode upon cable insert, not host detect. 2013-05-22 02:28:31 -04:00

See docs/README