From bac54f46ca283aed0baecdeef35b0aef1dc8dde7 Mon Sep 17 00:00:00 2001 From: Martin Brook Date: Mon, 26 Jan 2026 18:50:23 +0000 Subject: [PATCH 1/9] feat: epub add png jpeg support --- lib/Epub/Epub/Page.cpp | 31 +- lib/Epub/Epub/Page.h | 17 + lib/Epub/Epub/Section.cpp | 2 +- lib/Epub/Epub/blocks/ImageBlock.cpp | 182 +++++++++ lib/Epub/Epub/blocks/ImageBlock.h | 32 ++ .../Epub/converters/FramebufferWriter.cpp | 31 ++ lib/Epub/Epub/converters/FramebufferWriter.h | 19 + .../Epub/converters/ImageDecoderFactory.cpp | 68 ++++ .../Epub/converters/ImageDecoderFactory.h | 24 ++ .../converters/ImageToFramebufferDecoder.cpp | 18 + .../converters/ImageToFramebufferDecoder.h | 41 ++ .../converters/JpegToFramebufferConverter.cpp | 385 ++++++++++++++++++ .../converters/JpegToFramebufferConverter.h | 24 ++ .../converters/PngToFramebufferConverter.cpp | 354 ++++++++++++++++ .../converters/PngToFramebufferConverter.h | 19 + .../Epub/parsers/ChapterHtmlSlimParser.cpp | 154 ++++++- lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h | 11 +- lib/GfxRenderer/GfxRenderer.h | 1 + platformio.ini | 4 + 19 files changed, 1392 insertions(+), 25 deletions(-) create mode 100644 lib/Epub/Epub/blocks/ImageBlock.cpp create mode 100644 lib/Epub/Epub/blocks/ImageBlock.h create mode 100644 lib/Epub/Epub/converters/FramebufferWriter.cpp create mode 100644 lib/Epub/Epub/converters/FramebufferWriter.h create mode 100644 lib/Epub/Epub/converters/ImageDecoderFactory.cpp create mode 100644 lib/Epub/Epub/converters/ImageDecoderFactory.h create mode 100644 lib/Epub/Epub/converters/ImageToFramebufferDecoder.cpp create mode 100644 lib/Epub/Epub/converters/ImageToFramebufferDecoder.h create mode 100644 lib/Epub/Epub/converters/JpegToFramebufferConverter.cpp create mode 100644 lib/Epub/Epub/converters/JpegToFramebufferConverter.h create mode 100644 lib/Epub/Epub/converters/PngToFramebufferConverter.cpp create mode 100644 lib/Epub/Epub/converters/PngToFramebufferConverter.h diff --git a/lib/Epub/Epub/Page.cpp b/lib/Epub/Epub/Page.cpp index 92839eb7..e8b98a39 100644 --- a/lib/Epub/Epub/Page.cpp +++ b/lib/Epub/Epub/Page.cpp @@ -25,6 +25,29 @@ std::unique_ptr PageLine::deserialize(FsFile& file) { return std::unique_ptr(new PageLine(std::move(tb), xPos, yPos)); } +void PageImage::render(GfxRenderer& renderer, const int fontId, const int xOffset, const int yOffset) { + // Images don't use fontId or text rendering + imageBlock->render(renderer, xPos + xOffset, yPos + yOffset); +} + +bool PageImage::serialize(FsFile& file) { + serialization::writePod(file, xPos); + serialization::writePod(file, yPos); + + // serialize ImageBlock + return imageBlock->serialize(file); +} + +std::unique_ptr PageImage::deserialize(FsFile& file) { + int16_t xPos; + int16_t yPos; + serialization::readPod(file, xPos); + serialization::readPod(file, yPos); + + auto ib = ImageBlock::deserialize(file); + return std::unique_ptr(new PageImage(std::move(ib), xPos, yPos)); +} + void Page::render(GfxRenderer& renderer, const int fontId, const int xOffset, const int yOffset) const { for (auto& element : elements) { element->render(renderer, fontId, xOffset, yOffset); @@ -36,8 +59,9 @@ bool Page::serialize(FsFile& file) const { serialization::writePod(file, count); for (const auto& el : elements) { - // Only PageLine exists currently - serialization::writePod(file, static_cast(TAG_PageLine)); + // Use getTag() method to determine type + serialization::writePod(file, static_cast(el->getTag())); + if (!el->serialize(file)) { return false; } @@ -59,6 +83,9 @@ std::unique_ptr Page::deserialize(FsFile& file) { if (tag == TAG_PageLine) { auto pl = PageLine::deserialize(file); page->elements.push_back(std::move(pl)); + } else if (tag == TAG_PageImage) { + auto pi = PageImage::deserialize(file); + page->elements.push_back(std::move(pi)); } else { Serial.printf("[%lu] [PGE] Deserialization failed: Unknown tag %u\n", millis(), tag); return nullptr; diff --git a/lib/Epub/Epub/Page.h b/lib/Epub/Epub/Page.h index 20061941..69855844 100644 --- a/lib/Epub/Epub/Page.h +++ b/lib/Epub/Epub/Page.h @@ -4,10 +4,12 @@ #include #include +#include "blocks/ImageBlock.h" #include "blocks/TextBlock.h" enum PageElementTag : uint8_t { TAG_PageLine = 1, + TAG_PageImage = 2, // New tag }; // represents something that has been added to a page @@ -19,6 +21,7 @@ class PageElement { virtual ~PageElement() = default; virtual void render(GfxRenderer& renderer, int fontId, int xOffset, int yOffset) = 0; virtual bool serialize(FsFile& file) = 0; + virtual PageElementTag getTag() const = 0; // Add type identification }; // a line from a block element @@ -30,9 +33,23 @@ class PageLine final : public PageElement { : PageElement(xPos, yPos), block(std::move(block)) {} void render(GfxRenderer& renderer, int fontId, int xOffset, int yOffset) override; bool serialize(FsFile& file) override; + PageElementTag getTag() const override { return TAG_PageLine; } static std::unique_ptr deserialize(FsFile& file); }; +// New PageImage class +class PageImage final : public PageElement { + std::shared_ptr imageBlock; + + public: + PageImage(std::shared_ptr block, const int16_t xPos, const int16_t yPos) + : PageElement(xPos, yPos), imageBlock(std::move(block)) {} + void render(GfxRenderer& renderer, int fontId, int xOffset, int yOffset) override; + bool serialize(FsFile& file) override; + PageElementTag getTag() const override { return TAG_PageImage; } + static std::unique_ptr deserialize(FsFile& file); +}; + class Page { public: // the list of block index and line numbers on this page diff --git a/lib/Epub/Epub/Section.cpp b/lib/Epub/Epub/Section.cpp index 581a364f..5a9870c4 100644 --- a/lib/Epub/Epub/Section.cpp +++ b/lib/Epub/Epub/Section.cpp @@ -184,7 +184,7 @@ bool Section::createSectionFile(const int fontId, const float lineCompression, c std::vector lut = {}; ChapterHtmlSlimParser visitor( - tmpHtmlPath, renderer, fontId, lineCompression, extraParagraphSpacing, paragraphAlignment, viewportWidth, + epub, tmpHtmlPath, renderer, fontId, lineCompression, extraParagraphSpacing, paragraphAlignment, viewportWidth, viewportHeight, hyphenationEnabled, [this, &lut](std::unique_ptr page) { lut.emplace_back(this->onPageComplete(std::move(page))); }, progressFn); diff --git a/lib/Epub/Epub/blocks/ImageBlock.cpp b/lib/Epub/Epub/blocks/ImageBlock.cpp new file mode 100644 index 00000000..9c89fbb6 --- /dev/null +++ b/lib/Epub/Epub/blocks/ImageBlock.cpp @@ -0,0 +1,182 @@ +#include "ImageBlock.h" + +#include +#include +#include +#include +#include + +#include "../converters/ImageDecoderFactory.h" + +// Cache file format: +// - uint16_t width +// - uint16_t height +// - uint8_t pixels[...] - 2 bits per pixel, packed (4 pixels per byte), row-major order + +ImageBlock::ImageBlock(const std::string& imagePath, int16_t width, int16_t height) + : imagePath(imagePath), width(width), height(height) {} + +bool ImageBlock::imageExists() const { + FsFile file; + return SdMan.openFileForRead("IMG", imagePath, file); +} + +void ImageBlock::layout(GfxRenderer& renderer) {} + +static std::string getCachePath(const std::string& imagePath) { + // Replace extension with .pxc (pixel cache) + size_t dotPos = imagePath.rfind('.'); + if (dotPos != std::string::npos) { + return imagePath.substr(0, dotPos) + ".pxc"; + } + return imagePath + ".pxc"; +} + +static bool renderFromCache(GfxRenderer& renderer, const std::string& cachePath, int x, int y, int expectedWidth, + int expectedHeight) { + FsFile cacheFile; + if (!SdMan.openFileForRead("IMG", cachePath, cacheFile)) { + return false; + } + + uint16_t cachedWidth, cachedHeight; + if (cacheFile.read(&cachedWidth, 2) != 2 || cacheFile.read(&cachedHeight, 2) != 2) { + cacheFile.close(); + return false; + } + + // Verify dimensions are close (allow 1 pixel tolerance for rounding differences) + int widthDiff = abs(cachedWidth - expectedWidth); + int heightDiff = abs(cachedHeight - expectedHeight); + if (widthDiff > 1 || heightDiff > 1) { + Serial.printf("[%lu] [IMG] Cache dimension mismatch: %dx%d vs %dx%d\n", millis(), cachedWidth, cachedHeight, + expectedWidth, expectedHeight); + cacheFile.close(); + return false; + } + + // Use cached dimensions for rendering (they're the actual decoded size) + expectedWidth = cachedWidth; + expectedHeight = cachedHeight; + + Serial.printf("[%lu] [IMG] Loading from cache: %s (%dx%d)\n", millis(), cachePath.c_str(), cachedWidth, cachedHeight); + + // Read and render row by row to minimize memory usage + const int bytesPerRow = (cachedWidth + 3) / 4; // 2 bits per pixel, 4 pixels per byte + uint8_t* rowBuffer = (uint8_t*)malloc(bytesPerRow); + if (!rowBuffer) { + Serial.printf("[%lu] [IMG] Failed to allocate row buffer\n", millis()); + cacheFile.close(); + return false; + } + + for (int row = 0; row < cachedHeight; row++) { + if (cacheFile.read(rowBuffer, bytesPerRow) != bytesPerRow) { + Serial.printf("[%lu] [IMG] Cache read error at row %d\n", millis(), row); + free(rowBuffer); + cacheFile.close(); + return false; + } + + int destY = y + row; + GfxRenderer::RenderMode renderMode = renderer.getRenderMode(); + for (int col = 0; col < cachedWidth; col++) { + int byteIdx = col / 4; + int bitShift = 6 - (col % 4) * 2; // MSB first within byte + uint8_t pixelValue = (rowBuffer[byteIdx] >> bitShift) & 0x03; + + // Draw based on render mode (same logic as GfxRenderer::drawBitmap) + if (renderMode == GfxRenderer::BW && pixelValue < 3) { + renderer.drawPixel(x + col, destY, true); + } else if (renderMode == GfxRenderer::GRAYSCALE_MSB && (pixelValue == 1 || pixelValue == 2)) { + renderer.drawPixel(x + col, destY, false); + } else if (renderMode == GfxRenderer::GRAYSCALE_LSB && pixelValue == 1) { + renderer.drawPixel(x + col, destY, false); + } + } + } + + free(rowBuffer); + cacheFile.close(); + Serial.printf("[%lu] [IMG] Cache render complete\n", millis()); + return true; +} + +void ImageBlock::render(GfxRenderer& renderer, const int x, const int y) { + Serial.printf("[%lu] [IMG] Rendering image at %d,%d: %s (%dx%d)\n", millis(), x, y, imagePath.c_str(), width, height); + + const int screenWidth = renderer.getScreenWidth(); + const int screenHeight = renderer.getScreenHeight(); + + // Bounds check render position using logical screen dimensions + if (x < 0 || y < 0 || x + width > screenWidth || y + height > screenHeight) { + Serial.printf("[%lu] [IMG] Invalid render position: (%d,%d) size (%dx%d) screen (%dx%d)\n", millis(), x, y, width, + height, screenWidth, screenHeight); + return; + } + + // Try to render from cache first + std::string cachePath = getCachePath(imagePath); + if (renderFromCache(renderer, cachePath, x, y, width, height)) { + return; // Successfully rendered from cache + } + + // No cache - need to decode the image + // Check if image file exists + FsFile file; + if (!SdMan.openFileForRead("IMG", imagePath, file)) { + Serial.printf("[%lu] [IMG] Image file not found: %s\n", millis(), imagePath.c_str()); + return; + } + size_t fileSize = file.size(); + file.close(); + + if (fileSize == 0) { + Serial.printf("[%lu] [IMG] Image file is empty: %s\n", millis(), imagePath.c_str()); + return; + } + + Serial.printf("[%lu] [IMG] Decoding and caching: %s\n", millis(), imagePath.c_str()); + + RenderConfig config; + config.x = x; + config.y = y; + config.maxWidth = width; + config.maxHeight = height; + config.useGrayscale = true; + config.useDithering = true; + config.performanceMode = false; + config.cachePath = cachePath; // Enable caching during decode + + ImageToFramebufferDecoder* decoder = ImageDecoderFactory::getDecoder(imagePath); + if (!decoder) { + Serial.printf("[%lu] [IMG] No decoder found for image: %s\n", millis(), imagePath.c_str()); + return; + } + + Serial.printf("[%lu] [IMG] Using %s decoder\n", millis(), decoder->getFormatName()); + + bool success = decoder->decodeToFramebuffer(imagePath, renderer, config); + if (!success) { + Serial.printf("[%lu] [IMG] Failed to decode image: %s\n", millis(), imagePath.c_str()); + return; + } + + Serial.printf("[%lu] [IMG] Decode successful\n", millis()); +} + +bool ImageBlock::serialize(FsFile& file) { + serialization::writeString(file, imagePath); + serialization::writePod(file, width); + serialization::writePod(file, height); + return true; +} + +std::unique_ptr ImageBlock::deserialize(FsFile& file) { + std::string path; + serialization::readString(file, path); + int16_t w, h; + serialization::readPod(file, w); + serialization::readPod(file, h); + return std::unique_ptr(new ImageBlock(path, w, h)); +} diff --git a/lib/Epub/Epub/blocks/ImageBlock.h b/lib/Epub/Epub/blocks/ImageBlock.h new file mode 100644 index 00000000..8331dbc8 --- /dev/null +++ b/lib/Epub/Epub/blocks/ImageBlock.h @@ -0,0 +1,32 @@ +#pragma once +#include + +#include +#include + +#include "Block.h" + +class ImageBlock final : public Block { + public: + ImageBlock(const std::string& imagePath, int16_t width, int16_t height); + ~ImageBlock() override = default; + + const std::string& getImagePath() const { return imagePath; } + int16_t getWidth() const { return width; } + int16_t getHeight() const { return height; } + + bool imageExists() const; + + void layout(GfxRenderer& renderer) override; + BlockType getType() override { return IMAGE_BLOCK; } + bool isEmpty() override { return false; } + + void render(GfxRenderer& renderer, const int x, const int y); + bool serialize(FsFile& file); + static std::unique_ptr deserialize(FsFile& file); + + private: + std::string imagePath; + int16_t width; + int16_t height; +}; diff --git a/lib/Epub/Epub/converters/FramebufferWriter.cpp b/lib/Epub/Epub/converters/FramebufferWriter.cpp new file mode 100644 index 00000000..8db13e50 --- /dev/null +++ b/lib/Epub/Epub/converters/FramebufferWriter.cpp @@ -0,0 +1,31 @@ +#include "FramebufferWriter.h" + +void FramebufferWriter::setPixel(int x, int y, bool isBlack) { + if (x < 0 || x >= DISPLAY_WIDTH || y < 0 || y >= DISPLAY_HEIGHT) { + return; + } + + const uint16_t byteIndex = y * DISPLAY_WIDTH_BYTES + (x / 8); + const uint8_t bitPosition = 7 - (x % 8); + + if (isBlack) { + frameBuffer[byteIndex] &= ~(1 << bitPosition); + } else { + frameBuffer[byteIndex] |= (1 << bitPosition); + } +} + +void FramebufferWriter::setPixel2Bit(int x, int y, uint8_t value) { + if (x < 0 || x >= DISPLAY_WIDTH || y < 0 || y >= DISPLAY_HEIGHT || value > 3) { + return; + } + + const uint16_t byteIndex = y * DISPLAY_WIDTH_BYTES + (x / 8); + const uint8_t bitPosition = 7 - (x % 8); + + if (value < 2) { + frameBuffer[byteIndex] &= ~(1 << bitPosition); + } else { + frameBuffer[byteIndex] |= (1 << bitPosition); + } +} \ No newline at end of file diff --git a/lib/Epub/Epub/converters/FramebufferWriter.h b/lib/Epub/Epub/converters/FramebufferWriter.h new file mode 100644 index 00000000..5fa592a4 --- /dev/null +++ b/lib/Epub/Epub/converters/FramebufferWriter.h @@ -0,0 +1,19 @@ +#pragma once +#include + +class FramebufferWriter { + private: + uint8_t* frameBuffer; + static constexpr int DISPLAY_WIDTH = 800; + static constexpr int DISPLAY_WIDTH_BYTES = DISPLAY_WIDTH / 8; // 100 + static constexpr int DISPLAY_HEIGHT = 480; + + public: + explicit FramebufferWriter(uint8_t* framebuffer) : frameBuffer(framebuffer) {} + + // Simple pixel setting for 1-bit rendering + void setPixel(int x, int y, bool isBlack); + + // 2-bit grayscale pixel setting (for dual-pass rendering) + void setPixel2Bit(int x, int y, uint8_t value); // value: 0-3 +}; \ No newline at end of file diff --git a/lib/Epub/Epub/converters/ImageDecoderFactory.cpp b/lib/Epub/Epub/converters/ImageDecoderFactory.cpp new file mode 100644 index 00000000..8b26b6e6 --- /dev/null +++ b/lib/Epub/Epub/converters/ImageDecoderFactory.cpp @@ -0,0 +1,68 @@ +#include "ImageDecoderFactory.h" + +#include + +#include +#include +#include + +#include "JpegToFramebufferConverter.h" +#include "PngToFramebufferConverter.h" + +std::unique_ptr ImageDecoderFactory::jpegDecoder = nullptr; +std::unique_ptr ImageDecoderFactory::pngDecoder = nullptr; +bool ImageDecoderFactory::initialized = false; + +void ImageDecoderFactory::initialize() { + if (initialized) return; + + jpegDecoder = std::unique_ptr(new JpegToFramebufferConverter()); + pngDecoder = std::unique_ptr(new PngToFramebufferConverter()); + + initialized = true; + Serial.printf("[%lu] [DEC] Image decoder factory initialized\n", millis()); +} + +ImageToFramebufferDecoder* ImageDecoderFactory::getDecoder(const std::string& imagePath) { + if (!initialized) { + initialize(); + } + + std::string ext = imagePath; + size_t dotPos = ext.rfind('.'); + if (dotPos != std::string::npos) { + ext = ext.substr(dotPos); + for (auto& c : ext) { + c = tolower(c); + } + } else { + ext = ""; + } + + if (jpegDecoder && jpegDecoder->supportsFormat(ext)) { + return jpegDecoder.get(); + } else if (pngDecoder && pngDecoder->supportsFormat(ext)) { + return pngDecoder.get(); + } + + Serial.printf("[%lu] [DEC] No decoder found for image: %s\n", millis(), imagePath.c_str()); + return nullptr; +} + +bool ImageDecoderFactory::isFormatSupported(const std::string& imagePath) { + if (jpegDecoder && jpegDecoder->supportsFormat(imagePath)) { + return true; + } + if (pngDecoder && pngDecoder->supportsFormat(imagePath)) { + return true; + } + return false; +} + +std::vector ImageDecoderFactory::getSupportedFormats() { + std::vector formats; + formats.push_back(".jpg"); + formats.push_back(".jpeg"); + formats.push_back(".png"); + return formats; +} diff --git a/lib/Epub/Epub/converters/ImageDecoderFactory.h b/lib/Epub/Epub/converters/ImageDecoderFactory.h new file mode 100644 index 00000000..27c7a14a --- /dev/null +++ b/lib/Epub/Epub/converters/ImageDecoderFactory.h @@ -0,0 +1,24 @@ +#pragma once +#include +#include +#include +#include + +#include "ImageToFramebufferDecoder.h" + +class JpegToFramebufferConverter; +class PngToFramebufferConverter; + +class ImageDecoderFactory { + public: + static void initialize(); + // Returns non-owning pointer - factory owns the decoder lifetime + static ImageToFramebufferDecoder* getDecoder(const std::string& imagePath); + static bool isFormatSupported(const std::string& imagePath); + static std::vector getSupportedFormats(); + + private: + static std::unique_ptr jpegDecoder; + static std::unique_ptr pngDecoder; + static bool initialized; +}; diff --git a/lib/Epub/Epub/converters/ImageToFramebufferDecoder.cpp b/lib/Epub/Epub/converters/ImageToFramebufferDecoder.cpp new file mode 100644 index 00000000..cbf55f57 --- /dev/null +++ b/lib/Epub/Epub/converters/ImageToFramebufferDecoder.cpp @@ -0,0 +1,18 @@ +#include "ImageToFramebufferDecoder.h" + +#include +#include + +bool ImageToFramebufferDecoder::validateImageDimensions(int width, int height, const std::string& format) { + if (width > MAX_SOURCE_WIDTH || height > MAX_SOURCE_HEIGHT) { + Serial.printf("[%lu] [IMG] Image too large (%dx%d %s), max supported: %dx%d\n", millis(), width, height, + format.c_str(), MAX_SOURCE_WIDTH, MAX_SOURCE_HEIGHT); + return false; + } + return true; +} + +void ImageToFramebufferDecoder::warnUnsupportedFeature(const std::string& feature, const std::string& imagePath) { + Serial.printf("[%lu] [IMG] Warning: Unsupported feature '%s' in image '%s'. Image may not display correctly.\n", + millis(), feature.c_str(), imagePath.c_str()); +} \ No newline at end of file diff --git a/lib/Epub/Epub/converters/ImageToFramebufferDecoder.h b/lib/Epub/Epub/converters/ImageToFramebufferDecoder.h new file mode 100644 index 00000000..92dc474a --- /dev/null +++ b/lib/Epub/Epub/converters/ImageToFramebufferDecoder.h @@ -0,0 +1,41 @@ +#pragma once +#include + +#include +#include + +class GfxRenderer; + +struct ImageDimensions { + int16_t width; + int16_t height; +}; + +struct RenderConfig { + int x, y; + int maxWidth, maxHeight; + bool useGrayscale = true; + bool useDithering = true; + bool performanceMode = false; + std::string cachePath; // If non-empty, decoder will write pixel cache to this path +}; + +class ImageToFramebufferDecoder { + public: + virtual ~ImageToFramebufferDecoder() = default; + + virtual bool decodeToFramebuffer(const std::string& imagePath, GfxRenderer& renderer, const RenderConfig& config) = 0; + + virtual bool getDimensions(const std::string& imagePath, ImageDimensions& dims) const = 0; + + virtual bool supportsFormat(const std::string& extension) const = 0; + virtual const char* getFormatName() const = 0; + + protected: + // Size validation helpers + static constexpr int MAX_SOURCE_WIDTH = 2048; + static constexpr int MAX_SOURCE_HEIGHT = 1536; + + bool validateImageDimensions(int width, int height, const std::string& format); + void warnUnsupportedFeature(const std::string& feature, const std::string& imagePath); +}; \ No newline at end of file diff --git a/lib/Epub/Epub/converters/JpegToFramebufferConverter.cpp b/lib/Epub/Epub/converters/JpegToFramebufferConverter.cpp new file mode 100644 index 00000000..4c23323e --- /dev/null +++ b/lib/Epub/Epub/converters/JpegToFramebufferConverter.cpp @@ -0,0 +1,385 @@ +#include "JpegToFramebufferConverter.h" + +#include +#include +#include +#include +#include + +#include +#include + +struct JpegContext { + FsFile& file; + uint8_t buffer[512]; + size_t bufferPos; + size_t bufferFilled; + JpegContext(FsFile& f) : file(f), bufferPos(0), bufferFilled(0) {} +}; + +// Cache buffer for storing 2-bit pixels during decode +struct PixelCache { + uint8_t* buffer; + int width; + int height; + int bytesPerRow; + int originX; // config.x - to convert screen coords to cache coords + int originY; // config.y + + PixelCache() : buffer(nullptr), width(0), height(0), bytesPerRow(0), originX(0), originY(0) {} + + bool allocate(int w, int h, int ox, int oy) { + width = w; + height = h; + originX = ox; + originY = oy; + bytesPerRow = (w + 3) / 4; // 2 bits per pixel, 4 pixels per byte + size_t bufferSize = bytesPerRow * h; + buffer = (uint8_t*)malloc(bufferSize); + if (buffer) { + memset(buffer, 0, bufferSize); + Serial.printf("[%lu] [JPG] Allocated cache buffer: %d bytes for %dx%d\n", millis(), bufferSize, w, h); + } + return buffer != nullptr; + } + + void setPixel(int screenX, int screenY, uint8_t value) { + if (!buffer) return; + int localX = screenX - originX; + int localY = screenY - originY; + if (localX < 0 || localX >= width || localY < 0 || localY >= height) return; + + int byteIdx = localY * bytesPerRow + localX / 4; + int bitShift = 6 - (localX % 4) * 2; // MSB first: pixel 0 at bits 6-7 + buffer[byteIdx] = (buffer[byteIdx] & ~(0x03 << bitShift)) | ((value & 0x03) << bitShift); + } + + bool writeToFile(const std::string& cachePath) { + if (!buffer) return false; + + FsFile cacheFile; + if (!SdMan.openFileForWrite("IMG", cachePath, cacheFile)) { + Serial.printf("[%lu] [JPG] Failed to open cache file for writing: %s\n", millis(), cachePath.c_str()); + return false; + } + + uint16_t w = width; + uint16_t h = height; + cacheFile.write(&w, 2); + cacheFile.write(&h, 2); + cacheFile.write(buffer, bytesPerRow * height); + cacheFile.close(); + + Serial.printf("[%lu] [JPG] Cache written: %s (%dx%d, %d bytes)\n", millis(), cachePath.c_str(), width, height, + 4 + bytesPerRow * height); + return true; + } + + ~PixelCache() { + if (buffer) { + free(buffer); + buffer = nullptr; + } + } +}; + +// 4x4 Bayer matrix for ordered dithering +static const uint8_t bayer4x4[4][4] = { + {0, 8, 2, 10}, + {12, 4, 14, 6}, + {3, 11, 1, 9}, + {15, 7, 13, 5}, +}; + +// Apply Bayer dithering and quantize to 4 levels (0-3) +// Stateless - works correctly with any pixel processing order (ideal for MCU-based decoding) +static uint8_t applyBayerDither4Level(uint8_t gray, int x, int y) { + int bayer = bayer4x4[y & 3][x & 3]; + int dither = (bayer - 8) * 5; // Scale to ±40 (half of quantization step 85) + + int adjusted = gray + dither; + if (adjusted < 0) adjusted = 0; + if (adjusted > 255) adjusted = 255; + + if (adjusted < 64) return 0; + if (adjusted < 128) return 1; + if (adjusted < 192) return 2; + return 3; +} + +// Draw a pixel respecting the current render mode for grayscale support +static void drawPixelWithRenderMode(GfxRenderer& renderer, int x, int y, uint8_t pixelValue) { + GfxRenderer::RenderMode renderMode = renderer.getRenderMode(); + if (renderMode == GfxRenderer::BW && pixelValue < 3) { + renderer.drawPixel(x, y, true); + } else if (renderMode == GfxRenderer::GRAYSCALE_MSB && (pixelValue == 1 || pixelValue == 2)) { + renderer.drawPixel(x, y, false); + } else if (renderMode == GfxRenderer::GRAYSCALE_LSB && pixelValue == 1) { + renderer.drawPixel(x, y, false); + } +} + +bool JpegToFramebufferConverter::getDimensionsStatic(const std::string& imagePath, ImageDimensions& out) { + FsFile file; + if (!SdMan.openFileForRead("JPG", imagePath, file)) { + Serial.printf("[%lu] [JPG] Failed to open file for dimensions: %s\n", millis(), imagePath.c_str()); + return false; + } + + JpegContext context(file); + pjpeg_image_info_t imageInfo; + + int status = pjpeg_decode_init(&imageInfo, jpegReadCallback, &context, 0); + file.close(); + + if (status != 0) { + Serial.printf("[%lu] [JPG] Failed to init JPEG for dimensions: %d\n", millis(), status); + return false; + } + + out.width = imageInfo.m_width; + out.height = imageInfo.m_height; + Serial.printf("[%lu] [JPG] Image dimensions: %dx%d\n", millis(), out.width, out.height); + return true; +} + +bool JpegToFramebufferConverter::decodeToFramebuffer(const std::string& imagePath, GfxRenderer& renderer, + const RenderConfig& config) { + Serial.printf("[%lu] [JPG] Decoding JPEG: %s\n", millis(), imagePath.c_str()); + + FsFile file; + if (!SdMan.openFileForRead("JPG", imagePath, file)) { + Serial.printf("[%lu] [JPG] Failed to open file: %s\n", millis(), imagePath.c_str()); + return false; + } + + JpegContext context(file); + pjpeg_image_info_t imageInfo; + + int status = pjpeg_decode_init(&imageInfo, jpegReadCallback, &context, 0); + if (status != 0) { + Serial.printf("[%lu] [JPG] picojpeg init failed: %d\n", millis(), status); + file.close(); + return false; + } + + if (!validateImageDimensions(imageInfo.m_width, imageInfo.m_height, "JPEG")) { + file.close(); + return false; + } + + // Calculate scale factor to fit within maxWidth/maxHeight + float scaleX = + (config.maxWidth > 0 && imageInfo.m_width > config.maxWidth) ? (float)config.maxWidth / imageInfo.m_width : 1.0f; + float scaleY = (config.maxHeight > 0 && imageInfo.m_height > config.maxHeight) + ? (float)config.maxHeight / imageInfo.m_height + : 1.0f; + float scale = (scaleX < scaleY) ? scaleX : scaleY; + if (scale > 1.0f) scale = 1.0f; + + int destWidth = (int)(imageInfo.m_width * scale); + int destHeight = (int)(imageInfo.m_height * scale); + + Serial.printf("[%lu] [JPG] JPEG %dx%d -> %dx%d (scale %.2f), scan type: %d, MCU: %dx%d\n", millis(), + imageInfo.m_width, imageInfo.m_height, destWidth, destHeight, scale, imageInfo.m_scanType, + imageInfo.m_MCUWidth, imageInfo.m_MCUHeight); + + if (!imageInfo.m_pMCUBufR || !imageInfo.m_pMCUBufG || !imageInfo.m_pMCUBufB) { + Serial.printf("[%lu] [JPG] Null buffer pointers in imageInfo\n", millis()); + file.close(); + return false; + } + + const int screenWidth = renderer.getScreenWidth(); + const int screenHeight = renderer.getScreenHeight(); + + // Allocate pixel cache if cachePath is provided + PixelCache cache; + bool caching = !config.cachePath.empty(); + if (caching) { + if (!cache.allocate(destWidth, destHeight, config.x, config.y)) { + Serial.printf("[%lu] [JPG] Failed to allocate cache buffer, continuing without caching\n", millis()); + caching = false; + } + } + + int mcuX = 0; + int mcuY = 0; + + while (mcuY < imageInfo.m_MCUSPerCol) { + status = pjpeg_decode_mcu(); + if (status == PJPG_NO_MORE_BLOCKS) { + break; + } + if (status != 0) { + Serial.printf("[%lu] [JPG] MCU decode failed: %d\n", millis(), status); + file.close(); + return false; + } + + // Source position in image coordinates + int srcStartX = mcuX * imageInfo.m_MCUWidth; + int srcStartY = mcuY * imageInfo.m_MCUHeight; + + switch (imageInfo.m_scanType) { + case PJPG_GRAYSCALE: + for (int row = 0; row < 8; row++) { + int srcY = srcStartY + row; + int destY = config.y + (int)(srcY * scale); + if (destY >= screenHeight || destY >= config.y + destHeight) continue; + for (int col = 0; col < 8; col++) { + int srcX = srcStartX + col; + int destX = config.x + (int)(srcX * scale); + if (destX >= screenWidth || destX >= config.x + destWidth) continue; + uint8_t gray = imageInfo.m_pMCUBufR[row * 8 + col]; + uint8_t dithered = config.useDithering ? applyBayerDither4Level(gray, destX, destY) : gray / 85; + if (dithered > 3) dithered = 3; + drawPixelWithRenderMode(renderer, destX, destY, dithered); + if (caching) cache.setPixel(destX, destY, dithered); + } + } + break; + + case PJPG_YH1V1: + for (int row = 0; row < 8; row++) { + int srcY = srcStartY + row; + int destY = config.y + (int)(srcY * scale); + if (destY >= screenHeight || destY >= config.y + destHeight) continue; + for (int col = 0; col < 8; col++) { + int srcX = srcStartX + col; + int destX = config.x + (int)(srcX * scale); + if (destX >= screenWidth || destX >= config.x + destWidth) continue; + uint8_t r = imageInfo.m_pMCUBufR[row * 8 + col]; + uint8_t g = imageInfo.m_pMCUBufG[row * 8 + col]; + uint8_t b = imageInfo.m_pMCUBufB[row * 8 + col]; + uint8_t gray = (uint8_t)((r * 77 + g * 150 + b * 29) >> 8); + uint8_t dithered = config.useDithering ? applyBayerDither4Level(gray, destX, destY) : gray / 85; + if (dithered > 3) dithered = 3; + drawPixelWithRenderMode(renderer, destX, destY, dithered); + if (caching) cache.setPixel(destX, destY, dithered); + } + } + break; + + case PJPG_YH2V1: + for (int row = 0; row < 8; row++) { + int srcY = srcStartY + row; + int destY = config.y + (int)(srcY * scale); + if (destY >= screenHeight || destY >= config.y + destHeight) continue; + for (int col = 0; col < 16; col++) { + int srcX = srcStartX + col; + int destX = config.x + (int)(srcX * scale); + if (destX >= screenWidth || destX >= config.x + destWidth) continue; + int blockIndex = (col < 8) ? 0 : 1; + int pixelIndex = row * 8 + (col % 8); + uint8_t r = imageInfo.m_pMCUBufR[blockIndex * 64 + pixelIndex]; + uint8_t g = imageInfo.m_pMCUBufG[blockIndex * 64 + pixelIndex]; + uint8_t b = imageInfo.m_pMCUBufB[blockIndex * 64 + pixelIndex]; + uint8_t gray = (uint8_t)((r * 77 + g * 150 + b * 29) >> 8); + uint8_t dithered = config.useDithering ? applyBayerDither4Level(gray, destX, destY) : gray / 85; + if (dithered > 3) dithered = 3; + drawPixelWithRenderMode(renderer, destX, destY, dithered); + if (caching) cache.setPixel(destX, destY, dithered); + } + } + break; + + case PJPG_YH1V2: + for (int row = 0; row < 16; row++) { + int srcY = srcStartY + row; + int destY = config.y + (int)(srcY * scale); + if (destY >= screenHeight || destY >= config.y + destHeight) continue; + for (int col = 0; col < 8; col++) { + int srcX = srcStartX + col; + int destX = config.x + (int)(srcX * scale); + if (destX >= screenWidth || destX >= config.x + destWidth) continue; + int blockIndex = (row < 8) ? 0 : 1; + int pixelIndex = (row % 8) * 8 + col; + uint8_t r = imageInfo.m_pMCUBufR[blockIndex * 128 + pixelIndex]; + uint8_t g = imageInfo.m_pMCUBufG[blockIndex * 128 + pixelIndex]; + uint8_t b = imageInfo.m_pMCUBufB[blockIndex * 128 + pixelIndex]; + uint8_t gray = (uint8_t)((r * 77 + g * 150 + b * 29) >> 8); + uint8_t dithered = config.useDithering ? applyBayerDither4Level(gray, destX, destY) : gray / 85; + if (dithered > 3) dithered = 3; + drawPixelWithRenderMode(renderer, destX, destY, dithered); + if (caching) cache.setPixel(destX, destY, dithered); + } + } + break; + + case PJPG_YH2V2: + for (int row = 0; row < 16; row++) { + int srcY = srcStartY + row; + int destY = config.y + (int)(srcY * scale); + if (destY >= screenHeight || destY >= config.y + destHeight) continue; + for (int col = 0; col < 16; col++) { + int srcX = srcStartX + col; + int destX = config.x + (int)(srcX * scale); + if (destX >= screenWidth || destX >= config.x + destWidth) continue; + int blockX = (col < 8) ? 0 : 1; + int blockY = (row < 8) ? 0 : 1; + int blockIndex = blockY * 2 + blockX; + int pixelIndex = (row % 8) * 8 + (col % 8); + int blockOffset = blockIndex * 64; + uint8_t r = imageInfo.m_pMCUBufR[blockOffset + pixelIndex]; + uint8_t g = imageInfo.m_pMCUBufG[blockOffset + pixelIndex]; + uint8_t b = imageInfo.m_pMCUBufB[blockOffset + pixelIndex]; + uint8_t gray = (uint8_t)((r * 77 + g * 150 + b * 29) >> 8); + uint8_t dithered = config.useDithering ? applyBayerDither4Level(gray, destX, destY) : gray / 85; + if (dithered > 3) dithered = 3; + drawPixelWithRenderMode(renderer, destX, destY, dithered); + if (caching) cache.setPixel(destX, destY, dithered); + } + } + break; + } + + mcuX++; + if (mcuX >= imageInfo.m_MCUSPerRow) { + mcuX = 0; + mcuY++; + } + } + + Serial.printf("[%lu] [JPG] Decoding complete\n", millis()); + file.close(); + + // Write cache file if caching was enabled + if (caching) { + cache.writeToFile(config.cachePath); + } + + return true; +} + +unsigned char JpegToFramebufferConverter::jpegReadCallback(unsigned char* pBuf, unsigned char buf_size, + unsigned char* pBytes_actually_read, void* pCallback_data) { + JpegContext* context = reinterpret_cast(pCallback_data); + + if (context->bufferPos >= context->bufferFilled) { + int readCount = context->file.read(context->buffer, sizeof(context->buffer)); + if (readCount <= 0) { + *pBytes_actually_read = 0; + return 0; + } + context->bufferFilled = readCount; + context->bufferPos = 0; + } + + unsigned int bytesAvailable = context->bufferFilled - context->bufferPos; + unsigned int bytesToCopy = (bytesAvailable < buf_size) ? bytesAvailable : buf_size; + + memcpy(pBuf, &context->buffer[context->bufferPos], bytesToCopy); + context->bufferPos += bytesToCopy; + *pBytes_actually_read = bytesToCopy; + + return 0; +} + +bool JpegToFramebufferConverter::supportsFormat(const std::string& extension) const { + std::string ext = extension; + for (auto& c : ext) { + c = tolower(c); + } + return (ext == ".jpg" || ext == ".jpeg"); +} diff --git a/lib/Epub/Epub/converters/JpegToFramebufferConverter.h b/lib/Epub/Epub/converters/JpegToFramebufferConverter.h new file mode 100644 index 00000000..51eb9355 --- /dev/null +++ b/lib/Epub/Epub/converters/JpegToFramebufferConverter.h @@ -0,0 +1,24 @@ +#pragma once +#include + +#include + +#include "ImageToFramebufferDecoder.h" + +class JpegToFramebufferConverter final : public ImageToFramebufferDecoder { + public: + static bool getDimensionsStatic(const std::string& imagePath, ImageDimensions& out); + + bool decodeToFramebuffer(const std::string& imagePath, GfxRenderer& renderer, const RenderConfig& config) override; + + bool getDimensions(const std::string& imagePath, ImageDimensions& dims) const override { + return getDimensionsStatic(imagePath, dims); + } + + bool supportsFormat(const std::string& extension) const override; + const char* getFormatName() const override { return "JPEG"; } + + private: + static unsigned char jpegReadCallback(unsigned char* pBuf, unsigned char buf_size, + unsigned char* pBytes_actually_read, void* pCallback_data); +}; diff --git a/lib/Epub/Epub/converters/PngToFramebufferConverter.cpp b/lib/Epub/Epub/converters/PngToFramebufferConverter.cpp new file mode 100644 index 00000000..370de522 --- /dev/null +++ b/lib/Epub/Epub/converters/PngToFramebufferConverter.cpp @@ -0,0 +1,354 @@ +#include "PngToFramebufferConverter.h" + +#include +#include +#include +#include +#include + +static FsFile* gPngFile = nullptr; + +static void* pngOpenForDims(const char* filename, int32_t* size) { return gPngFile; } + +static void pngCloseForDims(void* handle) {} + +static int32_t pngReadForDims(PNGFILE* pFile, uint8_t* pBuf, int32_t len) { + if (!gPngFile) return 0; + return gPngFile->read(pBuf, len); +} + +static int32_t pngSeekForDims(PNGFILE* pFile, int32_t pos) { + if (!gPngFile) return -1; + return gPngFile->seek(pos); +} + +// Single static PNG object shared between getDimensions and decode +// (these operations never happen simultaneously) +static PNG png; + +bool PngToFramebufferConverter::getDimensionsStatic(const std::string& imagePath, ImageDimensions& out) { + FsFile file; + if (!SdMan.openFileForRead("PNG", imagePath, file)) { + Serial.printf("[%lu] [PNG] Failed to open file for dimensions: %s\n", millis(), imagePath.c_str()); + return false; + } + + gPngFile = &file; + + int rc = png.open(imagePath.c_str(), pngOpenForDims, pngCloseForDims, pngReadForDims, pngSeekForDims, nullptr); + + if (rc != 0) { + Serial.printf("[%lu] [PNG] Failed to open PNG for dimensions: %d\n", millis(), rc); + file.close(); + gPngFile = nullptr; + return false; + } + + out.width = png.getWidth(); + out.height = png.getHeight(); + + png.close(); + file.close(); + gPngFile = nullptr; + return true; +} +static GfxRenderer* gRenderer = nullptr; +static const RenderConfig* gConfig = nullptr; +static int gScreenWidth = 0; +static int gScreenHeight = 0; +static FsFile* pngFile = nullptr; + +// Scaling state for PNG +static float gScale = 1.0f; +static int gSrcWidth = 0; +static int gSrcHeight = 0; +static int gDstWidth = 0; +static int gDstHeight = 0; +static int gLastDstY = -1; // Track last rendered destination Y to avoid duplicates + +// Pixel cache for PNG (uses scaled dimensions) +static uint8_t* gCacheBuffer = nullptr; +static int gCacheWidth = 0; +static int gCacheHeight = 0; +static int gCacheBytesPerRow = 0; +static int gCacheOriginX = 0; +static int gCacheOriginY = 0; + +static void cacheSetPixel(int screenX, int screenY, uint8_t value) { + if (!gCacheBuffer) return; + int localX = screenX - gCacheOriginX; + int localY = screenY - gCacheOriginY; + if (localX < 0 || localX >= gCacheWidth || localY < 0 || localY >= gCacheHeight) return; + + int byteIdx = localY * gCacheBytesPerRow + localX / 4; + int bitShift = 6 - (localX % 4) * 2; // MSB first: pixel 0 at bits 6-7 + gCacheBuffer[byteIdx] = (gCacheBuffer[byteIdx] & ~(0x03 << bitShift)) | ((value & 0x03) << bitShift); +} + +// 4x4 Bayer matrix for ordered dithering +static const uint8_t bayer4x4[4][4] = { + {0, 8, 2, 10}, + {12, 4, 14, 6}, + {3, 11, 1, 9}, + {15, 7, 13, 5}, +}; + +// Apply Bayer dithering and quantize to 4 levels (0-3) +// Stateless - works correctly with any pixel processing order +static uint8_t applyBayerDither4Level(uint8_t gray, int x, int y) { + int bayer = bayer4x4[y & 3][x & 3]; + int dither = (bayer - 8) * 5; // Scale to ±40 (half of quantization step 85) + + int adjusted = gray + dither; + if (adjusted < 0) adjusted = 0; + if (adjusted > 255) adjusted = 255; + + if (adjusted < 64) return 0; + if (adjusted < 128) return 1; + if (adjusted < 192) return 2; + return 3; +} + +// Draw a pixel respecting the current render mode for grayscale support +static void drawPixelWithRenderMode(GfxRenderer* renderer, int x, int y, uint8_t pixelValue) { + GfxRenderer::RenderMode renderMode = renderer->getRenderMode(); + if (renderMode == GfxRenderer::BW && pixelValue < 3) { + renderer->drawPixel(x, y, true); + } else if (renderMode == GfxRenderer::GRAYSCALE_MSB && (pixelValue == 1 || pixelValue == 2)) { + renderer->drawPixel(x, y, false); + } else if (renderMode == GfxRenderer::GRAYSCALE_LSB && pixelValue == 1) { + renderer->drawPixel(x, y, false); + } +} + +void* pngOpen(const char* filename, int32_t* size) { + pngFile = new FsFile(); + if (!SdMan.openFileForRead("PNG", std::string(filename), *pngFile)) { + delete pngFile; + pngFile = nullptr; + return nullptr; + } + *size = pngFile->size(); + return pngFile; +} + +void pngClose(void* handle) { + if (pngFile) { + pngFile->close(); + delete pngFile; + pngFile = nullptr; + } +} + +int32_t pngRead(PNGFILE* pFile, uint8_t* pBuf, int32_t len) { + if (!pngFile) return 0; + return pngFile->read(pBuf, len); +} + +int32_t pngSeek(PNGFILE* pFile, int32_t pos) { + if (!pngFile) return -1; + return pngFile->seek(pos); +} + +// Helper to get grayscale from PNG pixel data +static uint8_t getGrayFromPixel(uint8_t* pPixels, int x, int pixelType, uint8_t* palette) { + switch (pixelType) { + case PNG_PIXEL_GRAYSCALE: + return pPixels[x]; + + case PNG_PIXEL_TRUECOLOR: { + uint8_t* p = &pPixels[x * 3]; + return (uint8_t)((p[0] * 77 + p[1] * 150 + p[2] * 29) >> 8); + } + + case PNG_PIXEL_INDEXED: { + uint8_t paletteIndex = pPixels[x]; + if (palette) { + uint8_t* p = &palette[paletteIndex * 3]; + return (uint8_t)((p[0] * 77 + p[1] * 150 + p[2] * 29) >> 8); + } + return paletteIndex; + } + + case PNG_PIXEL_GRAY_ALPHA: + return pPixels[x * 2]; + + case PNG_PIXEL_TRUECOLOR_ALPHA: { + uint8_t* p = &pPixels[x * 4]; + return (uint8_t)((p[0] * 77 + p[1] * 150 + p[2] * 29) >> 8); + } + + default: + return 128; + } +} + +int pngDrawCallback(PNGDRAW* pDraw) { + if (!gConfig || !gRenderer) return 0; + + int srcY = pDraw->y; + uint8_t* pPixels = pDraw->pPixels; + int pixelType = pDraw->iPixelType; + + // Calculate destination Y with scaling + int dstY = (int)(srcY * gScale); + + // Skip if we already rendered this destination row (multiple source rows map to same dest) + if (dstY == gLastDstY) return 1; + gLastDstY = dstY; + + // Check bounds + if (dstY >= gDstHeight) return 1; + + int outY = gConfig->y + dstY; + if (outY >= gScreenHeight) return 1; + + // Render scaled row using nearest-neighbor sampling + for (int dstX = 0; dstX < gDstWidth; dstX++) { + int outX = gConfig->x + dstX; + if (outX >= gScreenWidth) continue; + + // Map destination X back to source X + int srcX = (int)(dstX / gScale); + if (srcX >= gSrcWidth) srcX = gSrcWidth - 1; + + uint8_t gray = getGrayFromPixel(pPixels, srcX, pixelType, pDraw->pPalette); + + uint8_t ditheredGray; + if (gConfig->useDithering) { + ditheredGray = applyBayerDither4Level(gray, outX, outY); + } else { + ditheredGray = gray / 85; + if (ditheredGray > 3) ditheredGray = 3; + } + drawPixelWithRenderMode(gRenderer, outX, outY, ditheredGray); + cacheSetPixel(outX, outY, ditheredGray); + } + + return 1; +} + +bool PngToFramebufferConverter::decodeToFramebuffer(const std::string& imagePath, GfxRenderer& renderer, + const RenderConfig& config) { + Serial.printf("[%lu] [PNG] Decoding PNG: %s\n", millis(), imagePath.c_str()); + + FsFile file; + if (!SdMan.openFileForRead("PNG", imagePath, file)) { + Serial.printf("[%lu] [PNG] Failed to open file: %s\n", millis(), imagePath.c_str()); + return false; + } + + gRenderer = &renderer; + gConfig = &config; + gScreenWidth = renderer.getScreenWidth(); + gScreenHeight = renderer.getScreenHeight(); + + int rc = png.open(imagePath.c_str(), pngOpen, pngClose, pngRead, pngSeek, pngDrawCallback); + if (rc != PNG_SUCCESS) { + Serial.printf("[%lu] [PNG] Failed to open PNG: %d\n", millis(), rc); + file.close(); + gRenderer = nullptr; + gConfig = nullptr; + return false; + } + + if (!validateImageDimensions(png.getWidth(), png.getHeight(), "PNG")) { + png.close(); + file.close(); + gRenderer = nullptr; + gConfig = nullptr; + return false; + } + + // Calculate scale factor to fit within maxWidth x maxHeight + gSrcWidth = png.getWidth(); + gSrcHeight = png.getHeight(); + float scaleX = (float)config.maxWidth / gSrcWidth; + float scaleY = (float)config.maxHeight / gSrcHeight; + gScale = (scaleX < scaleY) ? scaleX : scaleY; + if (gScale > 1.0f) gScale = 1.0f; // Don't upscale + + gDstWidth = (int)(gSrcWidth * gScale); + gDstHeight = (int)(gSrcHeight * gScale); + gLastDstY = -1; // Reset row tracking + + Serial.printf("[%lu] [PNG] PNG %dx%d -> %dx%d (scale %.2f), bpp: %d\n", millis(), gSrcWidth, gSrcHeight, gDstWidth, + gDstHeight, gScale, png.getBpp()); + + if (png.getBpp() != 8) { + warnUnsupportedFeature("bit depth (" + std::to_string(png.getBpp()) + "bpp)", imagePath); + } + + if (png.hasAlpha()) { + warnUnsupportedFeature("alpha channel", imagePath); + } + + // Allocate cache buffer using SCALED dimensions + bool caching = !config.cachePath.empty(); + if (caching) { + gCacheWidth = gDstWidth; + gCacheHeight = gDstHeight; + gCacheBytesPerRow = (gCacheWidth + 3) / 4; + gCacheOriginX = config.x; + gCacheOriginY = config.y; + size_t bufferSize = gCacheBytesPerRow * gCacheHeight; + gCacheBuffer = (uint8_t*)malloc(bufferSize); + if (gCacheBuffer) { + memset(gCacheBuffer, 0, bufferSize); + Serial.printf("[%lu] [PNG] Allocated cache buffer: %d bytes for %dx%d\n", millis(), bufferSize, gCacheWidth, + gCacheHeight); + } else { + Serial.printf("[%lu] [PNG] Failed to allocate cache buffer, continuing without caching\n", millis()); + caching = false; + } + } + + rc = png.decode(nullptr, 0); + if (rc != PNG_SUCCESS) { + Serial.printf("[%lu] [PNG] Decode failed: %d\n", millis(), rc); + png.close(); + file.close(); + gRenderer = nullptr; + gConfig = nullptr; + if (gCacheBuffer) { + free(gCacheBuffer); + gCacheBuffer = nullptr; + } + return false; + } + + png.close(); + file.close(); + Serial.printf("[%lu] [PNG] PNG decoding complete\n", millis()); + + // Write cache file if caching was enabled and buffer was allocated + if (caching && gCacheBuffer) { + FsFile cacheFile; + if (SdMan.openFileForWrite("IMG", config.cachePath, cacheFile)) { + uint16_t w = gCacheWidth; + uint16_t h = gCacheHeight; + cacheFile.write(&w, 2); + cacheFile.write(&h, 2); + cacheFile.write(gCacheBuffer, gCacheBytesPerRow * gCacheHeight); + cacheFile.close(); + Serial.printf("[%lu] [PNG] Cache written: %s (%dx%d, %d bytes)\n", millis(), config.cachePath.c_str(), + gCacheWidth, gCacheHeight, 4 + gCacheBytesPerRow * gCacheHeight); + } else { + Serial.printf("[%lu] [PNG] Failed to open cache file for writing: %s\n", millis(), config.cachePath.c_str()); + } + free(gCacheBuffer); + gCacheBuffer = nullptr; + } + + gRenderer = nullptr; + gConfig = nullptr; + return true; +} + +bool PngToFramebufferConverter::supportsFormat(const std::string& extension) const { + std::string ext = extension; + for (auto& c : ext) { + c = tolower(c); + } + return (ext == ".png"); +} diff --git a/lib/Epub/Epub/converters/PngToFramebufferConverter.h b/lib/Epub/Epub/converters/PngToFramebufferConverter.h new file mode 100644 index 00000000..1083d864 --- /dev/null +++ b/lib/Epub/Epub/converters/PngToFramebufferConverter.h @@ -0,0 +1,19 @@ +#pragma once + +#include + +#include "ImageToFramebufferDecoder.h" + +class PngToFramebufferConverter final : public ImageToFramebufferDecoder { + public: + static bool getDimensionsStatic(const std::string& imagePath, ImageDimensions& out); + + bool decodeToFramebuffer(const std::string& imagePath, GfxRenderer& renderer, const RenderConfig& config) override; + + bool getDimensions(const std::string& imagePath, ImageDimensions& dims) const override { + return getDimensionsStatic(imagePath, dims); + } + + bool supportsFormat(const std::string& extension) const override; + const char* getFormatName() const override { return "PNG"; } +}; \ No newline at end of file diff --git a/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp b/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp index 298c4ec6..3f342787 100644 --- a/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp +++ b/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp @@ -5,7 +5,10 @@ #include #include +#include "../../Epub.h" #include "../Page.h" +#include "../converters/ImageDecoderFactory.h" +#include "../converters/ImageToFramebufferDecoder.h" const char* HEADER_TAGS[] = {"h1", "h2", "h3", "h4", "h5", "h6"}; constexpr int NUM_HEADER_TAGS = sizeof(HEADER_TAGS) / sizeof(HEADER_TAGS[0]); @@ -96,30 +99,143 @@ void XMLCALL ChapterHtmlSlimParser::startElement(void* userData, const XML_Char* } if (matches(name, IMAGE_TAGS, NUM_IMAGE_TAGS)) { - // TODO: Start processing image tags - std::string alt = "[Image]"; + std::string src; + std::string alt; if (atts != nullptr) { for (int i = 0; atts[i]; i += 2) { - if (strcmp(atts[i], "alt") == 0) { - if (strlen(atts[i + 1]) > 0) { - alt = "[Image: " + std::string(atts[i + 1]) + "]"; - } - break; + if (strcmp(atts[i], "src") == 0) { + src = atts[i + 1]; + } else if (strcmp(atts[i], "alt") == 0) { + alt = atts[i + 1]; } } + + if (!src.empty()) { + Serial.printf("[%lu] [EHP] Found image: src=%s\n", millis(), src.c_str()); + + // Get the spine item's href to resolve the relative path + size_t lastUnderscore = self->filepath.rfind('_'); + if (lastUnderscore != std::string::npos && lastUnderscore > 0) { + std::string indexStr = self->filepath.substr(lastUnderscore + 1); + indexStr.resize(indexStr.find('.')); + int spineIndex = atoi(indexStr.c_str()); + + const auto& spineItem = self->epub->getSpineItem(spineIndex); + std::string htmlHref = spineItem.href; + size_t lastSlash = htmlHref.find_last_of('/'); + std::string htmlDir = (lastSlash != std::string::npos) ? htmlHref.substr(0, lastSlash + 1) : ""; + + // Resolve the image path relative to the HTML file + std::string imageHref = src; + while (imageHref.find("../") == 0) { + imageHref = imageHref.substr(3); + if (!htmlDir.empty()) { + size_t dirSlash = htmlDir.find_last_of('/', htmlDir.length() - 2); + htmlDir = (dirSlash != std::string::npos) ? htmlDir.substr(0, dirSlash + 1) : ""; + } + } + std::string resolvedPath = htmlDir + imageHref; + + // Create a unique filename for the cached image + std::string ext; + size_t extPos = resolvedPath.rfind('.'); + if (extPos != std::string::npos) { + ext = resolvedPath.substr(extPos); + } + std::string cachedImagePath = self->epub->getCachePath() + "/img_" + std::to_string(spineIndex) + "_" + + std::to_string(self->imageCounter++) + ext; + + // Extract image to cache file + FsFile cachedImageFile; + bool extractSuccess = false; + if (SdMan.openFileForWrite("EHP", cachedImagePath, cachedImageFile)) { + extractSuccess = self->epub->readItemContentsToStream(resolvedPath, cachedImageFile, 4096); + cachedImageFile.flush(); + cachedImageFile.close(); + delay(50); // Give SD card time to sync + } + + if (extractSuccess) { + // Get image dimensions + ImageDimensions dims = {0, 0}; + ImageToFramebufferDecoder* decoder = ImageDecoderFactory::getDecoder(cachedImagePath); + if (decoder && decoder->getDimensions(cachedImagePath, dims)) { + Serial.printf("[%lu] [EHP] Image dimensions: %dx%d\n", millis(), dims.width, dims.height); + + // Scale to fit viewport while maintaining aspect ratio + int maxWidth = self->viewportWidth; + int maxHeight = self->viewportHeight; + float scaleX = (dims.width > maxWidth) ? (float)maxWidth / dims.width : 1.0f; + float scaleY = (dims.height > maxHeight) ? (float)maxHeight / dims.height : 1.0f; + float scale = (scaleX < scaleY) ? scaleX : scaleY; + if (scale > 1.0f) scale = 1.0f; + + int displayWidth = (int)(dims.width * scale); + int displayHeight = (int)(dims.height * scale); + + Serial.printf("[%lu] [EHP] Display size: %dx%d (scale %.2f)\n", millis(), displayWidth, displayHeight, + scale); + + // Create page for image + if (self->currentPage && !self->currentPage->elements.empty()) { + self->completePageFn(std::move(self->currentPage)); + self->currentPage.reset(new Page()); + if (!self->currentPage) { + Serial.printf("[%lu] [EHP] Failed to create new page\n", millis()); + return; + } + self->currentPageNextY = 0; + } else if (!self->currentPage) { + self->currentPage.reset(new Page()); + if (!self->currentPage) { + Serial.printf("[%lu] [EHP] Failed to create initial page\n", millis()); + return; + } + self->currentPageNextY = 0; + } + + // Create ImageBlock and add to page + auto imageBlock = std::make_shared(cachedImagePath, displayWidth, displayHeight); + if (!imageBlock) { + Serial.printf("[%lu] [EHP] Failed to create ImageBlock\n", millis()); + return; + } + int xPos = (self->viewportWidth - displayWidth) / 2; + auto pageImage = std::make_shared(imageBlock, xPos, self->currentPageNextY); + if (!pageImage) { + Serial.printf("[%lu] [EHP] Failed to create PageImage\n", millis()); + return; + } + self->currentPage->elements.push_back(pageImage); + self->currentPageNextY += displayHeight; + + self->depth += 1; + return; + } else { + Serial.printf("[%lu] [EHP] Failed to get image dimensions\n", millis()); + SdMan.remove(cachedImagePath.c_str()); + } + } else { + Serial.printf("[%lu] [EHP] Failed to extract image\n", millis()); + } + } + } + + // Fallback to alt text if image processing fails + if (!alt.empty()) { + alt = "[Image: " + alt + "]"; + self->startNewTextBlock(TextBlock::CENTER_ALIGN); + self->italicUntilDepth = std::min(self->italicUntilDepth, self->depth); + self->depth += 1; + self->characterData(userData, alt.c_str(), alt.length()); + return; + } + + // No alt text, skip + self->skipUntilDepth = self->depth; + self->depth += 1; + return; } - - Serial.printf("[%lu] [EHP] Image alt: %s\n", millis(), alt.c_str()); - - self->startNewTextBlock(TextBlock::CENTER_ALIGN); - self->italicUntilDepth = min(self->italicUntilDepth, self->depth); - // Advance depth before processing character data (like you would for a element with text) - self->depth += 1; - self->characterData(userData, alt.c_str(), alt.length()); - - // Skip table contents (skip until parent as we pre-advanced depth above) - self->skipUntilDepth = self->depth - 1; - return; } if (matches(name, SKIP_TAGS, NUM_SKIP_TAGS)) { diff --git a/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h b/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h index 2d8ebe5c..e0f16a9b 100644 --- a/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h +++ b/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h @@ -7,14 +7,17 @@ #include #include "../ParsedText.h" +#include "../blocks/ImageBlock.h" #include "../blocks/TextBlock.h" class Page; class GfxRenderer; +class Epub; #define MAX_WORD_SIZE 200 class ChapterHtmlSlimParser { + std::shared_ptr epub; const std::string& filepath; GfxRenderer& renderer; std::function)> completePageFn; @@ -37,6 +40,7 @@ class ChapterHtmlSlimParser { uint16_t viewportWidth; uint16_t viewportHeight; bool hyphenationEnabled; + int imageCounter = 0; void startNewTextBlock(TextBlock::Style style); void flushPartWordBuffer(); @@ -47,13 +51,14 @@ class ChapterHtmlSlimParser { static void XMLCALL endElement(void* userData, const XML_Char* name); public: - explicit ChapterHtmlSlimParser(const std::string& filepath, GfxRenderer& renderer, const int fontId, - const float lineCompression, const bool extraParagraphSpacing, + explicit ChapterHtmlSlimParser(std::shared_ptr epub, const std::string& filepath, GfxRenderer& renderer, + const int fontId, const float lineCompression, const bool extraParagraphSpacing, const uint8_t paragraphAlignment, const uint16_t viewportWidth, const uint16_t viewportHeight, const bool hyphenationEnabled, const std::function)>& completePageFn, const std::function& progressFn = nullptr) - : filepath(filepath), + : epub(epub), + filepath(filepath), renderer(renderer), fontId(fontId), lineCompression(lineCompression), diff --git a/lib/GfxRenderer/GfxRenderer.h b/lib/GfxRenderer/GfxRenderer.h index 733975f4..74847c3b 100644 --- a/lib/GfxRenderer/GfxRenderer.h +++ b/lib/GfxRenderer/GfxRenderer.h @@ -96,6 +96,7 @@ class GfxRenderer { public: // Grayscale functions void setRenderMode(const RenderMode mode) { this->renderMode = mode; } + RenderMode getRenderMode() const { return renderMode; } void copyGrayscaleLsbBuffers() const; void copyGrayscaleMsbBuffers() const; void displayGrayBuffer() const; diff --git a/platformio.ini b/platformio.ini index e8574470..4ea5ad7a 100644 --- a/platformio.ini +++ b/platformio.ini @@ -30,6 +30,9 @@ build_flags = -std=c++2a # Enable UTF-8 long file names in SdFat -DUSE_UTF8_LONG_NAMES=1 +# Increase PNG scanline buffer to support up to 800px wide images +# Default is (320*4+1)*2=2562, we need more for larger images + -DPNG_MAX_BUFFERED_PIXELS=6402 ; Board configuration board_build.flash_mode = dio @@ -47,6 +50,7 @@ lib_deps = SDCardManager=symlink://open-x4-sdk/libs/hardware/SDCardManager bblanchon/ArduinoJson @ 7.4.2 ricmoo/QRCode @ 0.0.1 + bitbank2/PNGdec @ ^1.0.0 links2004/WebSockets @ 2.7.3 [env:default] From 51375badcd491a23d8d3679f32d55c33a476cd2b Mon Sep 17 00:00:00 2001 From: Martin Brook Date: Tue, 27 Jan 2026 23:30:41 +0000 Subject: [PATCH 2/9] feat: add EPUB test generator for image rendering verification - Generate test EPUBs with annotated JPEG and PNG images - Test cases cover: grayscale (4 levels), centering, scaling, cache performance --- scripts/generate_test_epub.py | 621 ++++++++++++++++++++++++++++++ test/epubs/test_jpeg_images.epub | Bin 0 -> 227944 bytes test/epubs/test_mixed_images.epub | Bin 0 -> 52245 bytes test/epubs/test_png_images.epub | Bin 0 -> 69046 bytes 4 files changed, 621 insertions(+) create mode 100644 scripts/generate_test_epub.py create mode 100644 test/epubs/test_jpeg_images.epub create mode 100644 test/epubs/test_mixed_images.epub create mode 100644 test/epubs/test_png_images.epub diff --git a/scripts/generate_test_epub.py b/scripts/generate_test_epub.py new file mode 100644 index 00000000..adfce18b --- /dev/null +++ b/scripts/generate_test_epub.py @@ -0,0 +1,621 @@ +#!/usr/bin/env python3 +""" +Generate test EPUBs for image rendering verification. + +Creates EPUBs with annotated JPEG and PNG images to verify: +- Grayscale rendering (4 levels) +- Image scaling +- Image centering +- Cache performance +- Page serialization +""" + +import os +import zipfile +from pathlib import Path + +try: + from PIL import Image, ImageDraw, ImageFont +except ImportError: + print("Please install Pillow: pip install Pillow") + exit(1) + +OUTPUT_DIR = Path(__file__).parent.parent / "test" / "epubs" +SCREEN_WIDTH = 480 +SCREEN_HEIGHT = 800 + +def get_font(size=20): + """Get a font, falling back to default if needed.""" + try: + return ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", size) + except: + try: + return ImageFont.truetype("/usr/share/fonts/TTF/DejaVuSans.ttf", size) + except: + return ImageFont.load_default() + +def draw_text_centered(draw, y, text, font, fill=0): + """Draw centered text at given y position.""" + bbox = draw.textbbox((0, 0), text, font=font) + text_width = bbox[2] - bbox[0] + x = (draw.im.size[0] - text_width) // 2 + draw.text((x, y), text, font=font, fill=fill) + +def draw_text_wrapped(draw, x, y, text, font, max_width, fill=0): + """Draw text with word wrapping.""" + words = text.split() + lines = [] + current_line = [] + + for word in words: + test_line = ' '.join(current_line + [word]) + bbox = draw.textbbox((0, 0), test_line, font=font) + if bbox[2] - bbox[0] <= max_width: + current_line.append(word) + else: + if current_line: + lines.append(' '.join(current_line)) + current_line = [word] + if current_line: + lines.append(' '.join(current_line)) + + line_height = font.size + 4 if hasattr(font, 'size') else 20 + for i, line in enumerate(lines): + draw.text((x, y + i * line_height), line, font=font, fill=fill) + + return len(lines) * line_height + +def create_grayscale_test_image(filename, is_png=True): + """ + Create image with 4 grayscale squares to verify 4-level rendering. + """ + width, height = 400, 600 + img = Image.new('L', (width, height), 255) + draw = ImageDraw.Draw(img) + font = get_font(16) + font_small = get_font(14) + + # Title + draw_text_centered(draw, 10, "GRAYSCALE TEST", font, fill=0) + draw_text_centered(draw, 35, "Verify 4 distinct gray levels", font_small, fill=64) + + # Draw 4 grayscale squares + square_size = 70 + start_y = 65 + gap = 10 + + # Gray levels chosen to avoid Bayer dithering threshold boundaries (±40 dither offset) + # Thresholds at 64, 128, 192 - use values in the middle of each band for solid output + # Safe zones: 0-23 (black), 88-103 (dark gray), 152-167 (light gray), 232-255 (white) + levels = [ + (0, "Level 0: BLACK"), + (96, "Level 1: DARK GRAY"), + (160, "Level 2: LIGHT GRAY"), + (255, "Level 3: WHITE"), + ] + + for i, (gray_value, label) in enumerate(levels): + y = start_y + i * (square_size + gap + 22) + x = (width - square_size) // 2 + + # Draw square with border + draw.rectangle([x-2, y-2, x + square_size + 2, y + square_size + 2], fill=0) + draw.rectangle([x, y, x + square_size, y + square_size], fill=gray_value) + + # Label below square + bbox = draw.textbbox((0, 0), label, font=font_small) + label_width = bbox[2] - bbox[0] + draw.text(((width - label_width) // 2, y + square_size + 5), label, font=font_small, fill=0) + + # Instructions at bottom (well below the last square) + y = height - 70 + draw_text_centered(draw, y, "PASS: 4 distinct shades visible", font_small, fill=0) + draw_text_centered(draw, y + 20, "FAIL: Only black/white or", font_small, fill=64) + draw_text_centered(draw, y + 38, "muddy/indistinct grays", font_small, fill=64) + + # Save + if is_png: + img.save(filename, 'PNG') + else: + img.save(filename, 'JPEG', quality=95) + +def create_centering_test_image(filename, is_png=True): + """ + Create image with border markers to verify centering. + """ + width, height = 350, 400 + img = Image.new('L', (width, height), 255) + draw = ImageDraw.Draw(img) + font = get_font(16) + font_small = get_font(14) + + # Draw border + draw.rectangle([0, 0, width-1, height-1], outline=0, width=3) + + # Corner markers + marker_size = 20 + for x, y in [(0, 0), (width-marker_size, 0), (0, height-marker_size), (width-marker_size, height-marker_size)]: + draw.rectangle([x, y, x+marker_size, y+marker_size], fill=0) + + # Center cross + cx, cy = width // 2, height // 2 + draw.line([cx - 30, cy, cx + 30, cy], fill=0, width=2) + draw.line([cx, cy - 30, cx, cy + 30], fill=0, width=2) + + # Title + draw_text_centered(draw, 40, "CENTERING TEST", font, fill=0) + + # Instructions + y = 80 + draw_text_centered(draw, y, "Image should be centered", font_small, fill=0) + draw_text_centered(draw, y + 20, "horizontally on screen", font_small, fill=0) + + y = 150 + draw_text_centered(draw, y, "Check:", font_small, fill=0) + draw_text_centered(draw, y + 25, "- Equal margins left & right", font_small, fill=64) + draw_text_centered(draw, y + 45, "- All 4 corners visible", font_small, fill=64) + draw_text_centered(draw, y + 65, "- Border is complete rectangle", font_small, fill=64) + + # Pass/fail + y = height - 80 + draw_text_centered(draw, y, "PASS: Centered, all corners visible", font_small, fill=0) + draw_text_centered(draw, y + 20, "FAIL: Off-center or cropped", font_small, fill=64) + + if is_png: + img.save(filename, 'PNG') + else: + img.save(filename, 'JPEG', quality=95) + +def create_scaling_test_image(filename, is_png=True): + """ + Create large image to verify scaling works. + """ + # Make image larger than screen but within decoder limits (max 2048x1536) + width, height = 1200, 1500 + img = Image.new('L', (width, height), 240) + draw = ImageDraw.Draw(img) + font = get_font(48) + font_medium = get_font(32) + font_small = get_font(24) + + # Border + draw.rectangle([0, 0, width-1, height-1], outline=0, width=8) + draw.rectangle([20, 20, width-21, height-21], outline=128, width=4) + + # Title + draw_text_centered(draw, 60, "SCALING TEST", font, fill=0) + draw_text_centered(draw, 130, f"Original: {width}x{height} (larger than screen)", font_medium, fill=64) + + # Grid pattern to verify scaling quality + grid_start_y = 220 + grid_size = 400 + cell_size = 50 + + draw_text_centered(draw, grid_start_y - 40, "Grid pattern (check for artifacts):", font_small, fill=0) + + grid_x = (width - grid_size) // 2 + for row in range(grid_size // cell_size): + for col in range(grid_size // cell_size): + x = grid_x + col * cell_size + y = grid_start_y + row * cell_size + if (row + col) % 2 == 0: + draw.rectangle([x, y, x + cell_size, y + cell_size], fill=0) + else: + draw.rectangle([x, y, x + cell_size, y + cell_size], fill=200) + + # Size indicator bars + y = grid_start_y + grid_size + 60 + draw_text_centered(draw, y, "Width markers (should fit on screen):", font_small, fill=0) + + bar_y = y + 40 + # Full width bar + draw.rectangle([50, bar_y, width - 50, bar_y + 30], fill=0) + draw.text((60, bar_y + 5), "FULL WIDTH", font=font_small, fill=255) + + # Half width bar + bar_y += 60 + half_start = width // 4 + draw.rectangle([half_start, bar_y, width - half_start, bar_y + 30], fill=85) + draw.text((half_start + 10, bar_y + 5), "HALF WIDTH", font=font_small, fill=255) + + # Instructions + y = height - 350 + draw_text_centered(draw, y, "VERIFICATION:", font_medium, fill=0) + y += 50 + instructions = [ + "1. Image fits within screen bounds", + "2. All borders visible (not cropped)", + "3. Grid pattern clear (no moire)", + "4. Text readable after scaling", + "5. Aspect ratio preserved (not stretched)", + ] + for i, text in enumerate(instructions): + draw_text_centered(draw, y + i * 35, text, font_small, fill=64) + + y = height - 100 + draw_text_centered(draw, y, "PASS: Scaled down, readable, complete", font_small, fill=0) + draw_text_centered(draw, y + 30, "FAIL: Cropped, distorted, or unreadable", font_small, fill=64) + + if is_png: + img.save(filename, 'PNG') + else: + img.save(filename, 'JPEG', quality=95) + +def create_cache_test_image(filename, page_num, is_png=True): + """ + Create image for cache performance testing. + """ + width, height = 400, 300 + img = Image.new('L', (width, height), 255) + draw = ImageDraw.Draw(img) + font = get_font(18) + font_small = get_font(14) + font_large = get_font(36) + + # Border + draw.rectangle([0, 0, width-1, height-1], outline=0, width=2) + + # Page number prominent + draw_text_centered(draw, 30, f"CACHE TEST PAGE {page_num}", font, fill=0) + draw_text_centered(draw, 80, f"#{page_num}", font_large, fill=0) + + # Instructions + y = 140 + draw_text_centered(draw, y, "Navigate away then return", font_small, fill=64) + draw_text_centered(draw, y + 25, "Second load should be faster", font_small, fill=64) + + y = 220 + draw_text_centered(draw, y, "PASS: Faster reload from cache", font_small, fill=0) + draw_text_centered(draw, y + 20, "FAIL: Same slow decode each time", font_small, fill=64) + + if is_png: + img.save(filename, 'PNG') + else: + img.save(filename, 'JPEG', quality=95) + +def create_gradient_test_image(filename, is_png=True): + """ + Create horizontal gradient to test grayscale banding. + """ + width, height = 400, 500 + img = Image.new('L', (width, height), 255) + draw = ImageDraw.Draw(img) + font = get_font(16) + font_small = get_font(14) + + draw_text_centered(draw, 10, "GRADIENT TEST", font, fill=0) + draw_text_centered(draw, 35, "Smooth gradient → 4 bands expected", font_small, fill=64) + + # Horizontal gradient + gradient_y = 70 + gradient_height = 100 + for x in range(width): + gray = int(255 * x / width) + draw.line([(x, gradient_y), (x, gradient_y + gradient_height)], fill=gray) + + # Border around gradient + draw.rectangle([0, gradient_y-1, width-1, gradient_y + gradient_height + 1], outline=0, width=1) + + # Labels + y = gradient_y + gradient_height + 10 + draw.text((5, y), "BLACK", font=font_small, fill=0) + draw.text((width - 50, y), "WHITE", font=font_small, fill=0) + + # 4-step gradient (what it should look like) + y = 220 + draw_text_centered(draw, y, "Expected result (4 distinct bands):", font_small, fill=0) + + band_y = y + 25 + band_height = 60 + band_width = width // 4 + for i, gray in enumerate([0, 85, 170, 255]): + x = i * band_width + draw.rectangle([x, band_y, x + band_width, band_y + band_height], fill=gray) + draw.rectangle([0, band_y-1, width-1, band_y + band_height + 1], outline=0, width=1) + + # Vertical gradient + y = 340 + draw_text_centered(draw, y, "Vertical gradient:", font_small, fill=0) + + vgrad_y = y + 25 + vgrad_height = 80 + for row in range(vgrad_height): + gray = int(255 * row / vgrad_height) + draw.line([(50, vgrad_y + row), (width - 50, vgrad_y + row)], fill=gray) + draw.rectangle([49, vgrad_y-1, width-49, vgrad_y + vgrad_height + 1], outline=0, width=1) + + # Pass/fail + y = height - 50 + draw_text_centered(draw, y, "PASS: Clear 4-band quantization", font_small, fill=0) + draw_text_centered(draw, y + 20, "FAIL: Binary/noisy dithering", font_small, fill=64) + + if is_png: + img.save(filename, 'PNG') + else: + img.save(filename, 'JPEG', quality=95) + +def create_format_test_image(filename, format_name, is_png=True): + """ + Create simple image to verify format support. + """ + width, height = 350, 250 + img = Image.new('L', (width, height), 255) + draw = ImageDraw.Draw(img) + font = get_font(20) + font_large = get_font(36) + font_small = get_font(14) + + # Border + draw.rectangle([0, 0, width-1, height-1], outline=0, width=3) + + # Format name + draw_text_centered(draw, 30, f"{format_name} FORMAT TEST", font, fill=0) + draw_text_centered(draw, 80, format_name, font_large, fill=0) + + # Checkmark area + y = 140 + draw_text_centered(draw, y, "If you can read this,", font_small, fill=64) + draw_text_centered(draw, y + 20, f"{format_name} decoding works!", font_small, fill=64) + + y = height - 40 + draw_text_centered(draw, y, f"PASS: {format_name} image visible", font_small, fill=0) + + if is_png: + img.save(filename, 'PNG') + else: + img.save(filename, 'JPEG', quality=95) + +def create_epub(epub_path, title, chapters): + """ + Create an EPUB file with the given chapters. + + chapters: list of (chapter_title, html_content, images) + images: list of (image_filename, image_data) + """ + with zipfile.ZipFile(epub_path, 'w', zipfile.ZIP_DEFLATED) as epub: + # mimetype (must be first, uncompressed) + epub.writestr('mimetype', 'application/epub+zip', compress_type=zipfile.ZIP_STORED) + + # Container + container_xml = ''' + + + + +''' + epub.writestr('META-INF/container.xml', container_xml) + + # Collect all images and chapters + manifest_items = [] + spine_items = [] + + # Add chapters and images + for i, (chapter_title, html_content, images) in enumerate(chapters): + chapter_id = f'chapter{i+1}' + chapter_file = f'chapter{i+1}.xhtml' + + # Add images for this chapter + for img_filename, img_data in images: + media_type = 'image/png' if img_filename.endswith('.png') else 'image/jpeg' + manifest_items.append(f' ') + epub.writestr(f'OEBPS/images/{img_filename}', img_data) + + # Add chapter + manifest_items.append(f' ') + spine_items.append(f' ') + epub.writestr(f'OEBPS/{chapter_file}', html_content) + + # content.opf + content_opf = f''' + + + test-epub-{title.lower().replace(" ", "-")} + {title} + en + + + +{chr(10).join(manifest_items)} + + +{chr(10).join(spine_items)} + +''' + epub.writestr('OEBPS/content.opf', content_opf) + + # Navigation document + nav_items = '\n'.join([f'
  • {chapters[i][0]}
  • ' + for i in range(len(chapters))]) + nav_xhtml = f''' + + +Navigation + + + +''' + epub.writestr('OEBPS/nav.xhtml', nav_xhtml) + +def make_chapter(title, body_content): + """Create XHTML chapter content.""" + return f''' + + +{title} + +

    {title}

    +{body_content} + +''' + +def main(): + OUTPUT_DIR.mkdir(exist_ok=True) + + # Temp directory for images + import tempfile + with tempfile.TemporaryDirectory() as tmpdir: + tmpdir = Path(tmpdir) + + print("Generating test images...") + + # Generate all test images + images = {} + + # JPEG tests + create_grayscale_test_image(tmpdir / 'grayscale_test.jpg', is_png=False) + create_centering_test_image(tmpdir / 'centering_test.jpg', is_png=False) + create_scaling_test_image(tmpdir / 'scaling_test.jpg', is_png=False) + create_gradient_test_image(tmpdir / 'gradient_test.jpg', is_png=False) + create_format_test_image(tmpdir / 'jpeg_format.jpg', 'JPEG', is_png=False) + create_cache_test_image(tmpdir / 'cache_test_1.jpg', 1, is_png=False) + create_cache_test_image(tmpdir / 'cache_test_2.jpg', 2, is_png=False) + + # PNG tests + create_grayscale_test_image(tmpdir / 'grayscale_test.png', is_png=True) + create_centering_test_image(tmpdir / 'centering_test.png', is_png=True) + create_scaling_test_image(tmpdir / 'scaling_test.png', is_png=True) + create_gradient_test_image(tmpdir / 'gradient_test.png', is_png=True) + create_format_test_image(tmpdir / 'png_format.png', 'PNG', is_png=True) + create_cache_test_image(tmpdir / 'cache_test_1.png', 1, is_png=True) + create_cache_test_image(tmpdir / 'cache_test_2.png', 2, is_png=True) + + # Read all images + for img_file in tmpdir.glob('*.*'): + images[img_file.name] = img_file.read_bytes() + + print("Creating JPEG test EPUB...") + jpeg_chapters = [ + ("Introduction", make_chapter("JPEG Image Tests", """ +

    This EPUB tests JPEG image rendering.

    +

    Navigate through chapters to verify each test case.

    +

    Test Plan:

    +
      +
    • Grayscale rendering (4 levels)
    • +
    • Image centering
    • +
    • Large image scaling
    • +
    • Cache performance
    • +
    +"""), []), + ("1. JPEG Format", make_chapter("JPEG Format Test", """ +

    Basic JPEG decoding test.

    +JPEG format test +

    If the image above is visible, JPEG decoding works.

    +"""), [('jpeg_format.jpg', images['jpeg_format.jpg'])]), + ("2. Grayscale", make_chapter("Grayscale Test", """ +

    Verify 4 distinct gray levels are visible.

    +Grayscale test +"""), [('grayscale_test.jpg', images['grayscale_test.jpg'])]), + ("3. Gradient", make_chapter("Gradient Test", """ +

    Verify gradient quantizes to 4 bands.

    +Gradient test +"""), [('gradient_test.jpg', images['gradient_test.jpg'])]), + ("4. Centering", make_chapter("Centering Test", """ +

    Verify image is centered horizontally.

    +Centering test +"""), [('centering_test.jpg', images['centering_test.jpg'])]), + ("5. Scaling", make_chapter("Scaling Test", """ +

    This image is 1200x1500 pixels - larger than the screen.

    +

    It should be scaled down to fit.

    +Scaling test +"""), [('scaling_test.jpg', images['scaling_test.jpg'])]), + ("6. Cache Test A", make_chapter("Cache Test - Page A", """ +

    First cache test page. Note the load time.

    +Cache test 1 +

    Navigate to next page, then come back.

    +"""), [('cache_test_1.jpg', images['cache_test_1.jpg'])]), + ("7. Cache Test B", make_chapter("Cache Test - Page B", """ +

    Second cache test page.

    +Cache test 2 +

    Navigate back to Page A - it should load faster from cache.

    +"""), [('cache_test_2.jpg', images['cache_test_2.jpg'])]), + ] + + create_epub(OUTPUT_DIR / 'test_jpeg_images.epub', 'JPEG Image Tests', jpeg_chapters) + + print("Creating PNG test EPUB...") + png_chapters = [ + ("Introduction", make_chapter("PNG Image Tests", """ +

    This EPUB tests PNG image rendering.

    +

    Navigate through chapters to verify each test case.

    +

    Test Plan:

    +
      +
    • PNG decoding (no crash)
    • +
    • Grayscale rendering (4 levels)
    • +
    • Image centering
    • +
    • Large image scaling
    • +
    +"""), []), + ("1. PNG Format", make_chapter("PNG Format Test", """ +

    Basic PNG decoding test.

    +PNG format test +

    If the image above is visible and no crash occurred, PNG decoding works.

    +"""), [('png_format.png', images['png_format.png'])]), + ("2. Grayscale", make_chapter("Grayscale Test", """ +

    Verify 4 distinct gray levels are visible.

    +Grayscale test +"""), [('grayscale_test.png', images['grayscale_test.png'])]), + ("3. Gradient", make_chapter("Gradient Test", """ +

    Verify gradient quantizes to 4 bands.

    +Gradient test +"""), [('gradient_test.png', images['gradient_test.png'])]), + ("4. Centering", make_chapter("Centering Test", """ +

    Verify image is centered horizontally.

    +Centering test +"""), [('centering_test.png', images['centering_test.png'])]), + ("5. Scaling", make_chapter("Scaling Test", """ +

    This image is 1200x1500 pixels - larger than the screen.

    +

    It should be scaled down to fit.

    +Scaling test +"""), [('scaling_test.png', images['scaling_test.png'])]), + ("6. Cache Test A", make_chapter("Cache Test - Page A", """ +

    First cache test page. Note the load time.

    +Cache test 1 +

    Navigate to next page, then come back.

    +"""), [('cache_test_1.png', images['cache_test_1.png'])]), + ("7. Cache Test B", make_chapter("Cache Test - Page B", """ +

    Second cache test page.

    +Cache test 2 +

    Navigate back to Page A - it should load faster from cache.

    +"""), [('cache_test_2.png', images['cache_test_2.png'])]), + ] + + create_epub(OUTPUT_DIR / 'test_png_images.epub', 'PNG Image Tests', png_chapters) + + print("Creating mixed format test EPUB...") + mixed_chapters = [ + ("Introduction", make_chapter("Mixed Image Format Tests", """ +

    This EPUB contains both JPEG and PNG images.

    +

    Tests format detection and mixed rendering.

    +"""), []), + ("1. JPEG Image", make_chapter("JPEG in Mixed EPUB", """ +

    This is a JPEG image:

    +JPEG +"""), [('jpeg_format.jpg', images['jpeg_format.jpg'])]), + ("2. PNG Image", make_chapter("PNG in Mixed EPUB", """ +

    This is a PNG image:

    +PNG +"""), [('png_format.png', images['png_format.png'])]), + ("3. Both Formats", make_chapter("Both Formats on One Page", """ +

    JPEG image:

    +JPEG grayscale +

    PNG image:

    +PNG grayscale +

    Both should render with proper grayscale.

    +"""), [('grayscale_test.jpg', images['grayscale_test.jpg']), + ('grayscale_test.png', images['grayscale_test.png'])]), + ] + + create_epub(OUTPUT_DIR / 'test_mixed_images.epub', 'Mixed Format Tests', mixed_chapters) + + print(f"\nTest EPUBs created in: {OUTPUT_DIR}") + print("Files:") + for f in OUTPUT_DIR.glob('*.epub'): + print(f" - {f.name}") + +if __name__ == '__main__': + main() diff --git a/test/epubs/test_jpeg_images.epub b/test/epubs/test_jpeg_images.epub new file mode 100644 index 0000000000000000000000000000000000000000..24d31e1ee9dff5f72bb18b1aa5b6279aee8b3a0b GIT binary patch literal 227944 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

    U1JEtaiGuI=8T9?#sYB}5 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

    n#E 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

    I;xJW-bFknsz6JV;cd$r&*f5PH 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ð_iPYw z{vO`g5G0sK?d}yw@b@6Dg;m5seghLZ^I$>T7b<3;*%p;U+pApuFjMpybU-5jKx>Q2 zRWQ!8Ma7%o@k5BG2Yw^RdpjNCP2R;~b)> zdvhT}=!b*^LCt_VS8?EBc0J>KJDbZXp*@`-VXdvUwv*2pAxmImvb{}9)>&npJpk|k zE?zmlXdyvh;|ZEz2{^E|))L^i)3F@5!07;WbidGP_ZGqgI!CtGQIVHJz6=I)-fwP1 z;Doh9hCJ~R5(GMH?etGF;#WI}P=ozKlt4ys?SpvN6TcKdM1Twm3BtM&yD&f;B_4Yf zp$4XeD1nS15-Uy+k4=gQe@_buU&^dUD#cOa!yXZeFA3SYO9=)+;so(Qfry|YwMh^S l5yXp&pGZW-;WEPFo2L~Al$7+^2CCo#CItYAvS9B5{tw$6bo&4R literal 0 HcmV?d00001 From abaebec519effc8725685a84fa43826460c8522e Mon Sep 17 00:00:00 2001 From: Martin Brook Date: Wed, 28 Jan 2026 19:35:28 +0000 Subject: [PATCH 3/9] fix: allow images to share first chapter page with title Only force a page break before an image when it won't fit in the remaining page space, instead of unconditionally breaking whenever the page has any content. --- lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp b/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp index 3f342787..2f003b65 100644 --- a/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp +++ b/lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp @@ -176,8 +176,9 @@ void XMLCALL ChapterHtmlSlimParser::startElement(void* userData, const XML_Char* Serial.printf("[%lu] [EHP] Display size: %dx%d (scale %.2f)\n", millis(), displayWidth, displayHeight, scale); - // Create page for image - if (self->currentPage && !self->currentPage->elements.empty()) { + // Create page for image - only break if image won't fit remaining space + if (self->currentPage && !self->currentPage->elements.empty() && + (self->currentPageNextY + displayHeight > self->viewportHeight)) { self->completePageFn(std::move(self->currentPage)); self->currentPage.reset(new Page()); if (!self->currentPage) { From a34515219ca5ea5434a80e650c05370f57de9c97 Mon Sep 17 00:00:00 2001 From: Martin Brook Date: Fri, 30 Jan 2026 17:47:15 +0000 Subject: [PATCH 4/9] refactor: extract shared DitherUtils.h and PixelCache.h Address review comments #2, #3, and #10: - Extract duplicated bayer4x4 matrix, applyBayerDither4Level(), and drawPixelWithRenderMode() into shared DitherUtils.h - Extract duplicated PixelCache struct into shared PixelCache.h so both JPEG and PNG decoders use the same implementation - Add MAX_CACHE_BYTES (256KB) size limit to PixelCache::allocate() to proactively guard against oversized allocations on embedded targets --- lib/Epub/Epub/converters/DitherUtils.h | 40 +++++++++++++ lib/Epub/Epub/converters/PixelCache.h | 83 ++++++++++++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 lib/Epub/Epub/converters/DitherUtils.h create mode 100644 lib/Epub/Epub/converters/PixelCache.h diff --git a/lib/Epub/Epub/converters/DitherUtils.h b/lib/Epub/Epub/converters/DitherUtils.h new file mode 100644 index 00000000..ec14a332 --- /dev/null +++ b/lib/Epub/Epub/converters/DitherUtils.h @@ -0,0 +1,40 @@ +#pragma once + +#include +#include + +// 4x4 Bayer matrix for ordered dithering +inline const uint8_t bayer4x4[4][4] = { + {0, 8, 2, 10}, + {12, 4, 14, 6}, + {3, 11, 1, 9}, + {15, 7, 13, 5}, +}; + +// Apply Bayer dithering and quantize to 4 levels (0-3) +// Stateless - works correctly with any pixel processing order +inline uint8_t applyBayerDither4Level(uint8_t gray, int x, int y) { + int bayer = bayer4x4[y & 3][x & 3]; + int dither = (bayer - 8) * 5; // Scale to +/-40 (half of quantization step 85) + + int adjusted = gray + dither; + if (adjusted < 0) adjusted = 0; + if (adjusted > 255) adjusted = 255; + + if (adjusted < 64) return 0; + if (adjusted < 128) return 1; + if (adjusted < 192) return 2; + return 3; +} + +// Draw a pixel respecting the current render mode for grayscale support +inline void drawPixelWithRenderMode(GfxRenderer& renderer, int x, int y, uint8_t pixelValue) { + GfxRenderer::RenderMode renderMode = renderer.getRenderMode(); + if (renderMode == GfxRenderer::BW && pixelValue < 3) { + renderer.drawPixel(x, y, true); + } else if (renderMode == GfxRenderer::GRAYSCALE_MSB && (pixelValue == 1 || pixelValue == 2)) { + renderer.drawPixel(x, y, false); + } else if (renderMode == GfxRenderer::GRAYSCALE_LSB && pixelValue == 1) { + renderer.drawPixel(x, y, false); + } +} diff --git a/lib/Epub/Epub/converters/PixelCache.h b/lib/Epub/Epub/converters/PixelCache.h new file mode 100644 index 00000000..9a20b0ff --- /dev/null +++ b/lib/Epub/Epub/converters/PixelCache.h @@ -0,0 +1,83 @@ +#pragma once + +#include +#include +#include +#include + +#include +#include + +// Cache buffer for storing 2-bit pixels (4 levels) during decode. +// Packs 4 pixels per byte, MSB first. +struct PixelCache { + uint8_t* buffer; + int width; + int height; + int bytesPerRow; + int originX; // config.x - to convert screen coords to cache coords + int originY; // config.y + + PixelCache() : buffer(nullptr), width(0), height(0), bytesPerRow(0), originX(0), originY(0) {} + + static constexpr size_t MAX_CACHE_BYTES = 256 * 1024; // 256KB limit for embedded targets + + bool allocate(int w, int h, int ox, int oy) { + width = w; + height = h; + originX = ox; + originY = oy; + bytesPerRow = (w + 3) / 4; // 2 bits per pixel, 4 pixels per byte + size_t bufferSize = (size_t)bytesPerRow * h; + if (bufferSize > MAX_CACHE_BYTES) { + Serial.printf("[%lu] [IMG] Cache buffer too large: %d bytes for %dx%d (limit %d)\n", millis(), bufferSize, w, h, + MAX_CACHE_BYTES); + return false; + } + buffer = (uint8_t*)malloc(bufferSize); + if (buffer) { + memset(buffer, 0, bufferSize); + Serial.printf("[%lu] [IMG] Allocated cache buffer: %d bytes for %dx%d\n", millis(), bufferSize, w, h); + } + return buffer != nullptr; + } + + void setPixel(int screenX, int screenY, uint8_t value) { + if (!buffer) return; + int localX = screenX - originX; + int localY = screenY - originY; + if (localX < 0 || localX >= width || localY < 0 || localY >= height) return; + + int byteIdx = localY * bytesPerRow + localX / 4; + int bitShift = 6 - (localX % 4) * 2; // MSB first: pixel 0 at bits 6-7 + buffer[byteIdx] = (buffer[byteIdx] & ~(0x03 << bitShift)) | ((value & 0x03) << bitShift); + } + + bool writeToFile(const std::string& cachePath) { + if (!buffer) return false; + + FsFile cacheFile; + if (!SdMan.openFileForWrite("IMG", cachePath, cacheFile)) { + Serial.printf("[%lu] [IMG] Failed to open cache file for writing: %s\n", millis(), cachePath.c_str()); + return false; + } + + uint16_t w = width; + uint16_t h = height; + cacheFile.write(&w, 2); + cacheFile.write(&h, 2); + cacheFile.write(buffer, bytesPerRow * height); + cacheFile.close(); + + Serial.printf("[%lu] [IMG] Cache written: %s (%dx%d, %d bytes)\n", millis(), cachePath.c_str(), width, height, + 4 + bytesPerRow * height); + return true; + } + + ~PixelCache() { + if (buffer) { + free(buffer); + buffer = nullptr; + } + } +}; From b0f28a59e7c49f8ccfe9f0606af2e7458b8b741c Mon Sep 17 00:00:00 2001 From: Martin Brook Date: Fri, 30 Jan 2026 17:47:54 +0000 Subject: [PATCH 5/9] refactor: replace PNG global state with PngContext struct Address review comments #1 and #7: - Replace all file-scope global variables (gRenderer, gConfig, gScale, gCacheBuffer, etc.) with a PngContext struct passed through pDraw->pUser - Unify file I/O callbacks to use pFile->fHandle instead of global FsFile* - Remove the unused FsFile opened at the start of decodeToFramebuffer() that was never used for actual decoding (duplicate open) - Use shared PixelCache from PixelCache.h instead of hand-rolled globals --- .../converters/PngToFramebufferConverter.cpp | 309 ++++++------------ 1 file changed, 105 insertions(+), 204 deletions(-) diff --git a/lib/Epub/Epub/converters/PngToFramebufferConverter.cpp b/lib/Epub/Epub/converters/PngToFramebufferConverter.cpp index 370de522..892b66a7 100644 --- a/lib/Epub/Epub/converters/PngToFramebufferConverter.cpp +++ b/lib/Epub/Epub/converters/PngToFramebufferConverter.cpp @@ -6,20 +6,73 @@ #include #include -static FsFile* gPngFile = nullptr; +#include "DitherUtils.h" +#include "PixelCache.h" -static void* pngOpenForDims(const char* filename, int32_t* size) { return gPngFile; } +// Context struct passed through PNGdec callbacks to avoid global mutable state. +// The draw callback receives this via pDraw->pUser (set by png.decode()). +// The file I/O callbacks receive the FsFile* via pFile->fHandle (set by pngOpen()). +struct PngContext { + GfxRenderer* renderer; + const RenderConfig* config; + int screenWidth; + int screenHeight; -static void pngCloseForDims(void* handle) {} + // Scaling state + float scale; + int srcWidth; + int srcHeight; + int dstWidth; + int dstHeight; + int lastDstY; // Track last rendered destination Y to avoid duplicates -static int32_t pngReadForDims(PNGFILE* pFile, uint8_t* pBuf, int32_t len) { - if (!gPngFile) return 0; - return gPngFile->read(pBuf, len); + PixelCache cache; + bool caching; + + PngContext() + : renderer(nullptr), + config(nullptr), + screenWidth(0), + screenHeight(0), + scale(1.0f), + srcWidth(0), + srcHeight(0), + dstWidth(0), + dstHeight(0), + lastDstY(-1), + caching(false) {} +}; + +// File I/O callbacks use pFile->fHandle to access the FsFile*, +// avoiding the need for global file state. +static void* pngOpenWithHandle(const char* filename, int32_t* size) { + FsFile* f = new FsFile(); + if (!SdMan.openFileForRead("PNG", std::string(filename), *f)) { + delete f; + return nullptr; + } + *size = f->size(); + return f; } -static int32_t pngSeekForDims(PNGFILE* pFile, int32_t pos) { - if (!gPngFile) return -1; - return gPngFile->seek(pos); +static void pngCloseWithHandle(void* handle) { + FsFile* f = reinterpret_cast(handle); + if (f) { + f->close(); + delete f; + } +} + +static int32_t pngReadWithHandle(PNGFILE* pFile, uint8_t* pBuf, int32_t len) { + FsFile* f = reinterpret_cast(pFile->fHandle); + if (!f) return 0; + return f->read(pBuf, len); +} + +static int32_t pngSeekWithHandle(PNGFILE* pFile, int32_t pos) { + FsFile* f = reinterpret_cast(pFile->fHandle); + if (!f) return -1; + return f->seek(pos); } // Single static PNG object shared between getDimensions and decode @@ -27,20 +80,11 @@ static int32_t pngSeekForDims(PNGFILE* pFile, int32_t pos) { static PNG png; bool PngToFramebufferConverter::getDimensionsStatic(const std::string& imagePath, ImageDimensions& out) { - FsFile file; - if (!SdMan.openFileForRead("PNG", imagePath, file)) { - Serial.printf("[%lu] [PNG] Failed to open file for dimensions: %s\n", millis(), imagePath.c_str()); - return false; - } - - gPngFile = &file; - - int rc = png.open(imagePath.c_str(), pngOpenForDims, pngCloseForDims, pngReadForDims, pngSeekForDims, nullptr); + int rc = png.open(imagePath.c_str(), pngOpenWithHandle, pngCloseWithHandle, pngReadWithHandle, pngSeekWithHandle, + nullptr); if (rc != 0) { Serial.printf("[%lu] [PNG] Failed to open PNG for dimensions: %d\n", millis(), rc); - file.close(); - gPngFile = nullptr; return false; } @@ -48,107 +92,8 @@ bool PngToFramebufferConverter::getDimensionsStatic(const std::string& imagePath out.height = png.getHeight(); png.close(); - file.close(); - gPngFile = nullptr; return true; } -static GfxRenderer* gRenderer = nullptr; -static const RenderConfig* gConfig = nullptr; -static int gScreenWidth = 0; -static int gScreenHeight = 0; -static FsFile* pngFile = nullptr; - -// Scaling state for PNG -static float gScale = 1.0f; -static int gSrcWidth = 0; -static int gSrcHeight = 0; -static int gDstWidth = 0; -static int gDstHeight = 0; -static int gLastDstY = -1; // Track last rendered destination Y to avoid duplicates - -// Pixel cache for PNG (uses scaled dimensions) -static uint8_t* gCacheBuffer = nullptr; -static int gCacheWidth = 0; -static int gCacheHeight = 0; -static int gCacheBytesPerRow = 0; -static int gCacheOriginX = 0; -static int gCacheOriginY = 0; - -static void cacheSetPixel(int screenX, int screenY, uint8_t value) { - if (!gCacheBuffer) return; - int localX = screenX - gCacheOriginX; - int localY = screenY - gCacheOriginY; - if (localX < 0 || localX >= gCacheWidth || localY < 0 || localY >= gCacheHeight) return; - - int byteIdx = localY * gCacheBytesPerRow + localX / 4; - int bitShift = 6 - (localX % 4) * 2; // MSB first: pixel 0 at bits 6-7 - gCacheBuffer[byteIdx] = (gCacheBuffer[byteIdx] & ~(0x03 << bitShift)) | ((value & 0x03) << bitShift); -} - -// 4x4 Bayer matrix for ordered dithering -static const uint8_t bayer4x4[4][4] = { - {0, 8, 2, 10}, - {12, 4, 14, 6}, - {3, 11, 1, 9}, - {15, 7, 13, 5}, -}; - -// Apply Bayer dithering and quantize to 4 levels (0-3) -// Stateless - works correctly with any pixel processing order -static uint8_t applyBayerDither4Level(uint8_t gray, int x, int y) { - int bayer = bayer4x4[y & 3][x & 3]; - int dither = (bayer - 8) * 5; // Scale to ±40 (half of quantization step 85) - - int adjusted = gray + dither; - if (adjusted < 0) adjusted = 0; - if (adjusted > 255) adjusted = 255; - - if (adjusted < 64) return 0; - if (adjusted < 128) return 1; - if (adjusted < 192) return 2; - return 3; -} - -// Draw a pixel respecting the current render mode for grayscale support -static void drawPixelWithRenderMode(GfxRenderer* renderer, int x, int y, uint8_t pixelValue) { - GfxRenderer::RenderMode renderMode = renderer->getRenderMode(); - if (renderMode == GfxRenderer::BW && pixelValue < 3) { - renderer->drawPixel(x, y, true); - } else if (renderMode == GfxRenderer::GRAYSCALE_MSB && (pixelValue == 1 || pixelValue == 2)) { - renderer->drawPixel(x, y, false); - } else if (renderMode == GfxRenderer::GRAYSCALE_LSB && pixelValue == 1) { - renderer->drawPixel(x, y, false); - } -} - -void* pngOpen(const char* filename, int32_t* size) { - pngFile = new FsFile(); - if (!SdMan.openFileForRead("PNG", std::string(filename), *pngFile)) { - delete pngFile; - pngFile = nullptr; - return nullptr; - } - *size = pngFile->size(); - return pngFile; -} - -void pngClose(void* handle) { - if (pngFile) { - pngFile->close(); - delete pngFile; - pngFile = nullptr; - } -} - -int32_t pngRead(PNGFILE* pFile, uint8_t* pBuf, int32_t len) { - if (!pngFile) return 0; - return pngFile->read(pBuf, len); -} - -int32_t pngSeek(PNGFILE* pFile, int32_t pos) { - if (!pngFile) return -1; - return pngFile->seek(pos); -} // Helper to get grayscale from PNG pixel data static uint8_t getGrayFromPixel(uint8_t* pPixels, int x, int pixelType, uint8_t* palette) { @@ -184,45 +129,46 @@ static uint8_t getGrayFromPixel(uint8_t* pPixels, int x, int pixelType, uint8_t* } int pngDrawCallback(PNGDRAW* pDraw) { - if (!gConfig || !gRenderer) return 0; + PngContext* ctx = reinterpret_cast(pDraw->pUser); + if (!ctx || !ctx->config || !ctx->renderer) return 0; int srcY = pDraw->y; uint8_t* pPixels = pDraw->pPixels; int pixelType = pDraw->iPixelType; // Calculate destination Y with scaling - int dstY = (int)(srcY * gScale); + int dstY = (int)(srcY * ctx->scale); // Skip if we already rendered this destination row (multiple source rows map to same dest) - if (dstY == gLastDstY) return 1; - gLastDstY = dstY; + if (dstY == ctx->lastDstY) return 1; + ctx->lastDstY = dstY; // Check bounds - if (dstY >= gDstHeight) return 1; + if (dstY >= ctx->dstHeight) return 1; - int outY = gConfig->y + dstY; - if (outY >= gScreenHeight) return 1; + int outY = ctx->config->y + dstY; + if (outY >= ctx->screenHeight) return 1; // Render scaled row using nearest-neighbor sampling - for (int dstX = 0; dstX < gDstWidth; dstX++) { - int outX = gConfig->x + dstX; - if (outX >= gScreenWidth) continue; + for (int dstX = 0; dstX < ctx->dstWidth; dstX++) { + int outX = ctx->config->x + dstX; + if (outX >= ctx->screenWidth) continue; // Map destination X back to source X - int srcX = (int)(dstX / gScale); - if (srcX >= gSrcWidth) srcX = gSrcWidth - 1; + int srcX = (int)(dstX / ctx->scale); + if (srcX >= ctx->srcWidth) srcX = ctx->srcWidth - 1; uint8_t gray = getGrayFromPixel(pPixels, srcX, pixelType, pDraw->pPalette); uint8_t ditheredGray; - if (gConfig->useDithering) { + if (ctx->config->useDithering) { ditheredGray = applyBayerDither4Level(gray, outX, outY); } else { ditheredGray = gray / 85; if (ditheredGray > 3) ditheredGray = 3; } - drawPixelWithRenderMode(gRenderer, outX, outY, ditheredGray); - cacheSetPixel(outX, outY, ditheredGray); + drawPixelWithRenderMode(*ctx->renderer, outX, outY, ditheredGray); + if (ctx->caching) ctx->cache.setPixel(outX, outY, ditheredGray); } return 1; @@ -232,48 +178,38 @@ bool PngToFramebufferConverter::decodeToFramebuffer(const std::string& imagePath const RenderConfig& config) { Serial.printf("[%lu] [PNG] Decoding PNG: %s\n", millis(), imagePath.c_str()); - FsFile file; - if (!SdMan.openFileForRead("PNG", imagePath, file)) { - Serial.printf("[%lu] [PNG] Failed to open file: %s\n", millis(), imagePath.c_str()); - return false; - } + PngContext ctx; + ctx.renderer = &renderer; + ctx.config = &config; + ctx.screenWidth = renderer.getScreenWidth(); + ctx.screenHeight = renderer.getScreenHeight(); - gRenderer = &renderer; - gConfig = &config; - gScreenWidth = renderer.getScreenWidth(); - gScreenHeight = renderer.getScreenHeight(); - - int rc = png.open(imagePath.c_str(), pngOpen, pngClose, pngRead, pngSeek, pngDrawCallback); + int rc = png.open(imagePath.c_str(), pngOpenWithHandle, pngCloseWithHandle, pngReadWithHandle, pngSeekWithHandle, + pngDrawCallback); if (rc != PNG_SUCCESS) { Serial.printf("[%lu] [PNG] Failed to open PNG: %d\n", millis(), rc); - file.close(); - gRenderer = nullptr; - gConfig = nullptr; return false; } if (!validateImageDimensions(png.getWidth(), png.getHeight(), "PNG")) { png.close(); - file.close(); - gRenderer = nullptr; - gConfig = nullptr; return false; } // Calculate scale factor to fit within maxWidth x maxHeight - gSrcWidth = png.getWidth(); - gSrcHeight = png.getHeight(); - float scaleX = (float)config.maxWidth / gSrcWidth; - float scaleY = (float)config.maxHeight / gSrcHeight; - gScale = (scaleX < scaleY) ? scaleX : scaleY; - if (gScale > 1.0f) gScale = 1.0f; // Don't upscale + ctx.srcWidth = png.getWidth(); + ctx.srcHeight = png.getHeight(); + float scaleX = (float)config.maxWidth / ctx.srcWidth; + float scaleY = (float)config.maxHeight / ctx.srcHeight; + ctx.scale = (scaleX < scaleY) ? scaleX : scaleY; + if (ctx.scale > 1.0f) ctx.scale = 1.0f; // Don't upscale - gDstWidth = (int)(gSrcWidth * gScale); - gDstHeight = (int)(gSrcHeight * gScale); - gLastDstY = -1; // Reset row tracking + ctx.dstWidth = (int)(ctx.srcWidth * ctx.scale); + ctx.dstHeight = (int)(ctx.srcHeight * ctx.scale); + ctx.lastDstY = -1; // Reset row tracking - Serial.printf("[%lu] [PNG] PNG %dx%d -> %dx%d (scale %.2f), bpp: %d\n", millis(), gSrcWidth, gSrcHeight, gDstWidth, - gDstHeight, gScale, png.getBpp()); + Serial.printf("[%lu] [PNG] PNG %dx%d -> %dx%d (scale %.2f), bpp: %d\n", millis(), ctx.srcWidth, ctx.srcHeight, + ctx.dstWidth, ctx.dstHeight, ctx.scale, png.getBpp()); if (png.getBpp() != 8) { warnUnsupportedFeature("bit depth (" + std::to_string(png.getBpp()) + "bpp)", imagePath); @@ -284,64 +220,29 @@ bool PngToFramebufferConverter::decodeToFramebuffer(const std::string& imagePath } // Allocate cache buffer using SCALED dimensions - bool caching = !config.cachePath.empty(); - if (caching) { - gCacheWidth = gDstWidth; - gCacheHeight = gDstHeight; - gCacheBytesPerRow = (gCacheWidth + 3) / 4; - gCacheOriginX = config.x; - gCacheOriginY = config.y; - size_t bufferSize = gCacheBytesPerRow * gCacheHeight; - gCacheBuffer = (uint8_t*)malloc(bufferSize); - if (gCacheBuffer) { - memset(gCacheBuffer, 0, bufferSize); - Serial.printf("[%lu] [PNG] Allocated cache buffer: %d bytes for %dx%d\n", millis(), bufferSize, gCacheWidth, - gCacheHeight); - } else { + ctx.caching = !config.cachePath.empty(); + if (ctx.caching) { + if (!ctx.cache.allocate(ctx.dstWidth, ctx.dstHeight, config.x, config.y)) { Serial.printf("[%lu] [PNG] Failed to allocate cache buffer, continuing without caching\n", millis()); - caching = false; + ctx.caching = false; } } - rc = png.decode(nullptr, 0); + rc = png.decode(&ctx, 0); if (rc != PNG_SUCCESS) { Serial.printf("[%lu] [PNG] Decode failed: %d\n", millis(), rc); png.close(); - file.close(); - gRenderer = nullptr; - gConfig = nullptr; - if (gCacheBuffer) { - free(gCacheBuffer); - gCacheBuffer = nullptr; - } return false; } png.close(); - file.close(); Serial.printf("[%lu] [PNG] PNG decoding complete\n", millis()); // Write cache file if caching was enabled and buffer was allocated - if (caching && gCacheBuffer) { - FsFile cacheFile; - if (SdMan.openFileForWrite("IMG", config.cachePath, cacheFile)) { - uint16_t w = gCacheWidth; - uint16_t h = gCacheHeight; - cacheFile.write(&w, 2); - cacheFile.write(&h, 2); - cacheFile.write(gCacheBuffer, gCacheBytesPerRow * gCacheHeight); - cacheFile.close(); - Serial.printf("[%lu] [PNG] Cache written: %s (%dx%d, %d bytes)\n", millis(), config.cachePath.c_str(), - gCacheWidth, gCacheHeight, 4 + gCacheBytesPerRow * gCacheHeight); - } else { - Serial.printf("[%lu] [PNG] Failed to open cache file for writing: %s\n", millis(), config.cachePath.c_str()); - } - free(gCacheBuffer); - gCacheBuffer = nullptr; + if (ctx.caching) { + ctx.cache.writeToFile(config.cachePath); } - gRenderer = nullptr; - gConfig = nullptr; return true; } From ea5b2c06df1984c5c334aa2483b30e86802380f5 Mon Sep 17 00:00:00 2001 From: Martin Brook Date: Fri, 30 Jan 2026 17:48:04 +0000 Subject: [PATCH 6/9] refactor: use shared DitherUtils and PixelCache in JPEG decoder Address review comments #2 and #3: - Remove duplicated bayer4x4, applyBayerDither4Level(), drawPixelWithRenderMode(), and PixelCache from JPEG decoder - Include shared DitherUtils.h and PixelCache.h instead --- .../converters/JpegToFramebufferConverter.cpp | 105 +----------------- 1 file changed, 3 insertions(+), 102 deletions(-) diff --git a/lib/Epub/Epub/converters/JpegToFramebufferConverter.cpp b/lib/Epub/Epub/converters/JpegToFramebufferConverter.cpp index 4c23323e..fbb3e96b 100644 --- a/lib/Epub/Epub/converters/JpegToFramebufferConverter.cpp +++ b/lib/Epub/Epub/converters/JpegToFramebufferConverter.cpp @@ -9,6 +9,9 @@ #include #include +#include "DitherUtils.h" +#include "PixelCache.h" + struct JpegContext { FsFile& file; uint8_t buffer[512]; @@ -17,108 +20,6 @@ struct JpegContext { JpegContext(FsFile& f) : file(f), bufferPos(0), bufferFilled(0) {} }; -// Cache buffer for storing 2-bit pixels during decode -struct PixelCache { - uint8_t* buffer; - int width; - int height; - int bytesPerRow; - int originX; // config.x - to convert screen coords to cache coords - int originY; // config.y - - PixelCache() : buffer(nullptr), width(0), height(0), bytesPerRow(0), originX(0), originY(0) {} - - bool allocate(int w, int h, int ox, int oy) { - width = w; - height = h; - originX = ox; - originY = oy; - bytesPerRow = (w + 3) / 4; // 2 bits per pixel, 4 pixels per byte - size_t bufferSize = bytesPerRow * h; - buffer = (uint8_t*)malloc(bufferSize); - if (buffer) { - memset(buffer, 0, bufferSize); - Serial.printf("[%lu] [JPG] Allocated cache buffer: %d bytes for %dx%d\n", millis(), bufferSize, w, h); - } - return buffer != nullptr; - } - - void setPixel(int screenX, int screenY, uint8_t value) { - if (!buffer) return; - int localX = screenX - originX; - int localY = screenY - originY; - if (localX < 0 || localX >= width || localY < 0 || localY >= height) return; - - int byteIdx = localY * bytesPerRow + localX / 4; - int bitShift = 6 - (localX % 4) * 2; // MSB first: pixel 0 at bits 6-7 - buffer[byteIdx] = (buffer[byteIdx] & ~(0x03 << bitShift)) | ((value & 0x03) << bitShift); - } - - bool writeToFile(const std::string& cachePath) { - if (!buffer) return false; - - FsFile cacheFile; - if (!SdMan.openFileForWrite("IMG", cachePath, cacheFile)) { - Serial.printf("[%lu] [JPG] Failed to open cache file for writing: %s\n", millis(), cachePath.c_str()); - return false; - } - - uint16_t w = width; - uint16_t h = height; - cacheFile.write(&w, 2); - cacheFile.write(&h, 2); - cacheFile.write(buffer, bytesPerRow * height); - cacheFile.close(); - - Serial.printf("[%lu] [JPG] Cache written: %s (%dx%d, %d bytes)\n", millis(), cachePath.c_str(), width, height, - 4 + bytesPerRow * height); - return true; - } - - ~PixelCache() { - if (buffer) { - free(buffer); - buffer = nullptr; - } - } -}; - -// 4x4 Bayer matrix for ordered dithering -static const uint8_t bayer4x4[4][4] = { - {0, 8, 2, 10}, - {12, 4, 14, 6}, - {3, 11, 1, 9}, - {15, 7, 13, 5}, -}; - -// Apply Bayer dithering and quantize to 4 levels (0-3) -// Stateless - works correctly with any pixel processing order (ideal for MCU-based decoding) -static uint8_t applyBayerDither4Level(uint8_t gray, int x, int y) { - int bayer = bayer4x4[y & 3][x & 3]; - int dither = (bayer - 8) * 5; // Scale to ±40 (half of quantization step 85) - - int adjusted = gray + dither; - if (adjusted < 0) adjusted = 0; - if (adjusted > 255) adjusted = 255; - - if (adjusted < 64) return 0; - if (adjusted < 128) return 1; - if (adjusted < 192) return 2; - return 3; -} - -// Draw a pixel respecting the current render mode for grayscale support -static void drawPixelWithRenderMode(GfxRenderer& renderer, int x, int y, uint8_t pixelValue) { - GfxRenderer::RenderMode renderMode = renderer.getRenderMode(); - if (renderMode == GfxRenderer::BW && pixelValue < 3) { - renderer.drawPixel(x, y, true); - } else if (renderMode == GfxRenderer::GRAYSCALE_MSB && (pixelValue == 1 || pixelValue == 2)) { - renderer.drawPixel(x, y, false); - } else if (renderMode == GfxRenderer::GRAYSCALE_LSB && pixelValue == 1) { - renderer.drawPixel(x, y, false); - } -} - bool JpegToFramebufferConverter::getDimensionsStatic(const std::string& imagePath, ImageDimensions& out) { FsFile file; if (!SdMan.openFileForRead("JPG", imagePath, file)) { From 72c2cea08934a3f894e79902303aa032d24a1d4f Mon Sep 17 00:00:00 2001 From: Martin Brook Date: Fri, 30 Jan 2026 17:48:18 +0000 Subject: [PATCH 7/9] refactor: use shared drawPixelWithRenderMode in renderFromCache Address review comment #4: - Replace hand-rolled pixel rendering logic in renderFromCache() with shared drawPixelWithRenderMode() from DitherUtils.h - This also hoists getRenderMode() out of the per-pixel call since drawPixelWithRenderMode handles it internally --- lib/Epub/Epub/blocks/ImageBlock.cpp | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/lib/Epub/Epub/blocks/ImageBlock.cpp b/lib/Epub/Epub/blocks/ImageBlock.cpp index 9c89fbb6..b420978b 100644 --- a/lib/Epub/Epub/blocks/ImageBlock.cpp +++ b/lib/Epub/Epub/blocks/ImageBlock.cpp @@ -6,6 +6,7 @@ #include #include +#include "../converters/DitherUtils.h" #include "../converters/ImageDecoderFactory.h" // Cache file format: @@ -79,20 +80,12 @@ static bool renderFromCache(GfxRenderer& renderer, const std::string& cachePath, } int destY = y + row; - GfxRenderer::RenderMode renderMode = renderer.getRenderMode(); for (int col = 0; col < cachedWidth; col++) { int byteIdx = col / 4; int bitShift = 6 - (col % 4) * 2; // MSB first within byte uint8_t pixelValue = (rowBuffer[byteIdx] >> bitShift) & 0x03; - // Draw based on render mode (same logic as GfxRenderer::drawBitmap) - if (renderMode == GfxRenderer::BW && pixelValue < 3) { - renderer.drawPixel(x + col, destY, true); - } else if (renderMode == GfxRenderer::GRAYSCALE_MSB && (pixelValue == 1 || pixelValue == 2)) { - renderer.drawPixel(x + col, destY, false); - } else if (renderMode == GfxRenderer::GRAYSCALE_LSB && pixelValue == 1) { - renderer.drawPixel(x + col, destY, false); - } + drawPixelWithRenderMode(renderer, x + col, destY, pixelValue); } } From 12e9c3e29a47cd16f5dcd09ea7459ac2733eb950 Mon Sep 17 00:00:00 2001 From: Martin Brook Date: Fri, 30 Jan 2026 17:48:40 +0000 Subject: [PATCH 8/9] fix: isFormatSupported now correctly extracts extension Address review comment #6: - isFormatSupported() was passing the full path to supportsFormat() which only matches extensions like ".jpg", so it always returned false - Delegate to getDecoder() which correctly extracts the extension first --- lib/Epub/Epub/converters/ImageDecoderFactory.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/lib/Epub/Epub/converters/ImageDecoderFactory.cpp b/lib/Epub/Epub/converters/ImageDecoderFactory.cpp index 8b26b6e6..8c85e49b 100644 --- a/lib/Epub/Epub/converters/ImageDecoderFactory.cpp +++ b/lib/Epub/Epub/converters/ImageDecoderFactory.cpp @@ -50,13 +50,7 @@ ImageToFramebufferDecoder* ImageDecoderFactory::getDecoder(const std::string& im } bool ImageDecoderFactory::isFormatSupported(const std::string& imagePath) { - if (jpegDecoder && jpegDecoder->supportsFormat(imagePath)) { - return true; - } - if (pngDecoder && pngDecoder->supportsFormat(imagePath)) { - return true; - } - return false; + return getDecoder(imagePath) != nullptr; } std::vector ImageDecoderFactory::getSupportedFormats() { From 8f7e734534718e0d3f7ccd9ad24ae26b93b7484a Mon Sep 17 00:00:00 2001 From: Martin Brook Date: Fri, 30 Jan 2026 19:26:22 +0000 Subject: [PATCH 9/9] style: fix clang-format issues --- lib/Epub/Epub/converters/ImageDecoderFactory.cpp | 4 +--- lib/Epub/Epub/converters/PngToFramebufferConverter.cpp | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/lib/Epub/Epub/converters/ImageDecoderFactory.cpp b/lib/Epub/Epub/converters/ImageDecoderFactory.cpp index 8c85e49b..966c31d0 100644 --- a/lib/Epub/Epub/converters/ImageDecoderFactory.cpp +++ b/lib/Epub/Epub/converters/ImageDecoderFactory.cpp @@ -49,9 +49,7 @@ ImageToFramebufferDecoder* ImageDecoderFactory::getDecoder(const std::string& im return nullptr; } -bool ImageDecoderFactory::isFormatSupported(const std::string& imagePath) { - return getDecoder(imagePath) != nullptr; -} +bool ImageDecoderFactory::isFormatSupported(const std::string& imagePath) { return getDecoder(imagePath) != nullptr; } std::vector ImageDecoderFactory::getSupportedFormats() { std::vector formats; diff --git a/lib/Epub/Epub/converters/PngToFramebufferConverter.cpp b/lib/Epub/Epub/converters/PngToFramebufferConverter.cpp index 892b66a7..da11d760 100644 --- a/lib/Epub/Epub/converters/PngToFramebufferConverter.cpp +++ b/lib/Epub/Epub/converters/PngToFramebufferConverter.cpp @@ -80,8 +80,8 @@ static int32_t pngSeekWithHandle(PNGFILE* pFile, int32_t pos) { static PNG png; bool PngToFramebufferConverter::getDimensionsStatic(const std::string& imagePath, ImageDimensions& out) { - int rc = png.open(imagePath.c_str(), pngOpenWithHandle, pngCloseWithHandle, pngReadWithHandle, pngSeekWithHandle, - nullptr); + int rc = + png.open(imagePath.c_str(), pngOpenWithHandle, pngCloseWithHandle, pngReadWithHandle, pngSeekWithHandle, nullptr); if (rc != 0) { Serial.printf("[%lu] [PNG] Failed to open PNG for dimensions: %d\n", millis(), rc);