1. 26 Sep, 2017 2 commits
    • Cheng Chen's avatar
      Add threshold to superblock filter level selection · c7855b1a
      Cheng Chen authored
      Signal one bit to indicate whether current superblock reuses filter
      level of previous superblock.
      Try filtering and compute sse using previous filter level and search
      the best possible filter level. If their diff is less than predefined
      threshold, current superblock reuses previous level. Otherwise,
      signal the best filter level.
      
      Change-Id: Ibf125860883b774ef2464b62bb8b799b48258c64
      c7855b1a
    • Debargha Mukherjee's avatar
      Add experiment to restrict compressed header · 2eada612
      Debargha Mukherjee authored
      The compressed header is now used only when the refresh
      type is set as forward, i.e. in error resilience and
      frame parallel modes. As long as backward updates are
      used the header is disabled thereby saving bits.
      
      Change-Id: Iee9f66ffbd30ef3552ea41b75e4b51537cd9ff97
      2eada612
  2. 25 Sep, 2017 1 commit
  3. 24 Sep, 2017 4 commits
  4. 23 Sep, 2017 9 commits
    • Debargha Mukherjee's avatar
      Setup ref mode after reading uncompressed header · 6f3c898f
      Debargha Mukherjee authored
      Removes setup in compressed header so that the compressed
      header can be skipped.
      
      Change-Id: I8d7ed63944a4f75704222f4ad7d0159db1cec0d1
      6f3c898f
    • Debargha Mukherjee's avatar
      Fix kf y mode costing · 801cc926
      Debargha Mukherjee authored
      Change-Id: I3d6a440b13473b0d1e8b18c6629c7e8e3fb446ae
      801cc926
    • Yushin Cho's avatar
      Improve dist-8x8 · 8e75e8bb
      Yushin Cho authored
      Improve dist-8x8 when computing 8x8 yuv dist for sub8x8.
      
      To apply dist-8x8 for sub8x8 partitions, once mode decision for
      sub8x8 partitions are finished then dist-8x8 is computed on 8x8 window.
      Since dist-8x8 is only for luma, chroma distortion should be identified.
      
      Previously, it has been hard to be free from potential bugs doing this,
      due to the complex inter mode search code.
      
      The new method is less-error-prone, which computes uv distortion (in MSE) after
      the mode decisions for all of sub8x8 blocks in a 8x8 window are finished,
      when the dist-8x8 distortion for luma 8x8 pixels are computed with
      new distortion metric.
      
      All the code separating y and uv distortion in inter mode search has
      been removed in this commit.
      
      Change-Id: Ieaccb7915df5faeb5e89a7e70b2b7cbac65231af
      8e75e8bb
    • Debargha Mukherjee's avatar
      Move sb_size to the keyframe (sequence) header · d2630fa4
      Debargha Mukherjee authored
      This patch moves the sb_size to the keyframe header from all frame
      headers as discussed in the AOM Codec WG meeting.
      
      Change-Id: Ia0190e57b36b98e51ab61ad4ff14f24f9c294877
      d2630fa4
    • Hui Su's avatar
      Remove unused arrays in entropymode.h · 787eb3d1
      Hui Su authored
      Change-Id: I7f2c0bfc12451710622161bd52ff689e642d1e52
      787eb3d1
    • Hui Su's avatar
      Move local functions out of blockd.h · 032ab8b3
      Hui Su authored
      Change-Id: Id667950de84ad6a0b55222264a0ce8473cd10bcc
      032ab8b3
    • Rupert Swarbrick's avatar
      Simplify implementation of rd_test_partition3 · 0e653f9f
      Rupert Swarbrick authored
      The rd_test_partition3 function basically calls rd_pick_sb_modes on
      each of three sub-blocks of a partition (this is one of the mixed size
      partitions like PARTITION_HORZ_A) and adds up the cost. There's also
      some extra book-keeping to do with stopping early if we know the
      partition is more expensive than what we've already seen.
      
      Before this patch, each call and its supporting code was written out
      in rd_test_partition3 with lots of repetition (made even more
      unreadable because of the #if/#endif blocks). This patch moves the
      "per-subblock" logic into a new function, rd_try_subblock, and
      replaces the code with calls to that function.
      
      The patch also rewrites the nested conditionals
      
        if (A) { if (B) { if (C) { X; } } } return;
      
      as
      
        if (! A) return; if (! B) return; if (! C) return; X;
      
      which means the code for X doesn't need to be so indented.
      
      The patch also uses the new function to replace the bodies of the
      PARTITION_HORZ_4 and PARTITION_VERT_4 partition types.
      
      Note that lots of the remaining ugliness is to do with supporting
      CONFIG_SUPERTX with ext-partition types. These explicitly aren't
      supported together at the moment, so another option would be to rip
      out that code entirely.
      
      Change-Id: I9af40d96aa1384f24a088a73a711311638490250
      0e653f9f
    • Cheng Chen's avatar
      Signal delta loop filter level between superblocks · a4b27de4
      Cheng Chen authored
      For the first superblock, signal a filter level (6 bit).
      For other superblocks, signal the delta (3 bit) and sign (1 bit).
      To guarantee the delta can be represented by 3 bits, the search
      range of current superblock filter level is capped as
      curr_lvl = prev_lvl +- ((1 << 3) - 1)
      
      Change-Id: Ibbe2941aa96ec1220ed2adb7edf3d29cb032f0ec
      a4b27de4
    • Yushin Cho's avatar
      [dist-8x8] Enable early-exit, if MSE is used · c00769a9
      Yushin Cho authored
      If dist-8x8 is enabled, it has disabled early-exit during the RD
      of sub8x8 tx block in 8x8 or larger partition for plane 0.
      
      However, for the sanity check mode of dist-8x8 which still use MSE,
      this can cause different bdrate from the reference (i.e
      dist-8x8 off). Hence, if tune-metirc is MSE then
      regular early-exit will perform for all cases.
      
      Note that the rd cost used for early-exit condition during tx mode
      decision does not include rate for mode itself but only coefficints.
      So, when the total distortion for a partition is very small, the rd cost
      of mode can exceed that of distortion.
      
      Change-Id: Ie25c64064b78d2d1582dbb0c286212fbc52dbdb9
      c00769a9
  5. 22 Sep, 2017 4 commits
    • Jingning Han's avatar
      Fix merge conflict · 75a6f87a
      Jingning Han authored
      Fix the missing the compiler fix in 772cb136.
      
      Change-Id: I2e1d0576964483c7890fb87e3db5451816883b9b
      75a6f87a
    • Hui Su's avatar
      ext-tx: combine the index and type mapping tables · 4a9be2a0
      Hui Su authored
      Combine the index and type mapping tables for intra and inter.
      
      Change-Id: I4274f0b5afac26f7e395467bdf5cf18077eacbee
      4a9be2a0
    • Hui Su's avatar
      Remove probablity model for tx type · 98b0b3e9
      Hui Su authored
      It's not being used anymore, replaced by the CDF model.
      The counters are moved under the entropy-stats experiment, so that they
      can be used to tune the default CDF values.
      
      Change-Id: I50cb170c4c8699cf7317fd77853b3fedf2342d3e
      98b0b3e9
    • Hui Su's avatar
      Refactor the ext-tx experiment · ddbcde28
      Hui Su authored
      Use common structure for inter and intra tx type information when
      possible.
      
      Change-Id: I1fd3bc86033871ffbcc2b496a31dca00b7d64b31
      ddbcde28
  6. 21 Sep, 2017 3 commits
  7. 20 Sep, 2017 14 commits
    • Jingning Han's avatar
      Fix av1_get_txb_entropy_context check condition · 339cf93b
      Jingning Han authored
      Return 0 when eob is 0. It is possible that when eob is 0, the
      fed in quantization matrix is uninitialized in the rate distortion
      optimization process.
      
      Change-Id: I2dcf558203bf60ba7332c6bf585a978f7c7309b5
      339cf93b
    • Jingning Han's avatar
      Constrain motion field referencing region · 83c27ecd
      Jingning Han authored
      Limit the motion field referencing region to be within a 64x64
      coding block region to reduce line buffer requirement. The coding
      performance loss numbers are 0.028% for lowres and 0.064% for
      midres.
      
      Change-Id: I4fe1a915c5710b763591b7046c45459b02543377
      83c27ecd
    • Jingning Han's avatar
      Use integer multiplier to replace division in mfmv · 00d5868d
      Jingning Han authored
      Use integer multipliciation to replace the division operation in
      the linear projection in mfmv. The coding performance change is
      around 0.01% level.
      
      Change-Id: I901fd3a2b349f1babccb88dbf74f84091079b8d3
      00d5868d
    • Angie Chiang's avatar
      Revert "Fix warning about sub8x8tx_in_gte8x8blk_in_plane0" · 3bbcedec
      Angie Chiang authored
      This reverts commit 863efacc.
      
      Reason for revert: <INSERT REASONING HERE>
      
      Change-Id: I3d9efef938fe0a2ec4914adc23d0e53b873109d4
      3bbcedec
    • Angie Chiang's avatar
      Fix warning about sub8x8tx_in_gte8x8blk_in_plane0 · 863efacc
      Angie Chiang authored
      This CL fix warning: unused variable
      ‘sub8x8tx_in_gte8x8blk_in_plane0’
      when DISABLE_TRELLISQ_SEARCH is on
      Change-Id: I64908513d58287e53ae5fd040e8099089176aace
      863efacc
    • Cheng Chen's avatar
      Search for deblocking filter level for superblock · f572cd30
      Cheng Chen authored
      Search and pick filter level for each superblock after the entire
      frame has been encoded. And then apply loop filtering using
      selected filter levels.
      
      Now it can't work with LOOPFILTER_LEVEL. Y, U, V planes share the
      same filter level.
      
      Per superblock, filter levels are signaled via bitstream.
      
      Future work: move selecting filter level into each superblock
      rather than wait for the whole frame encoded.
      
      Change-Id: I46cb994ec4866abb0456146f7c3cae8813c1d52e
      f572cd30
    • Soo-Chul Han's avatar
      initial implementation of HLS based on R18 · 65c00ae1
      Soo-Chul Han authored
      Change-Id: I78bb38e3d61d74442278bd5ed1c4f695b7c8e24a
      65c00ae1
    • Yunqing Wang's avatar
      Fix a compiler warning · 24d2d5db
      Yunqing Wang authored
      While configuring with "--extra-cflags=-DDISABLE_TRELLISQ_SEARCH=1",
      there was an unused variable warning. It was fixed.
      
      Change-Id: I1a4df461eb95bc4970f3bbf2e90bac7e394c318e
      24d2d5db
    • Joe Young's avatar
      [intra-edge] Vectorize upsampling · ad0196b8
      Joe Young authored
      Add sse4_1 functions for Intra-edge experiment:
        av1_upsample_intra_edge_sse4_1()
        av1_upsample_intra_edge_high_sse4_1()
      
      Approx cycle reduction at qp 20, 1 kf:
        Enc:  0.5% to 0.3%
        Dec:  0.4% to 0.2%
      
      Change-Id: I97f0eee09b78218b418b484d80c338cec037f1b9
      ad0196b8
    • Ryan's avatar
      fix the calculation for super_block_upper_left · 676c25cd
      Ryan authored
      the original calculation for super_block_upper_left calculation is
      wrong. this flag is true even for 32x32 block boundary. also it is not
      consistent with other places where this flag is calculated.
      
      Change-Id: I6b7b613d1f81eb11d27c67491375f6c1a47878e1
      676c25cd
    • David Barker's avatar
      new-multisymbol: Don't signal ext-comp-refs probs · 037ee412
      David Barker authored
      Currently, when new-multisymbol and ext-comp-refs are
      both enabled, the comp_ref_type_prob and uni_comp_ref_prob
      arrays are forward updated in the compressed header, but
      their values are never used.
      
      We can save a tiny bit of space by not signalling the
      forward updates at all; as a side benefit, we can wrap
      the whole of read_frame_reference_mode_probs() in
      a #if !CONFIG_NEW_MULTISYMBOL block.
      
      Note: It seems the encoder already does this; I think
      the reason it doesn't cause mismatches is because we
      effectively pad the compressed header out to a full byte,
      and av1_diff_update_prob() reads a bit with a very high
      probability of being 0.
      
      Change-Id: Ia1fca05ee498609c98c7ea1f89578f6783357d7f
      037ee412
    • Dominic Symes's avatar
      Add the max-tile tool with uniform tile support · db5d66fe
      Dominic Symes authored
      This adds the tool CONFIG_MAX_TILE
      Uniform tiles are implemented using power of two number of rows or columns.
      Maximum number of rows or columns is 64
      Explicit tiles will follow in a later commit once the command line API is updated for this
      
      Change-Id: Ia8d22e7f4aa779448211496c644937afdf037228
      db5d66fe
    • Tristan Matthews's avatar
      firstpass: fix format strings · e91fff30
      Tristan Matthews authored
      Change-Id: Ib45397581924d36fbc5eb3c8644b94d91d8abd08
      e91fff30
    • Luc Trudeau's avatar
      [CFL] CfL for Intra frames only · a66a2cb2
      Luc Trudeau authored
      This commit serves as a baseline to test CfL in video sequences. This
      starting baseline uses CfL only in intra frames. This allows to measure
      the contribution of CfL in intra frames over the whole video sequence.
      
      Results on Objective-1-fast (Compare to master with CfL disabled)
         PSNR | PSNR Cb | PSNR Cr | PSNR HVS |    SSIM | MS SSIM | CIEDE 2000
      -0.1869 | -2.4708 | -1.9988 |  -0.1725 | -0.1390 | -0.1453 |    -0.9564
      
      https://arewecompressedyet.com/?job=master%402017-09-13&job=cfl-no-inter%402017-09-13
      
      Change-Id: I20b2f239455b43e977588dc738b21e0508ad9333
      a66a2cb2
  8. 19 Sep, 2017 3 commits
    • RogerZhou's avatar
      Adaptive Motion Vector Resolution · 3b635245
      RogerZhou authored
      Change-Id: Ic3c93a5d2e427ce1ed578389196a265245063821
      3b635245
    • Jingning Han's avatar
      Guard ref_frame index access in mfmv · f6a45cdb
      Jingning Han authored
      Avoid unnecessary out of boundary access issue.
      
      Change-Id: I949372827a7b5133428a45af0ab2be03aa30a742
      f6a45cdb
    • Luc Trudeau's avatar
      [CFL] Use MAX_NUM_TXB_SQUARE instead of MAX_NUM_TXB · f1cf7178
      Luc Trudeau authored
      MAX_NUM_TXB represents the maximum number of transform blocks in 1
      dimension. CfL requires the maximum number of transform blocks in 2
      dimensions. As such, we now use MAX_NUM_TXB_SQUARE instead of the
      erroneous MAX_NUM_TXB for the average buffer.
      
      There's an assert guarding for overrun on the average buffer.
      This fix stops assertions on 4:4:4 sequences. This patch does
      not alter AWCY results as AWCY only covers 4:2:0 sequences (for
      which MAX_NUM_TXB turns out to be sufficient). 
      
      Change-Id: I628db0131f60abc2d06cbbe3fe3dc40e28894ce3
      f1cf7178