1. 07 Oct, 2017 5 commits
    • Urvang Joshi's avatar
      FRAME_SUPERRES: Rework to use scale factor of 8/D · de71d142
      Urvang Joshi authored
      Earlier, the superres scale was in the form of:
      N/16, where N ranged from 8 to 16.
      
      We change this to the form:
      8/D, where D ranges from 8 to 16.
      
      This helps on the decoder side, by making it possible to work on 8x8
      blocks at a time.
      
      Change-Id: I6c72d4b3e8d1c830e61d4bb8d7f6337a100c3064
      de71d142
    • Urvang Joshi's avatar
      Superres: Remove unused variable. · e61923fa
      Urvang Joshi authored
      cm->superres_scale_numerator is used for both keyframes and
      non-keyframes, and is initialized from either
      oxcf->superres_scale_numerator or oxcf->superres_kf_scale_numerator as
      appropriate.
      
      Change-Id: Ie46df576ef3830e181643ae591d836449a4bd38f
      e61923fa
    • Rupert Swarbrick's avatar
      Upscale frame correctly in foreach_rtile_in_tile · b66894ac
      Rupert Swarbrick authored
      The restoration tiles (rtiles) divide the upscaled frame, not the
      encoded one.
      
      Change-Id: I2d08fe926d694fee7064461685289d3fd1c1de0c
      b66894ac
    • Joe Young's avatar
      [intra-edge] Pad intra edge samples to avoid valgrind warning · 7cfd5343
      Joe Young authored
      The SSE4 function filter_intra_edge_sse4_1() reads data slightly
      past the initialized part of the array. Those data are discarded
      later, but causes a valgrind warning. This change avoids the warning
      by initializing the array an extra +16 positions.
      
      BUG=aomedia:868
      
      Change-Id: Ib610492cff91492ae379c5d62895773f8747c4bc
      7cfd5343
    • Luc Trudeau's avatar
      [CFL] Extract sum top row and left col from custom DC_PRED · 13281d4f
      Luc Trudeau authored
      To simplify high bit depth commit, the summing the top row and the left
      column are extracted out of cfl_dc_pred. This does not change the
      bitstream.
      
      Change-Id: I5c9fe91df4942f736c5af29c1d93abb3a6c8501f
      13281d4f
  2. 06 Oct, 2017 7 commits
    • Jingning Han's avatar
      Rework key frame intra mode context model · a45d842d
      Jingning Han authored
      Reduce the context model size for key frame modes from 30240 bits
      to 4500 bits, i.e., less than 1/6 of the original context model.
      The coding performance loss on key frame is 0.14% for lowres and
      noise level difference for video sequence. The loss on key frame
      for midres is 0.05% and noise level for whole video. The change
      on hdres kf coding is 0.015%.
      
      Change-Id: I9e36825e5c5ee6ba35038c3ca349ad1ad3429910
      a45d842d
    • Debargha Mukherjee's avatar
      Avoid large stack allocations · 5d108a36
      Debargha Mukherjee authored
      When ext-partition and ncobmc-adapt-weight is on, avoid too large
      stack allocations.
      
      Change-Id: I8db74e45cac80c4e5dfd9e20cfc73d9978d1578e
      5d108a36
    • Angie Chiang's avatar
      Reduce division operations in update_scan_prob · bbcd8f76
      Angie Chiang authored
      Change-Id: I923931a9dbf828eb13670511852d55c953b479c1
      bbcd8f76
    • Rupert Swarbrick's avatar
      Simplify the ALL_ZERO_FLAG logic in av1_rd_pick_intra_mode_sb · 799ff701
      Rupert Swarbrick authored
      Since the CONFIG_EXT_INTER #if/#endif lines have been removed, it's a
      bit clearer what's going on here and this patch cleans up the code.
      
      Firstly, the patch pulls the cheap checks on best_mbmode.ref_frame out
      to the front of the block, so we needn't call gm_get_motion_vector at
      all for compound predictions.
      
      Next, second element of the zeromv array is never used, so we needn't
      compute it.
      
      Finally, the patch removes the calls to lower_mv_precision. These
      shouldn't be needed, but it's not exactly obvious why not so the patch
      adds some comments to gm_get_motion_vector to explain what's going on
      and adds an assertion to make sure they are true. It also adds a call
      to integer_mv_precision on the early return path of
      gm_get_motion_vector, correcting an apparent bug when CONFIG_AMVR is
      true.
      
      This patch shouldn't make any difference to encoder or decoder
      behaviour.
      
      Change-Id: I0b4a01063574d080bbf6d30187f4e1748c60939d
      799ff701
    • Angie Chiang's avatar
      Implement non-recursive av1_update_scan_order · da4bbb51
      Angie Chiang authored
      The performance difference is
      lowres: 0.02% gain
      midres: 0.07% gain
      
      Change-Id: I68a74462f41db3bf24573cf2a08c8b5b8aa13f5f
      da4bbb51
    • Sebastien Alaiwan's avatar
      Fix warning about bitwise 'not' on boolean · cf26ee5a
      Sebastien Alaiwan authored
      Change-Id: I4732dbbb71a0db9ac284a4b2ae5f10816e0e9264
      cf26ee5a
    • RogerZhou's avatar
      Extend IntraBC to 4x4 · ca86546f
      RogerZhou authored
      Change-Id: I3f30c35bcd1bc623ad0c34c4b954ff71b2fcfd00
      ca86546f
  3. 05 Oct, 2017 9 commits
  4. 04 Oct, 2017 10 commits
    • Angie Chiang's avatar
      Remove redundant computation in adapt_scan · 4d5eb938
      Angie Chiang authored
      Change-Id: Ic48adb1322d0be066cb307df2ce316b7a7f58dd5
      4d5eb938
    • Yi Luo's avatar
      Fix compiler warning when dual_filter is not enabled · 398fdbab
      Yi Luo authored
      Change-Id: I14cd3f531af4ef0ac03deb1a19808ed1199f388f
      398fdbab
    • David Barker's avatar
      Fix decoder bug in dependent-horztiles · 86438431
      David Barker authored
      Change the function av1_tile_set_tg_boundary to calculate
      whether the selected tile is on the top boundary of its containing
      tile group. This appears to be the intended behaviour, based on
      how the function is used, but it was calculating something different.
      
      BUG=aomedia:698
      
      Change-Id: Ib3eb679a20153ead00e0b266b2ebf46044e62f05
      86438431
    • Debargha Mukherjee's avatar
      Fix 64-length inverse transform scale · 3ed2d23f
      Debargha Mukherjee authored
      Change-Id: Ibd284df85365a65ab76af71df14efb1d79ca0c30
      3ed2d23f
    • David Barker's avatar
      Harmonize OBMC prediction at tile edges · 1e2fb103
      David Barker authored
      When we have an OBMC block at the top of a tile, we don't generate
      an 'above' prediction, in order to preserve tile independence.
      However, the conditions for when to *generate* the above prediction
      and when to *use* it were different when dependent-horztiles is
      enabled.
      
      Since dependent-horztiles allows each tile to depend on the tile
      above, it seems reasonable to unify the conditions to use
      xd->above_available (and similar for left preds, for the sake
      of consistency). This allows OBMC across horizontal tile boundaries,
      but not across tile group boundaries, in line with the rest of the
      dependent-horztiles experiment.
      
      Change-Id: I86d5de132c4429106a6025e7a7a2baec974e618c
      1e2fb103
    • Rupert Swarbrick's avatar
      Pack InterpFilters into a single integer · 27e90295
      Rupert Swarbrick authored
      Before this patch, if CONFIG_DUAL_FILTER was true then an MB_MODE_INFO
      stored its filter choices as an array of four numbers, each of which
      was between 0 and 10. It also seems that elements 2 and 3 of the array
      were always the same as elements 0 and 1 when used.
      
      This patch defines a new type(def) called InterpFilters together with
      constructor and extractor functions. When CONFIG_DUAL_FILTER is zero,
      InterpFilters is a synonym for InterpFilter and the constructor and
      extractor functions should compile away to nothing. When it is
      nonzero, InterpFilters is a uint32_t which stores the x filter in the
      high part and the y filter in the low part (this looks strange, but
      matches the old numbering).
      
      Making this change allows us to get rid of lots of special case code
      that was dependent on CONFIG_DUAL_FILTER. The uniform
      extract/make/broadcast interface also actually shortens code in
      general.
      
      Change-Id: I6b24a61bac3e4b220d8d46d0b27cfe865dcfba81
      27e90295
    • Jonathan Matthews's avatar
      intra_interp - fix dr_prediction_z1 and _z3 · 80dd4b94
      Jonathan Matthews authored
      The low bd versions should have the same functionality as the
      high bd versions.  This patch removes the incorrect optimisation,
      in order to rapidly fix the functionality.
      
      BUG=aomedia:859
      
      Change-Id: I4f23115b15ab9e2ea5a54ff0c6a9e1dc1a6d4d13
      80dd4b94
    • Urvang Joshi's avatar
      Enums: Remove unnecessary assigned values. · d0bf7d0e
      Urvang Joshi authored
      Enums starts from 0 and are incremented by 1 by default. No need to do
      this explicitly.
      
      Change-Id: I3aea5a6b9a39e76f7912f865406c44586072caea
      d0bf7d0e
    • Zoe Liu's avatar
      Unify default probs for reference frame coding · e3c476e5
      Zoe Liu authored
      No performance change for scenario --disable-ext-comp-refs. For
      --enable-ext-comp-refs, a pretty tiny bitrate saving was resulted
      (-0.01~-0.02%).
      
      Change-Id: I7d12b28408bbfecc762108cbcf186b2a6ea07253
      e3c476e5
    • Cheng Chen's avatar
      LOOPFILTER_LEVEL: add flexibility for EXT_DELTA_Q · 880166ab
      Cheng Chen authored
      When experiment LOOPFILTER_LEVEL is on, there're four base filter levels
      for each frame. This patch enables one to use one delta or four deltas
      to update corresponding filter levels for each superblock in
      EXT_DELTA_Q.
      
      1 bit per frame is sent through bitstream to select one or four deltas.
      Now, we hard code to use one delta.
      
      Change-Id: I9c61a035064fa81878b0575ad21664e2b22a6a45
      880166ab
  5. 03 Oct, 2017 7 commits
    • Hui Su's avatar
      Remove symbol mapping of intra modes · 814f41e7
      Hui Su authored
      The _ind and _inv mapping tables are not necessary. The CDF tables are
      updated with new values converted from the old tables. Performance
      impact is small and neutral.
      
      Change-Id: I65845ab3c80f88794abd9ab9e61494af56099c7c
      814f41e7
    • David Barker's avatar
      Fix global-motion + error-resilient-mode · d7c8bd51
      David Barker authored
      Patch https://aomedia-review.googlesource.com/c/21783
      changed things so that error-resilient frames use the default
      global motion parameters as a reference, rather than taking
      the reference from the previous frame.
      
      This was implemented by clearing out cm->prev_frame->global_motion
      when we have an error-resilient frame. Unfortunately, this causes
      an issue: if we have an error resilient frame which isn't stored
      into any reference slots, followed by a non-error-resilient frame,
      then both frames refer to the same prev_frame. The second frame
      then delta-codes against cm->prev_frame->global_motion, but
      this was reset to the default values by the intervening
      error-resilient frame!
      
      In order to allow the above case to work as intended, expand the
      default warp parameter set to a full WarpedMotionParams struct,
      and use that as the reference for error-resilient frames.
      
      This also allows us to remove set_default_warp_params, as we
      can now just copy directly from default_warp_params.
      
      Change-Id: I9645615db2700c1d3810e6e42f4f1da626fcd5e3
      d7c8bd51
    • Urvang Joshi's avatar
      TX_64x64: Optimized default_txfm_partion tables. · 886bfc7b
      Urvang Joshi authored
      The probabilities and CDFs were tuned using aom_entropy_optimizer tool.
      
      midres: -0.062 overall PSNR, -0.100 on SSIM
      (but significant gain on Keiba_832x480_30.y4m clip:
      -1.331 on overall PSNR and -1.903 on SSIM)
      lowres: +0.013 on overall PSNR, -0.062 on SSIM
      
      Change-Id: Ie143a3914ef45939c8744ff6b2ed9f1d0a59353e
      886bfc7b
    • Thomas Davies's avatar
      Remove filter_7bit experimental flag. · a2253ce9
      Thomas Davies authored
      Change-Id: I22aed63c6659a7301bccaa994b7374af548db5d1
      a2253ce9
    • Debargha Mukherjee's avatar
      Misc fixes for 32x64 and 64x32 transforms · 570423cf
      Debargha Mukherjee authored
      Change-Id: Ic843e99bd9b79cb9a0a26b95e3a48717ff2ec2a5
      570423cf
    • David Barker's avatar
      Deduplicate use_reference_buffer/frame_id_numbers_present_flag · 5e70a114
      David Barker authored
      These two flags serve essentially the same purpose, so we can
      simplify down to just having one flag. Since the
      frame_id_numbers_present_flag is older and listed in the
      reference-buffer design doc, this is the one we'll keep.
      
      Note that, previously, frame_id_numbers_present_flag was only
      sent when CONFIG_OBU was enabled - otherwise it was always set
      to 1. On the other hand, use_reference_buffer was always signalled
      so that allowed us to disable frame ids even without CONFIG_OBU.
      
      In order to keep the ability to disable frame IDs without
      CONFIG_OBU, we send a "real" sequence header (ie, with the same
      data as in CONFIG_OBU) in-line within the uncompressed header.
      This is sent every keyframe and every intra-only frame, just
      as the use_reference_buffer flag was before this patch.
      
      BUG=aomedia:853
      
      Change-Id: I4bb6c7a222aeddfb6d3737a39d10782d32ee2eee
      5e70a114
    • Cheng Chen's avatar
      Make LOOPFILTER_LEVEL support EXT_DELTA_Q · a97394f7
      Cheng Chen authored
      Before LOOPFILTER_LEVEL, there's one filter level,
      now we have four filter levels for y plane vertical,
      y plane horizontal, u plane and v plane.
      
      This patch enables experiment LOOPFILTER_LEVEL to support per
      superblock loop filter level update.
      
      Change-Id: Ib11a1564471eb3076c26e73e5cdf7b5a3045ef97
      a97394f7
  6. 02 Oct, 2017 2 commits