1. 29 Sep, 2017 3 commits
  2. 27 Sep, 2017 2 commits
    • Thomas Davies's avatar
      NEW_MULTISYMBOL: remove compressed header always. · ad667d90
      Thomas Davies authored
      Enable the RESTRICT_COMPRESSED_HDR experiment when
      NEW_MULTISYMBOL is on and apply when there is no
      backward update also.
      
      Change-Id: I5f6812df2cb3f9bc32fe533b2689fd51235aedbc
      ad667d90
    • Dominic Symes's avatar
      MAX_TILE experiment: add explicit tiles · f58f111f
      Dominic Symes authored
      This patch is designed to complete the CONFIG_MAX_TILE experiment.
      It adds the following features:
      - Explicit tiles of same width can be signalled with command line --tile_width
      - Explicit tiles of same hieght can be signalled with command line --tile_height
      - max_tile now works with the depenedent horizontal tiles experiment
      - additional checking added to ensure maximum number of rows/columns <= 64
      - one fix to the tile group code for when the number of tiles is not a power of two
      
      Change-Id: I749a68fdb3dcdd8d1ced2b3558f3817e4b832c06
      f58f111f
  3. 26 Sep, 2017 1 commit
    • 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
  4. 20 Sep, 2017 2 commits
    • 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
    • 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
  5. 19 Sep, 2017 3 commits
    • RogerZhou's avatar
      Adaptive Motion Vector Resolution · 3b635245
      RogerZhou authored
      Change-Id: Ic3c93a5d2e427ce1ed578389196a265245063821
      3b635245
    • Jingning Han's avatar
      Integrate mfmv with codebase · 94a504af
      Jingning Han authored
      Accomodate recent codebase in the motion field estimation system.
      This solves out of boundary buffer access issues.
      
      Change-Id: Ib99b38940690871b700ceb36cdcc015b52aca113
      94a504af
    • Luc Trudeau's avatar
      [CFL] Refactor includes · 89ff793b
      Luc Trudeau authored
      The cfl_init function is moved out of cfl.h simplifying the includes and
      removing the need for forward declarations.
      
      Change-Id: I47312b25410b718a830b001391e386647005d57e
      89ff793b
  6. 13 Sep, 2017 2 commits
    • David Michael Barr's avatar
      [CFL] Fix typedef-redefinition compiler warnings · 5b2021ea
      David Michael Barr authored
      Instead of forward-declaring AV1_COMMON and MACROBLOCKD,
      move the dependent struct and function prototype closer
      to where they are used and after these types are defined.
      
      Change-Id: I75f005b46ef322a6fcbc01377b8dded1637c5f73
      5b2021ea
    • Rupert Swarbrick's avatar
      Simplify get_partition() implementation · 136d5c17
      Rupert Swarbrick authored
      This function is given a bsize and an mi array and has to figure out
      what partition to use to divide the given bsize in the direction of
      the sizes it finds in the mi array. (Since each block size can be
      reached by only one sequence of partitions, this can be done
      unambiguously)
      
      The previous version was correct, working by looking up entries in the
      partition_lookup array. Unfortunately, that lookup isn't quite enough
      when CONFIG_EXT_PARTITION_TYPES is true, so it then had to do some
      slightly confusing computations to fix things up after the fact.
      
      The new version should be more self-explanatory and doesn't work by
      looking things up in a magic array. It looks up the width and height
      corresponding to bsize and compares them with the width and height
      corresponding to the sb_type at mi_row,mi_col in the mi array. When
      CONFIG_EXT_PARTITION_TYPES is false, this is all you need, and the
      four corresponding cases can be found by a lookup in an array of 4
      elements.
      
      With extended partition types and a sufficiently large block, you have
      to do a bit more searching. For example, if bsize is BLOCK_16X16 and
      the subsize is BLOCK_8X8, the partition might be PARTITION_SPLIT, but
      it might be one of PARTITION_HORZ_A or PARTITION_VERT_A instead. The
      new code adds some comments to explain what's going on.
      
      A nice side-effect of rewriting get_partition in this way is that it
      lets us completely dispense with the partition_lookup array.
      
      The patch also fixes comments for the A/B extended partitions in
      enums.h, which were slightly backwards (a "horizontal split means two
      blocks vertically above one another)
      
      Change-Id: I4b48189103aa63e1859f25a15d7690d53ca7baf5
      136d5c17
  7. 08 Sep, 2017 1 commit
  8. 05 Sep, 2017 1 commit
    • Timothy B. Terriberry's avatar
      Compile fix for f9ef4f6b. · 6577c93e
      Timothy B. Terriberry authored
      Automatic rebasing didn't pick up that an extra instance of the
      EC_SMALLMUL flag was added in commit 8711cf5f.
      
      However, that commit also broke CONFIG_ANS, since the CDF
      probabilities are not inverted in that case. This patch fixes both
      issues.
      
      Change-Id: I85b3eb8a4be5b7a392f2f872fc4a90f3fdbf2727
      6577c93e
  9. 02 Sep, 2017 1 commit
  10. 31 Aug, 2017 3 commits
    • Stanislav Vitvitskyy's avatar
      Using CDFs for read_partition special case · 8711cf5f
      Stanislav Vitvitskyy authored
      Test results:
      akiyo	    -0.05%
      bowing	    -0.072%
      bridge	    -0.042%
      bus	    -0.156%
      coastguard  -0.645%
      container   -0.087%
      deadline     0.007%
      flower       0.02%
      football    -0.009%
      foreman      0.03%
      hall         0.087%
      highway     -0.041%
      husky       -0.031%
      mad900       0.015%
      mobile      -0.007%
      mother       0.012%
      news         0.039%
      pamphlet     0.061%
      paris       -0.003%
      sign        -0.148%
      silent       0.003%
      students    -0.009%
      tempete     -0.061%
      waterfall    0.666
      
      Change-Id: I96c2fd3a6fbc5f8e5cf7f3b881ef89335e58d5ac
      8711cf5f
    • 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
    • Jingning Han's avatar
      Add frame index to the decoded frames · c723b348
      Jingning Han authored
      Add frame index to the deocded frames. Store such information to
      the reference frame buffer pool. This design allows each frame
      to know its index in natural order, as well as its reference
      frames positions.
      
      Change-Id: I5bb36928dc5750a4fdcc582dca0d244d6482f400
      c723b348
  11. 25 Aug, 2017 1 commit
    • Rupert Swarbrick's avatar
      Add support for 16x4 partitions · 6a93b155
      Rupert Swarbrick authored
      When updating default_partition_cdf, this sums the probabilities that
      were divided evenly across the pairs PARTITION_HORZ_A/PARTITION_HORZ_B
      and PARTITION_VERT_A/PARTITION_VERT_B. Those summed probabilities now
      get distributed evenly across the triples you get by adding
      PARTITION_HORZ_4 and PARTITION_VERT_4, respectively.
      
      Rather than implement 2X8/8X2 blocks for now, ss_size_lookup returns
      4X8/8X4 block sizes to use as chroma transform sizes for 4X16/16X4
      blocks.
      
      The changes in setup_pred_plane and set_skip_context are because this
      is presumably the first time we've had to deal with 16x4 or 4x16
      blocks. Since BLOCK_16X4 is not less than BLOCK_8X8, the existing
      logic didn't work (and the "shuffle back one" logic should probably be
      done for small widths and heights separately).
      
      Change-Id: If28d8954da42d6c726f2bcce2cb5242154b0870c
      6a93b155
  12. 24 Aug, 2017 1 commit
    • Urvang Joshi's avatar
      get_sqr_tx_size(): fix for tx64x64 · dd3206fc
      Urvang Joshi authored
      When 64x64 transforms are enabled, it should return TX_64x64.
      
      Midres set:
      Small PSNR improvement overall (-0.061%),
      But 3 clips have large gains (-1.0% to -0.4% range)
      
      Change-Id: Ic2a1f0213449f81213219479c6b6aa0acfaac2e7
      dd3206fc
  13. 21 Aug, 2017 1 commit
  14. 18 Aug, 2017 2 commits
    • Yaowu Xu's avatar
      Correctly indicate invalid partition context · 88e673d2
      Yaowu Xu authored
      BUG=aomedia:685
      
      Change-Id: I8490af713c53e8c420ef9dffa7c27bb71bbfca54
      88e673d2
    • Tom Finegan's avatar
      Make CONFIG_COLORSPACE_HEADERS public API changes unconditional. · 01d43e1f
      Tom Finegan authored
      Avoid changing the public API based on an experiment flag:
      
      - Remove aom_config.h include from aom_image.h.
      - Unconditionally include the existing API additions.
      - Add some missing doc comments (silences Doxygen warnings).
      - Return an error when using ctrl flags that require
        CONFIG_COLORSPACE_HEADERS when it's not enabled.
      - Move colorspace_headers to the correct section of configure.
      - Move CONFIG_COLORSPACE_HEADERS to the correct section of
        aom_config_defaults.cmake.
      - clang-format style check appeasement
      
      Change-Id: I7b5d72c6f9f1a5561409d7813ba59180d98d8805
      01d43e1f
  15. 10 Aug, 2017 1 commit
    • Urvang Joshi's avatar
      Remove PALETTE flag · c6300aa1
      Urvang Joshi authored
      This experiment is now adopted as it was cleared by Tapas.
      
      Note: Palette use can still be controlled by command-line option
      "--tune-content=..." in 'aomenc'.
      
      Change-Id: I832f49f20f60c34bdef5b424755849c496687e87
      c6300aa1
  16. 08 Aug, 2017 2 commits
  17. 04 Aug, 2017 1 commit
    • Steinar Midtskogen's avatar
      CDEF cleanup · 94de0aaa
      Steinar Midtskogen authored
      Name changes and code moves to bring code more in line with the
      design doc and an upcoming single-pass patch.  No functional changes.
      
      Change-Id: I2bccd58c644e534b139f420b623390aa971fbdb0
      94de0aaa
  18. 02 Aug, 2017 1 commit
  19. 01 Aug, 2017 3 commits
    • Thomas Daede's avatar
      Frame context signaling: Remove reset symbols from the bitstream. · a6a854b1
      Thomas Daede authored
      Because frame contexts now follow reference frames, explicit resets
      are no longer necessary, but can simply happen at the same time
      as reference frame resets.
      
      Change-Id: Idbed3794e3ed52fa298346943a3014fa1ca23897
      a6a854b1
    • Thomas Daede's avatar
      Add new experiment: frame_context_signaling. · da4d8b9c
      Thomas Daede authored
      This stores frame contexts alongside a reference frame, and always
      uses the frame in reference slot 0 (LAST_FRAME) as the source of
      the frame context.
      
      The encoder could then reorder reference frames as to control
      which frame context is used, however currently it does not.
      
      Low Latency AWCY result:
      
         PSNR | PSNR Cb | PSNR Cr | PSNR HVS |    SSIM | MS SSIM | CIEDE 2000
      -0.1438 |  0.4161 |     N/A |   0.0386 | -0.0281 |  0.0453 |     0.2514
      
      https://arewecompressedyet.com/?job=before-frame-context-signaling%402017-06-07T23%3A20%3A49.473Z&job=after-frame-context-signaling%402017-06-07T23%3A21%3A36.117Z
      
      Change-Id: I4f6f9b12cb403573efbf9e5c3077d62f5dedc467
      da4d8b9c
    • Rupert Swarbrick's avatar
      tempv_signaling: Simplify test for whether prev_frame works for mvs · 1f990a64
      Rupert Swarbrick authored
      For some background, see this previous change in Gerrit[0]. What's
      going on here is that we only want to use a previous frame for motion
      vector prediction if the encoded sizes match. When scaling with
      superres, this means the size before upscaling.
      
      To check this correctly, we need to check prev_frame's width/height
      and compare it with the current frame. Without superres, prev_frame's
      width/height is stored in y_crop_width/y_crop_height so we can check
      that way. With superres, those numbers are after the scaling, so can't
      be compared with cm->width and cm->height.
      
      The previous code worked around this by comparing with cm->last_width
      and cm->last_height. That works because these are the width/height for
      the last encoded and shown frame and that frame *is* prev_frame if
      last_show_frame is true. Since this is the only case when we want to
      use prev_frame, they are the numbers we need.
      
      This patch simplifies the logic by storing the width/height in
      RefCntBuffer before any scaling and then checking that they match.
      
      The check for whether we can use motion vectors from a previous frame
      is factored out into a pair of inline functions in the
      header. frame_might_use_prev_frame_mvs() is true if it's possible that
      this frame could use motion vectors from a previous frame. This
      doesn't use knowledge of what prev_frame is: it just checks we're not
      in error resilient mode and aren't a keyframe. When this is true, a
      flag is signaled in the bitstream to say whether we actually want to
      use motion vectors from the previous frame.
      
      The second function, frame_can_use_prev_frame_mvs, is true if the
      current frame / previous frame pair is suitable for sharing motion
      vectors. This is a stricter test: the previous frame needs to be
      have been shown and not to have been intra_only, and it needs to have
      the same width/height as the current frame.
      
      If the re-assignment of prev_frame (just before the calls to
      frame_can_use_prev_frame_mvs()) were removed in some way, we could
      probably combine the two functions and often save a bit per frame
      header.
      
      The other slight tidy-up in the patch is to move re-allocation of the
      mvs buffer into onyxc_int.h: the code that did the allocation was
      duplicated between the encoder and decoder.
      
      [0] https://aomedia-review.googlesource.com/c/13806
      
      BUG=aomedia:78
      
      Change-Id: If25227fa24222fc05c56529c2ac9ddf1e1c36a84
      1f990a64
  20. 21 Jul, 2017 1 commit
  21. 20 Jul, 2017 1 commit
    • Zoe Liu's avatar
      Add support to the experiment of altref2 · 97ad058e
      Zoe Liu authored
      This CL adds an extra alt-ref reference frame, namely ALTREF2_FRAME,
      and designs the contexts for ALTREF2_FRAME.
      
      Change-Id: I12fe8629b868aebf6c2b54260fca5abc38f90ae6
      97ad058e
  22. 14 Jul, 2017 1 commit
    • Yunqing Wang's avatar
      Make EXT_TILE compatible with TILE_GROUPS · eeb08a9b
      Yunqing Wang authored
      Added a 1-bit flag 'large_scale_tile'. If it is 0 that is the default value,
      use normal tile coding in TILE_GROUPS. If it is 1, use large-scale tile
      coding in EXT_TILE.
      
      At large_scale_tile=1 case, if single-tile-decoding is required, then the
      loopfilter is disabled.
      
      Related API and unit tests were modified.
      
      Change-Id: I3ba12dc3d80ccf1ab21543ab3b16c02282c34e3b
      eeb08a9b
  23. 12 Jul, 2017 2 commits
    • Rupert Swarbrick's avatar
      ext-partition-types: Add 4:1 partitions · 93c39e91
      Rupert Swarbrick authored
      This patch adds support for 4:1 rectangular blocks to various common
      data arrays, and adds new partition types to the EXT_PARTITION_TYPES
      experiment which will use them.
      
      This patch has the following restrictions, which can be lifted in
      future patches:
      
        * ext-partition-types is incompatible with fp_mb_stats and supertx
          for the moment
      
        * Currently only 32x32 superblocks can use the new partition types
      
      There's a slightly odd restriction about when we allow
      PARTITION_HORZ_4 or PARTITION_VERT_4. Since these both live in the
      EXT_PARTITION_TYPES CDF, read_partition() can only return them if both
      has_rows and has_cols is true. This means that at least half of the
      width and height of the block must be visible. It might be nice to
      relax that restriction but that would imply a change to how we encode
      partition types, which seems already to be in a state of flux, so
      maybe it's better to wait until that has settled down.
      
      Change-Id: Id7fc3fd0f762f35f63b3d3e3bf4e07c245c7b4fa
      93c39e91
    • Zoe Liu's avatar
      Further work on ext-comp-refs for ref frame coding · fcf5fa27
      Zoe Liu authored
      (1) Work with var-refs to remove redundant bits in ref frame
          coding;
      (2) Add a new uni-directional compound reference pair:
          (LAST_FRAME, LAST3_FRAME);
      (3) Redesign the contexts for encoding uni-directional reference frame
          pairs;
      (4) Use aom_entropy_optimizer to collect stats for all the default
          probability setups related to the coding of reference frames.
      
      Compared against the baseline (default enabled tools excluding ext-tx
      and global-motion for encoder speed concern) with one-sided-compound,
      the coding gain of ext-comp-refs + var-refs - one-sided-compound is:
      
      lowres: avg_psnr -0.385%; ovr_psnr -0.378% ssim -0.344%
      midres: avg_psnr -0.466%; ovr_psnr -0.447% ssim -0.513%
      
      AWCY - High Latency:
         PSNR | PSNR Cb | PSNR Cr | PSNR HVS |    SSIM | MS SSIM | CIEDE 2000
      -0.2758 | -0.1526 | -0.0965 |  -0.2581 | -0.2492 | -0.2534 |    -0.2118
      
      AWCY - Low Latency:
         PSNR | PSNR Cb | PSNR Cr | PSNR HVS |    SSIM | MS SSIM | CIEDE 2000
      -1.0467 | -1.4500 | -0.9732 |  -0.9928 | -1.0407 | -1.0180 |    -1.0049
      
      Compared against the baseline (default enabled tools excluding ext-tx
      and global-motion for encoder speed concern) without
      one-sided-compound, the coding gain of
      ext-comp-refs + var-refs - one-sided-compound is:
      
      lowres: avg_psnr -0.875%; ovr_psnr -0.877% ssim -0.895%
      midres: avg_psnr -0.824%; ovr_psnr -0.802% ssim -0.843%
      
      Change-Id: I8de774c9a74c20632ea93ccb0c17779fa94431cb
      fcf5fa27
  24. 05 Jul, 2017 1 commit
    • Thomas Daede's avatar
      Disable CDEF signaling when all segments are lossless. · f636d5cd
      Thomas Daede authored
      This required moving the CDEF and lr signaling in the
      uncompressed header to after segmentation is signaled.
      
      The all_lossless logic was factored out into onyxc_int.h.
      
      Change-Id: If8de03438d4e9f8cb49ed49b60a880962cc9d28b
      f636d5cd
  25. 28 Jun, 2017 1 commit
    • Jingning Han's avatar
      Support rectangular tx_type coding in var-tx · 243b66bc
      Jingning Han authored
      Support the transform block kernel coding for rectangular
      transform block size in var-tx. This integrates txk-sel with
      var-tx.
      
      Change-Id: I9a8edd84812168f56c79b78cc9af34f6304b1d54
      243b66bc
  26. 20 Jun, 2017 1 commit
    • James Zern's avatar
      get_min_tx_size: disable -Warray-bounds · 5d61b609
      James Zern authored
      this warning is covered by an assert and other runtime detection.
      expanding the array, adding a conditional or converting the type to int
      are less desirable.
      
      BUG=aomedia:578
      
      Change-Id: Idb6a1dec5f17db85a0e9c1d0ee372e701f4e1aa4
      5d61b609