diff --git a/FORMATS.md b/FORMATS.md index cfd4192b..1b8c5ca8 100644 --- a/FORMATS.md +++ b/FORMATS.md @@ -245,7 +245,10 @@ Indexed: 1-bit, 8-bit. RGB: 24-bit, 48-bit.

- Content: Static. + Content: Static, Meta data. +

+ Special properties: Key: "pnm-ascii". Description: True if the image pixels are encoded in ASCII mode. + Possible values: bool. - Unsupported diff --git a/src/sail-codecs/pnm/helpers.c b/src/sail-codecs/pnm/helpers.c index 8148514a..05490c80 100644 --- a/src/sail-codecs/pnm/helpers.c +++ b/src/sail-codecs/pnm/helpers.c @@ -167,3 +167,26 @@ enum SailPixelFormat pnm_private_rgb_sail_pixel_format(enum SailPnmVersion pnm_v } } +sail_status_t pnm_private_store_ascii(enum SailPnmVersion pnm_version, struct sail_hash_map *special_properties) { + + struct sail_variant *variant; + SAIL_TRY(sail_alloc_variant(&variant)); + + switch (pnm_version) { + case SAIL_PNM_VERSION_P1: + case SAIL_PNM_VERSION_P2: + case SAIL_PNM_VERSION_P3: { + sail_set_variant_bool(variant, true); + } + + default: { + sail_set_variant_bool(variant, false); + } + } + + sail_put_hash_map(special_properties, "pnm-ascii", variant); + + sail_destroy_variant(variant); + + return SAIL_OK; +} diff --git a/src/sail-codecs/pnm/helpers.h b/src/sail-codecs/pnm/helpers.h index dcec56e9..0b5db135 100644 --- a/src/sail-codecs/pnm/helpers.h +++ b/src/sail-codecs/pnm/helpers.h @@ -56,4 +56,6 @@ SAIL_HIDDEN sail_status_t pnm_private_read_pixels(struct sail_io *io, struct sai SAIL_HIDDEN enum SailPixelFormat pnm_private_rgb_sail_pixel_format(enum SailPnmVersion pnm_version, unsigned bpc); +SAIL_HIDDEN sail_status_t pnm_private_store_ascii(enum SailPnmVersion pnm_version, struct sail_hash_map *special_properties); + #endif diff --git a/src/sail-codecs/pnm/pnm.c b/src/sail-codecs/pnm/pnm.c index 886cf459..db58915c 100644 --- a/src/sail-codecs/pnm/pnm.c +++ b/src/sail-codecs/pnm/pnm.c @@ -207,6 +207,14 @@ SAIL_EXPORT sail_status_t sail_codec_load_seek_next_frame_v8_pnm(void *state, st image_local->source_image->pixel_format = pixel_format; image_local->source_image->compression = SAIL_COMPRESSION_NONE; + + if (pnm_state->load_options->options & SAIL_OPTION_META_DATA) { + SAIL_TRY_OR_CLEANUP(sail_alloc_hash_map(&image_local->source_image->special_properties), + /* cleanup */ sail_destroy_image(image_local)); + SAIL_TRY_OR_CLEANUP(pnm_private_store_ascii(pnm_state->version, + image_local->source_image->special_properties), + /* cleanup */ sail_destroy_image(image_local)); + } } image_local->width = w; diff --git a/src/sail-codecs/pnm/pnm.codec.info.in b/src/sail-codecs/pnm/pnm.codec.info.in index 6e4e991a..4e3dcf47 100644 --- a/src/sail-codecs/pnm/pnm.codec.info.in +++ b/src/sail-codecs/pnm/pnm.codec.info.in @@ -11,7 +11,7 @@ extensions=pbm;pgm;ppm;pnm mime-types=image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-portable-anymap [load-features] -features=STATIC;SOURCE-IMAGE +features=STATIC;META-DATA;SOURCE-IMAGE tuning= [save-features]