1. 15 Mar, 2012 1 commit
    • Yaowu Xu's avatar
      WebM Experimental Codec Branch Snapshot · 6035da54
      Yaowu Xu authored
      This is a code snapshot of experimental work currently ongoing for a
      next-generation codec.
      
      The codebase has been cut down considerably from the libvpx baseline.
      For example, we are currently only supporting VBR 2-pass rate control
      and have removed most of the code relating to coding speed, threading,
      error resilience, partitions and various other features.  This is in
      part to make the codebase easier to work on and experiment with, but
      also because we want to have an open discussion about how the bitstream
      will be structured and partitioned and not have that conversation
      constrained by past work.
      
      Our basic working pattern has been to initially encapsulate experiments
      using configure options linked to #IF CONFIG_XXX statements in the
      code. Once experiments have matured and we are reasonably happy that
      they give benefit and can be merged without breaking other experiments,
      we remove the conditional compile statements and merge them in.
      
      Current changes include:
      * Temporal coding experiment for segments (though still only 4 max, it
        will likely be increased).
      * Segment feature experiment - to allow various bits of information to
        be coded at the segment level. Features tested so far include mode
        and reference frame information, limiting end of block offset and
        transform size, alongside Q and loop filter parameters, but this set
        is very fluid.
      * Support for 8x8 transform - 8x8 dct with 2nd order 2x2 haar is used
        in MBs using 16x16 prediction modes within inter frames.
      * Compound prediction (combination of signals from existing predictors
        to create a new predictor).
      * 8 tap interpolation filters and 1/8th pel motion vectors.
      * Loop filter modifications.
      * Various entropy modifications and changes to how entropy contexts and
        updates are handled.
      * Extended quantizer range matched to transform precision improvements.
      
      There are also ongoing further experiments that we hope to merge in the
      near future: For example, coding of motion and other aspects of the
      prediction signal to better support larger image formats, use of larger
      block sizes (e.g. 32x32 and up) and lossless non-transform based coding
      options (especially for key frames). It is our hope that we will be
      able to make regular updates and we will warmly welcome community
      contributions.
      
      Please be warned that, at this stage, the codebase is currently slower
      than VP8 stable branch as most new code has not been optimized, and
      even the 'C' has been deliberately written to be simple and obvious,
      not fast.
      
      The following graphs have the initial test results, numbers in the
      tables measure the compression improvement in terms of percentage. The
      build has  the following optional experiments configured:
      --enable-experimental --enable-enhanced_interp --enable-uvintra
      --enable-high_precision_mv --enable-sixteenth_subpel_uv
      
      CIF Size clips:
      http://getwebm.org/tmp/cif/
      HD size clips:
      http://getwebm.org/tmp/hd/
      (stable_20120309 represents encoding results of WebM master branch
      build as of commit#7a159071)
      
      They were encoded using the following encode parameters:
      --good --cpu-used=0 -t 0 --lag-in-frames=25 --min-q=0 --max-q=63
      --end-usage=0 --auto-alt-ref=1 -p 2 --pass=2 --kf-max-dist=9999
      --kf-min-dist=0 --drop-frame=0 --static-thresh=0 --bias-pct=50
      --minsection-pct=0 --maxsection-pct=800 --sharpness=0
      --arnr-maxframes=7 --arnr-strength=3(for HD,6 for CIF)
      --arnr-type=3
      
      Change-Id: I5c62ed09cfff5815a2bb34e7820d6a810c23183c
      6035da54
  2. 16 Nov, 2011 1 commit
    • Adrian Grange's avatar
      Added clipping of the buffer level to maximum_buffer_size · 2b1c2990
      Adrian Grange authored
      The buffer level was not being capped at the maximum decode
      buffer size specified by the user.
      
      In CBR mode this resulted in large files being generated
      immediately after a dramatic reduction in the data rate
      target. This fix should prevent this from happening.
      
      Change-Id: Iaf01c9fb037cf51515217a5834d6ee4fbb0cb853
      2b1c2990
  3. 09 Nov, 2011 2 commits
  4. 22 Sep, 2011 2 commits
  5. 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
  6. 19 Sep, 2011 3 commits
    • Stefan Holmer's avatar
      Fix necessary for input partitions iface to match the RTP profile · e529a825
      Stefan Holmer authored
      These changes fixes a glitch between the RTP profile and the input
      partitions interface. Since there's no way for the user to know the
      actual number of partitions, the decoder have to read the
      multi_token_paritition bits also when input partitions mode is
      enabled.
      
      Included are also a couple of fixes for issues with independent
      partitions and uninitialized memory reads.
      
      Change-Id: I6f93b15287d291169ed681898ed3fbcc5dc81837
      e529a825
    • 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
  7. 16 Sep, 2011 2 commits
  8. 13 Sep, 2011 1 commit
    • 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
  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 4 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
    • Fritz Koenig's avatar
      Fix naming of sse2 idct functions. · 112bd4e2
      Fritz Koenig authored
      Prepend idct function names with vp8_
      so that under profiling they show up
      associated with libvpx.
      
      Change-Id: I4fe357b50236cb7730a4cc00164c0a3487a1d8b4
      112bd4e2
    • Johann's avatar
      Fix data accesses for simple loopfilters · 85358d04
      Johann authored
      The data that the simple horizontal loopfilter reads is aligned, treat
      it accordingly.
      
      For the vertical, we only use the bottom 4 bytes, so don't read in 16
      (and incur the penalty for unaligned access).
      
      This shows a small improvement on older processors which have a
      significant penalty for unaligned reads.
      
      postproc_mmx.c is unused
      
      Change-Id: I87b29bbc0c3b19ee1ca1de3c4f47332a53087b3d
      85358d04
  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. 15 Aug, 2011 2 commits
  19. 12 Aug, 2011 6 commits
    • 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
    • John Koleszar's avatar
      Propagate macroblock MV to subblocks for error concealment · a4c2211e
      John Koleszar authored
      EC expects the subblock MVs to be populated, but
      f1d6cc79 removed this code. This
      commit restores it, protected by CONFIG_ERROR_CONCEALMENT. May move this
      to the EC code more directly in the future.
      
      Change-Id: I44f8f985720cb9a1bf222e59143f9e69abf56ad2
      a4c2211e
    • Stefan Holmer's avatar
      Disable error concealment until first key frame is decoded · a609be56
      Stefan Holmer authored
      When error concealment is enabled the first key frame must
      be successfully received before error concealment is activated.
      Error concealment will be activated when the delta following
      delta frame is received.
      
      Also fixed a couple of bugs related to error tracking in
      multi-threading. And avoiding decoding corrupt residual
      when we have multiple non-resilient partitions.
      
      Change-Id: I45c4bb296e2f05f57624aef500a874faf431a60d
      a609be56
    • John Koleszar's avatar
      Fix potential OOB read with Error Concealment · cdae03a4
      John Koleszar authored
      This patch fixes an OOB read when error concealment is enabled and the
      partition sizes are corrupt. The partition size read from the bitstream
      was not being validated in EC mode.
      
      Change-Id: Ia81dfd4bce1ab29ee78e42320abe52cee8318974
      cdae03a4
    • John Koleszar's avatar
      Propagate macroblock MV to subblocks for error concealment · 91206793
      John Koleszar authored
      EC expects the subblock MVs to be populated, but
      f1d6cc79 removed this code. This
      commit restores it, protected by CONFIG_ERROR_CONCEALMENT. May move this
      to the EC code more directly in the future.
      
      Change-Id: I44f8f985720cb9a1bf222e59143f9e69abf56ad2
      91206793
    • Stefan Holmer's avatar
      Disable error concealment until first key frame is decoded · 3e10be93
      Stefan Holmer authored
      When error concealment is enabled the first key frame must
      be successfully received before error concealment is activated.
      Error concealment will be activated when the delta following
      delta frame is received.
      
      Also fixed a couple of bugs related to error tracking in
      multi-threading. And avoiding decoding corrupt residual
      when we have multiple non-resilient partitions.
      
      Change-Id: I45c4bb296e2f05f57624aef500a874faf431a60d
      3e10be93
  20. 11 Aug, 2011 1 commit
    • John Koleszar's avatar
      Fix potential OOB read with Error Concealment · 810a06b1
      John Koleszar authored
      This patch fixes an OOB read when error concealment is enabled and the
      partition sizes are corrupt. The partition size read from the bitstream
      was not being validated in EC mode.
      
      Change-Id: Ia81dfd4bce1ab29ee78e42320abe52cee8318974
      810a06b1
  21. 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