1. 31 Jan, 2012 2 commits
  2. 27 Jan, 2012 1 commit
  3. 26 Jan, 2012 1 commit
  4. 18 Jan, 2012 1 commit
  5. 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
  6. 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
  7. 19 Dec, 2011 3 commits
    • 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
  8. 09 Dec, 2011 2 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 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
      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
  11. 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
    • 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
  12. 05 Dec, 2011 1 commit
  13. 02 Dec, 2011 4 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
    • 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
  15. 29 Nov, 2011 3 commits
    • Paul Wilkins's avatar
      MinQ equations. · a917afab
      Paul Wilkins authored
      Slight tweaks to the new minq equations to bring results more into line with
      original lookup tables.
      
      Change-Id: I969fc87d95912df549b6775e83ee2345e84d4da0
      a917afab
    • Paul Wilkins's avatar
      Extended Q Range: · b9ce9bcb
      Paul Wilkins authored
      Addressed a couple of other QIndex dependencies.
      
      Change-Id: I15b224bffd0210d3c7065cb6905156f2ca8e9ea9
      b9ce9bcb
    • 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
  16. 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
  17. 23 Nov, 2011 2 commits
    • Paul Wilkins's avatar
      Two pass rate control code changes. · ee2051f6
      Paul Wilkins authored
      This comitt brings accross changes from the public branch
      commit number Icf74d13af77437c08602571dc7a97e747cce5066.
      
      The main puurpose of this comit relates to CQ mode but it
      also includes some refactoring of the two pass code which
      I hope will make tuning the experimental branch for the new
      quantizer range a little less painfull.
      
      Change-Id: I278e989436a928fc1fe7761068960048f9d7a376
      ee2051f6
    • Paul Wilkins's avatar
      Further resolution of QIndex LUTS; · a0b7db22
      Paul Wilkins authored
      This commit resolves further QIndex look up tables to facilitate
      experimentation with the quantizer range.
      
      In some cases  rather than remove the look up tables completely
      I have created functions that are called once  to populate them
      using a formulaic approach base on the actual quantizer.
      
      The use of these functions based on best fit of data from the original
      tables does affect the results on some clips but across the derf test
      set the effect was broadly neutral.
      
      Change-Id: I8baa61c97ce87dc09a6340d56fdeb681b9345793
      a0b7db22
  18. 22 Nov, 2011 1 commit
    • Paul Wilkins's avatar
      Removal of Qindex LUTS. · d39b5d05
      Paul Wilkins authored
      One of the problems arising when tweaking or adjusting the quantizer
      tables is that there are a lot of look up tables that depend on the QINDEX.
      Any adjustment to the link between QINDEX and real quantizer therefore tends
      to break aspects of for example the rate control.
      
      In this check in I have replaced several of the look up tables with functions that
      approximate the same results as the old Q luts but use a formulaic approach
      based on real Q values rather than QIndex. This should hopefully make it easier
      to experiment with changes to the Q tables without always having to go through
      and hand optimize a set of look up tables. Once things stabilize we may choose
      to re-instate luts for the sake of performance.
      
      Patch 2:
          Addressed Ronald's comments.
          vp8_init_me_luts() Added so luts only initialized once.
      
      Change-Id: Ic80db2212d2fd01e08e8cb5c7dca1fda1102be57
      d39b5d05
  19. 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
  20. 17 Nov, 2011 1 commit
    • Adrian Grange's avatar
      Clip buffer level to the maximum buffer size in CBR · eb15fe85
      Adrian Grange authored
      The buffer level was able to increase indefinitely rather than
      being clipped to the maximum buffer size specified by the user.
      
      This change checks the buffrer level and prevents it from
      going beyond the upper limit of the buffer.
      
      Change-Id: Ifff55f79d3c018e4d3d77e554b11ada543cc1654
      eb15fe85
  21. 15 Nov, 2011 2 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 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
  22. 11 Nov, 2011 1 commit
    • Paul Wilkins's avatar
      Segmentation experiment: · c9130bdb
      Paul Wilkins authored
      Added last_segmentation_map[] structure
      to keep track of what we had before when
      doing temporal prediction. With this change
      the existing code does once again appear to
      be giving a decodable bitstream for both
      temporal and standard prediction modes.
      However, it is still somewhat messy and
      confused and there is no option to take
      advantage of spatial prediction so it could
      do with further work.
      
      Some housekeeping / clean out.
      
      Change-Id: I368258243f82127b81d8dffa7ada615208513b47
      c9130bdb
  23. 09 Nov, 2011 2 commits
    • Paul Wilkins's avatar
      T8x8 experiment merge. · 07892531
      Paul Wilkins authored
      For ease of testing and merging experiments I have
      removed in line code in encode_frame() that assigns
      MBs to be t8x8 or t4x4 coded segments and have
      moved the decision point and segment setup to
      the init_seg_features0 test function.
      
      Keeping everything in one place helps make sure
      for now that experiments using segmentation are
      not fighting each other.
      
      Also made sure mode selection code can't choose 4x4
      modes if t8x8 is selected.
      
      Patch2: In init_seg_features() add checks
      for SEG_LVL_TRANSFORM active.
      
      Change-Id: Ia1767edd99b78510011d4251539f9bc325842e3a
      07892531
    • Paul Wilkins's avatar
      Merging and testing of SEGMENTATION experiment. · b0f9f15d
      Paul Wilkins authored
      Removed code in #if CONFIG_SEGMENTATION that
      enables segmentation and creates a test segmentation
      map, to avoid conflicts with the other segmentation test
      code,
      
      Change-Id: I7a21a44ed188b814cd80b30dd628c62474eba730
      b0f9f15d
  24. 08 Nov, 2011 1 commit
    • Paul Wilkins's avatar
      Segment signaling of TX size · a9df4183
      Paul Wilkins authored
      Initial attempt at using new segment feature signaling
      to indicate 4x4 or 8x8 transform.
      
      needs --enable-experimental --enable-t8x8
      
      Note this is work in progress.
      
      Change-Id: Ib160d46a5d810307bfcbc79853ce1a65b5b870b7
      a9df4183
  25. 04 Nov, 2011 1 commit
    • Paul Wilkins's avatar
      Segment Features with 8x8DCT. · fe38082f
      Paul Wilkins authored
      Temporary check in to turn off other segment features
      tests when #if CONFIG_T8X8 is set as the assignment of
      MBs to differnt segments in each case  will conflict.
      
      The 8x8 code will be modified to use the new segment
      feature method properly in a later check in.
      
      Increase bits allowed for EOB end stop marker to 6 ready
      for 8x8.
      
      Change-Id: I4835bc8d3bf98e1775c3d247d778639c90b01f7f
      fe38082f