1. 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
  2. 01 Feb, 2012 3 commits
  3. 31 Jan, 2012 7 commits
  4. 30 Jan, 2012 1 commit
  5. 27 Jan, 2012 2 commits
  6. 26 Jan, 2012 2 commits
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 23 Dec, 2011 1 commit
  13. 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
  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. 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 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
  17. 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
  18. 09 Dec, 2011 4 commits