2023-12-19  Alex Tutubalin <lexa@lexa.ru>

 LibRaw 0.21.2-Release

  * New compile-defined limit LIBRAW_MAX_PROFILE_SIZE_MB: 
       limits allocation/read size for embedded color profile (default: 256Mb)

  * Embedded color profile allocation/read size: limited by input file size.

  * Multiple fixes (mostly inspired by oss-fuzz) to improve library stability and/or input checks.

  * raw-identify: use fallback if PATH_MAX not available   

  * Disabled color conversion for Canon 16-bit thumbnails

  * docs/changelog: explained the case when no thumbnail is found in specific file

  * swapXX renamed to libraw_swapXX to avoid name conflict

  * better striped thumbnails handling

 
2023-01-05  Alex Tutubalin <lexa@lexa.ru>
 LibRaw 0.21.1-Release
 * fixed typo in panasonic metadata parser

2022-12-18  Alex Tutubalin <lexa@lexa.ru>
 LibRaw 0.21-Release

 * Multiple fixes inspired by oss-fuzz project

2022-07-01  Alex Tutubalin <lexa@lexa.ru>

 LibRaw 0.21-Beta1

 == Camera format support ==
 * Phase One/Leaf IIQ-S v2 support
 * Canon CR3 filmrolls
 * Canon CRM (movie) files
 * Tiled bit-packed (and 16-bit unpacked) DNGs
 * (non-standard) Deflate-compressed integer DNG files are allowed

== Camera support ==

 * Canon EOS R3, R7 and R10
 * Fujifilm X-H2S, X-T30 II
 * OM System OM-1
 * Leica M11
 * Sony A7-IV (ILCE-7M4)
 * DJI Mavic 3
 * Nikon Z9: standard compression formats only

 == Multiple (resolution) thumbnails support ==
 
 * New imgdata.thumbs_list data item with data fields:

   int thumbcount: thumbnail count  
   libraw_thumbnail_item_t thumblist[LIBRAW_THUMBNAIL_MAXCOUNT]: list  of thumbnails

   libraw_thumbnail_item_t fields:

     enum LibRaw_internal_thumbnail_formats tformat: internal thumbnail format
        (this is not PPM/JPEG, but internal type related to thumbnail reading/unpacking method)

     ushort twidth, theight: thumbnail image size.

     ushort tflip: image rotation (see notes below)
    
     unsigned tlength: on-disk data size (not uncompressed for compressed formats)
     
     unsigned tmisc: bit depth and channel count:  (color << 5) | bitsperpixel
 
     INT64 toffset: Thumbnail data offset in file 

  Notes:
    -  Only TIFF-based and CR3 files are parsed for thumbnail list, other formats will have
       thumbcount = 1.

    - If no thumbnails are found in file: thumbcount will be set to 1 and
      thumblist[0] will be initialized with data from thumbnail fields, 
      so LibRaw::unpack_thumb_ex(0) will do the same as LibRaw::unpack_thumb()

    -  Thumbnail image size may be unknown (not recorded in metadata), in this case twidth and theight are zero.
       Usually small(er) thumbnails will always have twidth/theight filled, while largest one may have these fields set to zero.

    -  Thumbnail rotation (tflip) is filled only for TIFF-based RAWs (if Orientation tag is not present in IFD, default zero value is used)
       For non-tiff images, tflip is initialized to 0xffff (not known...)

    - There is no code to select thumbnail based on some criteria (e.g. minimal resolution), it is left to user to implement such a criteria, if needed
      (see unpack_thumb_ex() call below)

    - If you want to get largest possible thumbnail: just use old unpack_thumb() call to get it.

  * new API call:  LibRaw::unpack_thumb_ex(int i):
    Unpacks i-th thumbnail if it exists into imgdata.thumbnail structure
    i should be non-zero and less then imgdata.thumbs_list.thumbcount.  
     
  * samples/simple_dcraw.cpp: new -E command line switch to extract all thumbnails from input file(s)

 == (Experimental) RawSpeed "version 3" (develop branch) support. ==

   Build with -DUSE_RAWSPEED3, see details in RawSpeed3/README.md

   LibRaw::capabilities will set bit LIBRAW_CAPS_RAWSPEED3 if compiled w/
   RawSpeed-v3 support

   If file was processed (or tried to process) via RawSpeed-v3, these bits
   are raised in imgdata.process_warnings:
    LIBRAW_WARN_RAWSPEED3_PROCESSED - processed via RawSpeed v3
    LIBRAW_WARN_RAWSPEED3_PROBLEM - not processed (due to exception in RawSpeed library)
    LIBRAW_WARN_RAWSPEED3_UNSUPPORTED - unsupported file
    LIBRAW_WARN_RAWSPEED3_NOTLISTED - file not listed in cameras.xml data

  RawSpeed-v3 support is controlled via libraw_decoder_info.t->flags 
  (LIBRAW_DECODER_TRYRAWSPEED3 bit).
  The bit is set for:
    - lossless jpeg decoder
    - Canon sRAW decoder
    - lossless compressed and packed-compressed DNG decoders
    - Pentax decoder
    - Nikon (compressed) decoder
    - Phase One Compressed and Hasselblad/Compressed decoders
    - bitpacked decoder
    - Panasonic (old 12-bit compression) decoder
    - Olympus decoder
    - Sony ARW (v1 and v2) decoders
    - Samsung (version 1) decoder

 * (Experimental) Fine control of RawSpeed version selection/use.
   To enable, build LibRaw with -DUSE_RAWSPEED_BITS
   LibRaw::capabilities will set bit LIBRAW_CAPS_RAWSPEED_BITS if compiled
   with this flag.
   If enabled: 
     imgdata.rawparams.use_rawspeed becomes bit-field (instead of 0/1 off/on) 
     with bits:
        LIBRAW_RAWSPEEDV1_USE - use RawSpeed Version 1 (if compiled  with)
        LIBRAW_RAWSPEEDV1_FAILONUNKNOWN - do not process unknown files 
             (not listed in RawSpeed v1 camera definitions file)
        LIBRAW_RAWSPEEDV1_IGNOREERRORS - ignore mirror decoding errors (out of range data,etc)

        LIBRAW_RAWSPEEDV3_USE - Use RawSpeed Version 3 (if compiled with)
        LIBRAW_RAWSPEEDV3_FAILONUNKNOWN - do not process unknown files
        LIBRAW_RAWSPEEDV3_IGNOREERRORS - ignore minor decoding errors
 
 == Misc changes/improvements ==
 * New compile time define LIBRAW_OWN_SWAB
   to use on platforms without swab() in C/C++ runtime

 * New imgdata.rawparams.options bit: LIBRAW_RAWOPTIONS_CANON_IGNORE_MAKERNOTES_ROTATION
   If set: image orientation is set based on TIFF/IFD0:Orientation tag,
   makernotes orientation data is ignored

 * Nikon makernotes: read NEFCompression tag for HE/HE* files

 * Nikon orientation tag: more fixed offsets for known cameras

 * Adobe DNG SDK 1.6 support (meaning, just an additional patch for GPR SDK)

 * removed LibRaw::memerr(),  memory allocation failures are already handled
   in LibRaw_memmgr::*alloc w/ exception thrown

 * removed memory error callback, out-of-memory error should be handled via
   returned error code check, all related parameters (e.g. LibRaw constructor
   option to not set such callback) is also removed

 * imgdata.params.adjust_maximum_thr is settable via C-API libraw_set_adjust_maximum_thr(..)

 * New rawoptions/processing flags for DNG processing if compiled 
   with Adobe DNG SDK:
   LIBRAW_RAWOPTIONS_DNG_STAGE2_IFPRESENT,LIBRAW_RAWOPTIONS_DNG_STAGE3_IFPRESENT
   If these flag(s) are set: Stage2/Stage3 processing will be performed
   only if OpcodeList2/OpcodeList3 tags are present in the input DNG file
   Old (hard) flags (LIBRAW_RAWOPTIONS_DNG_STAGE2 and 
   LIBRAW_RAWOPTIONS_DNG_STAGE3) are not removed and will force Stage2/3
   processing if set (regardless of input file tags)

 * New imgdata.rawparams.options bit: LIBRAW_RAWOPTIONS_DNG_ADD_MASKS
   If set: DNG Transparency Masks will be extracted (if selected via shot_select)

 * New decoder flag: LIBRAW_DECODER_UNSUPPORTED_FORMAT

 == Bugs fixed ==

 * Fixed possible out-of-buffer read in Nikon orientation tag parser

 * Windows datastream: fixed logic errors (not showing up in real life)

 * Out-of-range read-only array access in postprocessing if output_color is set to 0 (raw color)

 * Minolta Z2 was not recognized correctly on 32-bit systems
 
 * Fixed possible buffer overflow in Kodak C330 decoder

 * dcraw_process(): check for buffer allocation results to avoid NULL deref

2021-10-11  Alex Tutubalin <lexa@lexa.ru>
 * Camera support:
   Apple iPhone 13 Pro
   GoPro HERO10 (if compiled w/ USE_GPR_SDK)
   Ricoh GR III
   Sony Xperia 1 III

 * Fuji RAF files: XMP block extraction

 * Fixed a typo in LIBRAW_OPTIONS_* flag names
   (was LIBRAW_OPIONS, old flags names not removed due to compatibility)

 * samples/raw-identify.cpp:  -v flag documented in usage print.

2021-09-14  Alex Tutubalin <lexa@lexa.ru>
 * Camera support:
   Fujifilm GFX 50S II
   Nikon Z fc
   Sony A7R-IIIA (ILCE-7RM3A), A7R-IVA (ILCE-7RM4A)

 * API/datastruct Changes:
  - imgdata.params.shot_select moved to imgdata.rawparams.shot_select
   (because this is decode-time option, not postprocessing option)

  - libraw_open_bayer(...) added to C-API

  - imgdata.makernotes.canon: separate SensorLeftBorder,SensorTopBorder....
    (and many other datafields) are united in libraw_area_t (rectangle)
    groups for crop areas and optical black areas.

 * src/libraw_cxx.cpp completely removed from source tree to not confuse users.
   (also all mentions are removed from Makefiles)

 * Better Olympus makernotes parsing: LiveND mode, Panorama mode tags.

 * clang-cl compatibility:
  - defines _MSC_VER, but _forceinline is not supported
  - warnings eliminated in Windows buffered datastream

 * Canon/12-bit files: adjust color.linear_max and makernotes.canon values
   to match data range.

2021-08-04  Alex Tutubalin <lexa@lexa.ru>
 * Camera support:
   Sony ZV-E10
 * DNG/Floating point: additional metadata check to refuse ambiguous/corrupted files.
 * DNG/Floating point: correct handling of striped files (never seen in wild)
 * Rawspeed support: disallow Nikon D6/Compressed processing
 * Bug fixed: raw_inset_crops[] ctop/cheight was not adjusted right if vendor-specified 
   ctop equals to 1.

2021-07-20  Alex Tutubalin <lexa@lexa.ru>
 * Camera support:
   Olympus E-P7

2021-07-08  Alex Tutubalin <lexa@lexa.ru>
 * Camera support:
   Panasonic GH5 Mark II
   Pentax K3 Mark III
   several phones w/ DNG files (checked)
 
 * Camera format support:  Panasonic v6/12 bit
 * Compile-time raw size limits implemented:
    LIBRAW_MAX_NONDNG_RAW_FILE_SIZE - max file size for non-DNG files (default: 2GB - 1 byte)
    LIBRAW_MAX_DNG_RAW_FILE_SIZE - max DNG file size limit (4GB-1 if compiled w/ DNG SDK, 2GB-1 otherwise)
 
 * ACES output: color conversion changed to provide D65 white point

 * Fix for Canon 5D Mark II/sRAW1 incorrect camera provided crop   

2021-05-07  Alex Tutubalin <lexa@lexa.ru>
 * Camera support:
   Fujifilm GFX 100S, X-E4: improved color data
   Canon EOS M50 Mark II was supported but not listed in camera list
   DJI Mavic Air 2S
   GOPRO Hero9
 * Support for RaspberryPi HQ camera (if compiled w/  USE_6BY9RPI)
 * Improved support for RPi V1/V2 cameras:
   - white balance data extraction
   - color matrix extracted to imgdata.color.cmatrix to use with
     use_camera_matrix.
   - full-size thumbnail/preview support for JPEG+RAW files (raspistill -r)
 * Fuji GFX100/GFX100S: PixelShift metadata extraction.
 * RawSpeed (master): fixed bug in old Samsung/compressed decoder,
   apply this patch to RawSpeed: RawSpeed/rawspeed.samsung-decoder.patch
 * DCI-P3 and Rec 2020 output colorspaces
 * Eliminated multiple signed/unsigned mismatch warnings (reported by gcc11)
 * fixed possible 1-byte stack underrun while handling text tags with zero length
 * XMP block size in CR3 files limited to 1MB
 * Preview block size in CR3 files limited to 100MB
 * Fixed wrong handling of linear DNG files created from Pentax out-of-camera 
   DNGs

2021-02-18  Alex Tutubalin <lexa@lexa.ru>
 * Improved Phase One Compressed defects masking, thanks to Alexey Danilchenko
 * Sony ILCE-1/Lossless compressed support
 
2021-02-16  Alex Tutubalin <lexa@lexa.ru>
 * Additional fields in libraw_internal_data.unpacker_data:
   - INT64: exif_offset: base offset of 1st EXIF IFD in file
   - INT64: ifd0_offset: base offset of 1st TIFF IFD (IFD0) in file
   - unsigned cr3_exif_length, cr3_ifd0_lenght : CR3-specific length of
     exif and ifd0 sections.

2021-02-08  Alex Tutubalin <lexa@lexa.ru>
 * CRX (CR3) decoder: fixed typo in constant; this does not affect any
   known still photo (CR3) sample(s), but allows to use the decoder with 
   some video (CRM) files.

 * Imported user-contributed improvements to OpenMP postprocessing
   (AHD and X-Trans demosaic)

 * Bugfix: overwrite (wrong) TIFF/Orientation tag value with Metadata/Camera Orientation
   value for EOS 40D only.

2021-02-04  Alex Tutubalin <lexa@lexa.ru>
 * imgdata.sizes.raw_inset_crop rearranged:
   now it is imgdata.sizes.raw_inset_crops[2]:
    - item at [0] is the same as imgdatra.sizes.raw_inset_crop in previous 
      versions
    - item at [1] is 'user crop', in particular:
       -- set by DNG  DefaultUserCrop tag
       -- or set via raw aspect ratio tags (e.g. 16:9 aspect on Fujifilm cameras)
          raw_inset_crops[1] is filled only if aspect ratio tags provides different
          aspect ratio compared to raw_inset_crops[0].

   There are no flags to check if raw_inset_crops[Nth] is filled; to see if it is filled check 
   the values of:
     ctop/cleft < 0xffff (0xffff => standard values if not initialized)
     ctop+cheight <= sizes.raw_height
     cleft+cwidth <= sizes.raw_width

   Note: raw_inset_crops may be fooled by metadata (makernotes), use some correctness check before use.

 * LIBRAW_RAWOPTIONS_USE_DNG_DEFAULT_CROP processing flag removed,
   DNG DefaultCrop* tags are parsed into raw_inset_crops[0]

 * new LibRaw call LibRaw::adjust_to_raw_inset_crop(unsigned mask, float maxcrop = 0.55f)
   Promotes imgdata.sizes.raw_inset_crops[] values to
   imgdata.sizes.*margin and imgdata.sizes.width/height fields

   mask: if bit 1 is set: prefer raw_inset_crops[1] 
         if bit 0 is set: prefer raw_inset_crops[0] 

   maxcrop: limits crop to not less than (original width/height)*maxcrop; if raw_inset_crops[i]
   data results in tighter crop, than this item is ignored.

   return value: index in raw_inset_crops[] used increased by one, so
    0: no changes made
    1: [0]th data used
    2: [1]th data used
   
  Note: this call SHOULD be used after LibRaw::unpack(), otherwise black level
  calculation from masked area may be fooled resulting in wrong black levels.

2021-01-21  Alex Tutubalin <lexa@lexa.ru>

 == LibRaw snapshot 202101 ==

 = Camera format support: =
   Lossy compressed CR3 files
   Lossy compressed RAF files
   Uncompressed floating point DNG files (16-24-32 bit)
   Deflate compressed striped DNG files
   XMP and HEIF-preview extraction from CR3 files

 =  Camera support =
   Apple iPhone 12 Max, iPhone 12 Max Pro
   Canon EOS R5, EOS R6, EOS 850D, EOS-1D X Mark III (lossy compressed files)
   FujiFilm X-S10
   Hasselblad CFV II 50C",
   Leica M10-R, Q2 Monochrom, S3, SL2-S
   Nikon Z 5, Z 6 II, Z 7 II
   Olympus E-M10 Mark IV
   Panasonic DC-G100 / G110, DC-S5
   Sony ILCE-7C (A7C), ILCE-7SM3 (A7S III)
   Zeiss ZX1
   Plus multiple DNG-recording cameraphones/drones/etc.

 = Almost dropped camera support: =
   Old/partially supported video/cinema cameras support is available only if
   LibRaw is compiled with USE_OLD_VIDEOCAMS defined (this #define is
   converted internally to LIBRAW_OLD_VIDEO_SUPPORT defined).
   This affects:
     Arri cameras
     Canon C500
     RED Cine cameras
   We plan to keep the support in LibRaw 0.21 (if compiled with define 
   mentioned above) and completely drop the support after 0.21.
   If you're using LibRaw to decode RED Cine files, see LibRaw*datastreams
   section below (in short: you'll need to use old fstream-based datastream 
   under Windows).
   Cinema DNG files are not affected by this.

 = API/ABI changes =

  * Decoding parameters
    imgdata.params is split into
      imgdata.rawparams: parameters used for metadata/raw data decoding
      imgdata.params:  parameters used at postprocessing stage

    imgdata.params.raw_processing options are split into two sub-options sets
      imgdata.rawparams.options: raw processing flags, useful for normal 
      operations
      imgdata.rawparams.specials: special modes (e.g decoding only delta 
      pixels from Sony ARW)

   Old LIBRAW_PROCESSING_* flags are renamed to LIBRAW_RAWOPTIONS_* and 
    LIBRAW_RAWSPECIAL*
   LIBRAW_PROCESSING_DP2Q_INTERPOLATE... flags are renamed to 
   LIBRAW_RAWSPECIAL_NODP2Q_INTERPOLATE with inverted meaning (with the 
   goal to have zero imgdata.rawparams.specials in normal use).

 * New processing flag LIBRAW_RAWOPTIONS_PROVIDE_NONSTANDARD_WB
   If set (default is not), and when applicable, color.cam_mul[] and
   color.WB_Coeffs/WBCT_Coeffs will contain WB settings for a
   non-standard workflow.
   Right now only Sony DSC-F828 is affected: camera-recorded white balance
   can't be directly applied to raw data because WB is for RGB, while raw
   data is RGBE.

 * New processing flag: LIBRAW_RAWOPTIONS_CAMERAWB_FALLBACK_TO_DAYLIGHT
   If set (default is not), LibRaw::dcraw_process() will fallback to
   daylight WB (excluding some very specific cases like Canon D30).
   This is how LibRaw 0.19 (and older) works.
   If not set: LibRaw::dcraw_process() will fallback to calculated auto WB if
   camera WB is requested, but appropriate white balance was not found in
   metadata.

  * Removed LIBRAW_PROCESSING_SKIP_MAKERNOTES processing flag: with new
    Windows(-handle) datastreams metadata parsing performance is enough
    to not skip makernotes parsing.

  * new output parameter: imgdata.params.output_flags and new
    enum LibRaw_output_flags
    Right now the only flag is implemented: LIBRAW_OUTPUT_FLAGS_PPMMETA
    setting it will result into metadata written to PPM/PGM output file

  * LibRaw_*datastreams change and corresponding open_file() parameters change
   LibRaw_file_datastream (based on iostreams) is moved under
      #ifdef LIBRAW_USE_DEPRECATED_IOSTREAMS_DATASTREAM
    Standard datastreams are:
     LibRaw_bigfile_datastream (FILE* based) for POSIX systems
     LibRaw_bigfile_buffered_datastream - for use with Win32 syscalls
    API changes:
    if LIBRAW_USE_DEPRECATED_IOSTREAMS_DATASTREAM is NOT defined, than 
    LibRaw::open_file() and similar calls drops the last INT64 max_buffered_sz 
    parameter which defines automatic selection between iostreams and 
    FILE* based datasteams.

    Note: LibRaw_bigfile_buffered_datastream does NOT implements 
    make_jas_stream() call, so RED Cine file decoding is not possible with 
    this datastream. Use deprecaded iostreams implementation instead.

    We plan to keep LIBRAW_USE_DEPRECATED_IOSTREAMS_DATASTREAM up to 
    LibRaw 0.21 and drop in 0.22.

  * Fuji decoder:
    fuji_decode_loop/fuji_decode_strip parameters has changed; look into source
    code for details if you're implementing your own fuji_decode_loop() 
    call in subclass to provide parallel fuji decoding.

  * Canon CR3 H265 (HEIF) preview limited support:
    - new format value: LIBRAW_THUMBNAIL_H265
    - this thumbnail is NOT extracted by LibRaw::make_mem_thumb() yet;

  * LibRaw::capabilities
    Two bits added:
      LIBRAW_CAPS_ZLIB if compiled with USE_ZLIB
      LIBRAW_CAPS_JPEG if compiled with USE_JPEG


 * Windows datastreams: CreateFile2 is used if compiled for UWP.

 * API-datastruct: clarified behavior with use_camera_wb=1 setting.

 * identify(): restored the differentiation between fsize and flen.

 * New compile-time LIBRAW_FORCE_OPENMP to skip compiler version check
   (if LibRaw user is absolutely sure that OpenMP is supported by compiler)

2020-10-14 Alex Tutubalin <lexa@lexa.ru>

 * LibRaw 0.20.2
 Reverted 0.20.1 change:
   - const buffer for open_buffer() and open_bayer() calls
 Because of 0.20.0 ABI break

2020-10-14 Alex Tutubalin <lexa@lexa.ru>

 * LibRaw 0.20.1
 * Improvements:
   - exif callback is called on EXIF GPS and EXIF Interop IFDs
   - open_bayer call documented
   - Canon (ColorDatsSubver==32): parse Specular White instead of hardcoded value
 * Fixes for normal files processing:
   - Olympus XZ-1: do not provide linear_max (it is wrong in metadata)
   - Nikon Z cameras: added space in camera list
   - raw-identify: fixed wb-preset print
   - Pentax Optio 33WR: maker index was incorrect
   - dcraw_emu: corrected help line for -6 option.
   - raw-identify: corrected range check for color matrices print
   - use_camera_matrix option: fixed a bug introduced when making
     compiler more happy.

 * Fixes for damaged/special crafted files processing:
   - Fix for truncated CR3 files parsing
   - DNG metadata merger: all color loops are limited to MIN(4,colors)
   - Check for marings: should be less than raw image size
   - Check for xmpdata present in Samsung Lens ID assignment
   - Check for column range in leaf_hdr decoder
   - Additional checks in Hasselblad model parser
   - Fuji rotate: better limits check
   - DNG files: limit tiff_samples

 * Not fixes, but makes ASAN/compilers/etc happy:
   - corrected GPS EXIF output
   - const buffer for open_buffer() and open_bayer() calls


2020-07-23 Alex Tutubalin <lexa@lexa.ru>

 * LibRaw 0.20

== Camera Format support ==
  Canon CR3
  GoPro (via GPR SDK)
  Panasonic 14-bit
  Fujifilm compressed/16bit
  Rapsberry Pi RAW+JPEG format (if USE_6BY9RPI defined)
  Foveon X3F support changed: it is supported only if USE_X3FTOOLS defined
  at build (see below for 'Imported code policy changed')

== Camera support (+59, 1131 total) ==
  Canon: PowerShot G5 X Mark II, G7 X Mark III, SX70 HS,
         EOS R, EOS RP, EOS 90D, EOS 250D,  EOS M6 Mark II, EOS M50, EOS M200
         EOS 1DX Mark III (lossless files only)
  DJI Mavic Air, Osmo Action
  FujiFilm GFX 100, X-A7, X-Pro3, X100V, X-T4 (uncompressed/lossless compressed only), X-T200
  GoPro Fusion, HERO5, HERO6, HERO7, HERO8
  Hasselblad L1D-20c, X1D II 50C
  Leica D-LUX7, Q-P, Q2, V-LUX5, C-Lux / CAM-DC25, SL2, M10 Monochrom
  Nikon D780, Z50, P950
  Olympus TG-6, E-M5 Mark III, E-PL10, E-M1 Mark III,
  Panasonic DC-FZ1000 II, DC-G90, DC-S1, DC-S1R, DC-S1H, DC-TZ95
  PhaseOne IQ4 150MP
  Ricoh GR III
  Sony A7R IV, A9 II, ILCE-6100, ILCE-6600, RX0 II, RX100 VII
  Zenit M

also multiple smartphones (the tested ones are listed in LibRaw::cameraList)

== Source code re-arranged ==
 * dcraw.c is not used in the generation and build processes
 * dcraw_common.cpp and libraw_cxx.cpp are split into multiple code chunks
   placed in separate subfolders (decoders/ for raw data decoders,
   metadata/ for metadata parsers, etc)
 * dcraw_common.cpp and libraw_cxx.cpp remain to preserve existing
   build environments (these files are now just a bunch of #include directives).
 * It is possible to build LibRaw
    a)without postprocessing functions (dcraw_process() and  called function)
    b)without postprocessing and LibRaw::raw2image() call (and called function).
   It may be useful to reduce library memory/code footprint.
   See Makefile.devel.nopp and Makefile.devel.noppr2i for the list of source
   files needed to build reduced/stripped library.

== Normalized make/model ==

There is a huge number of identical cameras sold under different names,
depending on the market (e.g. multiple Panasonic or Canon models)
and even some identical cameras sold under different brands
(Panasonic -> Leica, Sony -> Hasselblad).

To reduce clutter, a normalization mechanism has been implemented in LibRaw:

In imgdata.idata:
    char normalized_make[64]; - primary vendor name (e.g. Panasonic for
    Leica re-branded cameras)
    char normalized_model[64]; - primary camera model name
    unsigned maker_index; - primary vendor name in indexed form (enum
       LibRaw_cameramaker_index, LIBRAW_CAMERAMAKER_* constant).
These fields are always filled upon LibRaw::open_file()/open_buffer() calls.

const char* LibRaw::cameramakeridx2maker(int index): converts maker_index
to normalized_make.

We recommend that you use these normalized names in a variety of data tables
(color profiles, etc.) to reduce the number of duplicate entries.

New vendor index values will be added strictly to the end of the
LibRaw_cameramaker_index table, ensuring that the numbers assigned to
vendors that are already known to LibRaw will not change.

== DNG frame selection  ==

 DNG frames selection code re-worked:
  - by default all frames w/ the NewSubfileType tag equal to 0
  (high-res image) are added to the list of available images (selection
  performed via imgdata.params.shot_select field, as usual)
  - the special case for Fuju SuperCCD (SamplesPerPixel == 2) works as
  before: shot_select=1 will extract second sub-image.
  - Additional flags to imgdata.params.raw_processing_options:
     LIBRAW_PROCESSING_DNG_ADD_ENHANCED - will add Enhanced DNG frame
     (NewSubfileType == 16) to the list of available frames
     LIBRAW_PROCESSING_DNG_ADD_PREVIEWS - will add previews
     (NewSubfileType == 1) to the list.

  - By default, DNG frames are not reordered and are available in same order
  as in DNG (LibRaw traverses IFD/Sub-IFD trees in deep-first order).
  To prioritize the largest image, set LIBRAW_PROCESSING_DNG_PREFER_LARGEST_IMAGE
  bit in imgdata.params.raw_processing_options.

 - DNG Stage2/Stage3 processing via DNG SDK (request via flags in
 raw_processing_options)

== Imported code policy disclaimer ==

  We've changed the policy regarding 3rd party code imported into LibRaw.

  We (like other authors of open-source RAW parsers) gladly import support
  code for various RAW formats from other projects (if the license allows it).
  This is done to expand camera support.
  Unfortunately, not all imported code can tolerate truncated or otherwise
  damaged raw files, as well as arbitrary conditions or arbitrary data;
  not all authors handle rejecting unexpected input well.

  LibRaw is now widely used in various projects, including ImageMagick, which,
  in turn, is often used on web sites to process any input images, including
  arbitrary data from unknown users.
  This opens up wide possibilities for exploiting the various vulnerabilities
  present in the code borrowed from other projects into LibRaw. In order to
  avoid such security risks, - the borrowed code will no longer compile
  by default.
  We are not able to support it in general case, and the authors refuse
  to add code to reject unexpected input.

  Thus, if you use some kind of camera for which the support is disabled
  by default, you need to recompile LibRaw for your specific case.

  Formats currently affected:
   X3F (Foveon) file format.
    Code is imported from Kalpanika X3F tools: https://github.com/Kalpanika/x3f
    To turn the support on, define USE_X3FTOOLS

   Rapsberry Pi RAW+JPEG format.
     Code is imported from https://github.com/6by9/dcraw/,
     To turn the support on, define USE_6BY9RPI
  Format support is indicated via LibRaw::capabilities() call with flags:
    LIBRAW_CAPS_X3FTOOLS - Foveon support
    LIBRAW_CAPS_RPI6BY9 - RPi RAW+JPEG support

== GoPro .gpr format support ==
 GoPro  format supported via open-source GPR SDK
 See README.GoPro.txt for details.

== Windows support/Windows unicode (wchar_t*) filenames support ==

* (old) LibRaw's WIN32 external define split into 3 defines to fine tune
  compiler/api compatibility:
  LIBRAW_WIN32_DLLDEFS - use to compile DLLs (__dllimport/__dllexport attributes)
  LIBRAW_WIN32_UNICODEPATHS - indicates that runtime has calls/datatypes for wchar_t filenames
  LIBRAW_WIN32_CALLS - use Win32 calls where appropriative (binary mode for files, LibRaw_windows_datastream, _snprintf instead of snprintf, etc).

  If the (old) WIN32 macro is defined at compile time, all three new defines are defined in libraw.h
  If not, these defines are defined based on compiler version/libc++ defines

* LibRaw::open_file(wchar_t*) is always compiled in under Windows, but
  if LIBRAW_WIN32_UNICODEPATHS (see above) is not defined, this call will
  return LIBRAW_NOT_IMPLEMENTED.
  Use (LibRaw::capabilities() & LIBRAW_CAPS_UNICODEPATHS) on runtime
  to check that this call was really implemented (or check for #ifdef LIBRAW_WIN32_UNICODEPATHS after #include <libraw.h>)

== LibRaw*datastream simplified ==

  * tempbuffer_open, subfile_open are not used, so removed from
  LibRaw_abstract_datastream and derived classes.

  * jpeg_src() call implemented using ->read() call and own buffering
  (16k buffer).
  * buffering_off() call added. It should be used in derived classes
    to switch from buffered reads to unbuffered.

== minor/unsorted changes ==
   * new flag LIBRAW_WARN_DNGSDK_PROCESSED to indicate decoder used
   *  LibRaw::open() call, max_buf_size special meaning:
       == 1 => open using bigfile_datastream
       == 2 => open using file_datastream
   * Add support for zlib during configure
   * Fixed multiple problems found by OSS-Fuzz
   * Lots of changes in imgdata.makernotes (hope someone will document it)
   * DNG SDK could be used (if enabled) to unpack multi-image DNG files.
   * DNG whitelevel calculated via BitsPerSample if not set via tags.
   * DNG: support for LinearDNG w/ BlackLevelRepeat.. pattern
   * Generic Arri camera format replaced w/ list of specific camera models in supported cameras list.
   * new samples/rawtextdump sample: allows one to dump (small selection) of RAW data in text format.
   * samples/raw-identify:
     * +M/-M params (same as in dcraw_emu)
     * -L <file-w-filelist> parameter to get file list from a file
     * -m paramerer to use mmap'ed IO.
     * -t parameter for timing
   * samples/dcraw_emu: fixed +M handling
   * better support for Nikon Coolscan 16-bit NEF files.
   * Visual Studio project files: re-generated to .vcxproj (Visual Studio 2019), different
     intermediate folders for different sub-projects to allow 1-step rebuild.
   * imgdata.makernotes...cameraspecific: removed the vendor name prefix from variables.
   * Bayer images: ensure that even margins have the same COLOR() for both the active sensor area and the full sensor area.
   * raw processing flag bit LIBRAW_PROCESSING_CHECK_DNG_ILLUMINANT inverted and renamed to
     LIBRAW_PROCESSING_DONT_CHECK_DNG_ILLUMINANT. If not set, DNG illuminant will be checked.
   * New libraw_decoder_t flags:
      LIBRAW_DECODER_FLATDATA - in-file data could be used as is (if byte order matches), e.g. via mmap()
      LIBRAW_DECODER_FLAT_BG2_SWAPPED - special flag for Sony ARQ: indicates R-G-G2-B channel
                                        order in 4-color data
   * Camera-recorded image crop data is parsed into imgdata.sizes.raw_inset_crop structure:
	ctop,cleft,cwidth,cheight - crop size.
	aspect - LibRawImageAspects enum (3to2, 4to3, etc)
   * New define LIBRAW_NO_WINSOCK2 to not include winsock2.h on compile

   * New processing flag LIBRAW_PROCESSING_PROVIDE_NONSTANDARD_WB
   If set (default is not), and when applicable, color.cam_mul[] and
   color.WB_Coeffs/WBCT_Coeffs will contain WB settings for a non-standard
   workflow.
   Right now only Sony DSC-F828 is affected: camera-recorded white balance
   can't be directly applied to raw data because WB is for RGB, while raw
   data is RGBE.

   * New processing flag: LIBRAW_PROCESSING_CAMERAWB_FALLBACK_TO_DAYLIGHT
   If set (default is not), LibRaw::dcraw_process() will fallback to
   daylight WB (excluding some very specific cases like Canon D30).
   This is how LibRaw 0.19 (and older) works.
   If not set: LibRaw::dcraw_process() will fallback to calculated auto WB if
   camera WB is requested, but appropriate white balance was not found in
   metadata.

  * Google changes cherry-picked (thanks to Jamie Pinheiro)
  * speedup: ppg interpolate: const loop invariant

  * Bugs fixed
   -Fixed several UBs found by OSS Fuzz
   -Fixed several problems found by other fuzzers.
   - Thumbnail size range check (CVE-2020-15503)
    Thanks to Jennifer Gehrke of Recurity Labs GmbH for problem report.
   - fixed possible overflows in canon and sigma makernotes parsers
   - fixed possible buffer overrun in crx (cr3) decoder
   - fixed memory leak in crx decoder (if compiled with LIBRAW_NO_CR3_MEMPOOL)
   - fixed possible overrun in Sony SRF and SR2 metadata parsers

  * Fixed typo in longitude (member of parsed GPS structure), update required for code that uses it.


2019-03-05 Alex Tutubalin <lexa@lexa.ru>
 * Camera support
   Canon A560 (CHDK hack)
   FujiFilm X-T30
   Nikon Coolpix A1000
   Olympus E-M1X
   Sony ILCE-6400
   Several dng files from phones and drones was tested
   and added to built-in camera list too.

 * Multiple names for same Panasonic cameras are processed via
   aliaces mechanics, no multiple duplicate fields in adobe_coeffs() table

 * Better makernotes parsing for many cameras

 * Better parsing of makernotes embedded into DNG files created by
   Adobe DNG Converter

 * New imgdata.params.raw_processing_options value: LIBRAW_PROCESSING_ZEROFILTERS_FOR_MONOCHROMETIFFS
    - If this bit is set
    - and TIFF file contains SamplesPerPixel == 1
    - and filters value was not guessed from metadata parsing
   LibRaw will assume the file is monochrome, not bayer.
 This option is needed for monochrome scan processing (Imacon X1 etc).
 This option may broke old TIF-like RAW files processing (Kodak 760,etc)
 use with care (it is better to let user choose).

2018-12-12 Alex Tutubalin <lexa@lexa.ru>
 * Camera support:
     Canon: PowerShot A480 (CHDK hack), EOS 2000D, EOS 4000D
     Eyedeas E1
     FujiFilm: GFX 50R, XF10, X-T3, X-T100, DBP680
     GITUP G3 DUO (16:9 mode only, use custom camera for 4:3)
     Kodak PIXPRO AZ901
     Leica M10-D, M10-P
     Nikon D3500, Z6, Z7, P1000
     Panasonic LX100M2
     Pentax K-1 II
     Sony A7 III, HX95, HX99, RX100-VA, RX100-VI

  * Fixed long standing bug in remove_zeroes: first two rows/cols was unprocessed
  * Better parsing for NEF files modified (damaged) by NikonTransfer
  * Better parsing for floating point DNG black levels (into color.dnglevels.fblack and dng_fcblack[], similar
    to color.black and color.cblack[] for other formats).
  * More flexible limit for RAW decoding memory usage:
      imgdata.params.max_raw_memory_mb (default is LIBRAW_MAX_ALLOC_MB_DEFAULT)

  * New flags for imgdata.params.raw_processing_options:
    LIBRAW_PROCESSING_CHECK_DNG_ILLUMINANT - will check DNG illuminant field when selecting color matrix
      (note: incompatibility with previous versions, so default is not set).
    LIBRAW_PROCESSING_DNGSDK_ZEROCOPY - will not copy data from Adobe DNG SDK decoded buffer, but use it as is

  * Switched from auto_ptr to unique_ptr, to get back define LIBRAW_USE_AUTOPTR

  * dcraw_emu: it is now possible to create output filename in a more flexible manner, via -Z switch:
     -Z - will output to stdout
     -Z ext will output into inputfilename.ext
     -Z .ext will output into inputfilename.inputext.ext


2018-11-22  Alex Tutubalin <lexa@lexa.ru>
 * Finally: got Sinar 4shot sample, works fine now
 * OpenMP critical sections for malloc/free; extra #ifdefs removed; bin/dcraw_dist could be built again using Makefile.devel
 * additional checks in parse_phase_one()
 * more checks on file offsets/tag len in parse_minolta
 * more checks in parse_ciff
 * Mempool check reworked
 * Old Leaf (16bit/3color/TIFF) support
 * Fix cameraWB->autoWB fallback
 * Polaroid x530 channel swap; get metadata pointer for Foveon files
 * Fixed Secunia Advisory SA86384
   - possible infinite loop in unpacked_load_raw()
   - possible infinite loop in parse_rollei()
   - possible infinite loop in parse_sinar_ia()
  Credits: Laurent Delosieres, Secunia Research at Flexera

 * LibRaw 0.19.1-Release

2018-06-28  Alex Tutubalin <lexa@lexa.ru>
 * changed wrong fix for Canon D30 white balance
 * fixed possible stack overrun while reading zero-sized strings
 * fixed possible integer overflow
 * LibRaw 0.19.0-Release

2018-06-11  Alex Tutubalin <lexa@lexa.ru>
 * Sony uncompressed/untiled DNGs: do not set bits-per-sample to 14 bit
 * Do not change tiff_bps for DNG files
 * Another possible stack overflow in kodak radc reader
 * Secunia Advisory SA83507, credits Kasper Leigh Haabb,
   Secunia Research at Flexera"
   - parse_qt: possible integer overflow
   - reject broken/crafted NOKIARAW files
 * LibRaw 0.19-Beta6

2018-05-10  Alex Tutubalin <lexa@lexa.ru>
 * Put rogue printf's behind #ifdef DCRAW_VERBOSE
 * Exceptions was not caught in x3f_new_from_file resulting in x3f handle leak
 * packed_load_raw(): EOF check on each row
 * define LIBRAW_USE_CALLOC_INSTEAD_OF_MALLOC to use ::calloc instead of
   ::malloc in LibRaw_mem_mgr malloc calls;
   Note: realloc is not changed, so only partial fix
 * Fixed possible div by zero in EOS D30 WB data parse
 * U-suffix for filter-var manipulation consts
 * restored static specifier for utf2char() lost in previous bugfix
 * Fixed stack overrun in kodak_radc_load_raw
 * Secunia Advisory SA83050: possible infinite loop in parse_minolta()
 * LibRaw 0.19-Beta5

2018-05-03  Alex Tutubalin <lexa@lexa.ru>
 * CVE-2018-10529 fixed: out of bounds read in X3F parser
 * CVE-2018-10528 fixed: possible stack overrun in X3F parser
 * LibRaw 0.19-Beta4

2018-04-24 Alex Tutubalin <lexa@lexa.ru>
 * LibRaw 0.19-Beta3
 * fixed lot of bugs reported by ImageMagic/oss-fuzz
 * fixed several bugs reported by Secunia team (adv 81800,
   Credit: Laurent Delosieres, Secunia Research at Flexera)

2018-03-22 Alex Tutubalin <lexa@lexa.ru>
 * LibRaw 0.19-Beta2
 * Better handling of broken JPEG thumbnails
 * Panasonic GH5S/G9-hires decoder, thanks to Alexey Danilchenko
   Note: ABI has changed due to this patch, so shlib version increased
 * Fujifilm X-A5/A20 metadata parsing fix
 * New error code LIBRAW_TOO_BIG: image data size excess LIBRAW_MAX_ALLOC_MB
 * winsock2 included before windows.h to make MinGW happy

2018-02-23 Alex Tutubalin <lexa@lexa.ru>

 * LibRaw 0.19-Beta1

 * 84 cameras added compared to 0.18 (1014 total):
    Apple
	iPhone 8(*), iPhone 8 plus, iPhone X
    BlackMagic
	URSA Mini 4k, URSA Mini 4.6k, URSA Mini Pro 4.6k
    Canon CHDK hack
	 PowerShot A410, A540, D10, ELPH 130 IS, ELPH 160 IS, SD750,
	    SX100 IS,SX130 IS, SX160 IS, SX510 HS, SX10 IS, IXUS 900Ti
    Canon
	PowerShot G1 X Mark III, G9 X Mark II, EOS 6D Mark II, EOS 77D,
 	EOS 200D, EOS 800D, EOS M6, EOS M100
    Casio EX-ZR4100/5100
    DJI
	Phantom4 Pro/Pro+, Zenmuse X5, Zenmuse X5R
    FujiFilm
	S6500fd, GFX 50S, X100f, X-A3, X-A5, X-A10, X-A20, X-E3, X-H1, X-T20
    GITUP GIT2P
    Hasselblad
	H6D-100c, A6D-100c
    Huawei
	P9 (EVA-L09/AL00), Honor6a, Honor9, Mate10 (BLA-L29)
    Leica
	CL, M10, TL2
    LG
	V20 (F800K), VS995,
    Nikon
	D850, D5600, D7500, Coolpix B700
    Olympus
	E-PL9, E-M10 Mark III, TG-5
    OnePlus
	One, A3303, A5000
    Panasonic
	DMC-FZ45, DMC-FZ72, DC-FZ80/82, DC-G9 (std. res mode only), DC-GF10/GF90,
  	DC-GH5, DC-GX9, DC-GX800/850/GF9, DMC-LX1, DC-ZS70 (DC-TZ90/91/92, DC-T93),
	DC-TZ100/101/ZS100, DC-TZ200/ZS200
    PARROT
	Bebop 2, Bebop Drone
    Pentax KP
    PhaseOne IQ3 100MP Trichromatic
    Samsung
	Galaxy Nexus, Galaxy S3, S6 (SM-G920F), S7, S7 Edge, S8 (SM-G950U),
    Sony
	A7R III, A9, DSC-RX0, DSC-RX10IV
    Yi M1
    YUNEEC
	CGO3, CGO3P
    Xiaoyi YIAC3 (YI 4k)

  Note(*): for mobile phones with DNG format recording, only really tested cameras
  are added to supported camera list. Really LibRaw should support any correct DNG.

 * No more built-in support for LibRaw demosaic packs (GPL2/GPL3).
   We're unable to support this (very old code), so we'll be happy to transfer this
   code to some maintainer who wish to work with it.

   In LibRaw 0.19 we provide extension API: user-settable callbacks to be called in
   code points where demosaic pack code was called.

   -  int callbacks.pre_identify_cb(void *) => to be called in LibRaw::open_datastream
       before call to (standard) identify() function. If this call returns 1, this means
       that RAW file is identified and all metadata fields are set, so no need to run
       standard identify code.
   - void callbacks.post_identify_cb(void*) => called just after identify(), but before
       any cleanup code;
   - dcraw_process() callbacks are called before dcraw_process phases (name speaks for itself):
       	pre_subtractblack_cb, pre_scalecolors_cb, pre_preinterpolate_cb, pre_interpolate_cb,
	interpolate_bayer_cb, interpolate_xtrans_cb, post_interpolate_cb, pre_converttorgb_cb,
	post_converttorgb_cb

   All these new callbacks are called with (this) as the only arg.
   To continue LibRaw-demosaic-pack-GPLx support one need to subclass LibRaw, set needed
   callbacks in (e.g.) constructor code, than these callbacks to be called

 * Better DNG parser:
    - support for DefaultCrop Origin/Size tags (add LIBRAW_PROCESSING_USE_DNG_DEFAULT_CROP to raw_processing_options to enable)
    - better parsing for nested DNG tags (use tag from RAW IFD, fallback to IFD0 if no tag in current IFD)
    - DNG PreviewColorspace extracted into dng_levels.preview_colorspace

 * Metadata extraction:
  - Better extraction of camera measured balance (LIBRAW_WBI_Auto and WBI_Measured),
    this not the same as 'as shot' if some preset/manual tune is used.
  - Extraction of camera custom balances (LIBRAW_WBI_CustomN)
  - Nikon data compression tag extracted into  makernotes.nikon.NEFCompression
  - Hasselblad BaseISO and Gain extracted into makernotes.hasselblad
  - Canon multishot params extracted into makernotes.canon.multishot
  - lot of other vendor-specific makernotes data (see data structures definitions for details).

 * New LibRaw::open_bayer call allows to pass sensor dump w/o metadata directly to LibRaw:
     virtual int open_bayer(unsigned char *data, unsigned datalen,
	  ushort _raw_width, ushort _raw_height, ushort _left_margin, ushort _top_margin,
	  ushort _right_margin, ushort _bottom_margin,
	  unsigned char procflags, unsigned char bayer_pattern, unsigned unused_bits, unsigned otherflags,
	  unsigned black_level);
    Parameters:
     data, datalen - buffer passed
     width/height/margins - speaks for itself
     procflags:
     for 10-bit format:
      1: "4 pixels in 5 bytes" packing is used
      0: "6 pixels in 8 bytes" packing is used
     for 16-bit format:
      1: Big-endian data
    bayer_pattern: one of LIBRAW_OPENBAYER_RGGB,LIBRAW_OPENBAYER_BGGR,
                          LIBRAW_OPENBAYER_GRBG,LIBRAW_OPENBAYER_GBRG
    unused_bits: count of upper zero bits
    otherflags:
      Bit 1 - filter (average neighbors) for pixels with values of zero
      Bits 2-4 - the orientation of the image (0=do not rotate, 3=180, 5=90CCW, 6=90CW)
    black_level: file black level (it also may be specified via imgdata.params)

    see samples/openbayer_sample.cpp for usage sample (note, this sample is 'sample only', suited for
    Kodak KAI-0340 sensor, you'll need change open_bayer() params for your data).

 * Color data added/updated/fixed for many cameras

 * Correct data maximum for Fuji X-* cameras

 * Thumbnail processing:
   - JPEG thumbnails: if compiled with libjpeg, color count is extracted into imgdata.thumbnail.tcolors
   - PPM (bitmap) thumbnails: color count is set according to thumbnail IFD tag
   - PPM16 thumbnails: if LIBRAW_PROCESSING_USE_PPM16_THUMBS set in raw_processing_options, than thumbnail will be extracted
     as is, not converted to 8 bit. thumbnail.tformat is set to LIBRAW_THUMBNAIL_BITMAP16 in this case.
     Untested, because it is hard to find RAWs with 16-bit bitmaps.

