Просмотр исходного кода

LibGfx/JPEG2000: Decode tile-part QCD and QCC marker segment data

Nico Weber 1 год назад
Родитель
Сommit
dbe179f0d5
1 измененных файлов с 9 добавлено и 1 удалено
  1. 9 1
      Userland/Libraries/LibGfx/ImageFormats/JPEG2000Loader.cpp

+ 9 - 1
Userland/Libraries/LibGfx/ImageFormats/JPEG2000Loader.cpp

@@ -469,6 +469,8 @@ struct TilePartData {
 };
 
 struct TileData {
+    Optional<QuantizationDefault> qcd;
+    Vector<QuantizationComponent> qccs;
     Vector<TilePartData> tile_parts;
 };
 
@@ -660,7 +662,13 @@ static ErrorOr<void> parse_codestream_tile_header(JPEG2000LoadingContext& contex
         case J2K_PLT:
         case J2K_COM: {
             auto marker = TRY(read_marker_at_cursor(context));
-            if (marker.marker == J2K_COM) {
+            if (marker.marker == J2K_QCD) {
+                if (tile.qcd.has_value())
+                    return Error::from_string_literal("JPEG2000ImageDecoderPlugin: Multiple QCD markers in tile header");
+                tile.qcd = TRY(read_quantization_default(marker.data.value()));
+            } else if (marker.marker == J2K_QCC) {
+                tile.qccs.append(TRY(read_quantization_component(marker.data.value(), context.siz.components.size())));
+            } else if (marker.marker == J2K_COM) {
                 tile_part.coms.append(TRY(read_comment(marker.data.value())));
             } else {
                 // FIXME: These are valid main header markers. Parse contents.