1. 01 Sep, 2016 1 commit
  2. 29 Aug, 2016 1 commit
    • Aamir Anis's avatar
      Tiling in loop restoration + cosmetics · e40e6e57
      Aamir Anis authored
      Frame can be split into rectangular tiles for application of separate
      bilateral or Wiener filters per tile. Some variable names changed for
      better readability.
      
      Change-Id: I13ebc4d0b0baf368e524db5ce276f03ed76af9c8
      e40e6e57
  3. 23 Aug, 2016 1 commit
  4. 16 Aug, 2016 2 commits
    • Yaowu Xu's avatar
      Port dering experiment from aom · 253c001f
      Yaowu Xu authored
      Mannually cherry-picked:
      15791332 Use OD_DIVU for small divisions in temporal_filter.
      03122298 Replace divides by small values with multiplies.
      9c48eec7 Removing divisions from od_dir_find8()
      0950ed82 Merge "Port active map / cyclic refresh fixes to vp10."
      efefdad7 Port active map / cyclic refresh fixes to vp10.
      1eaf748c Port switch to 9-bit rate cost to aom.
      0b1606e7 Only build deringing code when --enable-dering.
      e2511e15 Deringing cleanup: don't hardcode the number of levels
      8fe5c5d6 Rename dering_in to od_dering_in to sync with Daala
      4eb1380d Makes second filters for 45-degree directions horizontal
      7f4c3f58 Removes the superblock variance contribution to the threshold
      3dc56f93 Simplifying arithmetic by using multiply+shift
      cf2aaba9 Return 0 explicitly for OD_ILOG(0).
      49ca22aa Use the Daala implementation of OD_ILOG().
      85187243 Fix compiler warning in od_dering.c.
      485d6a69 Prevent multiple inclusion of odintrin.h.
      51b7a998 Adds the Daala deringing filter as experimental
      
      Note that a few of the changes were already in libvpx codebse.
      
      Change-Id: I1c32ee7694e5ad22c98b06ff97737cd792cd88ae
      253c001f
    • Yaowu Xu's avatar
      Port commits related to clpf and qm experiments · 0818a7c8
      Yaowu Xu authored
      Manually cherry-picked following commits from AOMedia git repository:
      bb2727c2 Sort includess for "clpf.h"
      c297fd00 Add quantisation matrix range parameters.
      0527894f Add encoder option and signaling for quant matrix control.
      4106232b Turn off trellis coding for quantization matrices.
      4017fca3 Modify tests to allow quantization matrices.
      1c122c24 Add quant and dequant functions for new quant matrices.
      95a89994 Enable CLPF
      f72782bb Fix a build issue
      73bae509 Add quantisation matrices and selection functions
      33208d20 Added support for constrained low pass filter (CLPF)
      
      Change-Id: I60fc1ee1ac40e6b9d1d00affd97547ee5d5dd6be
      0818a7c8
  5. 12 Aug, 2016 1 commit
  6. 04 Aug, 2016 1 commit
    • Zoe Liu's avatar
      Code refactoring on Macros related to ref frame numbers · 1af28f02
      Zoe Liu authored
      We have renamed following Macros to avoid name confusion:
      
      REFS_PER_FRAME --> INTER_REFS_PER_FRAME
      (= ALTREF_FRAME - LAST_FRAME + 1)
      MAX_REF_FRAMES --> TOTAL_REFS_PER_FRAME
      (= ALTREF_FRAME - INTRA_FRAME + 1)
      
      INTER_REFS_PER_FRAME specifies the maximum number of reference frames
      that each Inter frame may use.
      TOTAL_REFS_PER_FRAME is equal to INTER_REFS_PER_FRAME + 1, which
      counts the INTRA_FRAME.
      
      Further, at the encoder side, since REF_FRAMES specifies the maximum
      number of the reference frames that the encoder may store, REF_FRAMES
      is usually larger than INTER_REFS_PER_FRAME. For example, in the
      ext-refs experiment, REF_FRAMES == 8, which allows the encoder to
      store maximum 8 reference frames in the buffer, but
      INTER_REFS_PER_FRAME equals to 6, which allows each Inter frame may
      use up to 6 frames out of the 8 buffered frames as its references.
      Hence, in order to explore the possibility to store more reference
      frames in future patches, we modified a couple of array sizes to
      accomodate the case that the number of buffered reference frames is
      not always equal to the number of the references that are being used
      by each Inter frame.
      
      Change-Id: I19e42ef608946cc76ebfd3e965a05f4b9b93a0b3
      1af28f02
  7. 03 Aug, 2016 1 commit
  8. 02 Aug, 2016 1 commit
  9. 27 Jul, 2016 1 commit
    • Jingning Han's avatar
      Separate frame context index for different frame types · 8915eb8e
      Jingning Han authored
      This commit makes the encoder to use different frame context index
      for different frame types. In the baseline setting, it sets the
      frame context index of the overlay frame to be different from other
      regular inter frames. In the ext-refs setting, it further allows
      the backward reference frame to use a different index.
      
      It improves the compression performance for both settings.
      
      Baseline
      lowres  0.12%
      
      ext-refs
      lowres  0.50%
      midres  0.56%
      
      Change-Id: I7c63ddec9fc296c56a86353cf2c661a740b97a97
      8915eb8e
  10. 19 Jul, 2016 1 commit
    • Sarah Parker's avatar
      Add global motion parameters to compressed header · 5fa46c0b
      Sarah Parker authored
      Currently nothing is implemented to compute GM parameters, this
      just adds the capability to send them in the bitstream if they
      were computed. Still need to implement the reconstruction
      based on the parameters in reconinter.
      
      Change-Id: I72aea3c6a9de9f5a40f96da76c82b54a52781fe2
      5fa46c0b
  11. 24 Jun, 2016 1 commit
  12. 17 Jun, 2016 1 commit
    • Zoe Liu's avatar
      Merge bi-predictive frames to EXT_REFS · 5805a14c
      Zoe Liu authored
      This patch removed the experiment of BIDIR_PRED and merged the feature
      into the experiment of EXT_REFS:
      
      (1) Each frame now has up to 6 reference frames, namely
          LAST_FRAME, LAST2_FRAME, LAST3_FRAME, GOLDEN_FRAME, (forward) and
          BWDREF_FRAME, ALTREF_FRAME (backward);
          LAST4_FRAME has been removed;
      (2) First pass still keeps the 8 updates:
          KF_UPDATE, LF_UPDATE, GF_UPDATE, ARF_UPDATE, OVERLAY_UPDATE, and
          BRF_UPDATE, LAST_BIPRED_UPDATE, BI_PRED_UPDATE;
      (3) show_existing_frame==1 is supported in the experiment of EXT_REFS;
      (4) New encoding modes are added for both single-ref and compound cases,
          through the use of the 2 extra forward references (LAST2 & LAST3)
          and the 1 extra backward reference (BWDREF).
      
      RD performance wise, using Overall PSNR: Avg/BDRate
              Bipred only      Prev EXT_REFS    Current EXT_REFS with bipred
      lowres: -3.474/-3.324    -1.748/-1.586    -4.613/-4.387
      derflr: -2.097/-1.353    -1.439/-1.215    -3.120/-2.252
      midres: -2.129/-1.901    -1.345/-1.185    -2.898/-2.636
      
      If in vp10/encoder/firstpass.h, change BFG_INTERVAL from 2 to 3, i.e. to
      use 2 bi-predictive frames than 1, a further improvement may be
      obtained:
                       Current EXT_REFS with bipred
              1 bi-predictive frame    2 bi-predictive frames
      lowres: -4.613/-4.387            -4.675/-4.465
      derflr: -3.120/-2.252            -3.333/-2.516
      midres: -2.898/-2.636            -3.406/-3.095
      
      Change-Id: Ib06fe9ea0a5cfd7418a1d79b978ee9d80bf191cb
      5805a14c
  13. 10 Jun, 2016 1 commit
    • Sarah Parker's avatar
      Move new quant experiment from nextgen · a21afd42
      Sarah Parker authored
      This experiment implements non-uniform quantization where
      the width of the bins increases gradually to more closely
      match a laplacian distribution of the coeficcients.
      
      Performance Gain:
      derflr: 0.15%
      hevcmr: 0.675%
      
      Change-Id: I25234244e3bcd94b87c1f77cf682190b61c8ef94
      a21afd42
  14. 28 May, 2016 1 commit
    • Zoe Liu's avatar
      Make the bi-predictive frame group interval adjustable · e89ca180
      Zoe Liu authored
      This is for the bidir-pred experiment. Previously the length of the
      bi-predictive frame group interval is fixed at 2, i.e. one
      bi-predictive frame may be inserted every other frame. This patch
      makes the length adjustable, i.e. any positive number may be
      specified, but the use of the backward ref will be turned off if the
      bi-predictive frame group interval is larger than the golden frame
      group.
      
      Further, an additional rate factor level has been added:
      INTER_LOW
      , which applies to LAST_BIPRED_UPDATE frames that are not used as
      references.
      
      Change-Id: I5514d34a64dd486bbb5756c2d0612946f598a789
      e89ca180
  15. 24 May, 2016 1 commit
    • Zoe Liu's avatar
      Added an experiment "bidir_pred" for backward prediction · cf5083d4
      Zoe Liu authored
      Major parts have been implemented as follows:
      (1) Added BRF_UPDATE, LASTNRF_UPDATE, and NRF_UPDATE in firstpass.c;
      (2) Added the handling for the scenario of
      "cpi->common.show_existing_frame == 1" at the encoder;
      (3) Added a new reference frame of BWDREF_FRAME;
      (4) Have bwd-ref work with upsampled references.
      
      Note that when the experiment of "ext_refs" turned on, this experiment
      will be turned off automatically currently.
      
      RD performance in Overall PSNR has been improved, compared against the
      VP10 baseline:
      
      lowres: Avg -3.312; BDRate -3.154
      derflr: Avg -1.927; BDRate -1.176
      midres: Avg -2.149; BDRate -2.001
      hdres : Avg -0.567; BDRate -0.588
      
      Change-Id: I4c06ff51cc20194bffbd4d2346e57ba3dcf6b62c
      cf5083d4
  16. 10 May, 2016 1 commit
    • Geza Lore's avatar
      Break tile row dependencies. · 9ab9438f
      Geza Lore authored
      When not using ext-tile, there were still dependencies between tile
      rows due to various tools (eg intra predictors) relying on the above
      row or above mode info, which can be in the above tile. This is now
      broken (the same way as it was when ext-tile is enabled) by fixing
      the appropriate predicates.
      
      Change-Id: I107dd0d8481775a792f14e05cfbbd761f16cdc1e
      9ab9438f
  17. 09 May, 2016 1 commit
    • Yunqing Wang's avatar
      Refine VP10 REFRESH_FRAME_CONTEXT_MODE · 484ba024
      Yunqing Wang authored
      In VP10, REFRESH_FRAME_CONTEXT_OFF mode is only set when the error
      resillient mode is on. Instead of being used to decide how to update
      the frame contexts, it is used to decide if or not to reset the
      frame contexts.
      
      To verify, ran borg test on lowres set. The result is neutral.
      Overall PSNR: -0.006%; SSIM: -0.006%.
      
      Change-Id: Ic48265cf7488e80c6f5aab3eef7ba1c273506419
      484ba024
  18. 19 Apr, 2016 1 commit
  19. 07 Apr, 2016 1 commit
    • Geza Lore's avatar
      Make superblock size variable at the frame level. · 454989ff
      Geza Lore authored
      The uncompressed frame header contains a bit to signal whether the
      frame is encoded using 64x64 or 128x128 superblocks. This can vary
      between any 2 frames.
      
      vpxenc gained the --sb-size={64,128,dynamic} option, which allows the
      configuration of the superblock size used (default is dynamic). 64/128
      will force the encoder to always use the specified superblock size.
      Dynamic would enable the encoder to choose the sb size for each
      frame, but this is not implemented yet (dynamic does the same as 128
      for now).
      
      Constraints on tile sizes depend on the superblock size, the following
      is a summary of the current bitstream syntax and semantics:
      
      If both --enable-ext-tile is OFF and --enable-ext-partition is OFF:
           The tile coding in this case is the same as VP9. In particular,
           tiles have a minimum width of 256 pixels and a maximum width of
           4096 pixels. The tile width must be multiples of 64 pixels
           (except for the rightmost tile column). There can be a maximum
           of 64 tile columns and 4 tile rows.
      
      If --enable-ext-tile is OFF and --enable-ext-partition is ON:
           Same constraints as above, except that tile width must be
           multiples of 128 pixels (except for the rightmost tile column).
      
      There is no change in the bitstream syntax used for coding the tile
      configuration if --enable-ext-tile is OFF.
      
      If --enable-ext-tile is ON and --enable-ext-partition is ON:
           This is the new large scale tile coding configuration. The
           minimum/maximum tile width and height are 64/4096 pixels. Tile
           width and height must be multiples of 64 pixels. The uncompressed
           header contains two 6 bit fields that hold the tile width/heigh
           in units of 64 pixels. The maximum number of tile rows/columns
           is only limited by the maximum frame size of 65536x65536 pixels
           that can be coded in the bitstream. This yields a maximum of
           1024x1024 tile rows and columns (of 64x64 tiles in a 65536x65536
           frame).
      
      If both --enable-ext-tile is ON and --enable-ext-partition is ON:
           Same applies as above, except that in the bitstream the 2 fields
           containing the tile width/height are in units of the superblock
           size, and the superblock size itself is also coded in the bitstream.
           If the uncompressed header signals the use of 64x64 superblocks,
           then the tile width/height fields are 6 bits wide and are in units
           of 64 pixels. If the uncompressed header signals the use of 128x128
           superblocks, then the tile width/height fields are 5 bits wide and
           are in units of 128 pixels.
      
      The above is a summary of the bitstream. The user interface to vpxenc
      (and the equivalent encoder API) behaves a follows:
      
      If --enable-ext-tile is OFF:
           No change in the user interface. --tile-columns and --tile-rows
           specify the base 2 logarithm of the desired number of tile columns
           and tile rows. The actual number of tile rows and tile columns,
           and the particular tile width and tile height are computed by the
           codec ensuring all of the above constraints are respected.
      
      If --enable-ext-tile is ON, but --enable-ext-partition is OFF:
           No change in the user interface. --tile-columns and --tile-rows
           specify the WIDTH and HEIGHT of the tiles in unit of 64 pixels.
           The valid values are in the range [1, 64] (which corresponds to
           [64, 4096] pixels in increments of 64.
      
      If both --enable-ext-tile is ON and --enable-ext-partition is ON:
           If --sb-size=64 (default):
               The user interface is the same as in the previous point.
               --tile-columns and --tile-rows specify tile WIDTH and HEIGHT,
               in units of 64 pixels, in the range [1, 64] (which corresponds
               to [64, 4096] pixels in increments of 64).
           If --sb-size=128 or --sb-size=dynamic:
               --tile-columns and --tile-rows specify tile WIDTH and HEIGHT,
               in units of 128 pixels in the range [1, 32] (which corresponds
               to [128, 4096] pixels in increments of 128).
      
      Change-Id: Idc9beee1ad12ff1634e83671985d14c680f9179a
      454989ff
  20. 04 Apr, 2016 2 commits
  21. 31 Mar, 2016 1 commit
    • Geza Lore's avatar
      Rename MI_BLOCK_SIZE and MI_MASK macros. · 511da8cb
      Geza Lore authored
      Rename MI_BLOCK_SIZE.* -> MAX_MIB_SIZE.* (MIB is for MI Block).
      Rename MI_MASK.* -> MAX_MIB_MASK.*
      
      There are no functional changes.
      
      This is in preparation for coding the superblock size at the frame
      level, which will require some of these constants to become variables.
      The new names better reflect future semantics, and hence make the code
      clearer.
      
      Change-Id: Iee08d97554cf4cc16a5dc166a3ffd1ab91529992
      511da8cb
  22. 30 Mar, 2016 1 commit
    • Geza Lore's avatar
      Extend superblock size fo 128x128 pixels. · 552d5cd7
      Geza Lore authored
      If --enable-ext-partition is used at build time, the superblock size
      (sometimes also referred to as coding unit (CU) size) is extended to
      128x128 pixels.
      
      Change-Id: Ie09cec6b7e8d765b7555ff5d80974aab60803f3a
      552d5cd7
  23. 24 Mar, 2016 1 commit
    • Geza Lore's avatar
      Port large scale tile coding features from nextgen. · 490ba1ad
      Geza Lore authored
      If configured with --enable-ext-tile, the codec uses an alternative
      tile coding syntax in the bitstream. Changes include::
       - The maximum number of tile rows and columns is extended to 1024
         each.
       - The minimum tile width/height is 64 pixels (1 superblock).
       - A tile copy mode is added where a tile directly reuse the coded
         data of a previous tile
       - The meaning of the tile-columns and tile-rows codec parameters are
         overloaded to mean tile-width and tile-height in units of 64
         pixels.
       - All tiles should now be independent, including rows within the
         same columns, so large scale parallel, or independent decoding is
         possible.
       - vpxdec also gained the options to decode only a particular tile,
         tile row, or tile column.
      
      Changes without --enable-ext-tile:
       - All tiles should now be independent, including rows within the
         same columns, so large scale parallel, or independent decoding is
         possible.
       - vpxenc default tile configuration changed to use 1 tile column.
      
      Change-Id: I0cd08ad550967ac18622dae5e98ad23d581cb33e
      490ba1ad
  24. 22 Mar, 2016 1 commit
    • Julia Robson's avatar
      Porting ext_partition experiment from nextgen · 5cce322a
      Julia Robson authored
      This has been ported under ext_partition_types because it is due
      to be combined with the coding_unit_size experiment which is
      already being ported under ext_partition
      
      Change-Id: I47af869ae123ddf0aa99160dac644059d14266ee
      5cce322a
  25. 16 Mar, 2016 2 commits
    • hui su's avatar
      Add "entropy" experiment · 83b47af1
      hui su authored
      This patch added two features to improve entropy coding efficiency
      for coefficient tokens.
      
      1. Choose 1 of 4 default probability tables based on q-index for
      key-frames.
      It is ported from nextgen branch:
      https://chromium-review.googlesource.com/#/c/280586/
      
      2. Do backward update after each superblock (64X64) row using
      subframe token counts.
      
      Coding gain: 0.1% on lowres; 0.42% on midres; 0.36% on hdres.
      Much larger gain for key-frames: 2.6%, 2.3%, 1.7%.
      
      Design doc: go/huisu-entropy
      
      Change-Id: Ia3b6a615636be09247d70e4c520405637561532b
      83b47af1
    • Geza Lore's avatar
      Factor out zeroing above and left context. · c2005c57
      Geza Lore authored
      Change-Id: I6e5d8cff869c7415a924f845c9e6ccaabe2b7a9b
      c2005c57
  26. 03 Mar, 2016 1 commit
    • Alex Converse's avatar
      ANS: Switch from PDFs to CDFs. · 6bbbe316
      Alex Converse authored
      Make the RANS implementation operate on cumulative distribution
      functions rather than individual probability distribution functions.
      CDFs have shown themselves more flexible to work with.
      
      Reduces decoding memory usage from scaling O(num_distributions *
      symbol_resolution) to O(num_distributions).
      
      No bitstream change. This is an purely implementation change.
      
      Change-Id: I4e18d3a0a3d37a36a61487c3d778f9d088b0b374
      6bbbe316
  27. 12 Feb, 2016 1 commit
    • Debargha Mukherjee's avatar
      Adding loop wiener restoration · 8b0a5b87
      Debargha Mukherjee authored
      Adds a wiener filter based restoration scheme in loop which can
      be optionally selected instead of the bilateral filter.
      
      The LMMSE filter generated per frame is a separable symmetric 7
      tap filter. Three parameters for each of horizontal and vertical
      filters are transmitted in the bitstream. The fourth parameter
      is obtained assuming the sum is normalized to 1.
      Also integerizes the bilateral filters, along with other
      refactoring necessary in order to support the new switchable
      restoration type framework.
      
      derflr: -0.75% BDRATE
      
      [A lot of videos still prefer bilateral, however since many frames
      now use the simpler separable filter, the decoding speed is
      much better].
      
      Further experiments to follow, related to replacing the bilateral.
      
      Change-Id: I6b1879983d50aab7ec5647340b6aef6b22299636
      8b0a5b87
  28. 09 Feb, 2016 1 commit
    • Yaowu Xu's avatar
      Fix a bug in HBD buffer size computation · bb5f9e43
      Yaowu Xu authored
      The value of use_highbitdepth flag is used for compute the size for
      high bit depth buffer allocation, which should take value 0 or 1
      depending on if the buffer is used for high bit depth or not.
      Previously, the values is set to 8 or 0, this commit fixes the issue
      and properly set the value for this flag to 1 or 0.
      
      This cuts the size of highbitdepth buffer memory allocation to 2/9 of
      the size prior to the fix.
      
      Change-Id: I401518b5a6147e5d8a973e54f7ca6bc1892065e0
      bb5f9e43
  29. 29 Jan, 2016 1 commit
  30. 27 Jan, 2016 1 commit
    • Debargha Mukherjee's avatar
      Fixes ext-interp experiment · eef57c1e
      Debargha Mukherjee authored
      Fixes integer pel MV usage for the sub8x8 case, which fixes a
      rare mismatch issue.
      
      Also adds some other minor missing code related to filter threshes.
      
      Change-Id: I6b07e6cf9b287ba4b5bd6599af4a7412e50b3bdc
      eef57c1e
  31. 21 Jan, 2016 1 commit
    • Debargha Mukherjee's avatar
      Loop restoration filter · 84ca7a9f
      Debargha Mukherjee authored
      Current implementation is a bilateral filter whose
      parameters are transmitted in the bitstream.
      
      derflr: -0.647% BDRATE
      hevcmr: -0.794% BDRATE
      
      This is a prelimary patch. Various other variations are to
      be investigated next, that will hopefully be less expensive
      on the decoder side.
      
      Change-Id: I50634ae8f5014ad0bf7432306348908a349d81e1
      84ca7a9f
  32. 10 Dec, 2015 1 commit
    • Jingning Han's avatar
      Enable adaptive prediction mode coding · aa5d53eb
      Jingning Han authored
      This commit allows the codec to analyze the reference motion vector
      candidate list and adaptively reduce the size of inter prediction
      mode set.
      
      Change-Id: Ied6a403843b860d66f26ed485c1825c05c71bdfc
      aa5d53eb
  33. 08 Dec, 2015 1 commit
  34. 03 Dec, 2015 1 commit
    • hui su's avatar
      Remove palette from VP10 · 5d3327e8
      hui su authored
      Store it in nextgenv2 for now.
      
      Change-Id: Iab0af0e15246758e3b6e8bde4a74b13c410576fc
      5d3327e8
  35. 23 Nov, 2015 1 commit
    • Jingning Han's avatar
      Move n8_w and n8_h out of experiment flag · c335bfeb
      Jingning Han authored
      These primitive variables are commonly required by many other
      experiments as well. The use of n4_w and n4_h was originally
      introduced in the vp9 decoder implementation.
      
      Change-Id: I93d701d891e3860f31150031e3b9a2b29a3993d2
      c335bfeb
  36. 21 Nov, 2015 1 commit
    • Zoe Liu's avatar
      Added 3 more reference frames for inter prediction. · 3ec1601e
      Zoe Liu authored
      Under the experiment of EXT_REFS: LAST2_FRAME, LAST3_FRAME, and
      LAST4_FRAME.
      
      Coding efficiency: derflr +1.601%; hevchr +1.895%
      Speed: Encoder slowed down by ~75%
      
      Change-Id: Ifeee5f049c2c1f7cb29bc897622ef88897082ecf
      3ec1601e
  37. 17 Nov, 2015 1 commit
    • hui su's avatar
      Merge MISC_FIXES · 66f2f65e
      hui su authored
      Remove MISC_FIXES flags except for the changes on MV precision, which
      has a 0.1% performance drop.
      
      On derflr, the impact is -0.012%.
      
      Change-Id: I0a74e5a212dd0cb827192a318c92a714c9681e45
      66f2f65e