1. 29 May, 2012 1 commit
    • Paul Wilkins's avatar
      Remove "est_max_qcorrection_factor" · f66747fe
      Paul Wilkins authored
      Removed the local scaling factor est_max_qcorrection_factor
      and related code to simplify estimateq calculation (little effect
      anyway)
      
      Cap range of total correction factor.
      
      Slight change to break out case to turn off arf.
      
      Change-Id: I748187737ba93cfadf016f3dfdf8d2741934067f
      f66747fe
  2. 15 May, 2012 2 commits
    • Ronald S. Bultje's avatar
      Rewrite reference frame costing in the RD loop. · 0b8a95a0
      Ronald S. Bultje authored
      I now see I didn't write a very long description, so let's do it
      here then. We took a pretty big quality hit (0.1-0.2%) from my
      recent fix of the inversion of arguments to vp8_cost_bit() in the
      RD reference frame costing. I looked into it and basically the
      costing prevented us from switching reference frames. This is of
      course silly, since each frame codes its own prob_intra_coded, so
      using last frame cost indications as a limiting factor can never
      be right.
      
      Here, I've rewritten that code to estimate costings based partially
      on statistics from progress on current frame encoding. Overall,
      this gives us a ~0.2%-0.3% improvement over what we had previously
      before my argument-inversion-fix, and thus about ~0.4% over current
      git (on derf-set), and a little more (0.5-1.0%) on HD/STD-HD/YT.
      
      Change-Id: I79ebd4ccec4d6edbf0e152d9590d103ba2747775
      0b8a95a0
    • Deb Mukherjee's avatar
      Adds new Directional Intra prediction modes. · c5ddb7f0
      Deb Mukherjee authored
      Adds 6 directional intra predictiom modes for 16x16 and 8x8 blocks.
      
      Change-Id: I25eccc0836f28d8d74922e4e9231568a648b47d1
      c5ddb7f0
  3. 11 May, 2012 1 commit
    • Paul Wilkins's avatar
      First pass overhaul preparatory change. · 35358320
      Paul Wilkins authored
      This is the first patch in a series of changes to the first
      pass code. (Broken down for ease of testing/merging/review).
      
      This patch introduces a new stats element "sr_coded_error".
      This is the coded error recorded vs the second reference
      frame (which is updated such that it lags by at least one frame).
      No use is made of the new structure in this change so this patch
      should have no material effect.
      
      Removed some ifdefs and deprecated code (#if NEW_BOOST).
      Removed twopass.gf_decay_rate (not used any more)
      
      Change-Id: I1be672a73017f7c13fd50fb4f99236aa2ed30916
      35358320
  4. 08 May, 2012 1 commit
    • Yaowu Xu's avatar
      a number of fixes to entropy stats collection · 54cf1d9a
      Yaowu Xu authored
      1. block types
      There are only three types of blocks for 8x8 transformed MBs, i.e. Y
      block with DC does not exist for 8x8 transformed MBs as all MB using
      8x8 transform have 2nd order haar transform. This commit introduced
      a new macro BLOCK_TYPES_8X8 to reflect such fact.
      
      2. context counters
      This commit also fixed the mixed of context_counters between 4x4 and
      8x8 transformed MBs. The mixed use of the counters leads me to think
      the existing the context probabilities were not properly generated
      from 8x8 transformed MBs.
      
      3. redundant collecting in recoding
      The commit also corrected the code that accumulates entropy stats by
      making sure stats only collected for final packing, not during the
      recode loop
      
      Change-Id: I029f09f8f60bd0c3240cc392ff5c6d05435e322c
      54cf1d9a
  5. 26 Apr, 2012 1 commit
    • Deb Mukherjee's avatar
      Adds search option for best interpolation filter. · acdda50a
      Deb Mukherjee authored
      Adds a speed feature to conduct a brute force search among a set of
      available interpolation filters for the best one in an RD sense.
      
      There is a gain of 0.4% on derf, 1.0% on Std-HD.
      
      Patch 2: A macro added to determine if the encoder state is reset
      for each new filter tried.
      
      Patch 3: rebase, also fixes a bug (decodframe.c) introduced by a
      couple of missing function pointer assignements.
      
      Patch 4: rebase.
      
      Change-Id: Ic9ccca9d8c35c6af557449ae867391a2f996cc29
      acdda50a
  6. 25 Apr, 2012 1 commit
    • Yaowu Xu's avatar
      Merge UVINTRA experiment · c1814d26
      Yaowu Xu authored
      The commit merges the UVINTRA experiment and removed the related
      macros. The overall effect of the experiment is a small gain (.1%
      on derf)
      
      Change-Id: Ia34b3312fb9b5b34c9ba111bf0fa78c6f78ac80b
      c1814d26
  7. 18 Apr, 2012 1 commit
  8. 17 Apr, 2012 1 commit
    • Yaowu Xu's avatar
      Added intra mode probabilites into coding_context · 31afc770
      Yaowu Xu authored
      These contexts need to be saved and restored for recode, otherwise
      encoder/decoder mismatch happens for some clips (eg._mobcal 720p)
      
      Change-Id: Ic65cfa0bf56ed0472ecab962ce31394d59d344bf
      31afc770
  9. 11 Apr, 2012 3 commits
    • Paul Wilkins's avatar
      Refactoring of encode loop and bitstream packing · 13c6d1a8
      Paul Wilkins authored
      Some code re-factored / moved to allow the main
      pack operation inside the recode loop so  that the
      size estimate is accurate.
      
      Deletion of some redundant code relating to one pass.
      
      Aproximate improvement over March 27 code base:
      Derf 0.0%, YT 0.5%, YThd 0.3% Std_hd 0.25%
      
      Change-Id: Id2d071794ab44f0b52935f6fcdb5733d09a6bb86
      13c6d1a8
    • Paul Wilkins's avatar
      T8x8 zbin and rate control changes. · a3392d57
      Paul Wilkins authored
      Some adjustments to zbin for t8x8.
      Changes to rules for sizing forced key frames.
      Some extra stats output in tmp.stt.
      
      Approximate  gain on YT-hd set 0.5%
      
      There are still issues in sizing key frames and gf/arf frames
      when the image is largely static. These in part relate to
      problems with cost estimates in the recode loop.
      
      Change-Id: I6f0159dc8a8faeab4115a19c668d442491619a68
      a3392d57
    • Adrian Grange's avatar
      Superblock encoding order · 9daf3154
      Adrian Grange authored
      This is the first patch to add superblock (32x32) coding
      order capabilities. It does not yet do any mode selection
      at the SB level, that will follow in a further patch.
      
      This patch encodes rows of SBs rather than
      MBs, each SB contains 2x2 MBs.
      
      Two intra prediction modes have been disabled since they
      require reconstructed data for the above-right MB which
      may not have been encoded yet (e.g. for the bottom right
      MB in each SB).
      
      Results on the one test clip I have tried (720p GIPS clip)
      suggest that it is somewhere around 0.2dB worse than the
      baseline version, so there may be bugs.
      
      It has been tested with no experiments enabled and with
      the following 3 experiments enabled:
        --enable-enhanced_interp
        --enable-high_precision_mv
        --enable-sixteenth_subpel_uv
      in each case the decode buffer matches the recon buffer
      (using "cmp" to compare the dumped/decoded frames).
      Note: Testing these experiments individually created
      errors.
      
      Some problems were found with other experiments but it
      is unclear what state these experiments are in:
        --enable-comp_intra_pred
        --enable-newentropy
        --enable-uvintra
      
      This code has not been extensively tested yet, so there
      is every likelihood that further bugs remain. I also
      intend to do some code cleanup & refactoring in tandem
      with the next patch that adds the 32x32 modes.
      
      Change-Id: I1eba7f740a70b3510df58db53464535ef881b4d9
      9daf3154
  10. 21 Mar, 2012 2 commits
  11. 01 Mar, 2012 1 commit
  12. 29 Feb, 2012 1 commit
  13. 28 Feb, 2012 2 commits
    • 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
    • Paul Wilkins's avatar
      Experimental branch code clean up. · 25c127f5
      Paul Wilkins authored
      Removal of some further code relating to partitions
      and error resilience.
      
      Spelling correction.
      
      Change-Id: I36067aae67a4a23bec359541dda3400b0bbf26d0
      25c127f5
  14. 25 Feb, 2012 1 commit
    • Paul Wilkins's avatar
      Removal of temporal re sampling code. · 80b873e3
      Paul Wilkins authored
      For now the interface elements have been left in place
      to make sure existing parameter files work but parameters
      relating to drop frame wont do anything.
      
      Change-Id: I579ee614726387381c546845dac4bc03c74c6a07
      80b873e3
  15. 24 Feb, 2012 1 commit
  16. 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
  17. 15 Feb, 2012 1 commit
  18. 14 Feb, 2012 1 commit
  19. 10 Feb, 2012 2 commits
  20. 09 Feb, 2012 1 commit
    • 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
  21. 08 Feb, 2012 1 commit
  22. 06 Feb, 2012 2 commits
    • 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
  23. 31 Jan, 2012 3 commits
  24. 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
  25. 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
  26. 09 Dec, 2011 1 commit
    • Yaowu Xu's avatar
      Enabled adaptive UV intra coding for inter frames · be360d47
      Yaowu Xu authored
      Previously, Y-adaptive UV intra coding only enabled on key frames in
      UVINTRA experiment. This commit enabled the same coding for inter
      frames, so the encoding of UV intra modes are consistent cross all
      frame types. Tests on derf set showed a very small overall gain around
      .04%:
      
      http://www.corp.google.com/~yaowu/no_crawl/interUVintra.html
      
      The gain looks to be reasonable given inta coded MBs is only a
      small portion of MBs in inter frames.
      
      Change-Id: Ic6fc261923f2c253f4a0c9f8bccf4797557b9e16
      be360d47
  27. 07 Dec, 2011 2 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
      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
  28. 06 Dec, 2011 3 commits
    • Ronald S. Bultje's avatar
      Fix for RD thresholds if both I8X8 and DUALPRED are enabled. · 0072b8bc
      Ronald S. Bultje authored
      Change-Id: I5f9fc894e6a332d9be6d7336c7c5fe11e65b8498
      0072b8bc
    • 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