1. 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
  2. 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
  3. 20 Dec, 2011 4 commits
  4. 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
  5. 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
  6. 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
  7. 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
  8. 09 Dec, 2011 5 commits
  9. 08 Dec, 2011 1 commit
    • Yaowu Xu's avatar
      fixed a crash caused invalid Q choice · ebcc6605
      Yaowu Xu authored
      The commit fixed a problem by capping cpi->active_best_quality to be
      smaller than cpi->worst_quality.  Also fixed a few line of code that
      was misplaced.
      
      Change-Id: Ie908264b72140c669122a0afde5d886619c33474
      ebcc6605
  10. 07 Dec, 2011 8 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
    • Yaowu Xu's avatar
      fixed a crash when MODE_STATS is enabled · b1823a7d
      Yaowu Xu authored
      The MODE_STATS macro was used to #ifdef around code for mode entropy
      stats collection, this commit fixed a crash when MODE_STATS is on.
      The commit also changed a number of array definitions to use defined
      macros instead of hard-coded numbers.
      
      Change-Id: I114592f53a1e44e31e455f5725f036ae6168735a
      b1823a7d
    • Yaowu Xu's avatar
      Merge "Minor fixes:" into experimental · d0e3acf9
      Yaowu Xu authored
      d0e3acf9
    • Paul Wilkins's avatar
      Minor fixes: · 79774d10
      Paul Wilkins authored
      fixed issues caused by conflicts between two experiments.
      
      Change-Id: I56a9bd69493e4850c121ea057a6233c55777c2a5
      79774d10
    • Ronald S. Bultje's avatar
      Rename use_dc_pred to use_16x16_pred. · 73bbdfe5
      Ronald S. Bultje authored
      Because the variable doesn't distinguish between DC and non-DC
      prediction, but rather between 16x16 or 4x4 prediction.
      
      Change-ID: Ia4e7dda2bd6230c91515072e3277be2d64e42629
      73bbdfe5
    • Yaowu Xu's avatar
      b1781b48
  11. 06 Dec, 2011 4 commits
    • Ronald S. Bultje's avatar
      Fix for RD thresholds if both I8X8 and DUALPRED are enabled. · 0072b8bc
      Ronald S. Bultje authored
      Change-Id: I5f9fc894e6a332d9be6d7336c7c5fe11e65b8498
      0072b8bc
    • 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
    • Paul Wilkins's avatar
      Some further QIndex issues with extended Q · b4ad9b5d
      Paul Wilkins authored
      Resolved or factored out some further issues with Q index.
      Put in a 3rd order polynomial instead of less accurate power function
      as the best fit on gf and kf boost adjustment.
      Added avg_q value to use instead of ni_av_qi.
      Compute segment delta Q values based on avg_q.
      Fixed bug in adjust_maxq_qrange().
      
      The extended range Q on the derf set, using standard data rates
      (which do not extend high enough to get big benefits) still show
      a shortfall of between 0.5 and 1% though so there would appear to
      be further issues that need to be tracked down.
      
      Change-Id: Icfd49b9f401906ba487ef1bef7d397048295d959
      b4ad9b5d
    • 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
  12. 05 Dec, 2011 1 commit
  13. 02 Dec, 2011 5 commits
    • Yaowu Xu's avatar
      changed configure script to enable new experimental options · 8a40d2f5
      Yaowu Xu authored
      Added two experimental options to the configure script:
      1. newnear:
         new scheme of doing mv encoding that include a motion vector from
         last frame in nearest and near mv search
      2. mulcontext:
         tracks entropy context separately for regular frames and alt ref
         frames.
      
      Change-Id: If6e0d5d593351707b497a26eb6a763e080f77e6f
      8a40d2f5
    • 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
    • Paul Wilkins's avatar
      CR/LF issue. · 2b307b38
      Paul Wilkins authored
      Change-Id: I95fab6f51967008acf1bc9e98fdb7bb56974807f
      2b307b38
  14. 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