1. 27 Jan, 2017 2 commits
  2. 26 Jan, 2017 2 commits
    • Urvang Joshi's avatar
      Palette: Don't store tokens for pixels outside image boundary. · 56ba91bb
      Urvang Joshi authored
      If part of a block falls outside right and/or bottom image boundary,
      then only store tokens for the part of it within the boundary.
      
      Also, consider only the part of the block within the boundary when
      calculating the number of colors in the image, deciding the base
      colors for palette, RD calculation etc.
      
      The part of color map corresponding to pixels outside the image
      boundary is padded with color indices copied from same row/column.
      This behavior is similar to how pixels outside the boundary are padded.
      
      For screen_content set, this is improves compression performance by
      0.038 overall. One clip, in particular, has a significant gain of 0.8.
      
      Change-Id: I745ca032f313c5041aacc98c03ae4bfc33d840de
      56ba91bb
    • Debargha Mukherjee's avatar
      Fix mismatch w/ ext-inter/warped-motion/motion-var · 8b613216
      Debargha Mukherjee authored
      Fixes a mismatch issue with ext-inter+motion-var+warped-motion
      due to unset num_proj_ref values.
      
      BUG=aomedia:311
      
      Change-Id: I042551f6c53e8cc005f2133704a03b243c98c12a
      8b613216
  3. 25 Jan, 2017 3 commits
  4. 24 Jan, 2017 2 commits
    • David Barker's avatar
      Make ext-inter use new rectangular intra predictor · 839467f4
      David Barker authored
      Now that https://aomedia-review.googlesource.com/#/c/6729/
      has been merged, build_intra_predictors_for_interintra() is
      now redundant, so replace it by a direct call to
      av1_predict_intra_block() and remove the old function.
      
      Reset rect_interintra back to 1.
      
      To do this, we need to make the intra predictor take a
      BLOCK_SIZE instead of a TX_SIZE. This is because we need to
      be able to predict 32x64 and 64x32 blocks, but there is no
      TX_32X64 or TX_64X32.
      
      No effect on output or performance.
      
      Change-Id: I8c185a211c97a85012cc54ec293c785a693608ed
      839467f4
    • Jingning Han's avatar
      Fix conflicts between ext-inter and cb4x4 modes · 61418bbd
      Jingning Han authored
      Resolve the broken coding pipeline in ext-inter experiment when
      cb4x4 mode is enabled. Turn off rectangular inter-intra mode.
      This needs some more work to hook up. Given that it gives fairly
      limited coding performance gains, disable it for the moment.
      
      BUG=aomedia:309
      
      Change-Id: I9b406df6183f75697bfd4eed5125a6e9436d84b0
      61418bbd
  5. 23 Jan, 2017 2 commits
    • Emil Keyder's avatar
      Rename NONE to NONE_FRAME. · 01770b3e
      Emil Keyder authored
      This follows the naming for the other frame types, and allows libaom
      to be compiled against other libraries that also #define NONE.
      
      Change-Id: Ic2e2814587bbc5ea67385a9af775396d29b7dde0
      01770b3e
    • Yushin Cho's avatar
      Add a new experiment, DAALA_DIST · 7a428ba2
      Yushin Cho authored
      This commit adds a new experiment, Daala's distortion function,
      which is designed to better approximate perceptual distortion
      in 8x8 pixel blocks.
      
      This experiment is expected to work best with PVQ.
      
      It measures the variance of overlapped 4x4 regions in the 8x8 area,
      then uses these variances to scale the MSE of weighted frequency domain
      distortion of 8x8 block.
      
      Since AV1 calculates distortion in blocks as small as 4x4, it is not possible to
      directly replace the existing distortion functions of AV1,
      such as dist_block() and block_rd_txf().
      Hence, there has been substantial changes in order to apply
      Daala's 8x8 distortion function.
      The daala distortion function is applied
      after all 4x4 tx blocks in a 8x8 block are encoded (during RDO),
      as in below two cases:
      1) intra/inter sub8x8 predictions and
      2) 4x4 transform with prediction size >= 8.
      
      To enable this experiment, add '--enable-daala-dist' with configure.
      
      TODO: Significant tuning of parameters is required since the function has
      originally came from Daala thus most parameters would not work
      correctly outside Daala.
      The fact that chroma distortion is added to the distortion of AV1's RDO is
      also critical since Daala's distortion function is applied to luma only
      and chroma continues to use MSE.
      
      Change-Id: If35fdd3aec7efe401f351ba1c99891ad57a3d957
      7a428ba2
  6. 22 Jan, 2017 1 commit
  7. 19 Jan, 2017 3 commits
    • Sarah Parker's avatar
      Do masked motion search based on COMPOUND_TYPE · 2e604887
      Sarah Parker authored
      Change-Id: I2d1b5f57a3bb19eb8c00eb4c2e6c7835047dc4ac
      2e604887
    • hui su's avatar
      Speed up keyframe encoding with model RD · 308a6397
      hui su authored
      model_rd_for_sb() can quickly compute an approximated RD cost. We
      use the estimated RD cost to skip running full RD for some bad
      mode candidates.
      
      This only affects keyframe encoding. Observed 22% encoding time
      reduction, and 0.03% compression loss.
      
      Change-Id: I793f1eda98d67e8da9bc1648dcf272222b30a556
      308a6397
    • Jingning Han's avatar
      Remove an outdated assertion · 25f2f7d9
      Jingning Han authored
      The check condtion on block size is deprecated. No need to keep
      this assertion around.
      
      Change-Id: Icf2dde2a678cbbce837798877634b7be54e86e67
      25f2f7d9
  8. 18 Jan, 2017 4 commits
    • Yue Chen's avatar
      Add rd loop of NCOBMC · f27b1605
      Yue Chen authored
      At the final round of encoding of each superblock, will go through
      each prediction block to check if ncobmc mode is better than non-
      overlapped prediction. Note that causal obmc mode is dumped here.
      
      PSNR gain (MOTION_VAR + NCOBMC): -2.845% lowres
      
      Change-Id: Ibe504f7f1882446a08ba426e1e9824bca73bf655
      f27b1605
    • Yunqing Wang's avatar
      Fix the transform size/type search condition · 2615d6ea
      Yunqing Wang authored
      While encoding a key frame with quantizer = 0 and aq-mode = 1,
      for some segment_ids, the quantizer got modified and could be
      > 0, and lossless[segment_id] might be 0 or 1 depending on the
      segment_id. Namely, blocks with lossless[segment_id] = 0 were
      allowed to choose transform sizes other than 4x4. This conflicted
      with tx_mode which was a frame-level decision. In this patch,
      the transform search condition was modified so that the transform
      choice was consistent with tx_mode of that frame.
      
      BUG=aomedia:104
      
      Change-Id: Ia39127b5dee129283a133cf5e4000da62d9e0f1c
      2615d6ea
    • Urvang Joshi's avatar
      Enable rectangular transforms for Intra also. · feb925fe
      Urvang Joshi authored
      These are under EXT_TX + RECT_TX experiment combo.
      
      Results
      =======
      
      Derf Set:
      --------
      All Intra frames: 1.8% avg improvement (and 1.78% BD-rate improvement)
      Video: 0.230% avg improvement (and 0.262% BD-rate improvement)
      
      Objective-1-fast set
      --------------------
      Video: 0.52 PSNR improvement
      
      Change-Id: I1893465929858e38419f327752dc61c19b96b997
      feb925fe
    • Angie Chiang's avatar
      Pass ConvolveParams into prediction functions · 9f45bc48
      Angie Chiang authored
      Those functions includes
      av1_make_inter_predictor
      av1_build_inter_predictor
      inter_predictor
      
      Change-Id: Ide3b744277cf30964e8b352fc8de91365d7217a8
      9f45bc48
  9. 17 Jan, 2017 1 commit
    • Debargha Mukherjee's avatar
      Improvements on segment mask · 1edf9a30
      Debargha Mukherjee authored
      Adds a few options to make the compound mask lightly dependent on the
      the two predictors.
      
      Also adds high bit depth support
      
      Change-Id: If57b6e8ddd140e0c00fd9d4738927d37225091cb
      1edf9a30
  10. 13 Jan, 2017 3 commits
  11. 12 Jan, 2017 1 commit
    • Jingning Han's avatar
      Make rd_debug aligned to var-tx · c7ea761f
      Jingning Han authored
      Fix the corner case and use the right rate cost udpate for rd_debug.
      This would make the var-tx pass rd_debug test.
      
      Change-Id: Ib0fbd2d73030c0d150222c6b7c2dfffc0c6af085
      c7ea761f
  12. 10 Jan, 2017 4 commits
    • Sarah Parker's avatar
      Refactor compound_segment to try different segmentation masks · b9f757c7
      Sarah Parker authored
      Change-Id: I7c992c9aae895aebcfb5c147cb179cf665c0ac10
      b9f757c7
    • Yushin Cho's avatar
      Rename encode_inter_mb_segment() · ab44fd14
      Yushin Cho authored
      Rename encode_inter_mb_segment() so that it tells readers
      that the function is only used for sub8x8 case.
      
      Change-Id: I2d86d9efaf0e1e96446d9e2dec8a8d97772489a7
      ab44fd14
    • Yushin Cho's avatar
      Correct the misleading codes in encode_inter_mb_segment() · ee0af212
      Yushin Cho authored
      In encode_inter_mb_segment(), when BLOCK_8X4 or BLOCK_4X8 is
      passed, the nested loop inside it iterates always twice.
      (For BLOCK_4X4, loop iterates only once because encode_inter_mb_segment()
      is called for each of 4X4 block.)
      Then, the k for 1st iteration is always zero, and the k for 2nd
      iteration is always (idy * 2 + idx) with either idy == 1 or idx == 1
      depending on the sb_type.
      
      Using "+=" there could mislead readers expecting that
      the # of iterations is more.
      And probably using simple assignment would be more proper here.
      
      Change-Id: I7a11255eca13403bc090ba4f0cd4785db9f0e541
      ee0af212
    • Yushin Cho's avatar
      Fix wrong stride of dst buffer in intra4x4 · 1a2df5e2
      Yushin Cho authored
      Change-Id: Icbd238c73323d11d60ca4da755b52c83cb11b8b5
      1a2df5e2
  13. 09 Jan, 2017 1 commit
  14. 08 Jan, 2017 1 commit
    • Yushin Cho's avatar
      Rename the function rd_pick_best_sub8x8_mode() · 482016d0
      Yushin Cho authored
      This large function is solely used for the RDO search for
      inter prediction mode. It would be helpful for readers if its name
      tells that whole function is used for inter mode decision only.
      
      Change-Id: Ida366b142b7129bf89498227d186c54341c3af5e
      482016d0
  15. 07 Jan, 2017 1 commit
  16. 06 Jan, 2017 2 commits
    • Jingning Han's avatar
      Rework the txfm partition context to support cb4x4 mode · 581d1697
      Jingning Han authored
      This commit reworks the transform block partition context update
      to support cb4x4 mode in the recursive transform block partition.
      It resolves the remaining enc/dec mismatch issue when both cb4x4
      and var-tx are turned on.
      
      Change-Id: I850d121204fe4c68e81488f1d2848c570d9d08b9
      581d1697
    • Jingning Han's avatar
      Refactor var-tx pipeline to support cb4x4 mode · 9ca05b7e
      Jingning Han authored
      Replace hard coded 4x4 transform block step size assumption with
      scalable table access.
      
      Change-Id: Ib1cc555c2641e5634acdd91ca33217f00aeb0b89
      9ca05b7e
  17. 04 Jan, 2017 2 commits
    • Sarah Parker's avatar
      Bugfixes in pick_interinter_seg_mask · 409c0bb2
      Sarah Parker authored
      Change-Id: I5ad51375287b40170882c4816d34858be50afacd
      409c0bb2
    • Yushin Cho's avatar
      Refactor PVQ codes for inter4x4 · 3839548c
      Yushin Cho authored
      Similarly to the refactoring of PVQ codes for 4x4 intra,
      instead of calling tx and pvq_encode_helper() in 4x4 inter,
      av1_xform_quant() is called.
      
      This commit gives no change in metrics.
      
      Change-Id: Ib69efb00ed5a5b2254478bf5db5a19d9dac12b3b
      3839548c
  18. 03 Jan, 2017 1 commit
    • Yushin Cho's avatar
      Refactor PVQ codes for intra4x4 · 900243b9
      Yushin Cho authored
      In 4x4 intra search for RDO, AV1 codes has been changed to
      call av1_xform_quant() while ago, while PVQ did not but call
      txfm and pvq_encode_helper() instead, which caused duplicated codes
      and thus worse maintenance and testing.
      
      This refactor also has fixed the long-sitting bug,
      which we couldn't find before refactoring.
      
      PSNR    PSNR-HVS  SSIM  FAST-SSIM  CIEDE 2000 MS-SSIM
      -2.77   -2.62     -2.90 -4.07       -2.94     -2.63
      
      Change-Id: I6e526123a64af810897962d11d53028719e82e16
      900243b9
  19. 24 Dec, 2016 1 commit
    • Yushin Cho's avatar
      Fix wrong place of setting dst with PVQ in intra 4x4 · b27a17f2
      Yushin Cho authored
      With PVQ, the dst buffer should be initialized as zero
      before av1_inv_txfm_add_*() is called.
      This bug seems introduced during resolving conflicts
      when nextgenv2 was merged.
      
      BD-Rate change:
                      PSNR  PSNR-HVS  SSIM  CIEDE 2000  MS SSIM
      subset1-mono    -0.25 -0.25     -0.23 -0.26       -0.23
      objective1-fast -0.17 -0.26     -0.14 -0.04       -0.18
      
      Change-Id: I7c6b793ba0aa5f1e3d419312cbbe5c207a68f1f8
      b27a17f2
  20. 16 Dec, 2016 1 commit
    • Sarah Parker's avatar
      Add temporary dummy mask for compound segmentation · 569eddab
      Sarah Parker authored
      This uses a segmentation mask (which is temporarily computed arbitrarily)
      to blend predictors in compound prediction. The mask will be computed
      using a color segmentation in a followup patch.
      Change-Id: I2d24cf27a8589211f8a70779a5be2d61746406b9
      569eddab
  21. 15 Dec, 2016 2 commits
    • Guillaume Martres's avatar
      PVQ: Fix incorrect calculation of rd_stats · 930118c5
      Guillaume Martres authored
      When PVQ is on, we reencode at the end of choose_tx_size_type_from_rd to
      get the entropy contexts right, previously this was done using
      txfm_rd_in_plane but this is different from the encodes done in the loop
      which use txfm_yrd, the result is that rd_stats is set incorrectly at
      the end of choose_tx_size_type_from_rd when PVQ is on.
      
      Results on objective-1-fast with --limit=5:
      
         PSNR | PSNR Cb | PSNR Cr | PSNR HVS |    SSIM | MS SSIM | CIEDE 2000
      -0.5803 | -1.0598 | -1.4565 |  -0.3377 | -0.8153 | -0.5934 |    -0.9943
      
      See https://goo.gl/Hvv0E2
      
      Change-Id: Iccc7b0afaff849f959a0084eb48dbb838bc3cb1a
      930118c5
    • Jingning Han's avatar
      Enable 4x4 block partition search · bf9c6b76
      Jingning Han authored
      This commit enables the 4x4 level block partition search. It turns
      on the 4x4 level coding block unit.
      
      Change-Id: I7251db10176fd6c4f853604d263170721252dd4f
      bf9c6b76