1. 15 Mar, 2012 1 commit
    • Yaowu Xu's avatar
      added clamp for 2nd motion vector · 21d3612a
      Yaowu Xu authored
      The commit added a clamp to the 2nd motion vector used in compound
      prediction to insure mv within UMV borders. The clamp is similar to
      that of the first motion vector except that No SPLITMV is ever used
      for the 2nd motion vector.
      
      Change-Id: I26dd63c304bd66b2e03a083749cc98c641667116
      21d3612a
  2. 07 Mar, 2012 1 commit
    • Paul Wilkins's avatar
      Snapshot candidate · 68033ca4
      Paul Wilkins authored
      Pulled out super block code for the snapshot as this
      is not quite ready and will need an extensive re-merge.
      
      Change-Id: I436369b511257447a7b0ea064016cb63f5011849
      68033ca4
  3. 05 Mar, 2012 2 commits
    • Ronald S. Bultje's avatar
      Use per-MB compound intra prediction. · c3f5b293
      Ronald S. Bultje authored
      This gives a modest gain on derf overall, although at low bitrates the
      cost is still too high, so this can be improved further.
      
      Patch 2. Re-base and fix 80 column issues
      
      Change-Id: Ida2f9fa3fe75370669f6a27b37108dc602231c63
      c3f5b293
    • Yaowu Xu's avatar
      Changed how UV r/d estimates are done for Intra Modes · 6898e8b7
      Yaowu Xu authored
      The commit changed to compute UV intra RD estimates for 4x4 and 8x8
      separately to be used in mode decision for MB modes associated with
      the appropriate transform size respectively. Now finally after many
      other changes related 8x8 quantizer zbin boost and zbin_mode_boost,
      this change overall helps the HD(with 8x8) by around ~.13%.
      (avg .13%  glb .13% ssim .17%)
      
      The commit also has a few changes for eliminating compiler warnings.
      
      Change-Id: Ibab35dad44820c87e6b44799c66f8d519cc37344
      6898e8b7
  4. 29 Feb, 2012 2 commits
  5. 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
  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. 15 Feb, 2012 1 commit
  8. 10 Feb, 2012 1 commit
  9. 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 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
  10. 06 Feb, 2012 4 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
    • 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
  11. 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
  12. 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
  13. 01 Feb, 2012 2 commits
  14. 31 Jan, 2012 4 commits
  15. 16 Dec, 2011 1 commit
    • Adrian Grange's avatar
      Reset segment_id to 0 when segmentation is disabled · 0fafd054
      Adrian Grange authored
      Whilst the encoder explicitly set the segment_id to 0
      when segmentation is diabled, the decoder would allow
      the segment_id to persist from the previous frame.
      
      This fix attempts to make the decoder behave the same
      as the encoder by explicitly setting the segment_id to
      0 in this case.
      
      Change-Id: I65c3a05247550edb10706eb5d54d306dfb792309
      0fafd054
  16. 15 Dec, 2011 1 commit
    • Adrian Grange's avatar
      Fixed bug to use mode_info_stride rather than mb_cols · ae63ce24
      Adrian Grange authored
      Both encoder & decoder were using mb_cols to
      offset from one row of MODE_INFO structures to the next
      when they should have been using mode_info_stride.
      
      Fixing this in both encoder and decoder gives around
      a 3KB size saving and 0.025dB PSNR improvement on the one
      720P clip I tried.
      
      (Also removed "index" which was being updated but not used)
      
      Change-Id: I413bea802b142886bfcf8d8aa7f5a2f0c524fd4b
      ae63ce24
  17. 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
  18. 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
  19. 06 Dec, 2011 1 commit
    • 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
  20. 02 Dec, 2011 2 commits
    • Yaowu Xu's avatar
      added separate entropy context for alt_ref · acf5d20c
      Yaowu Xu authored
      This commit added code to keep track of separate entropy contexts for
      normal frames and alt ref frames. The underly assumption was that the
      two type of frames have different entropy characteristics given they
      typically have quite different quantization levels. By keeping entropy
      contexts separate, it helps the entropy context distribution to be more
      closely adapted to each frame type.
      
      Tests on derf set showed a good and very consistent gain on all clips
      on all metrics, avg psnr: 0.89%, overall psnr: 0.84% and ssim 0.93%.
      
      http://www.corp.google.com/~yaowu/no_crawl/mulcontext.html
      
      Change-Id: I15bc9697f6ff7829042911fe0c62930585d7e65d
      acf5d20c
    • 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
  21. 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
  22. 21 Nov, 2011 2 commits
    • Paul Wilkins's avatar
      Cosmetic clean up. · 54f090b1
      Paul Wilkins authored
      Clean up of vp8_kfread_modes().
      Remove unnecessary indentation and enforce line length.
      
      Change-Id: I0864d1aff55368126db01bb23efa815786b5245d
      54f090b1
    • Paul Wilkins's avatar
      Decoder segmentation bug. · 19d87e8e
      Paul Wilkins authored
      Fix decoder segmentation bug for temporal coding where the segment map
      was first initialized on a key frame.
      
      in vp8_kfread_modes() after reading the segment id it must be written to
      the  pbi->segmentation_map[] for use in temporal coding on subsequent frames.
      
      Change-Id: I1489305efc376564e734a216f69c2844646ee3d3
      19d87e8e
  23. 15 Nov, 2011 3 commits
    • Paul Wilkins's avatar
      Merge CONFIGURE_SEGMENTATION experiment. · 3cdfdb55
      Paul Wilkins authored
      Removal of CONFIGURE_SEGMENTATION ifdefs.
      
      Removal of legacy support code fo the old coding mechanism.
      
      Use local reference "xd" for MACROBLOCKD structure in
      encode_frame_to_data_rate()
      
      Moved call to choose_segmap_coding_method() out of encode
      loop as the cost of segmentation is not properly accounted
      in the loop anyway. If this is desirable in the future it
      can be moved back. The use of this function to do all the
      analysis and set the probabilities also removes the need
      to track segment useage in threading code.
      
      Change-Id: I85bc8fd63440e7176c73d26cb742698f9b70cade
      3cdfdb55
    • Paul Wilkins's avatar
      Further clean up of Segmentation experiment code · 6394ef28
      Paul Wilkins authored
      Changed name and sense of segment_flag to "seg_id_predicted"
      Added some additional comments and retested.
      
      I also did some experimentation with a spatial prediction option
      using a similar strategy to the temporal mode implemented.
      This helps in some cases where temporal prediction is bad but
      I suspect there is more overlap here with work on a larger scale
      block structure and spatial correlation will likely be better
      handled through that mechanism.
      
      Next check in will remove #ifdefs and legacy mode code.
      
      Change-Id: I3b382b65ed2a57bd7775ac0f3a01a9508a209cbc
      6394ef28
    • Paul Wilkins's avatar
      Further work on Segmentation Experiment: · 661b2c2d
      Paul Wilkins authored
      This check in includes quite a lot of clean up and refactoring.
      
      Most of the analysis and set up for the different coding options for the
      segment map (currently simple distribution based coding or temporaly
      predicted coding), has been moved to one location (the function
      choose_segmap_coding_method() in segmenation.c). This code was previously
      scattered around in various locations making integration with other
      experiments and modification / debug more difficult.
      
      Currently the functionality is as it was with the exception that the
      prediction probabilities are now only transmitted when the temporal
      prediction mode is selected.
      
      There is still quite a bit more clean up work that will be possible
      when the #ifdef is removed. Also at that time I may rename and alter
      the sense of macroblock based variable "segment_flag" which indicates
      (1 that the segmnet id is not predicted vs 0 that it is predicted).
      
      I also intend to experiment with a spatial prediction mode that can be
      used when coding a key frame segment map or in cases where temporal
      prediction does not work well but there is spatial correlation.
      
      In a later check in when the ifdefs have gone I may also move the call
      to choose_segmap_coding_method() to just before where the bitsream is
      packed (currently it is in vp8_encode_frame()) to further reduce the
      possibility of clashes with other experiments and prevent it being called
      on each itteration of the recode loop.
      
      Change-Id: I3d4aba2a2826ec21f367678d5b07c1d1c36db168
      661b2c2d