LibRaw 202502 snapshot

LibRaw 202502 snapshot is just published in our Github repository. Changes are:
Camera format support

  • OM System 14-bit high-resolution files.
    Note: the new decoder supports old (12-bit) Olympus/OM-System files
    too and slightly faster (about 5%), so the old one is removed.
  • Nikon NEFX (4/8/16/32 shots in PixelShift mode merged via Nikon software)

Camera support

  • Canon EOS R5 C
  • Hasselblad CFV-50c, CFV-100c
  • Leica SL3
  • Nikon Z f (standard/lossless compression only)
  • Olympus/OM System OM-1 Mark II, TG-7
  • Pentax KF, K III Monochrome
  • Samsung S23+, S23 Ultra
  • Sony A9-III, ILX-LR1

API Changes/improvements

  • Exif callback is called from CR3 parser before calling parse_makernotes()
    parameters are the same as usual, except tag parameter value.
    tag values:
    (0x70000 | 0x927c) - if called from CMT3 tag
    (__type << 20) | 0x80000 | 0x927c - if called from CTMD record with type __type
  • Exif callback is called for Sony SR2 tag with tag parameter set to 0x60000 | tagID
  • Makernotes callback implemented for TIFF-like (IFD structure makernotes)
    Callback is very similar to exif_callback.
    To set callback use LibRaw::set_makernotes_handler(exif_parser_callback cb, void *data)
    Callback is called (if set) with tag value set to (uptag << 16)|makernotes_tag
    where uptag is
    • EXIF tag: if called from EXIF makernotes parser
    • 0: if called from CR3 metadata parser
    • tag-ID if parse_makernotes() is called from some specific tag context (see parse_makernotes calls in source code).
  • New metadata field makernotes.pentax.DynamicRangeExpansion[4]
    if DynamicRangeExpansion[1] is non-zero, DynamicRangeExpansion[0] should be added
    to BaselineExposure
  • New API call (static) int LibRaw::simplify_make_model(unsigned * mkindex, char *mkbuf, unsigned mkbuf_size, char *modelbuf, unsigned modelbuf_size):
    This call can be used to simplify/standardize vendor name/model received
    from external source (e.g. EXIF block in JPEG file).
    mkindex: pointer to received maker index (LibRaw_CAMERAMAKER_...)
    mkbuf, mkbuf_size: buffer with make string, buffer size
    modelbuf, modelbuf_size: buffer with model string.
    simplify_make_model(..) simplifies/re-writes vendor name/model in place, in provided buffers.
    return values:
    0 - mkindex is set (if non-null pointer provided), data simplified;
    1 - mkindex is not set, while some data processing is done;
    -1 - incorrect parameters;
  • All file offsets are 64-bit now;
    Note: data callback signature has changed
  • New LibRaw_abstract_datastream (and derived classes) methods:
    bool is_buffered() - returns current buffering mode (if implemented);
    void buffering_on() - turns buffering on.
    These methods complement the (existing) buffering_off() method
  • New bits in imgdata.process_warnings:
    LIBRAW_WARN_DNG_NOT_PROCESSED - RAW file was passed to DNG SDK, but not processed.
    LIBRAW_WARN_DNG_NOT_PARSED - DNG parse error or non-valid DNG at valid_for_dngsdk() stage
  • New compile-time define: LIBRAW_MAX_CR3_RAW_FILE_SIZE
    Default: value of LIBRAW_MAX_NONDNG_RAW_FILE_SIZE
    CR3 file size is limited by 4GB (max MP4 container size), so it may be needed
    to set the limit above non-DNG 2GB file size limit.

Minor improvements

  • Adobe DNG SDK 1.7.1 compatibility
  • restored compatibility with pre-1.7 Adobe DNG SDK
  • RawSpeed1/3: do not pass files larger then 2GB
  • Jpeg XL preview file writer
  • Jpeg XL preview support in simple_dcraw -E/-e
  • DNG 1.7 JpegXL DNG/GoPro DNG: do not refuse files at open_file() if LibRaw is not built with DNG SDK/GoPro SDK
    Note: LibRaw::get_decoder_info() will return decoder flag bit set to LIBRAW_DECODER_UNSUPPORTED_FORMAT if
    LibRaw is not built with corresponding SDK.
  • All implicit type conversion *excluding INT64<=>int/uint* conversions are made explicit
    to remove C++ compiler type conversion warnings.
  • libraw_dng_stream: underlying LibRaw_abstract_datastream buffering restored in
    destructor call.

Bug/problem fixes

  • Fix for PanasonicV8 decoder compile with OpenMP
  • Fix for incorrect 32-bit shift in Pana8 decoder generated by gcc11+
  • DNG SDK Integration: clear imdata.color.linear_max[] if Stage3 opcodes are applied.
  • Fixed possible buffer overrun in LibRaw::remove_trailing_spaces call
  • CR3 decoder: workaround for possible incorrect generation of 64-bit code
  • Improved Sony metadata processing
  • fixed possible static table read overrun (if specially crafted image
    data passed to LibRaw)
  • Fix for monochrome DNG files compressed as 2-color component LJPEG
  • Fixed integer overflow in largest DNG frame selection code
  • Additional out-of range checks to better handle specially crafted files
  • Prevent out-of-buffer access in phase_one_correct()
  • Prevent one-off read in Fuji WB table parsing
  • Prevent one-off read in phase_one_correct()
  • Do not apply Canon metadata crop values to DNG files
  • Adjust profile_length to allocated data size.

Comments

Support for Nikon Z50II?

Hi!

Does NEFX-support include the NEF-Format of the Nikon Z50II? Topaz doesn't open its raw files and their support claims that this would be due to libraw not supporting the new format.

Do you have a date already in mind for the release 0.22?

Cheers, Mat

Dear Mat: please direct Topaz

Dear Mat: please direct Topaz support/team to our official support E-mail (info@libraw.org)

We do not have the ability (either technical or otherwise) to provide direct support to users of programs from other vendors, but we will be happy to provide support to the vendor itself.

-- Alex Tutubalin @LibRaw LLC

Thanks for the quick response

Thanks for the quick response!

However, may I return to my questions (which were about libraw, not Topaz): When will the library be able to cope with NEF files from the Nikon Z50II? That model is not on the list of new cameras, nor formats, which is somewhat worrying, as the Z50II already is a couple of months on the market. Or is this part of NEFX (or does it come along with the support for the Z f)?

Cheers!

Nikon NEFX is 4/8/16/32 shots

Nikon NEFX is 4/8/16/32 shots in PixelShift mode merged via Nikon software.

-- Alex Tutubalin @LibRaw LLC