mirror of
https://github.com/RGBCube/serenity
synced 2025-06-01 08:18:12 +00:00
LibGfx/JPEG: Support for images with four components
This patch adds support for properly read images with four components, basically CMYK or YCCK. However, we still lack color spaces transformations for this type of image. So, it just postpones failure.
This commit is contained in:
parent
261d36351d
commit
9cbed7b359
1 changed files with 11 additions and 5 deletions
|
@ -115,6 +115,8 @@ struct Macroblock {
|
|||
i32 cr[64] = { 0 };
|
||||
i32 b[64];
|
||||
};
|
||||
|
||||
i32 k[64] = { 0 };
|
||||
};
|
||||
|
||||
struct MacroblockMeta {
|
||||
|
@ -197,7 +199,7 @@ struct ICCMultiChunkState {
|
|||
|
||||
struct Scan {
|
||||
// B.2.3 - Scan header syntax
|
||||
Vector<ScanComponent, 3> components;
|
||||
Vector<ScanComponent, 4> components;
|
||||
|
||||
u8 spectral_selection_start {}; // Ss
|
||||
u8 spectral_selection_end {}; // Se
|
||||
|
@ -242,12 +244,12 @@ struct JPEGLoadingContext {
|
|||
|
||||
Scan current_scan;
|
||||
|
||||
Vector<Component, 3> components;
|
||||
Vector<Component, 4> components;
|
||||
RefPtr<Gfx::Bitmap> bitmap;
|
||||
u16 dc_restart_interval { 0 };
|
||||
HashMap<u8, HuffmanTableSpec> dc_tables;
|
||||
HashMap<u8, HuffmanTableSpec> ac_tables;
|
||||
Array<i32, 3> previous_dc_values {};
|
||||
Array<i32, 4> previous_dc_values {};
|
||||
MacroblockMeta mblock_meta;
|
||||
OwnPtr<FixedMemoryStream> stream;
|
||||
|
||||
|
@ -316,8 +318,12 @@ static inline i32* get_component(Macroblock& block, unsigned component)
|
|||
return block.y;
|
||||
case 1:
|
||||
return block.cb;
|
||||
default:
|
||||
case 2:
|
||||
return block.cr;
|
||||
case 3:
|
||||
return block.k;
|
||||
default:
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1020,7 +1026,7 @@ static ErrorOr<void> read_start_of_frame(Stream& stream, JPEGLoadingContext& con
|
|||
set_macroblock_metadata(context);
|
||||
|
||||
auto component_count = TRY(stream.read_value<u8>());
|
||||
if (component_count != 1 && component_count != 3) {
|
||||
if (component_count != 1 && component_count != 3 && component_count != 4) {
|
||||
dbgln_if(JPEG_DEBUG, "Unsupported number of components in SOF: {}!", component_count);
|
||||
return Error::from_string_literal("Unsupported number of components in SOF");
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue