1. 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
  2. 21 Nov, 2011 1 commit
    • Paul Wilkins's avatar
      CONFIG_T8X8 experiment.: · 4f792921
      Paul Wilkins authored
      Block the selection of 4x4 modes in key frames if 8x8 is selected.
      
      Change-Id: Ie5729ec22a999d9a1996f020bd4b941e29514992
      4f792921
  3. 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
      Segmentation feature logic fix. · ac2ab02d
      Paul Wilkins authored
      Bug fix to logic in vp8_pick_inter_mode() and
      vp8_rd_pick_inter_mode().
      
      The block on the use of segment features
      for the cm->refresh_alt_ref_frame case
      was just for testing and is not correct.
      
      The special case code for alt ref can
      be re-enabled as an else clause.
      
      Change-Id: Ic9b57cdb5f04ea7737032b8fb953d84d7717b3ce
      ac2ab02d
  4. 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
  5. 04 Nov, 2011 1 commit
    • Paul Wilkins's avatar
      Segment Feature Data Access · a258bba1
      Paul Wilkins authored
      No change to functionality or output.
      
      Updates to the segment feature data structure now all done
      through functions such as set_segdata() and get_segdata()
      in seg_common.c.
      
      The reason for this is to make changing the structures (if needed)
      and debug easier.
      
      In addition it provides a single location for subsequent addition
      of range and validity checks. For  example valid combination of
      mode and reference frame.
      
      Change-Id: I2e866505562db4e4cb6f17a472b25b4465f01add
      a258bba1
  6. 03 Nov, 2011 1 commit
    • Paul Wilkins's avatar
      Segment Features. Removal of #ifdefs · a10a268e
      Paul Wilkins authored
      Removal of configure #ifdefs so that segment features
      always available. Removal of code supporting old
      segment feature method.
      
      Still a good deal of tidying up to do.
      
      Change-Id: I397855f086f8c09ab1fae0a5f65d9e06d2e3e39f
      a10a268e
  7. 02 Nov, 2011 1 commit
    • Paul Wilkins's avatar
      Segmentation: Reference frames · 87ff8620
      Paul Wilkins authored
      Modify reference frame segmentation so that ONE or MORE
      reference frames may be marked as a available for a given
      segment.
      
      Fixed bugs relating to segment coding of INTRA and some
      INTER modes at the segment level.
      
      Modified Q boost for static areas based on ambient average Q.
      
      Strong results now on clips with significant static areas.
      (some data points in derf set as high as 9% and some static &
      slide show type content in YT set > 20%)
      
      Change-Id: Ia79f912efa84b977f35a23683ae3643251e24f0c
      87ff8620
  8. 24 Oct, 2011 1 commit
    • Paul Wilkins's avatar
      Further segment feature extensions. · 01ce04bc
      Paul Wilkins authored
      This quite large check in includes the following:
      
      Merge in some code from Ronald (mbgraph.c) that scans a Gf/arf group.
      This is used as a basis for a simple segmentation for the normal frames
      in a gf/arf group. This code also uses satd functions from Yaowu.
      
      Adds functionality for coding the latest possible position of an EOB for
      blocks in the segment. (Currently 0-15 only, hence just for 4x4 dct).
      Where the EOB position is 0 this acts like "skip" and the normal coding
      of skip at the per mb level is disabled.
      
      Added functions (seg_common.c) for setting and reading segment feature
      elements. These may want to be optimized away at some point but while the
      mecahnism is in a state of flux they provide a single location for making
      changes and keep things a bit cleaner.
      
      This is still proof of concept code. Currently the tested feature set:-
      
      Quantizer,
      Loop Filter level,
      Reference frame,
      Prediction Mode,
      EOB end stop.
      
      TBD:-
      
      Add functions for setting and reading the feature data with range
      and validity checking.
      
      Handling of signed and unsigned feature data. At the moment all is assumed
      to be signed and a sign bit is coded but many cannot be negative.
      
      Correct handling of EOB feature with intra coded blocks.
      
      Testing/trapping of legal/illegal ref frame and mode combinations.
      
      Transform size switch plus merge and test with 8c8 DCT work
      
      Merge and test with Sumans Segmenation coding optimizations
      
      Change-Id: Iee12e83661c7abbd1e0ce6810915eb4ec35e2d8e
      01ce04bc
  9. 30 Sep, 2011 1 commit
    • Paul Wilkins's avatar
      Segment coding of mode and reference frame. · 156b221a
      Paul Wilkins authored
      Proof of concept test code that encodes mode and reference
      frame data at the segment level.
      
      Decode-able bit stream but some issues not yet resolved.
      As it this helps a little on a couple of clips but hurts on most as
      the basis for segmentation is unsound.
      
      To build and test, configure with
      --enable-experimental --enable-segfeatures
      
      Change-Id: I22a60774f69273523fb152db8c31f4b10b07c7f4
      156b221a
  10. 16 Sep, 2011 2 commits
    • Yaowu Xu's avatar
      enable selecting&transmitting to for intra mode entropy · 1d44e7ce
      Yaowu Xu authored
      This commit added a 3 bit index to the bitstream, the index is used to
      look into the intra mode coding entropy context table. The commit uses
      the mode stats to calculate the cost of transmitting modes using 8
      possible entropy distributions, and selects the distribution that
      provides the lowest cost to do the actual mode coding.
      
      Initial test show this provides additional .2%~.3% gain over quantizer
      adaptive intra mode coding. So the adaptive intra mode coding provides
      a total of .5%(psnr) to .6% gain(ssim) combined for all-key-encoding
      
      To build and test, configure with
      --enable-experimental --enable-qimode
      
      Change-Id: I7c41cd8bfb352bc1fe7c5da1848a58faea5ed74a
      1d44e7ce
    • Yaowu Xu's avatar
      add 8x8 intra prediction modes · ca6b85aa
      Yaowu Xu authored
      Patch 1 to Patch 3 is an initial implementation of 8x8 intra prediction
      modes, here are with the following assumptions:
      a. 8x8 has 4 prediction modes DC, H, V and TM
      b. UV 4x4 block use the same mode as corresponding 8x8 area
      c. i8x8 modes are enabled for key frame only for now
      Patch 4:
      d. removed debug code from previous patches
      Patch 5:
      e. added stats code to collect entropy stats and further cleaned up
      Patch 6:
      f. changed mode stats code to collect finer stats of modes
      Patch 7:
      g. normalized i8x8 modes distribution to total at 256 (8bits).
      Patch 8:
      h. fixed a bug in decoder and removed debug printf output.
      Patch 9:
      i. more cleanups to address paul's comment
      Patch 10:
      j. messy rebase/merges to bring the commit up to date.
      
      Tests on HD clips encoded with all key frame showing consistent gain
      on all clips and all metrics:~0.5%(psnr) and 0.6%(ssim):
      http://www.corp.google.com/~yaowu/no_crawl/i8x8hd_allkey_fixedq.html
      
      To build and test, configure with:
      --enable-experimental --enable-i8x8
      
      Change-Id: I9813fe07ae48cab5fdb5d904bca022514ad01e7f
      ca6b85aa
  11. 24 Aug, 2011 1 commit
    • Scott LaVarnway's avatar
      Removed bmi copy to/from BLOCKD · b870947d
      Scott LaVarnway authored
      for SPLITMV and B_PRED modes.  Modified code to use the bmi
      found in mode_info_context instead of BLOCKD.  On the decode
      side, the uvmvs are calculated only when required, instead of
      every macroblock.  This is WIP. (bmi should eventually be
      removed from BLOCKD)
      Small performance gains noticed for RT encodes and decodes.(VGA)
      
      Change-Id: I2ed7f0fd5ca733655df684aa82da575c77a973e7
      b870947d
  12. 27 Jul, 2011 2 commits
    • Yunqing Wang's avatar
      Preload reference area in sub-pixel motion search (real-time mode) · 2f2302f8
      Yunqing Wang authored
      This change implemented same idea in change "Preload reference area
      to an intermediate buffer in sub-pixel motion search." The changes
      were made to vp8_find_best_sub_pixel_step() and vp8_find_best_half
      _pixel_step() functions which are called when speed >= 5. Test
      result (using tulip clip):
      
      1. On Core2 Quad machine(Linux)
      rt mode, speed (-5 ~ -8), encoding speed gain: 2% ~ 3%
      rt mode, speed (-9 ~ -11), encoding speed gain: 1% ~ 2%
      rt mode, speed (-12 ~ -14), no noticeable encoding speed gain
      
      2. On Xeon machine(Linux)
      Test on speed (-5 ~ -14) didn't show noticeable speed change.
      
      Change-Id: I21bec2d6e7fbe541fcc0f4c0366bbdf3e2076aa2
      2f2302f8
    • Yunqing Wang's avatar
      Fix range checks in motion search · bde2afbe
      Yunqing Wang authored
      There were some situations that the start motion vectors were
      out of range. This fix adjusted range checks to make sure they
      are checked and clamped.
      
      Change-Id: Ife83b7fed0882bba6d1fa559b6e63c054fd5065d
      bde2afbe
  13. 26 Jul, 2011 1 commit
  14. 21 Jul, 2011 1 commit
    • Yaowu Xu's avatar
      fix more merge issues · 8c31484e
      Yaowu Xu authored
      With this fix, the experimental branch now builds and encodes correctly
      with the following two configure options respectively:
      --enable-experimental --enable-t8x8
      --enable-experimental
      
      Change-Id: I3147c33c503fe713a85fd371e4f1a974805778bf
      8c31484e
  15. 20 Jul, 2011 1 commit
  16. 08 Jul, 2011 2 commits
  17. 30 Jun, 2011 1 commit
    • Yunqing Wang's avatar
      Bug fix in motion vector limit calculation · b7480454
      Yunqing Wang authored
      Motion vector limits are calculated using right shifts, which
      could give wrong results for negative numbers. James Berry's
      test on one clip showed encoder produced some artifacts. This
      change fixed that.
      
      Change-Id: I035fc02280b10455b7f6eb388f7c2e33b796b018
      b7480454
  18. 28 Jun, 2011 1 commit
    • John Koleszar's avatar
      Use MAX_ENTROPY_TOKENS and ENTROPY_NODES more consistently · b32da7c3
      John Koleszar authored
      There were many instances in the code of vp8_coef_tokens and
      vp8_coef_tokens-1, which was a preprocessor macro despite the naming
      convention. Replace these with MAX_ENTROPY_TOKENS and ENTROPY_NODES,
      respectively.
      
      Change-Id: I72c4f6c7634c94e1fa066cd511471e5592c748da
      b32da7c3
  19. 23 Jun, 2011 2 commits
    • Yunqing Wang's avatar
      Copy macroblock data to a buffer before encoding it · 0d87098e
      Yunqing Wang authored
      I got this idea from Pascal (Thanks). Before encoding a macroblock,
      copy it to a 16x16 buffer, and then read source data from there
      instead. This will help keep the source data in cache, and help
      with the performance.
      
      Change-Id: Id05f4cb601299150511d59dcba0ae62c49b5b757
      0d87098e
    • Yaowu Xu's avatar
      fix build issues for experimental branch · 7793b386
      Yaowu Xu authored
      experimental branch build was broken from some merge artifacts, this
      commit fixes those issues to enable the experimental branch to build.
      
      Change-Id: Ic52b2d2f1d1b80abb7ecaa4c0927bcf887ac0c2a
      7793b386
  20. 20 Jun, 2011 1 commit
    • Yaowu Xu's avatar
      adjusting the calculation of errorperbit · 10ed60dc
      Yaowu Xu authored
      RDMULT/RDDIV defines a bit worth of distortion in term of sum squared
      difference. This has also been used as errorperbit in subpixel motion
      search, where the distortions computed as variance of the difference.
      The variance of differences is different from sum squared differences
      by amount of DC squared. Typically, for inter predicted MBs, this
      difference averages around 10% between the two distortion, so this patch
      introduces a 110% constant in deriving errorperbit from RDMULT/RDDIV.
      
      Test on CIF set shows small but positive gain on overall PSNR (.03%)
      and SSIM (.07%), overall impact on average PSNR is 0.
      
      Change-Id: I95425f922d037b4d96083064a10c7cdd4948ee62
      10ed60dc
  21. 13 Jun, 2011 1 commit
  22. 08 Jun, 2011 1 commit
  23. 07 Jun, 2011 1 commit
    • Yaowu Xu's avatar
      adjust sad per bit constants · 221e00ea
      Yaowu Xu authored
      While investigating the effect of DC values on SAD and SSE in motion
      estimation, a side finding indicates the two table of constants need
      be adjusted. The adjustment was done by multiplying old constants by
      90% with rounding. Also absorb the 1/2 scaling constant into the two
      tables. Refer to change Ifa285c3e for background of the 1/2 factor.
      
      Cif set test showed a very small gain on all metric.
      
      Change-Id: I04333527a823371175dd46cb04a817e5b9a8b752
      221e00ea
  24. 06 Jun, 2011 1 commit
    • Yaowu Xu's avatar
      remove redundant functions · d4700731
      Yaowu Xu authored
      The encoder defined about 4 set of similar functions to calculate sum,
      variance or sse or a combination of them. This commit removed one set
      of these functions, get8x8var and get16x16var, where calls to the later
      function are replaced with var16x16 by using the fact on a 16x16 MB:
          variance == sse - sum*sum/256
      
      Change-Id: I803eabd1fb3ab177780a40338cbd596dffaed267
      d4700731
  25. 02 Jun, 2011 1 commit
    • Scott LaVarnway's avatar
      Removed B_MODE_INFO · 773768ae
      Scott LaVarnway authored
      Declared the bmi in BLOCKD as a union instead of B_MODE_INFO.
      Then removed B_MODE_INFO completely.
      
      Change-Id: Ieb7469899e265892c66f7aeac87b7f2bf38e7a67
      773768ae
  26. 01 Jun, 2011 2 commits
    • Yaowu Xu's avatar
      further clean up of errorperbit and sadperbit · 5b2fb329
      Yaowu Xu authored
      this commit makes the usage errorperbit and sadperbit consistent for
      encoding modes and passes. Removed all different magic weight factors
      associated with errorperbit. Now 1/2 is used for both sadperbit16 and
      sadperbit4, the /2 operation is merged into initializations of the 2
      variables.
      
      Tests on cif set show .23%, 0.18% and 0.19% gain by avg psnr, overall
      psnr and ssim respectively.
      
      Change-Id: Ifa285c3e065ce0a5a77addfc9f95aabf54ee270d
      5b2fb329
    • Yaowu Xu's avatar
      remove some magic weights associated with sad_per_bit · 50916c6a
      Yaowu Xu authored
      sad_per_bit has been used for a number of motion vector search routines
      with different magic weights: 1, 1/2 and 1/4. This commit remove these
      magic numbers and use 1/2 for all motion search routines, also reformat
      a number of source code lines to within 80 column limit.
      
      Test on cif set shows overall effect is neutral on all metrics. <=0.01%
      
      Change-Id: I8a382821fa4cffc9c0acf8e8431435a03df74885
      50916c6a
  27. 31 May, 2011 1 commit
  28. 27 May, 2011 1 commit
    • Yunqing Wang's avatar
      Remove unused code · 2dc24635
      Yunqing Wang authored
      Hex search is not called in rdopt.c
      
      Change-Id: I67347f03e13684147a7c77fb9e9147e440bb5e8e
      2dc24635
  29. 25 May, 2011 1 commit
  30. 24 May, 2011 1 commit
    • Scott LaVarnway's avatar
      MODE_INFO size reduction · e11f21af
      Scott LaVarnway authored
      Declared the bmi in MODE_INFO as a union instead of B_MODE_INFO.
      This reduced the memory footprint by 518,400 bytes for 1080
      resolutions.  The decoder performance improved by ~4% for the
      clip used and the encoder showed very small improvements. (0.5%)
      This reduction was first mentioned to me by John K. and in a
      later discussion by Yaowu.
      This is WIP.
      
      Change-Id: I8e175fdbc46d28c35277302a04bee4540efc8d29
      e11f21af
  31. 23 May, 2011 1 commit
  32. 19 May, 2011 3 commits
    • John Koleszar's avatar
      cleanup: collect twopass variables · 63cb1a7c
      John Koleszar authored
      This patch collects the twopass specific memebers of VP8_COMP into a
      dedicated struct. This is a first step towards isolating the two pass
      rate control and aids readability by decorating these variables with
      the 'twopass.' namespace. This makes it clear to the reader in what
      contexts the variable will be valid, and is a hint that a section of
      code might be a good candidate to move to firstpass.c in later
      refactoring. There likely will be other rate control modes that need
      their own specific data as well.
      
      This notation is probably overly verbose in firstpass.c, so an
      alternative would be to access this struct through a pointer like
      'rc->' instead of 'cpi->firstpass.' in that file. Feel free to make
      a review comment to that effect if you prefer.
      
      Change-Id: I0ab8254647cb4b493a77c16b5d236d0d4a94ca4d
      63cb1a7c
    • John Koleszar's avatar
      Remove unused members of VP8_COMP · 04849772
      John Koleszar authored
      Various members that were either completely unreferenced or written
      and not read.
      
      Change-Id: Ie41ebac0ff0364a76f287586e4fe09a68907806e
      04849772
    • Scott LaVarnway's avatar
      Using partition_info instead of blockd info for splitmv · 99b97576
      Scott LaVarnway authored
      The partition_info struct contains info just for SPLITMV,
      so it should be used instead of BLOCKD.  Eventually, I want
      to reduce the size of B_MODE_INFO struct found in BLOCKD, so
      this is the first step toward that goal.
      Also, since SPLITMV is not supported in vp8_pick_inter_mode(),
      the unnecessary mem copies and checks were removed.  For rt
      encodes, this gave a slight performance improvement.
      
      Change-Id: I5585c98fa9d5acbde1c7e0f452a01d9ecc080574
      99b97576