1. 19 Oct, 2017 15 commits
    • Nathan E. Egge's avatar
      Rename DAALA_DCTx experiments to DAALA_TXx. · e554f36c
      Nathan E. Egge authored
      Change-Id: I8fa0a67d7a198b8b24837ffc352acf77f390cffe
      e554f36c
    • David Barker's avatar
      loopfilter-level: Fix some inconsistencies · cce013cd
      David Barker authored
      * Fix a case where we would calculate the Y horizontal filter strength
        as the sum of the base Y *vertical* strength and the
        per-segment delta Y horizontal strength.
      
      * When using delta_lf_multi, adapt the corresponding CDFs between frames
      
      * Correct values in seg_feature_data_{signed,max}
      
      Change-Id: I1976d2024e9e16fe73258cf41d56aafe8a830957
      cce013cd
    • David Barker's avatar
      Fix interaction of loopfilter-level + obu · 3dffa270
      David Barker authored
      When obu is enabled, we should only apply look filtering after
      the frame is fully decoded. This was not working correctly with
      the combination of loopfilter-level + obu; move an 'if' condition
      around in order to fix this.
      
      Change-Id: I0f06d81663ea1d91f4e4b251b1eaf4bda70a8770
      3dffa270
    • Johann's avatar
      remove references to obsolete test files · 472cd036
      Johann authored
      These files have been removed from test/test-data.mk. When they are not
      found, new versions are encoded. However, if they happen to exist, the
      tests fail due to the unsupported bitstreams.
      
      Change-Id: Ib643a5a22608b20df2b8f520691ba213f07837e1
      472cd036
    • Sebastien Alaiwan's avatar
      Coding path sync test: force quantizer · 403cd01f
      Sebastien Alaiwan authored
      Change-Id: I5ad29fe45dcb83cec15ca7295bc2116fccbd8d06
      403cd01f
    • Sebastien Alaiwan's avatar
      Fix mem corruption due to undersized token buffer · 0a86a7d2
      Sebastien Alaiwan authored
      Take a margin of 8 tokens.
      
      BUG=aomedia:647
      
      Change-Id: I04638a73deee334aa1f083f67c602c8a18cb951c
      0a86a7d2
    • Rupert Swarbrick's avatar
      Comment/refactor striped loop restoration save/restore functions · 9af0cf3c
      Rupert Swarbrick authored
      This shouldn't change the behaviour at all, but I think the resulting
      code is slightly easier to read and follow. I've also added copious
      comments to setup_processing_stripe_boundary to explain exactly what
      the code is doing.
      
      Change-Id: I68adf2d0455b7d87aa04d7e6daa43f4d730c6f80
      9af0cf3c
    • Yue Chen's avatar
      Disable residue hash feature on cross-border blocks · 25dc0701
      Yue Chen authored
      Disable this feature unless the entire block is within the frame.
      The reason is, rd decisions in mbmi, e.g. inter_tx_block[][], made
      for blocks partially out of the border can be partly nonsense
      therefore cannot be reused by blocks at other locations.
      
      It caused an infinite loop when encoding a clip with repetitive
      patterns. A cross-border block has an invalid big tx stored
      in inter_tx_block[0][1] and the other block (same residue, within
      frame) reused this mbmi, which makes encoder never reach the
      termination condition when tx blocks are being recursively
      partitioned.
      
      BUG=aomedia:913
      
      Change-Id: Id25a1dbc4a68b5136f6bdf9f6b5811b7ec6920b0
      25dc0701
    • David Barker's avatar
      deblock-13tap: Don't use 8-tap filter for chroma plane · b1d1f2ca
      David Barker authored
      For the chroma plane, the selected filter length was based on
      transform size as follows:
      TX_4X4 -> filter_length = 4
      TX_8X8 -> filter_length = 8
      TX_16X16 -> filter_length = 6 (this is intentionally *not* 16)
      
      This seems inconsistent; presumably the intention is to use the
      6-tap filter for TX_8X8 as well. This patch makes the appropriate
      change to make that be the case.
      
      Change-Id: I7f53d1dce4f16144bcf0c20131527b5193311603
      b1d1f2ca
    • Rupert Swarbrick's avatar
      General tidy-ups in loop restoration code · d3d0615e
      Rupert Swarbrick authored
      This refactors the iteration in restoration.c so that all the scary
      stuff lies in a pair of general functions, filter_frame and
      filter_rest_unit.
      
      filter_frame is currently very simple, iterating over the restoration
      units in the frame. Once we've made it so that restoration units don't
      span tile boundaries, this function is the one we'll need to update to
      iterate over tiles and then restoration units within the tile.
      
      filter_rest_unit replaces the outer loop of the loop_*_filter_tile*
      functions. It deals with chopping the restoration unit into stripes of
      height procunit_height. When CONFIG_STRIPED_LOOP_RESTORATION is true,
      it also deals with calling setup_processing_stripe_boundary and
      restore_processing_stripe_boundary to use boundary data from the
      deblocked output.
      
      Some of the ugly #if/#endif blocks have been elided in the wiener
      filter code (both low and high bit depth), by defining a convolve
      alias based on USE_WIENER_HIGH_INTERMEDIATE_PRECISION.
      
      There are also changes to extend const-ness for the source frame. I've
      adopted the convention that the frame input is called "data" (as it
      was before) while it's non-const. This is true as far as
      filter_rest_unit. Then each "process one stripe" function takes a
      const pointer to the source frame, at which point it's called "src".
      
      The intention is that, once filter_rest_unit no longer needs a
      RestorationInternal pointer, this function can be exposed in
      restoration.h and can be used by pickrst.c
      
      Change-Id: I18043a172ef0ca1154d87cf7f63e3a80944627cd
      d3d0615e
    • Luc Trudeau's avatar
      [CFL] Fix negative rounding issue in alpha dist · a45b104a
      Luc Trudeau authored
      get_scaled_luma_q0(-alpha_q3, pred_buf_q3[i]) is NOT equivalent to
      -get_scaled_luma_q0(alpha_q3, pred_buf_q3[i]). When the product
      alpha_q3*pred_buf_q3[i] is an exact multiple of 32 (0.5 in Q6), then the right
      shift will round both positive and negative values towards infinity, creating a
      bias. So, e.g., get_scaled_luma_q0(-4, 8) will yield 0, but
      -get_scaled_luma_q0(4, 8) will yield -1.
      
      Results on Subset1 (compared to parent With CfL enabled)
        PSNR | PSNR Cb | PSNR Cr | PSNR HVS |   SSIM | MS SSIM | CIEDE 2000
      0.0000 |  0.0000 |  0.0000 |   0.0000 | 0.0000 |  0.0000 |     0.0000
      
      https://arewecompressedyet.com/?job=cfl-no-round-fix%402017-10-07T11%3A50%3A47.711Z&job=cfl-round-fix%402017-10-07T02%3A15%3A51.359Z
      
      Change-Id: I8a7900c32fbd7213f1ed4e09c3626c063800e186
      a45b104a
    • Steinar Midtskogen's avatar
      Make the CDEF RDO handle 4:2:2 properly · ef1b74c7
      Steinar Midtskogen authored
      This fixes an assert:
      
      av1/common/cdef_block.c:561: cdef_filter_fb: Assertion `bsize ==
      BLOCK_8X8 || bsize == BLOCK_4X4' failed.
      
      The RDO simply assigned a strength of 0 in the 4:2:2 case and called
      cdef_filter_fb(), but cdef_filter_fb() will complain about 4:2:2 even
      if the strength is 0.
      
      The fix assigns a chroma mse of 0 when the the subsampling is
      different for x and y rather than to call the filter.  This is faster
      also.  The mse isn't really 0, but calculating the actual chroma mse
      doesn't change result.
      
      BUG=aomedia:881
      
      Change-Id: I6154e21ddcca30e51baf805684dace10459c3350
      ef1b74c7
    • Rupert Swarbrick's avatar
      Remove partial_frame support from loop restoration · 146a060a
      Rupert Swarbrick authored
      This flag comes from the loop filter's speed features and (I think)
      tells the encoder to make decisions about the filter by looking at a
      narrow strip in the middle of the frame.
      
      That's reasonable enough, but doesn't make any sense for loop
      restoration, where we were calling av1_loop_restoration_frame from
      pickrst.c in order to calculate what restoration parameters to use for
      a given restoration unit (which might not be in the narrow strip in
      the middle!)
      
      As it turns out, the LPF_PICK_FROM_SUBIMAGE method is never actually
      signalled in the reference encoder, which is presumably why we haven't
      spotted this before.
      
      Change-Id: I745e2eab873c0b33920caca40e338af9d078d25e
      146a060a
    • Rupert Swarbrick's avatar
      Remove RestorationInternal from AV1_COMMON · f88bc049
      Rupert Swarbrick authored
      The bits needed by striped loop restoration are now in
      RestorationInfo (which also gets rid of a rather ugly extra
      index).
      
      The scratch buffer that's used for self-guided restoration has been
      moved up to its own variable (rst_tmpbuf).
      
      All the rest of the fields are now safely hidden inside restoration.c
      
      This patch also does a big cleanup of the initialisation code in
      loop_restoration_rows: it doesn't need to be as repetitive now that
      the fields of YV12_BUFFER_CONFIG can be accessed by plane index.
      
      Change-Id: Iba7edc0f94041fa053cdeb3d6cf35d84a05dbfaf
      f88bc049
    • Rupert Swarbrick's avatar
      Don't compute rtile width/height in av1_get_rest_ntiles · 64b8bbdf
      Rupert Swarbrick authored
      Restoration units are a fixed square size (in cm->rst_info[plane]) for
      almost the entire image. The only special case is for tiles at the
      right hand edge or the bottom row, which might expand or be cropped.
      
      The av1_get_rest_ntiles function was implementing the cropping
      behaviour when the image happened to be less than one restoration unit
      wide or high (but not the expansion behaviour), but the result was
      never useful: if you want to get the size of a restoration tile in
      order to divide by it to work out what tile you're on, the fixed
      square size is what you want. If you need to know how big this
      particular tile is, call av1_get_rest_tile_limits.
      
      As well as removing the output arguments from
      av1_get_rest_tile_limits, this patch also removes the tile_width and
      tile_height fields from the RestorationInternal structure. Note that
      the tile size which is what you actually need is accessible as
      rst->rsi->restoration_tilesize. (In practice, these were almost always
      the same anyway).
      
      This patch also has a couple of other small cleanups. Firstly, it
      moves the subsampling_y field out of
      CONFIG_STRIPED_LOOP_RESTORATION. It's not actually needed when you're
      not doing striped loop restoration, but this gets rid of lots of
      horrible #if/#endif lines at callsites for av1_get_rest_tile_limits.
      
      Secondly, it simplifies the code in init_rest_search_ctxt (and fixes
      some tautologous assertions). Now that YV12_BUFFER_CONFIG has a more
      uniform layout, there's a simpler way to set things up, so we use
      that.
      
      Change-Id: I3c32d8ea0abe119dc86b9efa7564b27dde2151dc
      64b8bbdf
  2. 18 Oct, 2017 14 commits
  3. 17 Oct, 2017 11 commits
    • Yue Chen's avatar
      new_multisymbol: use cdf-based costs of interintra · eaf128a9
      Yue Chen authored
      Calculate rate costs of interintra and wedge interintar symbols
      based on cdfs that are per-sb updated.
      
      Change-Id: I4fa73953cb0bccbf078d2e2dd4e90370972fcce1
      eaf128a9
    • Yue Chen's avatar
      new_multisymbol: use cdf-based costs of palette flags · dab2ca9d
      Yue Chen authored
      The modification is only applicable to palette_y_mode and
      palette_uv_mode. Welcome to make changes to other palette syntax.
      
      Change-Id: I7bf0a49c06a3986475076fe291e26f4b783b8ab9
      dab2ca9d
    • Yaowu Xu's avatar
      Move a call to free · 568bf107
      Yaowu Xu authored
      This insures the pointer is still valid.
      
      BUG=aomedia:919
      
      Change-Id: Ia6f37c1bcc82bc1078387db31f8d8bf0fddc297e
      568bf107
    • Adrian Grange's avatar
      [sbl_symbol] Remove remnants of this experiment · ade9a0ec
      Adrian Grange authored
      Change-Id: Id0ce3a8dde757be565ec6aff7e909534dfb256a0
      ade9a0ec
    • Tom Finegan's avatar
      cmake: sync ext_skip experiment with configure. · cfcccf4b
      Tom Finegan authored
      - Enable frame_marker with ext_skip.
      
      BUG=aomedia:856
      
      Change-Id: I1b032e84c658a3d4826d7dc89d40f4b1e24686f3
      cfcccf4b
    • Yushin Cho's avatar
      Remove leftover CONFIG_CHROMA_2X2 flags · cf0e76f5
      Yushin Cho authored
      Fix build error due to leftover CONFIG_CHROMA_2X2 flags.
      
      Change-Id: I25087494462e98c0bce5fadecb7634a7b38135bb
      cf0e76f5
    • Yushin Cho's avatar
      [dist-8x8] Add more asserts · 1cd34621
      Yushin Cho authored
      Added more asserts for dist-8x8 running in PSNR mode,
      i.e. with the encoder option "--enable-dist-8x8=1"
      instead of --tune=[cdef-dist | daala-dist].
      
      The asserts checks whether a 8x8 distortion measured on reconstructed 8x8 pixels
      is identical to the sum of distortions from sub8x8 partitions (or tx blocks for
      var-tx case).
      
      Change-Id: I14f2b24e674a9cbbe60e663449fc4e7f46f0e481
      1cd34621
    • Alexander Bokov's avatar
      Improving the model for pruning the TX type search · 0c7eb10d
      Alexander Bokov authored
      Introduces two new TX type pruning modes that provide better
      speed-quality trade-off compared to the existing ones. A shallow
      neural network with one hidden layer trained separately for each
      block size is used as a prediction model. The new modes differ in
      thresholds applied to the output of the neural net, so that they
      prune different number of TX types on average.
      
      Owing to relatively low quality loss PRUNE_2D_ACCURATE is used
      by default, regardless of speed settings. Starting with speed
      setting of 3 we switch to PRUNE_2D_FAST mode to get better
      speed-up.
      
      Evaluation results:
      ----------------------------------------------------------
      Prune mode | Avg. speed-up | Quality loss | Quality loss
                 |(high bitrates)|   (lowres)   |   (midres)
      ----------------------------------------------------------
      PRUNE_ONE  |     18.7%     |    0.396%    |    0.308%
      ----------------------------------------------------------
      PRUNE_TWO  |     27.2%     |    0.439%    |    0.389%
      ----------------------------------------------------------
      PRUNE_2D_  |     18.8%     |    0.032%    |    0.063%
      ACCURATE   |               |              |
      ----------------------------------------------------------
      PRUNE_2D_  |     33.3%     |    0.504%    |     ---
      FAST       |               |              |
      
      Change-Id: Ibd59f52eef493a499e529d824edad267daa65f9d
      0c7eb10d
    • Debargha Mukherjee's avatar
      Fix a compile bug with ext-partition-types · 0b34a79f
      Debargha Mukherjee authored
      Removes some stray CONFIG_CB4X4 config macros.
      
      BUG=aomedia:921
      
      Change-Id: Icc65e0b000f659d7fb18178c928a7bff7879f58c
      0b34a79f
    • Frederic Barbier's avatar
      Ensure that diff_len is lower than frame_id_length · 4d5d90ed
      Frederic Barbier authored
      A frame should be referenced with a unique delta,
      which is not guaranteed when diff_len is greater than frame_id_length.
      
      Otherwise, it's possible to get into a situation where a frame
      can be referenced with many different delta_frame_id values,
      although the decoder only accepts one of them.
      
      Avoid ambiguities when delta-referencing a frame, and
      avoid wasting bits by using a coding enforcing the restriction.
      
      Change-Id: If7c611c9b6ec69662c5af540ade59f08bacda2ba
      4d5d90ed
    • Frederic Barbier's avatar
      Hide coding details of fid_length/delta_fid_length · e83fcfeb
      Frederic Barbier authored
      Let the writing/parsing logic do the +7/+2 offseting,
      and let the rest of the code directly manipulate the actual values.
      
      Change-Id: I460d5bf18446c028f326cb747b3c26c8d451637c
      e83fcfeb