mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-12-27 13:11:46 +03:00
LibGfx/JPEGXL: Add a JPEG-XL decoder :^)
JPEG-XL is a new image format standardized by the same committee as the original JPEG image format. It has all the nice feature of recent formats, and great compression ratios. For more details, look at: https://jpegxl.info/ This decoder is far from being feature-complete, as it features a grand total of 60 FIXMEs and TODOs but anyway, it's still a good start. I developed this decoder in the Serenity way, I just try to decode a specific image while staying as close as possible to the specification. Considering that the format supports a lot of options, and that we basically support only one possibility for each of them, I'm pretty sure that we can only decode the image I've developed this decoder for. Which is: 0aff 3ffa 9101 0688 0001 004c 384b bc41 5ced 86e5 2a19 0696 03e5 4920 8038 000b
This commit is contained in:
parent
bb834ed765
commit
e8a63eeb0e
Notes:
sideshowbarker
2024-07-17 04:41:05 +09:00
Author: https://github.com/LucasChollet Commit: https://github.com/SerenityOS/serenity/commit/e8a63eeb0e Pull-request: https://github.com/SerenityOS/serenity/pull/19589 Reviewed-by: https://github.com/ADKaster ✅ Reviewed-by: https://github.com/nico
@ -38,6 +38,7 @@ set(SOURCES
|
||||
ImageFormats/ICOLoader.cpp
|
||||
ImageFormats/ImageDecoder.cpp
|
||||
ImageFormats/JPEGLoader.cpp
|
||||
ImageFormats/JPEGXLLoader.cpp
|
||||
ImageFormats/JPEGWriter.cpp
|
||||
ImageFormats/PBMLoader.cpp
|
||||
ImageFormats/PGMLoader.cpp
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include <LibGfx/ImageFormats/ICOLoader.h>
|
||||
#include <LibGfx/ImageFormats/ImageDecoder.h>
|
||||
#include <LibGfx/ImageFormats/JPEGLoader.h>
|
||||
#include <LibGfx/ImageFormats/JPEGXLLoader.h>
|
||||
#include <LibGfx/ImageFormats/PBMLoader.h>
|
||||
#include <LibGfx/ImageFormats/PGMLoader.h>
|
||||
#include <LibGfx/ImageFormats/PNGLoader.h>
|
||||
@ -38,6 +39,7 @@ static OwnPtr<ImageDecoderPlugin> probe_and_sniff_for_appropriate_plugin(Readonl
|
||||
{ PPMImageDecoderPlugin::sniff, PPMImageDecoderPlugin::create },
|
||||
{ ICOImageDecoderPlugin::sniff, ICOImageDecoderPlugin::create },
|
||||
{ JPEGImageDecoderPlugin::sniff, JPEGImageDecoderPlugin::create },
|
||||
{ JPEGXLImageDecoderPlugin::sniff, JPEGXLImageDecoderPlugin::create },
|
||||
{ DDSImageDecoderPlugin::sniff, DDSImageDecoderPlugin::create },
|
||||
{ QOIImageDecoderPlugin::sniff, QOIImageDecoderPlugin::create },
|
||||
{ TinyVGImageDecoderPlugin::sniff, TinyVGImageDecoderPlugin::create },
|
||||
|
1758
Userland/Libraries/LibGfx/ImageFormats/JPEGXLLoader.cpp
Normal file
1758
Userland/Libraries/LibGfx/ImageFormats/JPEGXLLoader.cpp
Normal file
File diff suppressed because it is too large
Load Diff
38
Userland/Libraries/LibGfx/ImageFormats/JPEGXLLoader.h
Normal file
38
Userland/Libraries/LibGfx/ImageFormats/JPEGXLLoader.h
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Copyright (c) 2023, Lucas Chollet <lucas.chollet@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AK/MemoryStream.h>
|
||||
#include <LibGfx/ImageFormats/ImageDecoder.h>
|
||||
|
||||
namespace Gfx {
|
||||
|
||||
class JPEGXLLoadingContext;
|
||||
|
||||
class JPEGXLImageDecoderPlugin : public ImageDecoderPlugin {
|
||||
public:
|
||||
static bool sniff(ReadonlyBytes);
|
||||
static ErrorOr<NonnullOwnPtr<ImageDecoderPlugin>> create(ReadonlyBytes);
|
||||
|
||||
virtual ~JPEGXLImageDecoderPlugin() override;
|
||||
|
||||
virtual IntSize size() override;
|
||||
virtual bool is_animated() override;
|
||||
virtual size_t loop_count() override;
|
||||
virtual size_t frame_count() override;
|
||||
virtual size_t first_animated_frame_index() override;
|
||||
virtual ErrorOr<Optional<ReadonlyBytes>> icc_data() override;
|
||||
|
||||
virtual ErrorOr<ImageFrameDescriptor> frame(size_t index, Optional<IntSize> ideal_size = {}) override;
|
||||
|
||||
private:
|
||||
JPEGXLImageDecoderPlugin(NonnullOwnPtr<FixedMemoryStream>);
|
||||
|
||||
OwnPtr<JPEGXLLoadingContext> m_context;
|
||||
};
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user