1. 09 Feb, 2012 4 commits
    • 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
    • Paul Wilkins's avatar
      Changes to coding of dual_pred flag. · 59a200f1
      Paul Wilkins authored
      Further use of common prediction functions and experiments
      with alternate contexts based on mode and reference frame.
      
      For the Derf set using reference frame as basis of context
      gives +0.18% Overall Psnr and +0.08 SSIM
      
      Change-Id: Ie7eb76f329f74c9c698614f01ece31de0b6bfc9e
      59a200f1
  2. 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
  3. 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
  4. 01 Feb, 2012 1 commit
  5. 31 Jan, 2012 3 commits
    • Paul Wilkins's avatar
      Added common prediction modules. · b2f64dff
      Paul Wilkins authored
      This function adds the common prediction modules,  some data structures
      and a config option but does not use them.
      
      It also corrects a bug in clearing down  the MODE_INFO border and introduces
      a new element that indicates if an entry corresponds to an "in image" macro block
      or is part of the border.
      
      Change-Id: Ib69eec0876173ebe9d1de9df9537d0b2447702e0
      b2f64dff
    • Paul Wilkins's avatar
      Moved some reference frame data structures into common. · 5f0f260f
      Paul Wilkins authored
      In this commit only the decoder side was updated.
      
      Change-Id: Ia9bd58da07d1a943f028e330f0489344e62b0d02
      5f0f260f
    • Paul Wilkins's avatar
      Moved some segmentation data structures. · fe96afa7
      Paul Wilkins authored
      Moved some segmentation data structures into VP8_COMMON
      
      Change-Id: I59c6e2edf7a0176e35319936eea450027aeb3b39
      fe96afa7
  6. 30 Jan, 2012 1 commit
  7. 27 Jan, 2012 1 commit
  8. 26 Jan, 2012 1 commit
  9. 24 Jan, 2012 1 commit
    • Jim Bankoski's avatar
      vpn common -> implicit segmentation · 91325b8f
      Jim Bankoski authored
      This introduces base functions for introducing implicit segmentation.
      The code that actually stores the results to the segment map isn't
      here yet.   This just prints out the segmentation map results
      if you call it.
      
      Uses connected component labeling technique on mbmi info so that only
      if 2 mbs are horizontally or vertically touching do they get the same
      segment.
      
      vp8next - plumbing for rotation
      
      code to produce taps for rotation ( tapify. py ),  code
      for predicting using rotation ( predict_rotated.c ) ,  code
      for finding the best rotation find_rotation.c.
      
      didn't checkin code that uses this in the codec.   still work
      in progress.
      
      Fixed copyright notice
      
      Change-Id: I450c13cfa41ab2fcb699f3897760370b4935fdf8
      91325b8f
  10. 20 Jan, 2012 1 commit
    • Yaowu Xu's avatar
      changed loop filter for MBs using 8x8 transform · aebb16bf
      Yaowu Xu authored
      This commit added a set of loop filter functions for macroblocks
      using 8x8 transform. First we turned off the regular loop filtering
      on 4x4 block boundaries that do not exist in macroblocks using 8x8
      transform. Second, we change to use the same loop filter(mask and
      7 tap filter) that used for macroblock edge filtering.
      
      Change-Id: I3a00460b7674ced116917d86812ffc32578c1d3a
      aebb16bf
  11. 18 Jan, 2012 1 commit
    • Yaowu Xu's avatar
      new loop filter functions for macroblock boundaries · 5e7d7d3d
      Yaowu Xu authored
      The commit adds a new set of loop filter for macroblock edge filtering.
      The new loop filter has a mask to detect so-called "flat" regions. The
      detection checks 5 pixels of each side of an edge. If the all pixels
      have value with +/-1 from the edge pixel on the same side, the region
      is treated as a "flat" region. For such case, a 7 tap filter is used
      to change 3 pixel values on each side. The 7 taps are:
                     [1, 1, 1, 2, 1, 1, 1]/8
      The furthest away pixels used as input are +/-5 away from edge. For
      non-flat region, we fall back to old filtering. It should be noted
      here that the thresholds and filter taps may require more optimization
      for best possible results.
      
      Tests on a set of hd clips showed consistent gains:
      http://www.corp.google.com/~yaowu/no_crawl/mblpf_hd.html
      (avg psnr: .83% glb psnr: .77% ssim: .82%)
      
      Tests on derf set also showed consistent gains:
      http://www.corp.google.com/~yaowu/no_crawl/mblpf_derf.html
      (avg psnr: .24% glb psnr: .22% ssim: .48%)
      
      Change-Id: I0855b1ff48e79e1175c20b81967137e18b2af352
      5e7d7d3d
  12. 23 Dec, 2011 1 commit
  13. 21 Dec, 2011 1 commit
    • Yaowu Xu's avatar
      changed mode_context update strategy · 4e9b4a15
      Yaowu Xu authored
      Previously, the mode context is always udpated based on stats of current
      frame, when there is no count, 50% is used for both left and right branch.
      However, it is observed that with such strategy, a small count or no count
      at all can skew the probability distribution significantly. This commmit
      changed the mode_context update strategy to prevent small counts from
      skewing the probability distributions.
      
      Tests on derf set showed a small gain:  .06% in psnr and .09% in ssim
      
      Change-Id: Ic812e64ae5f70251c170b0717f7b7fa587055488
      4e9b4a15
  14. 19 Dec, 2011 4 commits
    • Paul Wilkins's avatar
      Extended Q: · 7187c462
      Paul Wilkins authored
      Cleanup and switch to Q extended at low end too.
      
      Change-Id: Ie22676bb9e961097d75dbd1d81745208b63e5f4b
      7187c462
    • 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
  15. 09 Dec, 2011 3 commits
  16. 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
      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
  17. 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
    • Yaowu Xu's avatar
      corrected an enum name · 0404a5a7
      Yaowu Xu authored
      CNT_INTRA has been used for counting (0,0) motion vectos, this commit
      renames it to CNT_ZEROMV
      
      Change-Id: I8f67c5468370090525faf84ba5b3f780d302443f
      0404a5a7
  18. 02 Dec, 2011 3 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
    • 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
  19. 01 Dec, 2011 1 commit
    • Yaowu Xu's avatar
      added transform type to MB_MODE_INFO · bba710fc
      Yaowu Xu authored
      this commit is to add an variable in the macroblock level mode
      info structure to track the transform size used in each MB, so
      the information can be used later in the loop filter to change
      how loop filter works on MBs with different transform sizes.
      
      Change-Id: Id0eeaba6cc854c6d1be00ed8d237b3d9e250e447
      bba710fc
  20. 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
  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 1 commit
    • Paul Wilkins's avatar
      Extended Q range Experiment. · 9bac509a
      Paul Wilkins authored
      Corrected dc lookup table to maintain ac/dc balance
      close to what it was previously.
      
      Firstpass not being passed the adjusted Q index for
      the extended range.
      
      Change-Id: Ic0200dabda445fea03bf81067999cb2670e99b77
      9bac509a