1. 15 Nov, 2011 - 1 commit
    • 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
  2. 11 Nov, 2011 - 2 commits
    • 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
    • Paul Wilkins's avatar
      SEGMENTATION experiment: · bf25d4ad
      Paul Wilkins authored
      Some initial cleanup to aid testing and debug.
      
      Pull code to choose temporal or spatial encoding
      out of encodeframe.c into a dedicated function
      in segmentation.c.
      
      For now disable broken temporal mode.
      
      Move the coding of "temporal_update" flag and
      only transmit if segment map update is indicated.
      
      Rename the functions read_mb_features() and
      write_mb_features() to read_mb_segid() and
      read_mb_segid() as they only read and write
      the macroblock segment id not any of the
      features.
      
      Change-Id: Ib75118520b1144c24d35fdfc6ce46106803cabcf
      bf25d4ad
  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
      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
  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
    • Yaowu Xu's avatar
      make uv intra mode coding adaptive to Y mode · 2bbde250
      Yaowu Xu authored
      This commit tries to do UV intra mode coding adaptive to Y intra mode.
      Entropy context is defined as conditional PDF of uv intra mode given
      the Y mode. All constants are normalized with 256 to be fit in 8 bits.
      
      This provides further coding efficiency beyond the quantizer adaptive
      y intra mode coding. Consistent gains were observed on all clips and
      all bit rates for HD all key encoding tests.
      
      To test, configure with
      --enable-experimental --enable-uvintra
      
      Change-Id: I2d78d73f143127f063e19bd0bac3b68c418d756a
      2bbde250
  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. 31 Oct, 2011 - 1 commit
    • Paul Wilkins's avatar
      Segmentation Entropy and tweaks. · 795c6dd2
      Paul Wilkins authored
      Some correction for entropy impact of segment signaled (EOB and ref frame)
      
      Other slight tweaks.
      
      Derf VBR average gain now over 1% (best over 7%)
      One YT test clip has gains of circa 30% (VBR)
      
      There is still an issue with noisy clips where making the background static
      and coded with 0,0 can have a negative effect, especially at low Q.
      This is probably because of the loss of smoothing by fractional pixel filters.
      
      Change-Id: I7a225613c98067b96f8fc7a7e36f95d465b2b834
      795c6dd2
  9. 24 Oct, 2011 - 2 commits
    • Paul Wilkins's avatar
      Segmentation Features; · 23701f4f
      Paul Wilkins authored
      Only encode sign bit for feature data that can have a sign.
      
      Tweaks to the test segmentation rules so that it now actually gives
      a net benefit on the derf set of about 0.4% though much higher
      on some clips at the low end.
      
      Change-Id: I8e61f1aebf41c9037db7e67e2f8975aa18a0c986
      23701f4f
    • 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
  10. 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
  11. 16 Sep, 2011 - 1 commit
    • 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
  12. 13 Sep, 2011 - 1 commit
    • Paul Wilkins's avatar
      Segment Features: · dfbc61f3
      Paul Wilkins authored
      Some basic plumbing added for a range of segment level features.
      MB_LVL_* changed to SEG_LVL_* to better reflect meaning.
      
      Change-Id: Iac96da36990aa0e40afc0d86e990df337fd0c50b
      dfbc61f3
  13. 30 Aug, 2011 - 1 commit
  14. 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
  15. 26 Jul, 2011 - 1 commit
  16. 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
  17. 20 Jul, 2011 - 2 commits
  18. 23 Jun, 2011 - 1 commit
    • 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
  19. 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
  20. 14 Jun, 2011 - 1 commit
    • Tero Rintaluoma's avatar
      Fix RT only build · 99090474
      Tero Rintaluoma authored
      Moved encode_intra function from firstpass.c to encodeintra.c to
      prevent linking problem in real-time only build. Also changed name
      of the function to vp8_encode_intra because it is not a static.
      
      Change-Id: Ibf3c6c1de3152567347e5fbef47d1d39564620a5
      99090474
  21. 13 Jun, 2011 - 1 commit
  22. 09 Jun, 2011 - 2 commits
  23. 08 Jun, 2011 - 4 commits
    • Yaowu Xu's avatar
      Adjust errorperbit according to RDMULT in activity masking · 1fba1e38
      Yaowu Xu authored
      In activity masking, RDO constant RDMULT is adjusted on a per MB basis
      adaptive to activity with the MB. errorperbit, which is defined as
      RDMULT/RDDIV, is a constant used in motion estimation. Previously, in
      activity masking, errorperbit is not changed even when RDMULT is changed.
      This commit changed to adjust errorperbit according to the change in
      RDMULT.
      
      Test in cif set showed a very small but consistent gain by all quality
      metrics (average, overall psnr and ssim) when activity masking is on.
      
      Change-Id: I07ded3e852919ab76757691939fe435328273823
      1fba1e38
    • John Koleszar's avatar
      Move RD intra block mode selection to rdopt.c · 96a42aaa
      John Koleszar authored
      This change is analogous to I0b67dae1f8a74902378da7bdf565e39ab832dda7,
      which made the move for the non-RD path.
      
      Change-Id: If63fc1b0cd1eb7f932e710f83ff24d91454f8ed1
      96a42aaa
    • John Koleszar's avatar
      Move intra block mode selection to pickinter.c · e90d17d2
      John Koleszar authored
      This commit moves the intra block mode selection from encodeframe.c
      to pickinter.c (in the non-RD case). This allowed pick_intra_mbuv_mode
      and pick_intra4x4mby_modes to be made static, and is a step towards
      refactoring intra mode selection in the main pickinter loop. Gave a
      small perf increase (~0.5%).
      
      Change-Id: I0b67dae1f8a74902378da7bdf565e39ab832dda7
      e90d17d2
    • Paul Wilkins's avatar
      Further activity masking changes: · 4e81a68a
      Paul Wilkins authored
      Some further re-structuring of activity masking code.
      Still has various experimental switches.
      Supports a metric based on intra encode.
      Experimental comparison against a fixed activity target  rather
      than a frame average, for altering rd and zbin.
      
      Overall the SSIM performance is similar  to TT's original
      code but there is a much smaller PSNR hit of circa
      0.5% instead of 3.2%
      
      Change-Id: I0fd53b2dfb60620b3f74d7415e0b81c1ac58c39a
      4e81a68a
  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 - 1 commit
    • Tero Rintaluoma's avatar
      neon fast quantize block pair · 61f0c090
      Tero Rintaluoma authored
      vp8_fast_quantize_b_pair_neon function added to quantize
      two adjacent blocks at the same time to improve performance.
       - Additional 3-6% speedup compared to neon optimized fast
         quantizer (Tanya VGA@30fps, 1Mbps stream, cpu-used=-5..-16)
      
      Change-Id: I3fcbf141e5d05e9118c38ca37310458afbabaa4e
      61f0c090
  27. 25 May, 2011 - 1 commit
  28. 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
  29. 19 May, 2011 - 3 commits
  30. 17 May, 2011 - 1 commit