Commit graph

38 commits

Author SHA1 Message Date
Aidan MacDonald
6b8c94a6e3 Fix some non-portable alignment values
UBSan reports an avalanche of unaligned pointer bugs stemming from
hardcoded 4-byte alignments used in certain places. Use sizeof(long)
instead to align to the machine word size.

Change-Id: I28e505212462c5268afa24e95df3a103ac3e2213
2022-05-02 15:38:48 +01:00
Aidan MacDonald
5aa0fc3b00 jpeg: provide a rough estimate of decoder memory overhead
JPEG decoding requires additional space in the bitmap buffer beyond
what is needed for the decoded pixel data. Provide a way to estimate
how much overhead is needed.

The actual overhead is sizeof(struct jpeg) + decode_buf_size, where
the latter depends on the image size and JPEG encoding used. From my
testing decode_buf_size is normally pretty small (under 5 KiB) but
looking at the code it could be large in some cases, primarily with
large images, so 32 KiB seems to be a decent compromise. Someone who
knows better about JPEG should pick a better value if that's too big.

Using a constant is obviously not the most accurate but it seems to
be the simplest option for retrofitting to existing code.

Change-Id: I573b0abb8ca2d79e43f185010487f07226edb793
2022-04-09 15:20:57 +01:00
William Wilgus
a6eafc86f8 Remove execute bit from file permissions from recent commit
Change-Id: I415cf235d2b179ae8c58b0427308103be3e00130
2021-03-02 02:10:53 +00:00
Michael Giacomelli
64cc9aad73 Do not resize images greater than 32767 pixels in either dimension
Internally, the resizing code uses the rockbox dim structure, which uses signed shorts.

Change-Id: Ic8850e8563a9d8c0cb3cf8269e2576be9e42b45b
2020-12-14 04:14:45 +00:00
Solomon Peachy
092c340a20 [1/4] Remove SH support and all archos targets
This removes all code specific to SH targets

Change-Id: I7980523785d2596e65c06430f4638eec74a06061
2020-07-24 21:20:13 +00:00
Solomon Peachy
c0ebbd4ccb jpeg: Fix an overflow when decoding images for non-color targets.
(Warning raised by GCC 4.9.4 -Os)

Change-Id: I1d2f491c8bdb11fe89ffb119e248ca0f4eb69de2
2020-04-05 06:34:21 +02:00
Boris Gjenero
26697d0891 Fix FS#12981 JPEG decoding problem when entropy data starts with FF
This changes JPEG fill and invalid byte handling to be like
mozjpeg, and bases entropy data start on SOS marker location.

Thanks to Stefan Waldmann and Dean Tersigni for reporting.

Change-Id: I3c79cc6ac8d714fdc75c12b57ba427d611c99519
Chaange-Id: Ibc7c17d38d5be63642bdaf6adfd6acc2a6cf4450
2016-04-01 19:29:41 +02:00
Boris Gjenero
b882f8f4e3 Set alpha_offset to zero when loading a JPEG.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30948 a1c6a512-1295-4272-9138-f99709370657
2011-11-09 23:25:36 +00:00
Andree Buschmann
57ca48458f Fix test plugin build.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29277 a1c6a512-1295-4272-9138-f99709370657
2011-02-10 20:20:12 +00:00
Thomas Martitz
f577a6a22c Embedded album art support in MP3/ID3v2 tags.
- Support is limited to non-desync jpeg in id3v2 tags. Other formats (hopefully) follow in the future.
- Embedded album art takes precedence over files in album art files.
- No additional buffers are used, the jpeg is read directly from the audio file.

Flyspray: FS#11216
Author: Yoshihisa Uchida and I

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29259 a1c6a512-1295-4272-9138-f99709370657
2011-02-09 20:13:13 +00:00
Thomas Martitz
50a6ca39ad Move c/h files implementing/defining standard library stuff into a new libc directory, also standard'ify some parts of the code base (almost entirely #include fixes).
This is to a) to cleanup firmware/common and firmware/include a bit, but also b) for Rockbox as an application which should use the host system's c library and headers, separating makes it easy to exclude our files from the build.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25850 a1c6a512-1295-4272-9138-f99709370657
2010-05-06 21:04:40 +00:00
Bertrik Sikken
a9ffcb3516 Make array static const in apps/recorder/jpeg_load.c
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25500 a1c6a512-1295-4272-9138-f99709370657
2010-04-06 19:37:41 +00:00
Thomas Martitz
5c9fe52629 Commit part of FS#9873 - Utilise buttons for playlisting
It adds a shortcut (combo or button) to directly go from the wps to the playlist viewer. The combos could possibly be improved on some targets, but I tried to keep a tad bit of consistency (was hardly possible).
I also added a corresponding touchscreen region and adapted cabbiev2.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22003 a1c6a512-1295-4272-9138-f99709370657
2009-07-22 22:10:25 +00:00
Andrew Mahone
89eb14ea56 Use single-instruction shift-and-saturate in place of range_limit for JPEG on ARMv6. Only affects the 16-point horizontal-pass IDCT.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21528 a1c6a512-1295-4272-9138-f99709370657
2009-06-27 10:01:24 +00:00
Andrew Mahone
3152bfc39a ARM assembly 8-point IDCT, both passes. No ARMv5/6 optimizations yet, aside from usat for final output.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21526 a1c6a512-1295-4272-9138-f99709370657
2009-06-27 09:21:22 +00:00
Andrew Mahone
498ad469c9 2-point and 1-point JPEG IDCT ARM assembly, remove comment in jpeg_load.c about inline asm, change loop condition to be a bit safer in case of bad values being passed.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21349 a1c6a512-1295-4272-9138-f99709370657
2009-06-19 08:26:05 +00:00
Andrew Mahone
6a0d931f38 Core JPEG decoder improvements:
For >8-point vertical IDCT, transpose the coefficients while decoding them, so that the vertical IDCT can read in rows rather than columns. This improves speed a bit for this size even using the C IDCT.
Remove inline ARM asm, replacing it with an external file containing pure asm IDCT functions.
Add jpeg_ prefix to JPEG IDCT functions since some of them will now be visible globally.


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21345 a1c6a512-1295-4272-9138-f99709370657
2009-06-19 02:56:00 +00:00
Andrew Mahone
021deacade Remove explicit counter for rows/columns in IDCT, instead testing against a pointer calculated in store_row_jpeg.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21284 a1c6a512-1295-4272-9138-f99709370657
2009-06-14 02:28:35 +00:00
Andrew Mahone
e40075e5b7 Adjust AC decode such that decode *always* stops before storing an unneeded coefficient. Remove extra lines from zag[] as it should not be possible to store a coefficient for k>63, even for corrupted files.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21283 a1c6a512-1295-4272-9138-f99709370657
2009-06-14 01:19:16 +00:00
Andrew Mahone
9e3255fdb0 Fix red.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21257 a1c6a512-1295-4272-9138-f99709370657
2009-06-12 00:02:18 +00:00
Andrew Mahone
ba2225cb51 ARMv4 and ARMv5 inline assembly for 4-point IDCT.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21256 a1c6a512-1295-4272-9138-f99709370657
2009-06-11 23:48:45 +00:00
Andrew Mahone
57ccbdd198 Move +128 offset out of range_limit, and add it to the DC coefficient in each idct*h routine, for a small binsize improvement on idct4h, idct8h, and idct16h, and a negligible speed increase.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21255 a1c6a512-1295-4272-9138-f99709370657
2009-06-11 23:48:37 +00:00
Andrew Mahone
235305e6ac Don't compensate for lack of shift in second IDCT stage, allowing quantization table to be reduced to 16-bit. Reduce IDCT workspace to 16-bit.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21254 a1c6a512-1295-4272-9138-f99709370657
2009-06-11 23:48:30 +00:00
Jens Arnold
d5842005c0 Undo the delta on ARM but making the loop variables signed as before r21205. GCC is weird...
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21206 a1c6a512-1295-4272-9138-f99709370657
2009-06-07 22:50:12 +00:00
Jens Arnold
1d6df54df2 Convert a number of places in core and plugins to use the BIT_N() macro instead of 1<<n. Speeds up things on SH1, and also reduces core binsize. Most notable speedups: 1 bit lcd driver: drawpixel +20%, drawline + 27%, hline +5%; jpeg viewer: +8% for 1/8 scaling. Other targets are unaffected.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21205 a1c6a512-1295-4272-9138-f99709370657
2009-06-07 21:27:05 +00:00
Andrew Mahone
2bedde17b6 Don't perform YUV->RGB conversion before row output for unscaled loads of greyscale JPEG, as store_row_jpeg already does this.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21174 a1c6a512-1295-4272-9138-f99709370657
2009-06-03 06:35:10 +00:00
Andrew Mahone
c8b67c3ca0 Flag EOF and empty buffer conditions as UNLIKELY in JPEG decoder.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20907 a1c6a512-1295-4272-9138-f99709370657
2009-05-11 00:16:57 +00:00
Andrew Mahone
b5c356be85 Fix a bug reading JPEG when the output data is smaller than sizeof(struct jpeg), and add more optional debugging output in the decoder.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20906 a1c6a512-1295-4272-9138-f99709370657
2009-05-11 00:16:48 +00:00
Andrew Mahone
74e4d17910 Don't build 16-point IDCT on greyscale targets, since it's only used for chroma components.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20887 a1c6a512-1295-4272-9138-f99709370657
2009-05-09 10:32:13 +00:00
Andrew Mahone
e3b1d78dfc Fix test for direct JPEG output, bump plugin API as r20884 changed struct custom_format.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20885 a1c6a512-1295-4272-9138-f99709370657
2009-05-09 10:10:26 +00:00
Andrew Mahone
91efc16256 Split 8-bit-to-native conversion in bmp.c into a function, add support for plugging unscaled output in BMP and JPEG loaders, use output_row_8_native in JPEG decoder when possible.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20884 a1c6a512-1295-4272-9138-f99709370657
2009-05-09 07:31:27 +00:00
Andrew Mahone
7b81cd0caf Convert Huffman decode from inline function to macro, for small code size saving on ARM and on Coldfire color, only finish DC decode on greyscale targets if decoding luma channel.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20874 a1c6a512-1295-4272-9138-f99709370657
2009-05-08 07:21:35 +00:00
Andrew Mahone
0af7494b37 Small size improvement for JPEG on ARM/Coldfire.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20873 a1c6a512-1295-4272-9138-f99709370657
2009-05-08 04:19:10 +00:00
Andrew Mahone
a75c72c169 Plugin JPEG decoder for data in memory, along with test_mem_jpeg.c and bench_mem_jpeg.c plugins to test and benchmark it, and a line-length clean up in jpeg_load.c.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20871 a1c6a512-1295-4272-9138-f99709370657
2009-05-08 03:46:48 +00:00
Andrew Mahone
d2c1298e19 Never use upscaling IDCT for luma (to reduce blockiness), plus some small size optimizations by not calculating or storing scale factors or k_need/zero_need for chroma on greyscale.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20866 a1c6a512-1295-4272-9138-f99709370657
2009-05-07 08:32:17 +00:00
Andrew Mahone
eef7945a97 Move YUV->RGB in JPEG load from before scaler to after scaler. Required change to struct custom_format, so sorted the plugin API as well.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20856 a1c6a512-1295-4272-9138-f99709370657
2009-05-06 04:53:56 +00:00
Bertrik Sikken
ad031e903c Make local function static in jpeg_load.c, add missing header file in read_image.c
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20848 a1c6a512-1295-4272-9138-f99709370657
2009-05-03 07:02:09 +00:00
Andrew Mahone
60d4209383 Add core JPEG reader, adapted from the JPEG plugin's decoder, with some changes to prevent include conflicts between the two decoders.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20836 a1c6a512-1295-4272-9138-f99709370657
2009-05-01 23:24:23 +00:00