Quantum Painter (#10174)
* Install dependencies before executing unit tests. * Split out UTF-8 decoder. * Fixup python formatting rules. * Add documentation for QGF/QFF and the RLE format used. * Add CLI commands for converting images and fonts. * Add stub rules.mk for QP. * Add stream type. * Add base driver and comms interfaces. * Add support for SPI, SPI+D/C comms drivers. * Include <qp.h> when enabled. * Add base support for SPI+D/C+RST panels, as well as concrete implementation of ST7789. * Add support for GC9A01. * Add support for ILI9341. * Add support for ILI9163. * Add support for SSD1351. * Implement qp_setpixel, including pixdata buffer management. * Implement qp_line. * Implement qp_rect. * Implement qp_circle. * Implement qp_ellipse. * Implement palette interpolation. * Allow for streams to work with either flash or RAM. * Image loading. * Font loading. * QGF palette loading. * Progressive decoder of pixel data supporting Raw+RLE, 1-,2-,4-,8-bpp monochrome and palette-based images. * Image drawing. * Animations. * Font rendering. * Check against 256 colours, dump out the loaded palette if debugging enabled. * Fix build. * AVR is not the intended audience. * `qmk format-c` * Generation fix. * First batch of docs. * More docs and examples. * Review comments. * Public API documentation.
This commit is contained in:
parent
1dbbd2b6b0
commit
1f2b1dedcc
62 changed files with 7561 additions and 35 deletions
29
docs/quantum_painter_rle.md
Normal file
29
docs/quantum_painter_rle.md
Normal file
|
@ -0,0 +1,29 @@
|
|||
# QMK QGF/QFF RLE data schema :id=qmk-qp-rle-schema
|
||||
|
||||
There are two "modes" to the RLE algorithm used in both [QGF](quantum_painter_qgf.md)/[QFF](quantum_painter_qff.md):
|
||||
|
||||
* Non-repeating sections of octets, with associated length of up to `128` octets
|
||||
* `length` = `marker - 128`
|
||||
* A corresponding `length` number of octets follow directly after the marker octet
|
||||
* Repeated octet with associated length, with associated length of up to `128`
|
||||
* `length` = `marker`
|
||||
* A single octet follows the marker that should be repeated `length` times.
|
||||
|
||||
Decoder pseudocode:
|
||||
```
|
||||
while !EOF
|
||||
marker = READ_OCTET()
|
||||
|
||||
if marker >= 128
|
||||
length = marker - 128
|
||||
for i = 0 ... length-1
|
||||
c = READ_OCTET()
|
||||
WRITE_OCTET(c)
|
||||
|
||||
else
|
||||
length = marker
|
||||
c = READ_OCTET()
|
||||
for i = 0 ... length-1
|
||||
WRITE_OCTET(c)
|
||||
|
||||
```
|
Loading…
Add table
Add a link
Reference in a new issue