1. 24 Feb, 2012 1 commit
  2. 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
  3. 17 Feb, 2012 1 commit
    • Paul Wilkins's avatar
      Code base simplification. · 4cfb8ed4
      Paul Wilkins authored
      Removal of most code to do with 1 pass.
      Removal of cyclic refresh code.
      
      Change-Id: I74971082bc19dd76e795d4d2e781a0424cec5c8c
      4cfb8ed4
  4. 16 Feb, 2012 2 commits
    • Paul Wilkins's avatar
      Code simplification · 79d330d7
      Paul Wilkins authored
      Removal of the pickinter.c and .h files and calls to this
      code.
      
      Removal of some code relating to real time and one pass
      settings  though there is more to be done in this regard.
      
      However,  vp8_set_speed_features() now
      only supports modes 0 and 1 and speeds up to 3
      so rd should always be set.
      
      Change-Id: I62c0c1b6154ab499785baef310536080e87bc4d8
      79d330d7
    • 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
  5. 14 Feb, 2012 1 commit
  6. 10 Feb, 2012 3 commits
    • Paul Wilkins's avatar
      Removal of threading code. · 2615ca5d
      Paul Wilkins authored
      For the experimental branch we are trying to slim the codebase
      down removing features such as threading for now which complicate
      the process of development and testing.
      
      Change-Id: I657c0246aef4d1fa8c8ffc6a1adfeee45bce8e24
      2615ca5d
    • 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
      Merge dualpred (compound prediction) experiment. · 29e4d7e8
      Ronald S. Bultje authored
      Change-Id: Ieaaa07c50eae41118596197f6a4d848135946e41
      29e4d7e8
  7. 09 Feb, 2012 4 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
    • Paul Wilkins's avatar
      Dual pred flag · 8266abfe
      Paul Wilkins authored
      Further changes to make experiments with the context
      used for coding the dual pred flag easier.
      
      Current best performing method tested on derf is a two
      element context based on reference frame. I also tried
      various combinations of mode and reference frame as
      shown in commented out case using up to 6 contexts.
      
      Derf +0.26 overall psnr +0.15% ssim vs original method.
      
      Change-Id: I64c21ddec0abbb27feaaeaa1da2e9f164ebaca03
      8266abfe
  8. 08 Feb, 2012 1 commit
  9. 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
      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
    • Paul Wilkins's avatar
      Modified prediction behavior for reference frame. · 58ec6fe8
      Paul Wilkins authored
      Trial of a modified prediction function that ranks each possible
      reference frame based on a combination of local usage and
      frame level probability. The code is a bit cleaner and simpler.
      
      In direct comparison with old unpredicted method with segment level
      coding turned off for mode,ref & EOB the prediction gives a gain on derf
      of around 0.4%. There is some further gain from bug fixes over earlier code.
      
      With segment coding on the prediction method is slightly -ve on some very
      easy clips (at low rates) due to slightly higher overheads, but better on harder
      clips. Overall neutral on derf in direct comparison on latest code base, but
      compared to earlier code without bug fixes about +0.7% overall psnr
      +0.3% SSIM.
      
      Change-Id: I5b8474658b208134d352d24f6517f25795490789
      58ec6fe8
  10. 03 Feb, 2012 1 commit
    • Paul Wilkins's avatar
      Reference frame prediction: · f0459549
      Paul Wilkins authored
      Extended prediction and coding of reference frame where
      a subset of options are flagged as available at the segment level.
      
      Updated copyright notices.
      
      Switch to SAD in mbgraph code as SATD problematic for the
      foreground and background separation as it can ignore large DC shifts.
      
      Change-Id: I661dbbb2f94f3ec0f96bb928c1655e5e415a7de1
      f0459549
  11. 02 Feb, 2012 1 commit
    • Paul Wilkins's avatar
      Comment out segref segmentation filter changes. · 92ffb17c
      Paul Wilkins authored
      Commented out changes from earlier checking:
      
      "Change Iab7f1eff: vpnext use segref segmentation filter"
      
      Which in its current state breaks the decoder.
      
      Change-Id: I9185098aeda8ce65310f338c4c9375f4a39005d3
      92ffb17c
  12. 31 Jan, 2012 4 commits
  13. 27 Jan, 2012 1 commit
  14. 26 Jan, 2012 1 commit
  15. 18 Jan, 2012 1 commit
  16. 17 Jan, 2012 1 commit
    • Paul Wilkins's avatar
      Rate control on static scenes plus Y2dc delta Q fix. · cf561bad
      Paul Wilkins authored
      A problem can arise on static clips with force key frames where
      attempts to avoid popping lead to a progressive reduction in key
      frame Q that ultimately may lead to unexpected overspend against
      the  rate target.
      
      The changes in this patch help to insure that in such clips the
      quality of the key frames across the clip is more uniform (rather
      than starting bad and getting better - especially at low target rates).
      
      This patch also includes a fix that removes a delta on the Y2DC
      when the baseline q index < 4 as this is no longer needed.
      
      There is also a fix to try and prevent repeat single step Q adjustment in
      the recode loop leading to lots of recodes, especially where the use
      of forced skips as part of segmentation has made the impact of Q on
      the number of bits generated much smaller.
      
      Patch 2: Amend "last_boosted_qindex" calculation for arf overlay frames.
      
      Change-Id: Ia1feeb79ed8ed014e4239994fcf5e58e68fd9459
      cf561bad
  17. 05 Jan, 2012 1 commit
    • Yaowu Xu's avatar
      Added an emms to prevent invalid stats output · a5ea6844
      Yaowu Xu authored
      In certain hardware configuration, where mmx code is enabled and
      other simd (sse2/sse3) disabled, lacking of this emms caused invalid
      internal stats outputs.
      
      Change-Id: I77c61cf6e0448d3f3b8c11781aa9e42f31d231c9
      a5ea6844
  18. 19 Dec, 2011 3 commits
    • Paul Wilkins's avatar
      Extend to 256 Q steps. · df4e79f7
      Paul Wilkins authored
      This commit extends the number of Q steps to 256 from 128.
      The q_trans[] array has been altered to distribute available Q index values
      (using the current 64 steps available as input parameters) evenly across the
      available range. This is coupled with the fact that each Q step where possible
      now equates to a fixed % change in the quantizer. This may want refinement
      later especially in terms of the granularity at the high quality end but is a
      reasonable starting point.
      
      Change-Id: I2aaa6874fa10ce05c958dd182947ce39f6f1eecb
      df4e79f7
    • Paul Wilkins's avatar
      QRange experiements. · ec670bc5
      Paul Wilkins authored
      High Q end extended a little.
      Some clean up.
      
      Slightly better on SSIM, Slightly worse on PSNR over derf set.
      
      Change-Id: I3dceea8a39e11c26e1a389a40e40b86efc76d28c
      ec670bc5
    • 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
  19. 09 Dec, 2011 2 commits
  20. 08 Dec, 2011 1 commit
    • Yaowu Xu's avatar
      fixed a crash caused invalid Q choice · ebcc6605
      Yaowu Xu authored
      The commit fixed a problem by capping cpi->active_best_quality to be
      smaller than cpi->worst_quality.  Also fixed a few line of code that
      was misplaced.
      
      Change-Id: Ie908264b72140c669122a0afde5d886619c33474
      ebcc6605
  21. 07 Dec, 2011 3 commits
    • Yaowu Xu's avatar
      Removed #if CONFIG_MULCONTEXT · b70f23ca
      Yaowu Xu authored
      This commit removed the macro CONFIG_MULCONTEXT, which was used to
      indicate the experiment code for using separate context for altref
      and normal frames. This commit made the change fully merged in.
      
      Change-Id: I525f927f68e2365d37b340ef23b836a136a4f70b
      b70f23ca
    • 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
      fixed a crash when MODE_STATS is enabled · b1823a7d
      Yaowu Xu authored
      The MODE_STATS macro was used to #ifdef around code for mode entropy
      stats collection, this commit fixed a crash when MODE_STATS is on.
      The commit also changed a number of array definitions to use defined
      macros instead of hard-coded numbers.
      
      Change-Id: I114592f53a1e44e31e455f5725f036ae6168735a
      b1823a7d
  22. 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
  23. 05 Dec, 2011 1 commit