1. 19 May, 2016 1 commit
    • Geza Lore's avatar
      Fix obmc + ext-interp interference · 009bd115
      Geza Lore authored
      With ext-interp, a switchable interpolation filter is coded iff the
      motion vector uses fractional pixel movement (ie, true subpixel
      movement). With ext-interp and obmc enabled at the same time, the RD
      search proceeds as:
      1. Do motion search
      2. Do interpolation filter search iff subpixel motion, otherwise use
      3. Evaluate obmc=0
      4. Evaluete obmc=1 - This involves another motion search
      If the motion search in step 4 yields an integer motion vector, while
      the search in step 1 did not, then an interp_filter value other than
      EIGHTTAP_REGULAR is invalid, and will cause an assertion failure
      at output time, or a mismatch if not using --enable-debug.
      The fix sets the interp_filter to EIGHTTAP_REGULAR if obmc=1 is picked
      with an integer motion vector.
      Change-Id: I4685d1ad537f41d833dc9eb64845956b67886cca
  2. 17 May, 2016 1 commit
    • James Zern's avatar
      vp10/rdopt,rd_pick_intra4x4block: port tsan fix from vp9 · 8eba4ac4
      James Zern authored
      minus the non-existent nonrd portion. original change:
      commit d642294b
      Author: Jingning Han <jingning@google.com>
      Date:   Thu Feb 11 12:36:49 2016 -0800
          Fix tsan error in VP9 sub8x8 intra mode search
          This commit fixes issue 1141. The issue was triggered in multi-tile
          encoding. The change properly saves and restores the block context
          information in the real-time mode selection process. It removes
          several redundant memcpy operations in sub8x8 intra block mode
          Change-Id: I35c9ad197f4bd500ec39b5fc833f052f19eee010
      Change-Id: Idfa38c54c9e645479f6870d46f71fb1e91c071da
  3. 16 May, 2016 3 commits
    • Jingning Han's avatar
      Unify the per directional filter type system for compound modes · 4677e1a7
      Jingning Han authored
      For the current stage, we assume a single prediction filter type
      per direction in the settings of compound inter prediction modes.
      Change-Id: I12a1afdd364b93fcee870bd11ad01fc40ab48cff
    • Jingning Han's avatar
      Enable per motion component filter type selection · d567e14e
      Jingning Han authored
      Change-Id: I73823fc94f296d225dece7156de71b30bae3fcb7
    • Debargha Mukherjee's avatar
      Various wedge enhancements · fb8ea173
      Debargha Mukherjee authored
      Increases number of wedges for smaller block and removes
      wedge coding mode for blocks larger than 32x32.
      Also adds various other enhancements for subsequent experimentation,
      including adding provision for multiple smoothing functions
      (though one is used currently), adds a speed feature that decides
      the sign for interinter wedges using a fast mechanism, and refactors
      wedge representations.
      lowres: -2.651% BDRATE
      Most of the gain is due to increase in codebook size for 8x8 - 16x16.
      Change-Id: I50669f558c8d0d45e5a6f70aca4385a185b58b5b
  4. 11 May, 2016 2 commits
    • Geza Lore's avatar
      Cost wedge sign/index properly in rdopt. · c1b73901
      Geza Lore authored
      Lowres improves by about 0.1%
      lowres: -2.164 BDRATE
      Change-Id: I393bbb92700bfbb8763ace424f4edc2d672a74b4
    • Yue Chen's avatar
      Add single motion search for OBMC predictor · 370f203a
      Yue Chen authored
      Weighted single motion search is implemented for obmc predictor.
      When NEWMV mode is used, to determine the MV for the current block,
      we run weighted motion search to compare the weighted prediction
      with (source - weighted prediction using neighbors' MVs), in which
      the distortion is the actual prediction error of obmc prediction.
      Coding gain: 0.404/0.425/0.366 for lowres/midres/hdres
      Speed impact: +14% encoding time
                    (obmc w/o mv search 13%-> obmc w/ mv search 27%)
      Change-Id: Id7ad3fc6ba295b23d9c53c8a16a4ac1677ad835c
  5. 10 May, 2016 2 commits
    • Debargha Mukherjee's avatar
      Wedge rd improvements · 447032eb
      Debargha Mukherjee authored
      Improves speed by about 10-15% by combining y-only rd with
      modeling function in a better way.
      Also, coding efficiency improves by about 0.1%
      lowres: -1.805% BDRATE with ext-inter
      Change-Id: I6ef1f8942ec6806252f3fcf749ae4f30dffe42b1
    • 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
  6. 09 May, 2016 1 commit
    • Sarah Parker's avatar
      Edit ext-tx so it isn't doing redundant prunes · f546383b
      Sarah Parker authored
      The original pruning function was not taking into account
      that certain tx sizes/block sizes use a reduced tx set.
      Prune 1: -0.3% performance drop, 20% speedup on foreman video
      Prune 2: -0.48% perfomance drop, 30% speedup on foreman video
      Change-Id: I557e919d97a89f787b47b3c8579a080db57f91d0
  7. 07 May, 2016 1 commit
  8. 06 May, 2016 2 commits
    • Yaowu Xu's avatar
      Change initializations of variables with type "int_mv" · 824a8b22
      Yaowu Xu authored
      This is to make MSVC happy and eliminate build errors.
      Change-Id: Ic81e7c7516923913e6e7a652b691953e4a1af8aa
    • Alex Converse's avatar
      Rename pick_filter_intra. · 130cccba
      Alex Converse authored
      The word 'pick' is usually used in functions that make decisions where
      the bitstream allows multiple legal choices, and not to limit the
      bitstream format itself.
      Change-Id: Ia60709c29e004475e1aa8861aefded27ebaf4712
  9. 05 May, 2016 1 commit
  10. 04 May, 2016 1 commit
  11. 03 May, 2016 1 commit
  12. 29 Apr, 2016 1 commit
  13. 28 Apr, 2016 1 commit
  14. 27 Apr, 2016 3 commits
  15. 26 Apr, 2016 1 commit
    • Yue Chen's avatar
      Remove double counting for mv costs · 34177e67
      Yue Chen authored
      The bug is introduced by commit 1a0352d1, in which mv costs are
      counted twice in joint_motion_search() in ext_inter experiment.
      Change-Id: Ibace453df999d3c2e781d73f1f0912038fee2d4e
  16. 25 Apr, 2016 2 commits
  17. 23 Apr, 2016 1 commit
  18. 22 Apr, 2016 2 commits
  19. 19 Apr, 2016 6 commits
    • hui su's avatar
      Keep track of zcoeff_blk in tx size/type search · 7dffb432
      hui su authored
      Prevent potential problems when per transform block
      zero forcing is re-enabled (a To-Do).
      Change-Id: I03b0ab2a86d88058441f2ca18994cfd2e6329898
    • 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
    • Geza Lore's avatar
      Fix uninitialized blk_skip for VAR TX. · 7aa95be9
      Geza Lore authored
      x->blk_skip used to be uninitialized (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 using cm->tx_mode != TX_MODE_SELECT.
      This fixes the VP10/EndToEndTestLarge.EndtoEndPSNRTest/40 unit test.
      Also fixed an edge effect where encode_block in encodemb.c used the
      formal width of the block (without cropping at the right edge), to
      look up blk_skip, while select_tx_block in rdopt.c used the cropped
      width to set blk_skip.
      Change-Id: I76d0f49ac5ab3ab54203573e0d7fcfcc1c6aa10d
    • Geza Lore's avatar
      Revert "Fix uninitialized blk_skip for VAR TX." · 8d64b53d
      Geza Lore authored
      This reverts commit e7b89d88.
    • 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
    • Jingning Han's avatar
      Handle zero motion vector residual · ec2ffda5
      Jingning Han authored
      This commit handles the zero motion vector residuals for single
      and compound reference modes, respectively. It improves the coding
      performance by 0.13% with no additional encoding complexity.
      Change-Id: I16075a836025bd2746da2ff4698fb9261e4b08c1
  20. 18 Apr, 2016 3 commits
    • Jingning Han's avatar
      Refactor transform selection process · 2aa6117b
      Jingning Han authored
      This commit re-arranges the transform type and size selectio
      process. It removes an unnecessary rate-distortion cost computation
      step. Local experiments show that this speeds up the encoding
      process by 6% for both the baseline and the ext-intra experiment.
      Change-Id: Iab3b86a63a1e9e55548466791ed5d29a0575c1e7
    • Angie Chiang's avatar
      Remove double operation from tx_size selection · 6de4a77d
      Angie Chiang authored
      This CL fix the bug
      rdopt.c:1687: choose_tx_size_from_rd: Assertion
      `mbmi->tx_type == DCT_DCT' failed
      It is caused by
      1) mms register access before double operation
      2) different compiler behaviors
        int64_t a = INT64_MAX;
        double b = 1. * INT64_MAX;
        printf("a < b: %d\n", a < b);
        a < b: 0
        int64_t a = INT64_MAX;
        double b = 1. * INT64_MAX;
        printf("a < b: %d\n", a < b);
        a < b: 1
      I remove the double operation and test it with EXT_TX experiment.
      The psnr change is around 0.05%, which is considered as noise level.
      Change-Id: If8935c70c8603617fcfa8571accd30ccdda786a0
    • Jingning Han's avatar
      Refactor rd_variance_adjustment function · c8312daa
      Jingning Han authored
      Compute the reconstruction variance in the prediction mode search.
      Change-Id: Id9c7635a9c9f5383e61c0e427e95234211834301
  21. 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
  22. 15 Apr, 2016 1 commit
    • Geza Lore's avatar
      Fix segfault with --cpu-used >= 3 and ext-refs. · 77d197e6
      Geza Lore authored
      With ext-ref enabled, it is possible that when trying to encode the
      first true ALTREF frame after a keyframe, the previous ALTREF frame
      (alias for the keyframe) is the same as one of the new LAST{2,3,4}
      reference frames, and hence cpi->ref_frame_flags will have the ALTREF
      bit clear, as computed by get_ref_frame_flags in encoder.c.
      sf->alt_ref_search_fp forces the previous ALTREF frame to
      be used as the only possible  reference when encoding a new ALTREF
      frame, but due to cpi->ref_frame_flags, some buffers will not be
      initialized (see rdopt.c:7689 yv12_mb), leading to a segfault.
      get_ref_frame_flags in encoder.c has been changed to prefer to keep
      the  LAST frame, then the ALTREF frame, then any of the LAST{2,3,4}
      frames and then the GOLDEN frame in that order of preference in case
      any of them are the same. This avoids the segfault and behaves the
      same for the baseline.
      Change-Id: I4da1991667614009da5d3061a6316c0d5dbc6c0c
  23. 14 Apr, 2016 1 commit
  24. 13 Apr, 2016 1 commit
    • Jingning Han's avatar
      Speed up dynamic motion vector referencing system · 9a1a8f1d
      Jingning Han authored
      Skip transform type search in modes with ref_mv_idx > 0. This
      brings down the additional encoding time cost due to the DMR system
      from 32% to 17%, at minimal coding performance regression.
      Change-Id: Ie82e1d2831a313c6f1e47f7da221b51345023eb3