Fidelity Range Extensions Development
======================================================================

for later FRExt Changes see CHANGES.txt


From v.2.1 to v.2.2
----------------
- fixed bug on wrong assignment of luma_transform_size_8x8_flag when intra coding is selected in inter pictures for CAVLC
- changed normalization for SAD cost for 4x4 and 8x8
- allow Intra16x16 to be included in Transform8x8Mode=2
- changed calculation of coefficient cost for dct_luma8x8 for CAVLC
- fixed bug on difference in debug and release mode for I pictures in encoder
- fixed bug on initialisation error for cost when transform 8x8 mode is 0 during P coding in encoder
- fixed CAVLC decoding of level > 16
- merge up to JM 8.6

From v.2.0a to v.2.1
----------------
- Residue Color Transform(RCT) is implemented (can be used for RGB-sequences)
- file I/O part is modified to support 8-9-9 bit file input (luma 8 bit, chroma 9 bit)
- added the maximum pixel value for chroma part (different bitdepth values for luma and chroma)
- encoder: fixed the difference between  the FRExt spec and  JM  code  for determining ctxIdxInc for significant_.. (field coded macroblocks).
- encoder: fixed DC_PRED initialisation of intrapred[][]-array for non-4x4/8x8 intra MBs
- encoder: fixed overflowing of diff-variables while distortion calculation (for huge frame sizes)
- encoder: fixed clipping of chroma QP value in dct_chroma()
- encoder: fixed pre-filtering for 8x8 intra
- encoder: the range for delta_qp is extended (depends on YUV-Format)
- encoder: fixed pos2ctx_map and pos2ctx_last context mapping for chroma YUV422/YUV444
- decoder: fixed conditional statement for qp_per_uv in CHROMA DC YUV444 path
- decoder: 64 bit file access for output and reference file (KS)
- decoder: complete VUI parsing (fixes streams with _real_ VUI data) (KS)
- decoder: known bug - QP report

From v.2.0 to v.2.0a
----------------
- in config file: luma/chroma bitdepth info is extended to 12 bit
- CBP intra/inter mapping for 8x8-intra macroblocks is fixed
- CABAC context switching (frame/field) while MBAFF mode is fixed (in write_significance_map())

From v.1.9c to v.2.0
----------------
- updated to JM reference software ver. 8.4 (all corresponding changes are in CHANGES.TXT)
- merged  JM 8.5 POC mode 1 fix
- added new CABAC ctx ini-tables
- CAVLC coding mode support for 8x8 transform 
- PicUnitBitDepth is changed to BitDepthLuma and BitDepthChroma (encoder cfg-file changed)
- FREXT chrominance qp offsets CbQPOffset and CrQPOffset are added (encoder cfg-file changed)
- FREXT profile idc numbers are updated (beginning from 100 now) and through #define implemented
- fixes for lossless mode: rgb-sequence reading (cfg file is updated with 'RGBinput' parameter)
- bug fixed for writing/reading of trasform_size_8x8_flag when DIRECT-mode and DirectInferenceFlag is disabled
- encoder: bit setting for cbp_blk-chroma is alligned to decoder method
- decoder: error concealment is aligned to FREXT but not tested
- decoder: fixed bug of encoder-decoder mismatch in MBAFF mode


From v.1.9b to v.1.9c
----------------
- setting of available Q-matrix pic scaling list is changed
- decoder: added new default Q-matrix (in v.1.9a was not complete implemented)
- added lossless_qpprime_y_zero funcionality (encoder config file is also extended)
- decoder: bug fixed in derivation of QPy while mb_qp_delta reading

From v.1.9a to v.1.9b
----------------
- encoder: bug fixed for B_Direct_8x8 (while Non-RDOpt Mode)

From v.1.9 to v.1.9a
----------------
- added new default Q-matrix
- encoder: bug fixed, restoring of motion vector data for P8x8 MBs with transform size 4x4
- encoder: bug fixed in YUV422 transform and quantizing process (q_bits422, qp_const422 added)
- encoder: changed the mode choosing for 8x8 and 4x4 transform sizes for P8x8-MBtype (now modes 0(B_DIRECT_8x8) and/or 4 can be taken for 8x8 transform)
- changed transform_size_8x8_flag bitstream output to intra-part and inter-part(with checking for cbp_luma==0)
- changed frame statistic output for 8x8 and 4x4 transform separation (with considering of CBP_luma==0)


From v.1.8 to v.1.9
----------------
- TRANSFORM SIZE FLAG Context Models for P-Frame are extended (CABAC)
- fixed qp_const assigning for luma coeff reading in decoder
- removed rounding for chroma (YUV 420) while dequantizing (refer to FRExt Spec.)
- fixed QP assigning for Macroblock after Delta-QP reading in decoder
- fixed DIAG_DOWN_RIGHT pred mode for 8x8 intra pred
- removed CBP writing when B-Skip and CABAC while rdopt
- code restructuring: writeMBHeader() is changed to writeMBLayer()
- Changed slice-based rounding offset to MB-based rounding offset in the encoder  ( this improves significantly picture quality, can we keep this way? )
- When Transform8x8Mode==2, Direct_8x8 mode sub-macroblock type is disabled. 
- Configuration file encoder_highquality_HD.cfg is added to assist encoding of high-res HD content.


From v.1.7 to v.1.8
----------------
- inserted syntax for Constraint_set3 flag in encoder and decoder
- fixed syntax error during luma 8x8 coefficient decoding when the total number of coefficient is 64
- changed syntax for transform_size_8x8_flag to be placed at the correct location for mb_type with sub_mb_pred for encoder and decoder to follow the standards
- changed order of 8x8 transform direction to performing vertical direction first instead of horizontal first.
- added condition to check for intra-coded neighbours when constrained intra prediction flag is on,  for intra 8x8 coding for encoder
- added setting of high cost for temporal direct mode when 8x8transform only is chosen and co-located pic is not available in encoder
- changed high cost for direct mode when temporal direct mode is not allowed in encoder. Previous value will cause overflow in total cost
- fixed B_skip mode to stop sending/reading of 8x8 transform flag in encoder and decoder
- changed encoding using 8x8transform to be only equal to 1 when Transform8x8Mode in cfg file is equal to 2 for RD-on for encoder
- skipped selecting of B_skip mode with 8x8transform_flag=1 when RD-on in encoder because it is not valid mode
- fixed setting of NoSubMbPartSizeLessThan8x8Flag to zero when Intra16x16 mode is chosen in encoder to prevent encoder sending of 8x8transform flag

- fixed sending (in encoder) and receiving (in decoder) of q_matrix values only in zig_zag scan
- fixed the correct mapping of matrix data to quantisation values in encoder and decoder
- fixed using of wrong quantized levels for de-quantisation in encoder and decoder
- switch order of getting transform values and inverse DC chroma420 level in encoder and decoder
- removed Intra8x8_ChromaU, Intra8x8_ChromaV, Inter8x8_ChromaU, Inter8x8_ChromaV matrix in encoder and decoder
- changed total matrix list to 8 according to standards
- changed scalingList routine to follow the style stated in the standards in encoder and decoder
- changed variables' names in encoder and decoder:
  Old Names                              -> New Names
  scaling_matrix_present_flag            -> seq_scaling_matrix_present_flag
  scaling_list_present_flag              -> seq_scaling_list_present_flag
  scaling_matrix_refinement_present_flag -> pic_scaling_matrix_present_flag
  scaling_list_refinement_present_flag   -> pic_scaling_list_present_flag

- changed assigning of default matrix and fall-back rule for q matrix
- added syntax in sps for chroma_format_idc and lossless_qpprime in encoder and decoder
- changed location of pps fidelity range extension syntax to end of pps in encoder and decoder

From v.1.6 to v.1.7
----------------
- changed Chroma Intra DC calculation for YUV422 and YUV444

From v.1.3 to v.1.6
----------------
- added YUV422, YUV444 Formats

V.1.3
----------------
- added Q-matrix syntax and semantics in encoder and decoder
- Q-matrix parameters are obtained from a file set in encoder.cfg
- Q-matrix flags can be set in the encoder.cfg
- fixed calculating of cost for Intra8x8 using SATD8x8
- 8x8 transform is now able to be used with rd-off
- New option for Transform8x8Mode, 2 for rd-off 8x8 transform mode only
- changed getting of qp_const in dct to be macroblock-based instead of slice-based
- changed output display to show Intra MB for all coding type
- fixed bug on I8MB, storing of ipredmode in wrong location
- fixed bug on I8MB, include setting of ipredmode to DC if Inter 8x8 is chosen
- fixed ref idx for direct mode
- updated changes from jm81a


v.1.2
----------------
- new PROFILE_IDCs (for Fidelity Extensions) are added
- Transform8x8Mode can be managed only at encoder site
- LowPassForIntra8x8 is turned off
- '#ifdef MIXED_TRANSFORM_SIZES' removed
- small code resructuring and cleaning


v.1.1
----------------
- QP scaling added (negative QPs are possible now)
- lambda(rdcost) scaling added
- luma/chroma bit depth variables to SPS added

v.1.0
----------------
- Mixed Transform Sizes and Variable Bit Depth (v.6.0) added 


