1. 19 Apr, 2016 3 commits
    • hui su's avatar
      Enable optimize_b for intra blocks · e43c2111
      hui su authored
      Coding gain:
      lowres  0.05%
      midres  0.10%
      hdres   0.18%
      
      Change-Id: I508b150c02588f911a8ddddfe73c770f0819fe10
      e43c2111
    • Geza Lore's avatar
      Revert "Fix uninitialized blk_skip for VAR TX." · 8d64b53d
      Geza Lore authored
      This reverts commit e7b89d88.
      8d64b53d
    • Geza Lore's avatar
      Fix uninitialized blk_skip for VAR TX. · e7b89d88
      Geza Lore authored
      x->blk_skip used to be uninitialzied (leftover from encoding the
      previous block), if cm->tx_mode != TX_MODE_SELECT (which is used with
      higher --cpu-used or --rt options). This resulted in degraded coding
      performance when uning cm->tx_mode != TX_MODE_SELECT.
      
      This fixes the VP10/EndToEndTestLarge.EndtoEndPSNRTest/40 unit test.
      
      Change-Id: If39062927446798c626fc93694b4e6a4f35fa5da
      e7b89d88
  2. 16 Apr, 2016 1 commit
    • Yue Chen's avatar
      Optimization for EXT_INTER + OBMC combination · 321794c4
      Yue Chen authored
      In the rd loop, check the perf of obmc, whose mv is copied from regular
      inter predictor, when wedge interinter is better than regular inter
      (previously it will force allow_obmc = 0). The condition of the early
      termination before this step is relaxed to avoid skipping too many obmc
      predictions. The rates of the overhead are properly calculated for these tools.
      
      The logic of the bitstream syntax:
      (a single ref) the interintra flag is sent first, only if it is 0, we
      send the obmc flag;
      (compound refs) the obmc flag is sent first, only if it is 0, we send
      the wedge interinter flag
      
      Coding gain
      lowres: 0.428% (2.287%->2.715%)
      
      Change-Id: I5f3a34640b398e313cbf84235c9fe2073eb2173f
      321794c4
  3. 14 Apr, 2016 1 commit
  4. 12 Apr, 2016 2 commits
  5. 08 Apr, 2016 1 commit
  6. 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
  7. 06 Apr, 2016 1 commit
  8. 05 Apr, 2016 2 commits
  9. 04 Apr, 2016 2 commits
  10. 31 Mar, 2016 2 commits
    • Debargha Mukherjee's avatar
      Fix interpolation values and decouple interintra · 2be211e9
      Debargha Mukherjee authored
      Decouples interintra modes and probability models from regular
      intra modes, to enable creating/optimizing new interintra modes.
      Also, fixes interpolation values for 128x128 interintra and obmc.
      
      Change-Id: I5c2016db49b8f029164e5fe84c6274d4e02ff90e
      2be211e9
    • 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
  11. 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
  12. 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
  13. 22 Mar, 2016 2 commits
    • 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
    • Yue Chen's avatar
      Refactor prediction functions of OBMC · 2e3f7731
      Yue Chen authored
      Merge the functions that generate prediction by above/left predictors
      for the encoder and the decoder.
      
      Change-Id: I57e53a8f2eb8d3028c4ed0c9abdcbf00503f95a0
      2e3f7731
  14. 21 Mar, 2016 3 commits
  15. 18 Mar, 2016 3 commits
    • Jingning Han's avatar
      Enable dynamic motion vector referencing for newmv mode · 93748c3e
      Jingning Han authored
      This commit enables the dynamic motion vector predictor for NEWMV
      mode. It allows the codec to select the best motion vector predictor
      in a rate-distortion optimization framework for motion vector
      residual coding. The compression performance is improved:
      lowres  0.14%
      midres  0.27%
      hdres   0.24%
      
      Change-Id: I6a601c74eb6cb0b71a613336d40363359f2edecd
      93748c3e
    • Geza Lore's avatar
      Refactor bsse and skip_txfm in MACROBLOCK. · f8cfb72a
      Geza Lore authored
      Simple refactoring to 2 dimensional arrays, in preparation for 128
      wide superblocks.
      
      Change-Id: I40d447bd9fbd4f755534ea3cc82fc8f4676cea07
      f8cfb72a
    • Geza Lore's avatar
      Refactor mbmi->inter_tx_size to 2D array. · efe7d4e5
      Geza Lore authored
      This is in preparation of increasing the superblock size.
      
      Change-Id: I9197e397399fbe8aec1178a45ea0337dd90412d7
      efe7d4e5
  16. 17 Mar, 2016 1 commit
  17. 16 Mar, 2016 3 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
    • Geza Lore's avatar
      Fix build without supertx. · 8735c17c
      Geza Lore authored
      Change-Id: Ib60821487710f6cf06aaa8ddcbdd5487ba1cbe4f
      8735c17c
  18. 15 Mar, 2016 2 commits
    • Yaowu Xu's avatar
      Properly set the estimate of rate_nocoef · 2becffae
      Yaowu Xu authored
      This commit fixes the computation of rate_nocoef for situation when
      rate_y is uninitialized at INT_MAX for  x->skip is true.
      
      Change-Id: If3dde4e4ee16667f4408067d3bb3084f916272f1
      2becffae
    • Angie Chiang's avatar
      remove filter_cache · b6fef124
      Angie Chiang authored
      PSNR test
              lowres  hdres
      lowbd   -0.013  0.067
      highbd  -0.044  0.039
      
      Change-Id: Iefdb1e966bd004b2027456778185b675e8fb9b81
      b6fef124
  19. 11 Mar, 2016 1 commit
    • hui su's avatar
      Complete (mostly) migration of palette mode · 78b0bd0a
      hui su authored
      Coding gain on screen_content is 12.2% (was 6.6%).
      
      Some features such as frame-level color buffer, adaptive
      entropy coding, are coming in future patches.
      
      Change-Id: I2658cf5ec0cbb02cff685475759f3b68c9807697
      78b0bd0a
  20. 10 Mar, 2016 1 commit
  21. 09 Mar, 2016 1 commit
  22. 03 Mar, 2016 1 commit
  23. 26 Feb, 2016 2 commits
    • Debargha Mukherjee's avatar
      Some refactoring and cleanups of interp filter · bab2912b
      Debargha Mukherjee authored
      Includes various cosmetic changes and refactoring including
      naming the sharp filters differently (since they are no longer
      8-tap).
      
      Change-Id: Ida5a19ca0daa9f6a64a6734394c685b2a4a2564a
      bab2912b
    • Geza Lore's avatar
      Port interintra experiment from nextgen. · 7ded038a
      Geza Lore authored
      The interintra experiment, which combines an inter prediction and an
      inter prediction have been ported from the nextgen branch. The
      experiment is merged into ext_inter, so there is no separate configure
      option to enable it.
      
      Change-Id: I0cc20cefd29e9b77ab7bbbb709abc11512320325
      7ded038a
  24. 23 Feb, 2016 2 commits
    • Yue Chen's avatar
      Optimizing obmc rd decision by checking the real rd cost · a614262e
      Yue Chen authored
      Instead of using model_rd_for_sb() to estimate the cost and make the
      decision on bmc/obmc, we use super_block_yrd/uvrd() to calculate and
      compare the real rd costs of bmc and obmc.
      
      Average bit-rate reduction(%) of obmc experiment:
      derflr/derfhd/hevcmr/hevchd
      2.353/TBD/TBD/TBD
      Before the optimization, the coding gain was:
      1.582/1.109/1.600/1.164
      
      Note: there is still some mysterious bug because that compared to
      the previous version, the performance at low bit rate drops a lot.
      
      Change-Id: I8dbee04a272190f10516a3953c1ae690f8136766
      a614262e
    • Geza Lore's avatar
      Experiment to use image domain dist in baseline. · 3c4b56c4
      Geza Lore authored
      Change-Id: Ib29f510289716b5ab5c7d74d32a450c190308a83
      3c4b56c4