Add new comment

LibRaw 202202 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.