1. 05 Mar, 2012 2 commits
  2. 01 Mar, 2012 2 commits
  3. 29 Feb, 2012 2 commits
  4. 28 Feb, 2012 1 commit
    • Deb Mukherjee's avatar
      Initial refactoring of high_precision mv code. · 3e1cad9c
      Deb Mukherjee authored
      This is the first patch for refactoring of the code related to
      high-precision mv, so that 1/4 and 1/8 pel motion vectors can
      co-exist in the same bit-stream by use of a frame level flag.
      The current patch works fine for only use of 1/4th and
      only use of 1/8th pel mv, but there are some issues with the
      mode switching in between. Subsequent patches on this change Id
      will fix the remaining issues.
      
      Patch 2: Adds fixes to make sure that multiple mv precisions can
      co-exist in the bit-stream. Frame level switching has been tested
      to work correctly.
      
      Patch 3: Fixes lines exceeding 80 char
      
      Patch 4:
      http://www.corp.google.com/~debargha/vp8_results/enhinterp.html
      
      Results on derf after ssse3 bugfix, compared to everything
      enabled but the 8-tap, 1/8-subpel and 1/16-subpel uv. Overall the
      gains are about 3% now. Hopefully there are no more bugs lingering.
      Apparently the sse3 bug affected the quartel subpel results more than
      the eighth pel ones (which is understandabale because one bad predictor
      due to the bug, matters less if there are a lot more subpel options
      available as in the 1/8 subpel case).
      The results in the 4th column correspond to the current settings.
      The first two columns correspond to two settings of adaptive switching
      of the 1/4 or 1/8 subpel mode based on initial Q estimate. These
      do not work as good as just using 1/8 all the time yet.
      
      Change-Id: I3ef392ad338329f4d68a85257a49f2b14f3af472
      3e1cad9c
  5. 24 Feb, 2012 1 commit
  6. 23 Feb, 2012 1 commit
    • Deb Mukherjee's avatar
      Supporting high precision 1/8-pel motion vectors · 18e90d74
      Deb Mukherjee authored
      This is the initial patch for supporting 1/8th pel
      motion. Currently if we configure with enable-high-precision-mv,
      all motion vectors would default to 1/8 pel. Encode and
      decode syncs fine with the current code. In the next phase
      the code will be refactored so that we can choose the 1/8
      pel mode adaptively at a frame/segment/mb level.
      
      Derf results:
      http://www.corp.google.com/~debargha/vp8_results/enhinterp_hpmv.html
      (about 0.83% better than 8-tap interpoaltion)
      
      Patch 3: Rebased. Also adding 1/16th pel interpolation for U and V
      
      Patch 4: HD results.
      http://www.corp.google.com/~debargha/vp8_results/enhinterp_hd_hpmv.html
      Seems impressive (unless I am doing something wrong).
      
      Patch 5: Added mmx/sse for bilateral filtering, as well as enforced
      use of c-versions of subpel filters with 8-taps and 1/16th pel;
      Also redesigned the 8-tap filters to reduce the cut-off in order to
      introduce a denoising effect. There is a new configure option
      sixteenth-subpel-uv which will use 1/16 th pel interpolation for
      uv, if the motion vectors have 1/8 pel accuracy.
      
      With the fixes the results are promising on the derf set. The enhanced
      interpolation option with 8-taps alone gives 3% improvement over thei
      derf set:
      http://www.corp.google.com/~debargha/vp8_results/enhinterpn.html
      
      Results on high precision mv and on the hd set are to follow.
      
      Patch 6: Adding a missing condition for CONFIG_SIXTEENTH_SUBPEL_UV in
      vp8/common/x86/x86_systemdependent.c
      
      Patch 7: Cleaning up various debug messages.
      
      Patch 8: Merge conflict
      
      Change-Id: I5b1d844457aefd7414a9e4e0e06c6ed38fd8cc04
      18e90d74
  7. 22 Feb, 2012 1 commit
    • Yaowu Xu's avatar
      Fixed skippable evaluation in mode decision · 2b4cd4cc
      Yaowu Xu authored
      Yunqing fixed an oddity in UVIntra skippable evaluation for stable
      branch, which brought up the fact that the evaluation is broken.
      The issue was that for MBs with 2nd order block, the eob for 1st
      order blocks is set at 1. The previous evaluation did not take that
      into account. This commit intend to fix the problem. The commit also
      absorbed Yunqing's fix for UVIntra skippable evalution.
      
      Test on hd showed some good gains in combination with LPF bias fix:
      http://www.corp.google.com/~yaowu/no_crawl/LPFBias_FixSkip.html
      (avg psnr: .34%, glb psnr: .32%, ssim: .22%)
      
      Change-Id: I36af11c8ef7f643e8ff46da7bf3a167b437039d4
      2b4cd4cc
  8. 16 Feb, 2012 3 commits
    • Yaowu Xu's avatar
      Reworked context conversion between 8x8 and 4x4 · b92a96d8
      Yaowu Xu authored
      The commit rationized and simplified the entropy context conversion
      betwen MB using 8x8 transform and MB using 4x4 transform. The old version
      had a number of weirdness in how 4x4 transform MB's context is used for
      8x8 blocks other than the first 8x8 within a MB.
      
      Test showed the change has a gain ~.1% for avg psnr, glb psnr and ssim on
      the limited HD set.
      
      Change-Id: I774536c416baa6845aa741f956d8a69fa40e5d47
      b92a96d8
    • Yaowu Xu's avatar
      revised the rate distortion computation for UV · f90983e1
      Yaowu Xu authored
      this commit changed the UV r/d calculation in the mode decision process to
      properly account for the rate of 8x8 transform coefficients.
      
      Change-Id: I485f8f35f2b61db0b6539beb32e83481b1cf083b
      f90983e1
    • Yaowu Xu's avatar
      moved scaling from dequantization to inverse transform for T8x8 · 454c7abc
      Yaowu Xu authored
      Previously, the scaling related to extended quantize range happens in
      dequantization stage, which implies the coefficients form forward
      transform are in different scale(4x) from dequantization coefficients
      This worked fine when there was not distortion computation done based
      on 8x8 transform, but it completely wracked the distortion estimation
      based on transform coefficients and dequantized transform coefficients
      introduced in commit f64725a0 for macroblocks using 8x8 transform.
      This commit fixed the issue by moving the scaling into the stage of
      inverse 8x8 transform.
      
      TODO: Test&Verify the transform/quantization pipeline accuracy.
      
      Change-Id: Iff77b36a965c2a6b247e59b9c59df93eba5d60e2
      454c7abc
  9. 15 Feb, 2012 1 commit
  10. 14 Feb, 2012 1 commit
    • Yaowu Xu's avatar
      added 8x8 based Rate estimation for dualpred case · 9b68ad0f
      Yaowu Xu authored
      This commmit added logic for MB using dual-pred to compute rate
      estimation based on correct transform size. The section of code
      was previously located under #if CONFIG_DUALPRED, that was made
      to be working with T8x8 experiment at the same time.
      
      Change-Id: Iebc2518c03f11378b9c2e72905520f088b54d5c0
      9b68ad0f
  11. 10 Feb, 2012 3 commits
    • Ronald S. Bultje's avatar
      Improved coding using 8x8 transform · f64725a0
      Ronald S. Bultje authored
      In summary, this commit encompasses a series of changes in attempt to
      improve the 8x8 transform based coding to help overall compression
      quality, please refer to the detailed commit history below for what
      are the rationale underly the series of changes:
      
      a. A frame level flag to indicate if 8x8 transform is used at all.
      b. 8x8 transform is not used for key frames and small image size.
      c. On inter coded frame, macroblocks using modes B_PRED, SPLIT_MV
      and I8X8_PRED are forced to using 4x4 transform based coding, the
      rest uses 8x8 transform based coding.
      d. Encoder and decoder has the same assumption on the relationship
      between prediction modes and transform size, therefore no signaling
      is encoded in bitstream.
      e. Mode decision process now calculate the rate and distortion scores
      using their respective transforms.
      
      Overall test results:
      1. HD set
      http://www.corp.google.com/~yaowu/no_crawl/t8x8/HD_t8x8_20120206.html
      (avg psnr: 3.09% glb psnr: 3.22%, ssim: 3.90%)
      2. Cif set:
      http://www.corp.google.com/~yaowu/no_crawl/t8x8/cif_t8x8_20120206.html
      (avg psnr: -0.03%, glb psnr: -0.02%, ssim: -0.04%)
      It should be noted here, as 8x8 transform coding itself is disabled
      for cif size clips, the 0.03% loss is purely from the 1 bit/frame
      flag overhead on if 8x8 transform is used or not for the frame.
      
      ---patch history for future reference---
      Patch 1:
      this commit tries to select transform size based on macroblock
      prediction mode. If the size of a prediction mode is 16x16, then
      the macroblock is forced to use 8x8 transform. If the prediction
      mode is B_PRED, SPLITMV or I8X8_PRED, then the macroblock is forced
      to use 4x4 transform. Tests on the following HD clips showed mixed
      results: (all hd clips only used first 100 frames in the test)
      
      http://www.corp.google.com/~yaowu/no_crawl/t8x8/hdmodebased8x8.html
      http://www.corp.google.com/~yaowu/no_crawl/t8x8/hdmodebased8x8_log.html
      
      while the results are mixed and overall negative, it is interesting to
      see 8x8 helped a few of the clips.
      
      Patch 2:
      this patch tries to hard-wire selection of transform size based on
      prediction modes without using segmentation to signal the transform size.
      encoder and decoder both takes the same assumption that all macroblocks
      use 8x8 transform except when prediciton mode is B_PRED, I8X8_PRED or
      SPLITMV. Test results are as follows:
      
      http://www.corp.google.com/~yaowu/no_crawl/t8x8/cifmodebase8x8_0125.html
      http://www.corp.google.com/~yaowu/no_crawl/t8x8/hdmodebased8x8_0125log.html
      
      Interestingly, by removing the overhead or coding the segmentation, the
      results on this limited HD set have turn positive on average.
      
      Patch 3:
      this patch disabled the usage of 8x8 transform on key frames, and kept the
      logic from patch 2 for inter frames only. test results on HD set turned
      decidedly positive with 8x8 transform enabled on inter frame with 16x16
      prediction modes: (avg psnr: .81% glb psnr: .82 ssim: .55%)
      
      http://www.corp.google.com/~yaowu/no_crawl/t8x8/hdintermode8x8_0125.html
      results on cif set still negative overall
      
      Patch 4:
      continued from last patch, but now in mode decision process, the rate and
      distortion estimates are computed based on 8x8 transform results for MBs
      with modes associated with 8x8 transform. This patch also fixed a problem
      related to segment based eob coding when 8x8 transform is used. The patch
      significantly improved the results on HD clips:
      
      http://www.corp.google.com/~yaowu/no_crawl/t8x8/hd8x8RDintermode.html
      (avg psnr: 2.70% glb psnr: 2.76% ssim: 3.34%)
      results on cif also improved, though they are still negative compared to
      baseline that uses 4x4 transform only:
      http://www.corp.google.com/~yaowu/no_crawl/t8x8/cif8x8RDintermode.html
      (avg psnr: -.78% glb psnr: -.86% ssim: -.19%)
      
      Patch 5:
      This patch does 3 things:
      a. a bunch of decoder bug fixes, encodings and decodings were verified
      to have matched recon buffer on a number of encodes on cif size mobile and
      hd version of _pedestrian.
      b. the patch further improved the rate distortion calculation of MBS that
      use 8x8 transform. This provided some further gain on compression.
      c. the patch also got the experimental work SEG_LVL_EOB to work with 8x8
      transformed macroblock, test results indicates it improves the cif set
      but hurt the HD set slightly.
      
      Tests results on HD clips:
      http://www.corp.google.com/~yaowu/no_crawl/t8x8/HD_t8x8_20120201.html
      (avg psnr: 3.19% glb psnr: 3.30% ssim: 3.93%)
      
      Test results on cif clips:
      http://www.corp.google.com/~yaowu/no_crawl/t8x8/cif_t8x8_20120201.html
      (avg psnr: -.47% glb psnr: -.51% ssim: +.28%)
      
      Patch 6:
      Added a frame level flag to indicate if 8x8 transform is allowed at all.
      temporarily the decision is based on frame size, can be optimized later
      one. This get the cif results to basically unchanged, with one bit per
      frame overhead on both cif and hd clips.
      
      Patch 8:
      Rebase and Merge to head by PGW.
      Fixed some suspect 4s that look like hey should be 64s in regard
      to segmented EOB. Perhaps #defines would be bette.
      Bulit and tested without T8x8 enabled and produces unchanged
      output.
      
      Patch 9:
      Corrected misalligned code/decode of "txfm_mode" bit.
      Limited testing for correct encode and decode with
      T8x8 configured on derf clips.
      
      Change-Id: I156e1405d25f81579d579dff8ab9af53944ec49c
      f64725a0
    • Ronald S. Bultje's avatar
      Reindent some code after merging the dualpred experiment. · e3ca23a3
      Ronald S. Bultje authored
      Change-Id: Idb328dd29ebcd360e39886abe48694f90f2e1140
      e3ca23a3
    • Ronald S. Bultje's avatar
      Merge dualpred (compound prediction) experiment. · 29e4d7e8
      Ronald S. Bultje authored
      Change-Id: Ieaaa07c50eae41118596197f6a4d848135946e41
      29e4d7e8
  12. 09 Feb, 2012 3 commits
    • Paul Wilkins's avatar
      Removal of SEGFEATURES placeholder comments · d90f0eb4
      Paul Wilkins authored
      This commit only involves the removal of placeholder comments
      //#if CONFIG_SEGFEATURES.
      
      Change-Id: I94b350daaf998ee0cfdde5aa25b1d3b0522ab816
      d90f0eb4
    • Paul Wilkins's avatar
      Merge Extended Q experiment. · 3e9890a3
      Paul Wilkins authored
      Merge the extended Q experiment as indicated by the
      
      Change-Id: I02d9e654fff9998cc7e9e2f1f5cd838dad8fb431
      3e9890a3
    • Paul Wilkins's avatar
      Merge COMPRED · cf8af867
      Paul Wilkins authored
      Merged in most of the current common prediction changes
      that were under the #if CONFIG_COMPRED option.
      
      Change-Id: If4e6f61dbe7b86dd449f6effbe93b5eb7e893885
      cf8af867
  13. 06 Feb, 2012 3 commits
    • Paul Wilkins's avatar
      Merged NEWNEAR experiment · 9c9300f5
      Paul Wilkins authored
      This commit merges the NEWNEAR experiment such that it
      is effectively always on.
      
      The fact that there were changes in the threading code again
      highlights the need to strip out such features during the
      bitstream development phase as trying to maintain this code
      (especially as it is not being tested) slows the development cycle.
      
      Change-Id: I8b34950a1333231ced9928aa11cd6d6459984b65
      9c9300f5
    • Paul Wilkins's avatar
      Coding the hybrid dual prediction signal. · 82b865da
      Paul Wilkins authored
      Initial modifications to make limited use of common prediction
      functions.
      
      The only functional change thus far is that updates to the probabilities are
      no longer "damped". This was a testing convenience but in fact seems to
      help by a little over 0.1% over the derf set.
      
      Change-Id: I8b82907d9d6b6a4a075728b60b31ce93392a5f2e
      82b865da
    • Paul Wilkins's avatar
      Moved prob_dualpred to common. · c98e9d28
      Paul Wilkins authored
      Moved the prob_dualpred[] sturcture to common.
      Created common prediction entry for Dual flag.
      
      Change-Id: I9ac3d128bae6114f09e5c18216d4b95cf36453d5
      c98e9d28
  14. 02 Feb, 2012 1 commit
    • Adrian Grange's avatar
      Added encoding in Superblock Order · 5d0b5a17
      Adrian Grange authored
      As a precursor to encoding 32x32 blocks this cl adds the
      ability to encode the frame superblock (=32x32 block) at
      a time. Within a SB the 4 indiviual MBs are encoded in
      raster-order (NW,NE,SW,SE).
      
      This functionality is added as an experiment which can be
      enabled by ispecifying --enable-superblocks in the
      command line specified to configure (CONFIG_SUPERBLOCKS
      macro in the code).
      
      To make this work I had to disable the two intra
      prediction modes that use data from the top-right of the
      MB.
      
      On the tests that I have run the results produce
      almost exactly the same PSNRs & SSIMs with a very
      slightly higher average data rate (and slightly higher
      data rate than just disabling the two intra modes in
      the original code).
      
      NOTE: This will also break the multi-threaded code.
      
      This replaces the abandoned change:
      Iebebe0d1a50ce8c15c79862c537b765a2f67e162
      
      Change-Id: I1bc1a00f236abc1a373c7210d756e25f970fcad8
      5d0b5a17
  15. 31 Jan, 2012 1 commit
  16. 26 Jan, 2012 1 commit
  17. 20 Jan, 2012 1 commit
    • Yaowu Xu's avatar
      Added code to prevent I8X8_PRED mode for MBs using 8x8 transform · 5aab0c3f
      Yaowu Xu authored
      This fixed a conflict introduced by the change of adding 8x8 intra
      prediction modes. The 8x8 intra prediction mode code assumed the
      use of 4x4 transform, and causes encoder crashes when the codec is
      configured with --enable-t8x8.
      
      Change-Id: I00cc94df63e9725377ffba9eb51be6b77fe3fcf9
      5aab0c3f
  18. 23 Dec, 2011 1 commit
  19. 19 Dec, 2011 1 commit
    • Paul Wilkins's avatar
      Further QIndex realted Fixes: · fb807776
      Paul Wilkins authored
      Added code to support 256 index steps instead of 128 but disabled for now.
      Replace hard wired table vp8cx_base_skip_false_prob[128]
      Observed Qindex problem with setting minimum loop filter value.
      (Experiment code using real Q in place but for now just returning 0. This has a big
      beneficial effect on some clips, particularly waterfall which shows 5% ssim gain)
      
      Change-Id: I2f7117de8adc1797164c106aa13effc900a1467e
      fb807776
  20. 07 Dec, 2011 3 commits
    • Yaowu Xu's avatar
      Removed #if CONFIG_I8X8 · d37cd976
      Yaowu Xu authored
      This commit removed the macro CONFIG_I8X8, which was used to indicate
      the 8x8 intra prediction experiment, made the change fully merged in.
      
      Change-Id: Iafa4443781ce6e83f5591c12ba615a0e92ce0ea0
      d37cd976
    • Yaowu Xu's avatar
      made vp8_mode_context adaptive · 76feb965
      Yaowu Xu authored
      vp8_mode_contexts[] is an entropy table used to code inter mode
      choices. It was a fixed constant table. This commit made the entropy
      context adaptive. Tests on derf set showed very good consistent gains
      on all metrics: avg psnr .47%, overall psnr .46% and ssim .40%.
      
      http://www.corp.google.com/~yaowu/no_crawl/newModeContext.html
      
      Change-Id: Ia62b14485c948e2b74586118619c5eb2068b43b2
      76feb965
    • Paul Wilkins's avatar
      Minor fixes: · 79774d10
      Paul Wilkins authored
      fixed issues caused by conflicts between two experiments.
      
      Change-Id: I56a9bd69493e4850c121ea057a6233c55777c2a5
      79774d10
  21. 06 Dec, 2011 2 commits
    • Ronald S. Bultje's avatar
      Dual 16x16 inter prediction. · 60cb39da
      Ronald S. Bultje authored
      This patch introduces the concept of dual inter16x16 prediction. A
      16x16 inter-predicted macroblock can use 2 references instead of 1,
      where both references use the same mvmode (new, near/est, zero). In the
      case of newmv, this means that two MVs are coded instead of one. The
      frame can be encoded in 3 ways: all MBs single-prediction, all MBs dual
      prediction, or per-MB single/dual prediction selection ("hybrid"), in
      which case a single bit is coded per-MB to indicate whether the MB uses
      single or dual inter prediction.
      
      In the future, we can (maybe?) get further gains by mixing this with
      Adrian's 32x32 work, per-segment dual prediction settings, or adding
      support for dual splitmv/8x8mv inter prediction.
      
      Gain (on derf-set, CQ mode) is ~2.8% (SSIM) or ~3.6% (glb PSNR). Most
      gain is at medium/high bitrates, but there's minor gains at low bitrates
      also. Output was confirmed to match between encoder and decoder.
      
      Note for optimization people: this patch introduces a 2nd version of
      16x16/8x8 sixtap/bilin functions, which does an avg instead of a
      store. They may want to look and make sure this is implemented to
      their satisfaction so we can optimize it best in the future.
      
      Change-ID: I59dc84b07cbb3ccf073ac0f756d03d294cb19281
      60cb39da
    • Paul Wilkins's avatar
      Some further QIndex issues with extended Q · b4ad9b5d
      Paul Wilkins authored
      Resolved or factored out some further issues with Q index.
      Put in a 3rd order polynomial instead of less accurate power function
      as the best fit on gf and kf boost adjustment.
      Added avg_q value to use instead of ni_av_qi.
      Compute segment delta Q values based on avg_q.
      Fixed bug in adjust_maxq_qrange().
      
      The extended range Q on the derf set, using standard data rates
      (which do not extend high enough to get big benefits) still show
      a shortfall of between 0.5 and 1% though so there would appear to
      be further issues that need to be tracked down.
      
      Change-Id: Icfd49b9f401906ba487ef1bef7d397048295d959
      b4ad9b5d
  22. 02 Dec, 2011 2 commits
    • Yaowu Xu's avatar
      enabled 8x8 intra prediction modes on inter frames · a8fbab86
      Yaowu Xu authored
      This commit enabled the usage of 8x8 intra prediction modes on inter
      frames. There are a few TODO items related to this: 1)baseline entropy
      need be calibrated; 2)cost of UV need to be done more properly rather
      than using decision only relying on Y; 3)Threshold for allowing picking
      8x8 intra prediction should be lowered to lower than the B_PRED.
      
      Even with all the TODOs, tests showed consistent gain on derf set ~0.1%
      (PSNR:0.08% and SSIM:0.14%). It is assumed that 8x8 intra prediction
      will help more on large resolution clips, especially with above TODOs
      addressed.
      
      Change-Id: I398ada49dfc32575cfab962a569c2885111ae3ba
      a8fbab86
    • Paul Wilkins's avatar
      Further work on extended Q range. · 8487a68b
      Paul Wilkins authored
      Fixed some further QIndex related issues and replaced some tables
      (eg zbin and rounding)
      
      Also Added function (currently disabled by default) to populate the
      main AC and DC quantizer tables. Using the original AC range the
      resulting computed DC values give behavior broadly comparable
      on the DERF set. That is not to say that the equations will hold good
      over a more extended range. The purpose of this code is to make it
      easier to experiment with further alterations to the Q range and distribution
      of Q values plus the relative weights given to AC and DC.
      
      The function find_fp_qindex() ensures that changes to the Q tables
      are reflected in the value passed in to the first pass code.
      
      Slight experimental adjustment to static segment Q offset.
      
      Change-Id: I36186267d55dfc2a3d565d0cff7218ef300d1cd5
      8487a68b
  23. 29 Nov, 2011 1 commit
    • Paul Wilkins's avatar
      Further work on extended Q range. · 99df6bb6
      Paul Wilkins authored
      Fixed bug in firspass.c call to vp8_initialize_rd_consts()
      
      This was passing in vp8_dc_quant(cm->base_qindex, cm->y1dc_delta_q)
       instead of (cm->base_qindex + cm->y1dc_delta_q).
      
      It just so happens that for the value 26 used for cm->base_qindex in the
      unextended Q case,  the two give similar results. However, when using
      the extended Q range the two are very different.
      
      Also added more stats output and partly disabled another broken feature.
      
      Change-Id: Iddf6cf5ea8467c44b7c133f38e629f6ba6f2581e
      99df6bb6
  24. 28 Nov, 2011 1 commit
    • Yaowu Xu's avatar
      changed find_near_mvs search to include a mb from last frame · 643238a3
      Yaowu Xu authored
      This is an experiment to include a mv contribution from last frame to
      nearest and near mv definition. Initial test showed some small though
      consistent gain.
      
      latest patch slightly better result ~.13%-~.18%.
      
      TODO: the entropy used to encode the mode choice, i.e. the mv counts
      based conditional distribution of modes should be re-collected to
      reflect this change, it is expected that there is some further gain
      from that.
      
      Change-Id: Ief1e284a36d8aa56b49ae5b360c91419ec494fa4
      643238a3
  25. 23 Nov, 2011 1 commit
    • Paul Wilkins's avatar
      Further resolution of QIndex LUTS; · a0b7db22
      Paul Wilkins authored
      This commit resolves further QIndex look up tables to facilitate
      experimentation with the quantizer range.
      
      In some cases  rather than remove the look up tables completely
      I have created functions that are called once  to populate them
      using a formulaic approach base on the actual quantizer.
      
      The use of these functions based on best fit of data from the original
      tables does affect the results on some clips but across the derf test
      set the effect was broadly neutral.
      
      Change-Id: I8baa61c97ce87dc09a6340d56fdeb681b9345793
      a0b7db22