1. 28 Feb, 2012 4 commits
    • Yaowu Xu's avatar
      Try to enable 8x8 tranform for smaller resolution · 42891098
      Yaowu Xu authored
      The commit overall on derf test is break even to very slightly positive
      comparing to all 4x4 transform.
      
      Change-Id: I2a7c19599aa54c2d3a5b35db0dc891ba8a6a2b26
      42891098
    • 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
    • Paul Wilkins's avatar
      Code Simplification · b6f02c85
      Paul Wilkins authored
      Removal of code relating to token partitioning
      
      Change-Id: Iaf3c88d6758639a55bd92c3be5c51e6bed407a3c
      b6f02c85
    • Yaowu Xu's avatar
      fixed a wrong intialization value · eb87b56e
      Yaowu Xu authored
      The "update" variable was used as a flag in coef_prob update dry run
      that tests if a frame should encodes update at all. The wrong init
      value forced the update happening always. fixing this has a minor
      improvement in low bit rate situation when 8x8 transform is allowed.
      
      Change-Id: Icb498e8d6a62fd074dcbc2065b797cba9237cb51
      eb87b56e
  2. 27 Feb, 2012 1 commit
    • Paul Wilkins's avatar
      Corrected spelling · b00ed02a
      Paul Wilkins authored
      Apparently the correct spelling of segement is segment !
      
      Change-Id: I88593ee0523f251b3a96794c6166ef8c7898a029
      b00ed02a
  3. 26 Feb, 2012 1 commit
    • Paul Wilkins's avatar
      Code Cleanup. · 646e6221
      Paul Wilkins authored
      Removal of error_resilient_mode features.
      The interface has been left in place but does nothing.
      
      Change-Id: I2407863bd0d3c98407354507423ca48d29f63b17
      646e6221
  4. 25 Feb, 2012 2 commits
    • 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
    • Deb Mukherjee's avatar
      Bug fix in ssse3 variance computation. · 88b36eb0
      Deb Mukherjee authored
      Fixes a bug that was introduced in the high precision mv patch.
      
      Change-Id: Ieadb433ebe4c3ef3e0e63944dab11528bf8bd73a
      88b36eb0
  5. 24 Feb, 2012 4 commits
  6. 23 Feb, 2012 2 commits
    • Deb Mukherjee's avatar
      Clean ups and minor changes in high precision mv with 8-tap interpolation · fb472c5b
      Deb Mukherjee authored
      * Removes EDGE_PIXEL_FILTER for external sanpshot
      * changes the default 8-tap filter based on high precision results
      in http://www.corp.google.com/~debargha/vp8_results/enhinterpn.html
      * changes the default prob tables for high-precision mv encoding to
      favor zeros in the last bit (i.e. quarter pel). This is only important
      for short clips.
      
      Change-Id: I02bb0de8679d9eec06cdbcc8160dbf073cd847a4
      fb472c5b
    • 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. 18 Feb, 2012 1 commit
  9. 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
  10. 16 Feb, 2012 10 commits
    • Yaowu Xu's avatar
      a bit code clean-up · 47d545f1
      Yaowu Xu authored
      Removed some transform code that is not in use.
      
      Change-Id: I9489af7e23d9d7fe052feb6c8bbafa62ebbda39c
      47d545f1
    • 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
    • Deb Mukherjee's avatar
      Removing a stray CONFIG_DUALPRED, and a INTERP_EXTEND fix. · 6b86208d
      Deb Mukherjee authored
      Change-Id: I7549e424ca6846b07a796f2b9cd4e9d4e550ca9b
      6b86208d
    • 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
      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
      optmized rounding for transforms · efa9abd0
      Yaowu Xu authored
      the changes are still temporary, the final transforms, especially
      inverse ones should take in account both accuracy, complexity, and
      sign-bias, which should be decided at a later time.
      
      Change-Id: I116b0c70b25f5ee324ae5713d4564f5d0aa27151
      efa9abd0
    • Yaowu Xu's avatar
      re-scaled 2nd order haar transform · 62a78f03
      Yaowu Xu authored
      During the work of extend_qrange, we have rolled a factor of 2 from
      quantization/dequatnization into 2nd order walsh-hadamard transform.
      This commit does the same for the 2nd order haar transform. so they
      can share the same quantizaiton process as the 2nd order WHT.
      
      Change-Id: I734af4a20ea8149a01b5b1971a065092977dfe33
      62a78f03
    • 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
    • Deb Mukherjee's avatar
      Adjusting 8-tap filter + prelim edge pixel filter code. · ef8ade13
      Deb Mukherjee authored
      Results with the new filter coefficients compared with the previous
      versions are here:
      http://www.corp.google.com/~debargha/vp8_results/enhinterp.html (derf)
      http://www.corp.google.com/~debargha/vp8_results/enhinterp_hd.html (HD)
      Overall, the derf set improves by 0.94% with 8-tap filters while
      the HD set improves by 0.58%.
      
      Patch 1: resolving merge conflict
      
      Change-Id: I09db0abdab7b08bb19f86d911de23d2123309748
      ef8ade13
    • Ronald S. Bultje's avatar
      Remove dual prediction frame re-encoding loop. · 721711fb
      Ronald S. Bultje authored
      I'm basically not convinced that the concept works at all, let alone
      that this is the right place to do it. I think if we want something
      like this at all, I should integrate it with the main encoding loop
      and re-encode checks in onyx_if.c, and show that it has a significant
      benefit (which right now, it doesn't; removing this re-encode check
      actually increases all metrics by ~0.15%).
      
      Change-Id: I1b597385dc17f468384a994484fb24813389411f
      721711fb
  11. 15 Feb, 2012 3 commits
    • Ronald S. Bultje's avatar
      Fix overflows in dual prediction mode selection. · 0930dde2
      Ronald S. Bultje authored
      Change-Id: I265ad46e01a307bca21e6223725e4055f5e08648
      0930dde2
    • Paul Wilkins's avatar
      Experimental code base simplification. · 46f9ad2c
      Paul Wilkins authored
      Remove error concealment code.
      
      Change-Id: I882705174fbfea212e96f7f684e47a671dbe5c67
      46f9ad2c
    • Yaowu Xu's avatar
      moved segment based LPF level selection under CONFIG_FEATUREUPDATES · d327dcf3
      Yaowu Xu authored
      This commit moved segment based loop filter level selection into
      the experiment of CONFIG_FEATUREUPDATES. As previous commit noted,
      the segment based loop filter selection helps the compression by
      ~0.1% on cif set, the ongoing experiment CONFIG_FEATUREUPDATES
      made encoding updates of the segment based LPF level more efficient,
      hence, another .04% gain on cif set. The commit also fixed an issue
      previously where encoder/decoder may use different loop filter level
      for one of the segments.
      
      Change-Id: Ia978b14aae95bb107d561ba53a7a2bb6ff01faf3
      d327dcf3
  12. 14 Feb, 2012 2 commits
    • 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
    • Paul Wilkins's avatar
      Simplification of experimental code base. · 9a8204d6
      Paul Wilkins authored
      Removed ~CONFIG_REALTIME_ONLY code.
      
      Change-Id: I5fafff29a08acd8928699f9ddce8744787024d8c
      9a8204d6
  13. 13 Feb, 2012 3 commits
    • Jim Bankoski's avatar
      vp8 - config_featureupdates · af8f1928
      Jim Bankoski authored
      Added a bit to signify that the feature changed since
      the last time we sent it, or not so that we don't need
      to send all the databits for every feature change.
      
      added config
      
      Change-Id: I8d3064ce90d4500bf0d5c6b87c664e46138dfcac
      af8f1928
    • Yaowu Xu's avatar
      Changed how coefficient probability table is updated · 2d1ead34
      Yaowu Xu authored
      Added a frame level flag to indicate if coef probabilities are updated
      at all for the frame.
      
      During the experimental work with 8x8 transform, it is discovered that
      even in the case of no probability is ever update, cost of transmitting
      "no update" for each of probabilities can run up to become a significant
      overhead cost. A single bit to indicate no-update for all coef probs
      is therefore helpful, which is also demonstrated by the test results:
      
      1. On Cif set:
      http://www.corp.google.com/~yaowu/no_crawl/t8x8/cif_t8x8_updprob.html
      (avg psnr: .14%, glb psnr: .14% SSIM: .13%)
      
      2. On HD set:
      http://www.corp.google.com/~yaowu/no_crawl/t8x8/HD_t8x8_updprob.html
      (avg psnr: .02%  glb psnr: .01% SSIM: .02%)
      It should be noted that the gain on HD is smaller because the average bit
      rate is much higher in contrast to the overhead bit cost.
      
      Change-Id: I46db270e693ee8799fef34a14d8260868ce4cd16
      2d1ead34
    • Paul Wilkins's avatar
      Fixed typo on #define name · 21108d80
      Paul Wilkins authored
      SE_LVL_EOB => SEG_LVL_EOB
      
      Change-Id: I6d10169878a709bc9b82f03e5d5903c629fa7679
      21108d80
  14. 10 Feb, 2012 5 commits
    • Yaowu Xu's avatar
      fixed an issue related to 2nd order size due to merge artifacts. · 9ded6e37
      Yaowu Xu authored
      For 8x8 transformed macroblock, the 2nd order transform is a 2x2 haar
      transform, here there is only 4 coefficients total. A previous merge
      changed these to 64, causing crashes when encoding with 8x8 transform
      enabled. (i.e. when input video image size > 640x360 ) This commit
      reverts them back to 4 and fixes the crashes.
      
      Change-Id: I3290b81f8c0d32c7efec03093a61ea57736c0550
      9ded6e37
    • 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
      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