1. 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
  2. 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
  3. 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
  4. 20 Sep, 2011 3 commits
    • Fritz Koenig's avatar
      Move neon only arm functions under arm/neon. · bd0c3409
      Fritz Koenig authored
      These files don't contain generic arm code, so should
      only be compiled by neon.
      
      Change-Id: Ie712823aa04d4235e7cfe7a3b725e73ee4c3e564
      bd0c3409
    • Tero Rintaluoma's avatar
      NEON FDCT updated to match current C code · 0c2529a8
      Tero Rintaluoma authored
      - Removed fast_fdct4x4_neon and fast_fdct8x4_neon
      - Uses now short_fdct4x4 and short_fdct8x4
      - Gives ~1-2% speed-up on Cortex-A8/A9
      
      Change-Id: Ib62f2cb2080ae719f8fa1d518a3a5e71278a41ec
      0c2529a8
    • Tero Rintaluoma's avatar
      Fixed armv5te multiplications · 3c19bc3f
      Tero Rintaluoma authored
      Rd and Rm registers should be different in 'mul'. This register
      combination results in unpredictable behaviour. GCC will give
      a warning and RVCT an error in this case.
      
      Restriction applies only to armv5 targets and not for armv6 and above.
      
      Change-Id: I378d17c51e1f16a6820814fbed43e115aaabb03e
      3c19bc3f
  5. 19 Sep, 2011 2 commits
    • Tero Rintaluoma's avatar
      Updated ARMv6 forward transforms to match C · 4c3ad66b
      Tero Rintaluoma authored
      - Updated walsh transform to match C
        (based on Change Id24f3392)
      - Changed fast_fdct4x4 and 8x4 to short_fdct4x4 and 8x4
        correspondingly
      
      Change-Id: I704e862f40e315b0a79997633c7bd9c347166a8e
      4c3ad66b
    • Tero Rintaluoma's avatar
      NEON walsh transform updated to match C · 2a4b2a00
      Tero Rintaluoma authored
      Modified original patch If2f07220885c4c3a0cae0dace34ea0e36124f001
      according to comments. Scheduled code a little bit to prevent some
      interlocks.
      
      Change-Id: I338f02b881098782f82af63d97f042b85e63e902
      2a4b2a00
  6. 16 Sep, 2011 3 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 quantizer adaptive intra mb mode encoding · aac2c126
      Yaowu Xu authored
      make intra mode coding entropy distribution adaptive to baseQindex, an
      encoding test on hd clips with all key frame shows universal gain on
      all clips in both .2%(psnr) and (ssim).3%.
      
      To build and test, configure with
      --enable-experimental --enable-qimode
      
      Change-Id: Iaa69241b984d4fdd8baa6d77ee78c0140f5ac00a
      aac2c126
    • 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
  7. 15 Sep, 2011 1 commit
    • Paul Wilkins's avatar
      Segment Feature Signaling · ceb51742
      Paul Wilkins authored
      Plumbing for tuning new segment features on and off.
      
      Change-Id: If86cd6f103296b73030e8af7cf85c5b9bbffdbaf
      ceb51742
  8. 13 Sep, 2011 4 commits
    • Paul Wilkins's avatar
      Reverse coding order for segment features: · 1741cc7a
      Paul Wilkins authored
      Code all the features for one segment (grouped together)
      then all for the next etc. etc. rather than grouping the
      data by feature.
      
      Change-Id: I2a65193b3a70aca78f92e855e35d8969d857b6dd
      1741cc7a
    • Scott LaVarnway's avatar
      Fixed encoder crash · 5bc7b3a6
      Scott LaVarnway authored
      caused by the "Removed bmi copy to/from BLOCKD" commit.
      
      Change-Id: I9fae71bdc34c8ecc07bb81cd3ccf498b91ce3ec7
      5bc7b3a6
    • Paul Wilkins's avatar
      Change to segment_feature_data[][] structure. · 1c24442a
      Paul Wilkins authored
      This data structure is  now [Segment ID][Features]
      rather than [Features][Segment_ID]
      
      I propose as a separate modification to make the experimental
      bit stream reflect this such that all the features for a segment
      are coded together.
      
      Change-Id: I581e4e3ca2033bdbdef3d9300977a8202f55b4fb
      1c24442a
    • 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
  9. 31 Aug, 2011 1 commit
  10. 30 Aug, 2011 1 commit
  11. 25 Aug, 2011 1 commit
    • Yunqing Wang's avatar
      Minor modification on key frame decision · 1f20202e
      Yunqing Wang authored
      This change makes sure that no key frame recoding in real-time mode
      even if CONFIG_REALTIME_ONLY is not configured.
      
      Change-Id: Ifc34141f3217a6bb63cc087d78b111fadb35eec2
      1f20202e
  12. 24 Aug, 2011 2 commits
    • Fritz Koenig's avatar
      Quiet warning by removing unused variable. · 4797a972
      Fritz Koenig authored
      fwd_boost_score was not being computed or
      referenced, so remove declaration.
      
      Change-Id: Iece36cde1ec113e3c6afaff1407d24cdf12bd0a8
      4797a972
    • 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
  13. 23 Aug, 2011 1 commit
    • Fritz Koenig's avatar
      Use local labels for jumps/loops in x86 assembly. · c5f890af
      Fritz Koenig authored
      Prepend . to local labels in assembly code.  This
      allows non unique labels within a file.  Also
      makes profiling information more informative
      by keeping the function name with the loop name.
      
      Change-Id: I7a983cb3a5ba2413d5dafd0a37936b268fb9e37f
      c5f890af
  14. 22 Aug, 2011 2 commits
  15. 19 Aug, 2011 2 commits
    • Fritz Koenig's avatar
      Reclasify optimized ssim calculations as SSE2. · 01376858
      Fritz Koenig authored
      Calculations were incorrectly classified as either
      SSE3 or SSSE3.  Only using SSE2 instructions.
      Cleanup function names and make non-RTCD code work
      as well.
      
      Change-Id: I29f5c2ead342b2086a468029c15e2c1d948b5d97
      01376858
    • Alpha Lam's avatar
      Copy less when active map is in use · 4e8d35a4
      Alpha Lam authored
      When active map is specified and the current frame is not a key frame,
      golden frame nor a altref frame then copy only those active regions.
      
      This significantly reduces encoding time by as much as 19% on the test
      system where realtime encoding is used. This is particularly useful
      when the frame size is large (e.g. 2560x1600) and there's only a few
      action macroblocks.
      
      Change-Id: If394a813ec2df5a0201745d1348dbde4278f7ad4
      4e8d35a4
  16. 17 Aug, 2011 1 commit
    • Paul Wilkins's avatar
      Small boost to every other frame. · 744f4823
      Paul Wilkins authored
      Instead of a single mid GF boost apply a few extra bits to
      every other frame. This gives a very small average metrics
      improvement on both derf and YT sets.
      
      Also use min GF interval as min KF interval.
      
      Change-Id: Iee238b8cae0ffaed850a5a944ac825cee18da485
      744f4823
  17. 16 Aug, 2011 1 commit
    • Scott LaVarnway's avatar
      Faster vp8_default_coef_probs · 19987dcb
      Scott LaVarnway authored
      Copies from a generated table instead of building the
      default coeff probabilities during runtime.
      
      Change-Id: I4d9551ea3a2d7d4a4f7ce9eda006495221a8de50
      19987dcb
  18. 12 Aug, 2011 1 commit
    • John Koleszar's avatar
      Revert "Improved 1-pass CBR rate control" · e9613170
      John Koleszar authored
      This reverts commit b5ea2fbc. Further
      testing showed noticable keyframe popping in some cases, reverting this
      for now to give time for a proper fix.
      
      Conflicts:
      
      	vp8/encoder/onyx_if.c
      	vp8/encoder/ratectrl.c
      
      Change-Id: I159f53d1bf0e24c035754ab3ded8ccfd58fd04af
      e9613170
  19. 03 Aug, 2011 2 commits
    • John Koleszar's avatar
      Fix source buffer selection · 238dae86
      John Koleszar authored
      This patch fixes a bug in the interaction between the recode loop and
      spatial resampling. If the codec was in a spatial resampling state,
      and a subsequent iteration of the recode loop disables resampling,
      then the source buffer must be reset to the unscaled source.
      
      Change-Id: I4e4cd47b943f6cd26a47449dc7f4255b38e27c77
      238dae86
    • Yunqing Wang's avatar
      Adjust half-pixel only search · b9f19f89
      Yunqing Wang authored
      Changed motion search in vp8_find_best_half_pixel_step() to be the
      same as in vp8_find_best_sub_pixel_step(), which checks 5 points
      instead of 8 points. This only affects real-time mode with
      cpu-used >=9. Tests showed it gives 2% encoding speedup with
      a quality loss(psnr) of up to 0.5%.
      
      Change-Id: I16049cad1535002346d46cfdfad345bfc3dc5146
      b9f19f89
  20. 01 Aug, 2011 1 commit
  21. 29 Jul, 2011 1 commit
  22. 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
  23. 26 Jul, 2011 1 commit
  24. 25 Jul, 2011 1 commit
  25. 22 Jul, 2011 2 commits
    • Johann's avatar
      fix sharpness bug and clean up · a04ed0e8
      Johann authored
      sharpness was not recalculated in vp8cx_pick_filter_level_fast
      
      remove last_filter_type. all values are calculated, don't need to update
      the lfi data when it changes.
      
      always use cm->sharpness_level. the extra indirection was annoying.
      
      don't track last frame_type or sharpness_level manually. frame type
      only matters for motion search and sharpness_level is taken care of in
      frame_init
      
      move function declarations to their proper header
      
      Change-Id: I7ef037bd4bf8cf5e37d2d36bd03b5e22a2ad91db
      a04ed0e8
    • Yunqing Wang's avatar
      Preload reference area to an intermediate buffer in sub-pixel motion search · 20bd1446
      Yunqing Wang authored
      In sub-pixel motion search, the search range is small(+/- 3 pixels).
      Preload whole search area from reference buffer into a 32-byte
      aligned buffer. Then in search, load reference data from this buffer
      instead. This keeps data in cache, and reduces the crossing cache-
      line penalty. For tulip clip, tests on Intel Core2 Quad machine(linux)
      showed encoder speed improvement:
        3.4%   at --rt --cpu-used =-4
        2.8%   at --rt --cpu-used =-3
        2.3%   at --rt --cpu-used =-2
        2.2%   at --rt --cpu-used =-1
      
      Test on Atom notebook showed only 1.1% speed improvement(speed=-4).
      Test on Xeon machine also showed less improvement, since unaligned
      data access latency is greatly reduced in newer cores.
      
      Next, I will apply similar idea to other 2 sub-pixel search functions
      for encoding speed > 4.
      
      Make this change exclusively for x86 platforms.
      
      Change-Id: Ia7bb9f56169eac0f01009fe2b2f2ab5b61d2eb2f
      20bd1446