1. 06 Feb, 2012 3 commits
    • 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
  2. 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
  3. 02 Feb, 2012 2 commits
    • 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
    • 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
  4. 01 Feb, 2012 3 commits
  5. 31 Jan, 2012 7 commits
  6. 30 Jan, 2012 1 commit
  7. 27 Jan, 2012 2 commits
  8. 26 Jan, 2012 2 commits
  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 3 commits
    • 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
    • Yaowu Xu's avatar
      Added code to prevent I8X8_PRED mode for MBs using 8x8 transform · 5aab0c3f
      Yaowu Xu authored
      This fixed a conflict introduced by the change of adding 8x8 intra
      prediction modes. The 8x8 intra prediction mode code assumed the
      use of 4x4 transform, and causes encoder crashes when the codec is
      configured with --enable-t8x8.
      
      Change-Id: I00cc94df63e9725377ffba9eb51be6b77fe3fcf9
      5aab0c3f
    • Yaowu Xu's avatar
      reverted an accidental code deleting · be9af16e
      Yaowu Xu authored
      commit cf561bad accidentally deleted a line of code that sets the
      base_qindex for each frame, which leads to every frame is encoded
      at Q of 0.
      
      Change-Id: Ib5f8022e856bf3b3bd0d4147405e46241e3dcf2d
      be9af16e
  11. 18 Jan, 2012 2 commits
    • 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
    • Paul Wilkins's avatar
      Possible divide by 0 error. · bd5f384b
      Paul Wilkins authored
      Put traps to prevent two possible divide by 0 errors.
      
      Change-Id: Ia415b945244253dcdd12f54f1f157f9ca8c94d6b
      bd5f384b
  12. 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
  13. 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
  14. 23 Dec, 2011 1 commit
  15. 21 Dec, 2011 2 commits
    • Christian Duvivier's avatar
      Fix a couple of warnings. · a7eb2176
      Christian Duvivier authored
      a7eb2176
    • 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
  16. 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
  17. 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
  18. 15 Dec, 2011 2 commits
    • Adrian Grange's avatar
      Fixed stride bug in segmentation code · b3ade15a
      Adrian Grange authored
      mode_info_context is padded with an additional column of data, so
      mode_info_stride should be used to move between rows rather than
      mb_cols.
      
      Change-Id: I598559a2cd9df1c486d64aaeccf76b76a7ecf21c
      b3ade15a
    • 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
  19. 12 Dec, 2011 1 commit
    • Paul Wilkins's avatar
      QINDEX_RANGE fixed tables. · ae9023a3
      Paul Wilkins authored
      Removed a couple more fixed tables for the extended quantizer experiment
      that depend on QINDEX_RANGE.
      
      Change-Id: I2c15ffc7488c2a2b8d6504e2c4b6b2339799d117
      ae9023a3