rockbox/apps/plugins/imageviewer
Michael Giacomelli e32bfaadb1 jpeg: reject layouts the decoders cannot handle
Both JPEG decoders accepted several baseline layouts they cannot decode
and produced garbage without an error:

- chroma with sampling factors other than 1x1 (the MCU layout is chosen
  from luma alone, so any other chroma layout desynchronises)
- files written as more than one scan, where the first scan does not
  hold every component (it was decoded as if it were interleaved)
- scans whose components are not in frame order
- a height of 0 in SOF, to be defined later by a DNL marker

Reject these in process_markers(). The imageviewer then falls back to
the jpegp decoder on colour targets, which handles all of them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Change-Id: Ia3373f2b934eef6e3f354b4d064faf2d89868050
2026-10-01 13:22:53 -04:00
..
bmp chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
gif chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
jpeg jpeg: reject layouts the decoders cannot handle 2026-10-01 13:22:53 -04:00
jpegp chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
png Add "rbfs" prefix to native filesystem functions 2026-09-17 16:22:31 -04:00
ppm Add "rbfs" prefix to native filesystem functions 2026-09-17 16:22:31 -04:00
image_decoder.c chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
image_decoder.h chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
imageviewer.c chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
imageviewer.h chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
imageviewer.make chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
imageviewer_button.h 3ds: Port refactor. 2026-09-01 08:39:07 -04:00
readme.txt image viewer: add quick guide describing how to add image decoder. also improve comments. 2011-01-16 12:45:11 +00:00
SOURCES FS#6321: Universal Image Viewer 2010-11-21 13:47:56 +00:00
SUBDIRS imageviewer: Initial support for JPEG progressive images. Add decoder 2024-10-14 09:19:34 -04:00

this document describes how to add new image decoder.

1. create a directory which name is your image decoder's name and put source files
 under the directory.
'const struct image_decoder image_decoder' and 'IMGDEC_HEADER' must be declared in
 one of your source files.
see imageviewer.h for the detail of struct image_decoder.

2. add the directory name to apps/plugins/imageviewer/SUBDIR so that the decoder
 is built.
if the decoder is supported by particular targets, surround it with #if directive.
e.g. if the decoder supports color LCD targets only,
#ifdef HAVE_LCD_COLOR
bmp
#endif

3. append appropriate entry to enum image_type in image_decoder.h, decoder_names
 and ext_list in image_decoder.c so that the imageviewer plugin can recognize
 the decoder.
if the decoder is supported by particular targets, surround them with same #if
 directive in SUBDIR.

4. add entry to apps/plugins/viewers.config
 (in format: file_extension,viewer/imageviewer) so that the file with specified 
 file extension will be opened by image viewer plugin.
if the decoder is supported by particular targets, surround it with same #if
 directive in SUBDIR.

5. add entry to apps/plugins/CATEGORIES (in format: decoder_name,viewer) so
 that the build file is copied to viewers directory.
DON'T surround this with #if directive.


notes:
if you need to use greylib functions to draw image, add the functions to
 struct imgdec_api just like gray_bitmap_part because GREY_INFO_STRUCT is
 declared in imageviewer and is not available from the decoder.