1. 10 Jun, 2016 1 commit
  2. 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
  3. 24 May, 2016 2 commits
    • 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
    • Zoe Liu's avatar
      Fix --test-decode=warn to test mismatch · a63147ae
      Zoe Liu authored
      This patch always compares the most recent show frames between
      the encoder and the decoder to test the mismatch.
      
      Change-Id: I68a91ad0996a598231450debfd616e24992419b5
      a63147ae
  4. 18 May, 2016 1 commit
  5. 10 May, 2016 1 commit
  6. 07 May, 2016 1 commit
    • Zoe Liu's avatar
      Make LAST_FRAME always point to the newly coded frame in ext-refs · a912c6ec
      Zoe Liu authored
      This patch changes the encoder only for the ext-refs experiment. For
      each newly coded frame to refresh the LAST_FRAME, the decoder is
      notified that the LAST4_FRAME is to be refreshed, and read out the
      updated reference frame buffer vitural indexes for the next coded
      frame in a way that:
      LAST4_FRAME => LAST_FRAME,
      LAST_FRAME  => LAST2_FRAME,
      LAST2_FRAME => LAST3_FRAME, and
      LAST3_FRAME => LAST4_FRAME.
      
      Compared against the original ext-refs experiment in TOT, a small gain
      is achieved in overall PSNR:
      lowres Avg: -0.154
      lowres BDRate: -0.044
      
      Change-Id: I648810c146a3cd915b408274a9373b7d38324864
      a912c6ec
  7. 13 Apr, 2016 1 commit
  8. 12 Apr, 2016 2 commits
  9. 08 Apr, 2016 1 commit
  10. 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
  11. 31 Mar, 2016 1 commit
    • 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
  12. 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
  13. 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
  14. 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
  15. 21 Mar, 2016 1 commit
  16. 16 Mar, 2016 1 commit
    • 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
  17. 15 Mar, 2016 1 commit
    • 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
  18. 12 Mar, 2016 1 commit
  19. 10 Mar, 2016 1 commit
  20. 09 Mar, 2016 1 commit
  21. 01 Mar, 2016 1 commit
  22. 29 Feb, 2016 1 commit
    • Yunqing Wang's avatar
      Do sub-pixel motion search in up-sampled reference frames · 342a368f
      Yunqing Wang authored
      Up-sampled the reference frames to 8 times in each dimension using
      the 8-tap interpolation filter. In sub-pixel motion search, use the
      up-sampled reference frames to find the best matching blocks. This
      largely improved the motion search precision, and thus, improved
      the compression quality. There was no change in decoder side.
      
      Borg test and speed test results:
      1. On derflr set,
      Overall PSNR gain: 1.306%, and SSIM gain: 1.512%.
      Average speed loss on derf set was 6.0%.
      2. On stdhd set,
      Overall PSNR gain: 0.754%, and SSIM gain: 0.814%.
      On hevchd set,
      Overall PSNR gain: 0.465%, and SSIM gain: 0.527%.
      Speed loss on HD clips was 3.5%.
      
      Change-Id: I300ebaafff57e88914f3dedc8784cb21d316b04f
      342a368f
  23. 20 Feb, 2016 1 commit
  24. 17 Feb, 2016 1 commit
  25. 12 Feb, 2016 2 commits
    • Yue Chen's avatar
      Overlapped block motion compensation experiment · d1cad9c3
      Yue Chen authored
      In this experiment, an obmc inter prediction mode is enabled for
      >= 8X8 inter blocks. When the obmc flag is on, the regular block-
      based motion compensation will be refined by using predictors of
      the above and left blocks.
      Fixed some compatibility issues with vp9_highbitdepth, supertx,
      ref_mv, and ext_interp.
      
      Coding gain (%) on derflr/hevcmr/hevchd
      OBMC:
      1.047/1.022/0.708
      OBMC + SUPERTX:
      1.652/1.616/1.137
      SUPERTX:
      0.862/0.779/0.630
      
      Change-Id: I5d8d3c4729c6d3ccb03ec7034563107893103b7f
      d1cad9c3
    • Yaowu Xu's avatar
      Refactor internal stats code · 1a69cb28
      Yaowu Xu authored
      Also removed the use of postprocessing in computing internal stats.
      
      Change-Id: Ib8fdbdfe7b7ca05cd1a034a373aa7762fa44323c
      1a69cb28
  26. 09 Feb, 2016 1 commit
    • Jingning Han's avatar
      Entropy coding for dynamic ref mv modes · 4958987b
      Jingning Han authored
      This commit enables entropy coding for dynamic reference motion
      vector modes. The probability model is contexted on the ranking
      categories of the reference motion vector candidates.
      
      Change-Id: I09b58d98a409d63ec1a407331e29f8945b7ef17d
      4958987b
  27. 08 Feb, 2016 1 commit
  28. 03 Feb, 2016 1 commit
    • hui su's avatar
      Add 8-tap interpolation filter options for intra prediction · 3b1c7668
      hui su authored
      BD-rate performance improvement (on top of ext-intra):
      derflr  0.22%
      hevclr  0.36%
      hevcmr  0.48%
      hevchr  0.37%
      stdhd   0.19%
      
      Average speed impact on some derf clips is about 40% slower (on
      top of ext-intra). Speed improvment is a to-do.
      
      Change-Id: I8fe3fe8c5e4f60d0462778adbcc15c84dfbe7a25
      3b1c7668
  29. 22 Jan, 2016 1 commit
    • Yue Chen's avatar
      Adding new compound modes to EXT_INTER experiment · 968bbc7b
      Yue Chen authored
      Combinations of different mv modes for two reference frames
      are allowed in compound inter modes. 9 options are enabled,
      including NEAREST_NEARESTMV, NEAREST_NEARMV, NEAR_NEARESTMV,
      NEAREST_NEWMV, NEW_NEARESTMV, NEAR_NEWMV, NEW_NEARMV, ZERO_ZEROMV,
      and NEW_NEWMV.
      This experiment is mostly deported from the nextgen branch.
      It is made compatible with other experiments
      
      Coding gain of EXT_INTER(derflr/hevcmr/hevchd): 0.533%/0.728%/0.639%
      
      Change-Id: Id47e97284e6481b186870afbad33204b7a33dbb0
      968bbc7b
  30. 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
  31. 15 Jan, 2016 1 commit
    • Yue Chen's avatar
      EXT_INTER experiment · 1ac85879
      Yue Chen authored
      NEW2MV is enabled, representing a new motion vector predicted from
      NEARMV. It is mostly ported from nextgen, where it was named
      NEW_INTER.
      A few fixes are done for sub8x8 RDO to correct some misused
      mv references in the original patch.
      A 'bug-fix' for encoding complexity is done, reducing the additional
      encoding time from 50% to 20%. In sub8x8 case, the old patch
      did motion search for every interpolation filter (vp9 only
      searches once). This fix also slightly improves the coding gain.
      This experiment has been made compatible with REF_MV and EXT_REFS.
      
      Coding gain (derflr/hevcmr/hevchd): 0.267%/0.542%/0.257%
      
      Change-Id: I9a94c5f292e7454492a877f65072e8aedba087d4
      1ac85879
  32. 08 Jan, 2016 2 commits
  33. 04 Jan, 2016 1 commit
  34. 18 Dec, 2015 1 commit
    • Zoe Liu's avatar
      Restore the flexibility for the new 3 references · ec36a2b0
      Zoe Liu authored
      For the experiment of EXT_REFS, removed the previous special handling
      on the new last 3 references, i.e. LAST2_FRAME, LAST3_FRAME, and
      LAST4_FRAME, at the decoder, so that these new last references are
      treated the same way as the other 3 references (LAST_FRAME,
      GOLDEN_FRAME, and ALTREF_FRAME). Encoder changes have been made
      accordingly to realize this flexibility.
      
      Change-Id: Ic6546f9443b4377bb7e7b101bfa3e70a8b8d1c65
      ec36a2b0
  35. 10 Dec, 2015 1 commit
  36. 08 Dec, 2015 1 commit
    • paulwilkins's avatar
      Changes to exhaustive motion search. · 4e692bbe
      paulwilkins authored
      This change has been imported from VP9 and
      alters the nature and use of exhaustive motion search.
      
      Firstly any exhaustive search is preceded by a normal step search.
      The exhaustive search is only carried out if the distortion resulting
      from the step search is above a threshold value.
      
      Secondly the simple +/- 64 exhaustive search is replaced by a
      multi stage mesh based search where each stage has a range
      and step/interval size. Subsequent stages use the best position from
      the previous stage as the center of the search but use a reduced range
      and interval size.
      
      For example:
        stage 1: Range +/- 64 interval 4
        stage 2: Range +/- 32 interval 2
        stage 3: Range +/- 15 interval 1
      
      This process, especially when it follows on from a normal step
      search, has shown itself to be almost as effective as a full range
      exhaustive search with step 1 but greatly lowers the computational
      complexity such that it can be used in some cases for speeds 0-2.
      
      This patch also removes a double exhaustive search for sub 8x8 blocks
      which also contained  a bug (the two searches used different distortion
      metrics).
      
      For best quality in my test animation sequence this patch has almost
      no impact on quality but improves encode speed by more than 5X.
      
      Restricted use in good quality speeds 0-2 yields significant quality gains
      on the animation test of 0.2 - 0.5 db with only a small impact on encode
      speed. On most natural video clips, however, where the step search
      is performing well, the quality gain and speed impact are small.
      
      Change-Id: Iac24152ae239f42a246f39ee5f00fe62d193cb98
      4e692bbe