1. 17 Jan, 2018 1 commit
    • Frank Bossen's avatar
      Move boundary info into separate data structure · 768d660e
      Frank Bossen authored
      Reduces cache misses in the decoder and hence reduces run time.
      Run time reduction has been measured to be about 15% for HD (1080p)
      content.
      
      Change-Id: Ic42de04e0943c0f89c856b61fe174dcea96af5e5
      768d660e
  2. 27 Dec, 2017 1 commit
  3. 15 Dec, 2017 1 commit
  4. 11 Dec, 2017 1 commit
  5. 09 Dec, 2017 1 commit
    • Rostislav Pehlivanov's avatar
      Change q_segmentation to spatial_segmentation · 938710cb
      Rostislav Pehlivanov authored
      Adds spatial prediction to standard segmentation instead of a separate
      segmentation feature.
      When using temporal prediction skipped blocks are flagged as mispredicted.
      
      Change-Id: I0c32281286d3fbce66d339c9247bcc6516f37a63
      938710cb
  6. 05 Dec, 2017 1 commit
    • Dominic Symes's avatar
      max-tile: Fix issues discovered when testing max-tile · 917d6c06
      Dominic Symes authored
      max-tile remains off by default until more testing is performed but I would
      like to check in the fixes that are known so far to prevent this patch getting too big
      
      max_tile was provisionally adopted at the working group meeting 2017-Oct-10
      
      This patch fixes the following issues:
      - max_tile is fixed to suport superblock size 64x64 as well as 128x128 (ext_partition support)
      - max_tile is fixed in combination with loop_restoration
      - max_tile is fixed in combination with ext_tile (Bug: 1013)
      - max_tile is fixed in combination with lv_map and 64x64 subperblock (lv_map memory allocation
        fixed for 64x64 superblock)
      - max_tile reports the size of the first tile for inspection.c used by the analyzer
      
      Change-Id: Ib83ff613e5d66563c81452a085c7984d3b4813e4
      917d6c06
  7. 21 Nov, 2017 2 commits
  8. 09 Nov, 2017 1 commit
    • Rostislav Pehlivanov's avatar
      Add the q_segmentation experiment · f624dd5a
      Rostislav Pehlivanov authored
      This experiment implements low-cost delta q signalling on a per-block basis
      for all non-inter frame types, which would allow for more efficient AQ
      which bases its decisions on temporal information.
      
      Based on an Intel proposal from March.
      
      Change-Id: I18e73d8b12f4caa0b165df12c58ab506271bec03
      f624dd5a
  9. 06 Nov, 2017 1 commit
    • Rupert Swarbrick's avatar
      Correct a loop restoration buffer size · efa76d7e
      Rupert Swarbrick authored
      On subsampled planes, the frame is narrower but the padding by
      RESTORATION_EXTRA_HORZ on each side is the same width as usual.
      
      Change-Id: Id68c0dd674efaa769412825b119ae5ebe56548ad
      efa76d7e
  10. 04 Nov, 2017 1 commit
  11. 02 Nov, 2017 2 commits
    • Rupert Swarbrick's avatar
      Correct striped-loop-restoration with multiple tile rows · dee00eb0
      Rupert Swarbrick authored
      Before this patch, striped loop restoration didn't restart correctly
      on each tile row. Now, the loop restoration stripes start at the top
      of a tile row in the same way as if it were the top of the entire
      frame.
      
      Change-Id: I0a88a28d7804b2f09d792ecbbf4f22f666f67012
      dee00eb0
    • Rupert Swarbrick's avatar
      Refactor border treatment in loop restoration · 5b401364
      Rupert Swarbrick authored
      Previously we were calling aom_extend_frame_borders to generate
      extended pixels for use in loop-restoration. This generates quite a
      large border, when we only need 3 pixels.
      
      In addition, we were also calling extend_frame, which does the same
      thing but with a smaller border, once (in the decoder) or multiple
      times (in the encoder) per plane.
      
      This patch tidies all of this up so that we only call extend_frame
      once per plane, with the largest border size we need (3px).
      
      It also adds two new #defines. RESTORATION_BORDER is the 3 pixel
      border needed to do filtering for a processing
      unit. RESTORATION_CTX_VERT is the number of rows saved for each stripe
      when doing striped loop restoration.
      
      Change-Id: I2c3ffcc19808f79db195f76d857e2f23da5d8a84
      5b401364
  12. 26 Oct, 2017 1 commit
    • Rupert Swarbrick's avatar
      Stop loop rest units from straddling tile boundaries · bcb65fe6
      Rupert Swarbrick authored
      With this patch, restoration units are allocated within each tile as
      if it were its own image. Arrays of information that need one entry
      per restoration unit are laid out in tiles, with rsi->units_per_tile
      units for each tile.
      
      Change-Id: I485c17166f33e24d281079b3138b76f98f0fe081
      bcb65fe6
  13. 25 Oct, 2017 1 commit
    • Ola Hugosson's avatar
      striped_loop_restoration bug fixes · 54671902
      Ola Hugosson authored
      * The above/below buffers did not fit the extra replication pixels to the right and left
      * The wiener filter stripe has to be at least 4 pixel high (because of the
        split into above/mid/below parts)
      
      Change-Id: I360bef114c7ceb439e11b76bd4724af15e051348
      54671902
  14. 24 Oct, 2017 2 commits
    • Sebastien Alaiwan's avatar
      Remove compile guards for VAR_TX experiment · fb838778
      Sebastien Alaiwan authored
      This experiment has been adopted.
      
      Change-Id: Ife4c18a59791268b7ac0de5a8a08e762a042cae2
      fb838778
    • Rupert Swarbrick's avatar
      Expose av1_loop_restoration_filter_unit in restoration.h · dd6f09ab
      Rupert Swarbrick authored
      This patch also does a certain amount of rejigging for loop
      restoration coefficients, grouping the information for a given
      restoration unit into a structure called RestorationUnitInfo. The end
      result is to completely dispense with the RestorationInternal
      structure.
      
      The copy_tile functions in restoration.c, together with those
      functions that operate on a single stripe, have been changed so that
      they take pointers to the top-left corner of the area on which they
      should work, together with a width and height.
      
      The same isn't true of av1_loop_restoration_filter_unit, which still
      takes pointers to the top-left of the tile. This is because you
      actually need the absolute position in the tile in order to do striped
      loop restoration properly.
      
      Change-Id: I768c182cd15c9b2d6cfabb5ffca697cd2a3ff9e1
      dd6f09ab
  15. 20 Oct, 2017 1 commit
    • Debargha Mukherjee's avatar
      Remove CONFIG_CB4X4 config flags · 6ea917ec
      Debargha Mukherjee authored
      Since CB4X4 is adopted and without it the codec does not work,
      it is better to remove it and simplify the code.
      
      Change-Id: I51019312846928069727967e3b2bbb60f0fba80d
      6ea917ec
  16. 19 Oct, 2017 1 commit
    • 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
  17. 14 Oct, 2017 1 commit
  18. 06 Oct, 2017 1 commit
  19. 28 Sep, 2017 2 commits
    • Ola Hugosson's avatar
      Add striped_loop_restoration experiment · 1e7f2d0c
      Ola Hugosson authored
      This experiment offset the filter tile grid 8 pixels upwards.
      Deblocked pixels (rather than CDEFed pixels) are used for the
      2 lines above and below the filter processing unit. The 8 pixel
      offset is the offset produced by deblock/cdef. This way the
      loop_restoration does not need additional line buffers in a
      single pass hardware implementation.
      
      Change-Id: I89e0831dc28413a5d3e02d7a426ce2885ab629d7
      1e7f2d0c
    • Debargha Mukherjee's avatar
      Misc. resize fixes along with the resize test · ccb27264
      Debargha Mukherjee authored
      Re-enables most of the previously disabled tests.
      The ones that are still disabled expect resize to be triggered
      through rate control, which is no longer supported in Av1.
      
      Change-Id: Ie5e9ba3eb0843cd44ff1ac988500081470ba0fe2
      ccb27264
  20. 16 Sep, 2017 1 commit
    • Debargha Mukherjee's avatar
      Add a q index based frame superres mode · 7166f22a
      Debargha Mukherjee authored
      Refactors and adds superres-mode 3 and associated
      paramters --superres-qthresh and --superres-kf-qthresh
      that are used to trigger superres mode when the qindex
      for any frame exceeds the thresholds provided for non-key
      and key-frames respenctively. The superres scale factor
      numerator is progressively reduced from 16 starting from
      that q threshold following a fixed slope.
      
      Change-Id: If1c782993667a6fbaaa01bbde77c4924008c0d28
      7166f22a
  21. 12 Sep, 2017 1 commit
    • David Barker's avatar
      Clarify comment in av1_set_mb_mi() · ee0fd929
      David Barker authored
      The code currently pads the decoded frame width and height to a
      multiple of 8 luma pixels, but there is a TODO suggesting that
      this may be changed to only require a multiple of 4 in future.
      
      But, as per the comments on the linked bug, there are good reasons
      to keep the decoded width and height as multiples of 8. So delete
      the outdated TODO and instead outline the reasons why the current
      behaviour is helpful.
      
      BUG=aomedia:727
      
      Change-Id: I2340bbcd740afe74c2e6fb3cf2e7a420db2b4f40
      ee0fd929
  22. 31 Aug, 2017 1 commit
    • Jingning Han's avatar
      Enable motion field estimation in DRL · ffbb0f91
      Jingning Han authored
      Enable the use of motion field estimation in the dynamic motion
      vector referencing system. With default experiments on, it improves
      the compression performance:
      
      lowres 1.2%
      midres 1.5%
      
      Change-Id: Ifc5b15a7239b5c3212ea50f326ab99d372034658
      ffbb0f91
  23. 08 Aug, 2017 1 commit
  24. 13 Jun, 2017 1 commit
    • Fergus Simpson's avatar
      Make loop-restoration compatible w/ frame_superres · 9cd57cf8
      Fergus Simpson authored
      There were several places where loop_restoration used the encoded width
      and height while superres was active. This patch changes it to use the
      upscaled width and height, since loop_restoration is supposed to occur
      after superres has done its upscaling.
      
      Change-Id: I2b9bbb06b5370618758bf81d8eb63f2eef26af80
      9cd57cf8
  25. 01 Jun, 2017 1 commit
  26. 31 May, 2017 1 commit
    • Jingning Han's avatar
      Rework txfm_above and txfm_left context offset · 331662e9
      Jingning Han authored
      Make the txfm_above and txfm_left be processed in the unit of
      miniumum transform block size. Scale the transform block step
      size with respect to the mode_info step size.
      
      Change-Id: Iee4421e005db742cd4ff7899215560063e5f68e5
      331662e9
  27. 21 May, 2017 1 commit
    • Timothy B. Terriberry's avatar
      cb4x4: Don't assume TX units are half MI_SIZE in skip context indexing. · 5e81643d
      Timothy B. Terriberry authored
      Currently the "transform units" used to measure transform sizes
      in some parts of the code are based on the smallest defined
      transform size.
      
      cb4x4 currently defines a 2x2 transform size, even when chroma_2x2
      is not enabled, which means that the scale of the transform units
      was always double that of MODEINFO units.
      
      Several areas of the code were hard-coding this assumption instead
      of converting from one to the other using appropriate constants.
      
      Change-Id: Ibc55671aa5bc3ad272cb8a036f9c4f9621df85ab
      5e81643d
  28. 31 Mar, 2017 1 commit
  29. 10 Mar, 2017 1 commit
  30. 09 Mar, 2017 1 commit
  31. 27 Feb, 2017 2 commits
    • Alex Converse's avatar
      Remove aom_realloc() · 7f094f10
      Alex Converse authored
      It only handles the realloc constraint (preserving low elements) by
      serendipity, and we don't actually rely on that behavior anyway.
      Meanwhile the calls may do extra copying that gets immediately clobbered
      by the callers.
      
      Cherry-pick from libvpx:
      3063c3760 Remove vpx_realloc()
      
      Change-Id: I8dfa89e4a81084b084889c27bd272fdf85184e8d
      7f094f10
    • Alex Converse's avatar
      loop_restoration: Cleanup allocations · 232e3847
      Alex Converse authored
      Change-Id: Id3824c09cbaae814df1d8fb029215f28e8c7a6b1
      232e3847
  32. 12 Feb, 2017 1 commit
    • David Barker's avatar
      Fix segfault with loop-restoration on x86. · befcc425
      David Barker authored
      The WienerInfo struct requires a 16-byte alignment on x86,
      since it contains filter coefficients which are loaded using
      SSE aligned load instructions. But on 32-bit x86, the default
      alignment of aom_malloc/aom_realloc is only 8 bytes, leading
      to occasional segfaults.
      
      To fix this, rather than using aom_realloc to resize WienerInfo
      structures, we always free and re-allocate them using aom_memalign
      
      BUG=aomedia:345
      
      Change-Id: Ib1b2a42d4a2fa215dcc81ea481c51271ab068a37
      befcc425
  33. 27 Jan, 2017 1 commit
  34. 09 Jan, 2017 1 commit
  35. 06 Jan, 2017 1 commit
    • Debargha Mukherjee's avatar
      Add UV wiener loop restoration · a43a2d98
      Debargha Mukherjee authored
      Enables Wiener based loop restoration only for the UV
      frames. The selfguided and domaintranform filters do not
      work very well for UV components, hence they are disabled.
      For each UV frame a single set of wiener parameters are
      sent. They are applied tile-wise, but all tiles use the
      same parameters.
      
      BDRATE (Global PSNR) results:
      -----------------------------
      lowres: -1.266% (up from -0.666%, good improvement)
      midres: -1.815% (up from -1.792%, tiny improvement)
      
      Tiling on UV components will be explored subsequently.
      
      Change-Id: Ib5be93121c4e88e05edf3c36c46488df3cfcd1e2
      a43a2d98