1. 30 Jul, 2012 - 1 commit
    • Deb Mukherjee's avatar
      Adds support for switchable interpolation filters. · 52597441
      Deb Mukherjee authored
      Allows for swtiching/setting interpolation filters at the MB
      level. A frame level flag indicates whether to use a specifc
      filter for the entire frame or to signal the interpolation
      filter for each MB. When switchable filters are used, the
      encoder chooses between 8-tap and 8-tap sharp filters. The
      code currently has options to explore other variations as well,
      which will be cleaned up subsequently.
      
      One issue with the framework is that encoding is slow. I
      tried to do some tricks to speed things up but it is still slow.
      Decoding speed should not be affected since the number of
      filter taps remain unchanged.
      
      With the current version, we are up 0.5% on derf on average but
      some videos city/mobile improve by close to 4 and 2% respectively.
      If we did a full-search by turning the SEARCH_BEST_FILTER flag
      on, the results are somewhat better.
      
      The framework can be combined with filtered prediction, and I
      seek feedback regarding that.
      
      Rebased.
      
      Change-Id: I8f632cb2c111e76284140a2bd480945d6d42b77a
      52597441
  2. 27 Jul, 2012 - 1 commit
    • Deb Mukherjee's avatar
      Merges several experiments · 9984a155
      Deb Mukherjee authored
      The following five experiments are merged:
      
      newentropy
      newupdate
      adaptive_entropy (also includes a couple of parameter changes
                        that improves results a little
                        in common/entropymode.c and encoder/modecosts.c
                        that were not merged from the internal branch)
      newintramodes
      expanded_coef_context
      
      Change-Id: I8a142a831786ee9dc936f22be1d42a8bced7d270
      9984a155
  3. 18 Jul, 2012 - 2 commits
    • Ronald S. Bultje's avatar
      Don't auto-default to comp-pred unless content is static. · 84d22988
      Ronald S. Bultje authored
      Although it can be useful, in some cases it causes artifacts in motion-
      based content.
      
      Change-Id: I27bb80901020c40636e2018a8217759175a23f5b
      84d22988
    • Yaowu Xu's avatar
      cleanup experiments in configure · 11e23e67
      Yaowu Xu authored
      this commit removes a number of experiment options from configure
      script. the associated experiments are already fully merged, the
      options in configure script have no effect at all.
      
      Change-Id: I8054ccaee0a04610162ed76ac9e59c4538217113
      11e23e67
  4. 17 Jul, 2012 - 2 commits
  5. 16 Jul, 2012 - 2 commits
  6. 27 Jun, 2012 - 1 commit
    • Adrian Grange's avatar
      Added Prediction Filter to Mode Selection · bbc926dc
      Adrian Grange authored
      Added the ability to optionally filter the prediction data
      when inter modes are selected (excludes SPLITMV, for now).
      
      The mode selection loop considers both the filtered and
      non-filtered prediction data when choosing mode. The filter
      can be turned on/off at the frame-level, or signaled for
      each MB.
      
      Change-Id: I1b783c71d95a361ab36c761b07e8a6b06bc36822
      bbc926dc
  7. 26 Jun, 2012 - 1 commit
    • Deb Mukherjee's avatar
      Continued adaptive entropy coding · f3dff402
      Deb Mukherjee authored
      Incorporates mv_ref, mbsplit and second_mv into the adaptive
      entropy framework. The mv_ref framework has been modified from
      before.
      
      Adds some clean-ups and fixes.
      
      Results with the adaptive entropy experiment are currently up by
      +1.93% on derf; +2.33% std-hd and +1.87% yt-hd.
      
      Fixed a nasty intermittent bug.
      
      Change-Id: I4b1ac9f9483b48432597595195bfec05f31d1e39
      f3dff402
  8. 19 Jun, 2012 - 1 commit
  9. 15 Jun, 2012 - 1 commit
    • Deb Mukherjee's avatar
      Adaptive entropy coding of coefficients, modes, mv. · 1fe85a35
      Deb Mukherjee authored
      This patch incorporates adaptive entropy coding of coefficient tokens,
      and mode/mv information based on distributions encountered in a frame.
      Specifically, there is an initial forward update to the probabilities
      in the bitstream as before for coding the symbols in the frame, however
      at the end of decoding each frame, the forward update to the
      probabilities is reverted and instead the probabilities are updated
      towards the actual distributions encountered within the frame.
      The amount of update is weighted by the number of hits within each
      context.
      
      Results on derf/hd/std-hd are all up by 1.6%.
      
      On derf, the most of the gains come from coefficients, however for the
      hd and std-hd sets, the most of the gains come from the mode/mv
      information updates.
      
      Change-Id: I708c0e11fdacafee04940fe7ae159ba6844005fd
      1fe85a35
  10. 15 May, 2012 - 2 commits
    • Ronald S. Bultje's avatar
      Rewrite reference frame costing in the RD loop. · 0b8a95a0
      Ronald S. Bultje authored
      I now see I didn't write a very long description, so let's do it
      here then. We took a pretty big quality hit (0.1-0.2%) from my
      recent fix of the inversion of arguments to vp8_cost_bit() in the
      RD reference frame costing. I looked into it and basically the
      costing prevented us from switching reference frames. This is of
      course silly, since each frame codes its own prob_intra_coded, so
      using last frame cost indications as a limiting factor can never
      be right.
      
      Here, I've rewritten that code to estimate costings based partially
      on statistics from progress on current frame encoding. Overall,
      this gives us a ~0.2%-0.3% improvement over what we had previously
      before my argument-inversion-fix, and thus about ~0.4% over current
      git (on derf-set), and a little more (0.5-1.0%) on HD/STD-HD/YT.
      
      Change-Id: I79ebd4ccec4d6edbf0e152d9590d103ba2747775
      0b8a95a0
    • Deb Mukherjee's avatar
      Adds new Directional Intra prediction modes. · c5ddb7f0
      Deb Mukherjee authored
      Adds 6 directional intra predictiom modes for 16x16 and 8x8 blocks.
      
      Change-Id: I25eccc0836f28d8d74922e4e9231568a648b47d1
      c5ddb7f0
  11. 12 May, 2012 - 1 commit
    • Ronald S. Bultje's avatar
      Don't use compound prediction for golden frames based on alt-ref frames. · 959b296a
      Ronald S. Bultje authored
      These frames can force reference frame (arf), mode (zeromv) and skip,
      which means that if we use compound prediction (i.e. arf+last), we
      might use a blend of a perfect (arf) and an imperfect (last) predictor,
      leading to semi-garbage display and thus a huge drop in SSIM/PSNR (up
      to 10dB for some frames I analyzed).
      
      Gives a +0.2% gain on YT.
      
      Change-Id: If1f2b7899ad165684af3808fd379295e82558cbb
      959b296a
  12. 19 Apr, 2012 - 1 commit
  13. 18 Apr, 2012 - 1 commit
  14. 13 Apr, 2012 - 1 commit
    • Adrian Grange's avatar
      Added save coding context & modified MV bounds · fa589adc
      Adrian Grange authored
      Added code to save the coding context in vp8_rd_pick_inter_mode
      when the coding mode is forced to ARF(0,0).
      
      Also, modified the MV bounds computation to comply with the
      change in MV border from 32 to 64 pixels.
      
      Change-Id: I96963a6f5f4d04ce84c807ae11e0635177c3ad6c
      fa589adc
  15. 11 Apr, 2012 - 2 commits
    • Paul Wilkins's avatar
      Refactoring of encode loop and bitstream packing · 13c6d1a8
      Paul Wilkins authored
      Some code re-factored / moved to allow the main
      pack operation inside the recode loop so  that the
      size estimate is accurate.
      
      Deletion of some redundant code relating to one pass.
      
      Aproximate improvement over March 27 code base:
      Derf 0.0%, YT 0.5%, YThd 0.3% Std_hd 0.25%
      
      Change-Id: Id2d071794ab44f0b52935f6fcdb5733d09a6bb86
      13c6d1a8
    • Adrian Grange's avatar
      Superblock encoding order · 9daf3154
      Adrian Grange authored
      This is the first patch to add superblock (32x32) coding
      order capabilities. It does not yet do any mode selection
      at the SB level, that will follow in a further patch.
      
      This patch encodes rows of SBs rather than
      MBs, each SB contains 2x2 MBs.
      
      Two intra prediction modes have been disabled since they
      require reconstructed data for the above-right MB which
      may not have been encoded yet (e.g. for the bottom right
      MB in each SB).
      
      Results on the one test clip I have tried (720p GIPS clip)
      suggest that it is somewhere around 0.2dB worse than the
      baseline version, so there may be bugs.
      
      It has been tested with no experiments enabled and with
      the following 3 experiments enabled:
        --enable-enhanced_interp
        --enable-high_precision_mv
        --enable-sixteenth_subpel_uv
      in each case the decode buffer matches the recon buffer
      (using "cmp" to compare the dumped/decoded frames).
      Note: Testing these experiments individually created
      errors.
      
      Some problems were found with other experiments but it
      is unclear what state these experiments are in:
        --enable-comp_intra_pred
        --enable-newentropy
        --enable-uvintra
      
      This code has not been extensively tested yet, so there
      is every likelihood that further bugs remain. I also
      intend to do some code cleanup & refactoring in tandem
      with the next patch that adds the 32x32 modes.
      
      Change-Id: I1eba7f740a70b3510df58db53464535ef881b4d9
      9daf3154
  16. 22 Mar, 2012 - 1 commit
  17. 21 Mar, 2012 - 4 commits
    • Yaowu Xu's avatar
      enable 8x8 transform for MBs in intra frames · 2823173e
      Yaowu Xu authored
      When ac_yquant>171, a key frame is enabled to use 8x8 transform. In
      such case, MBs with DC_PRED or TM_PRED are selected to use T8x8. This
      change helped the full STD-HD set by ~.1% or so, which is reasonable
      considering how often key frame occurs in these encodings.
      
      Change-Id: Id17009ef6327252177b19e6bf0d6628827febaf1
      2823173e
    • Paul Wilkins's avatar
      Only support improved quant · c88d335f
      Paul Wilkins authored
      Deprecate fast quant and strict_quant code.
      Small effect on quality as fast was used in first pass but the
      effect is basically neutral across the derf set.
      
      The rationale here is to reduce the number of code paths for
      now to make experimentation easier. Optimized and fast code
      options can be re-introduced later along with other  encode
      speed options.
      
      Change-Id: Ia30c5daf3dbc52e72c83b277a1d281e3c934cdad
      c88d335f
    • Deb Mukherjee's avatar
      Making subpel filters switchable at frame level · 475d5d56
      Deb Mukherjee authored
      Various refactoring to make the subpel motion compensation
      filters switchable by a frame level field.
      Two types of 8-tap filters are supported in addition to the existing
      bilinar and sixtap filters. One is the default 8-tap and the
      other has a sharper cut-off for use with frames with substantial
      edge content.
      
      Patch 2: Added a preliminary strategy for filter selection based on
      edginess detecton. Also includes some filter changes.
      
      Change-Id: I866085bda5ae143cfdf2ec88157feaabdf7bd63a
      475d5d56
    • Deb Mukherjee's avatar
      Adding contextual coding of mb_skip_coeff flag. · 57d95347
      Deb Mukherjee authored
      Using contextual coding of the mkb_skip_coeff flag using the
      values of this flag from the left and above. There is a small
      improvement of about 0.15% on Derf:
      http://www.corp.google.com/~debargha/vp8_results/mbskipcontext.html
      
      Refactored to use pred_common.c by adding a new context type.
      
      Results on HD set (about 0.66% improvement):
      http://www.corp.google.com/~debargha/vp8_results/mbskipcontext_hd.html
      
      Incliding missing refactoring to use the pred_common utilities.
      
      Change-Id: I95373382d429b5a59610d77f69a0fea2be628278
      57d95347
  18. 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:
      * T...
      6035da54
  19. 07 Mar, 2012 - 1 commit
    • Paul Wilkins's avatar
      Snapshot candidate · 68033ca4
      Paul Wilkins authored
      Pulled out super block code for the snapshot as this
      is not quite ready and will need an extensive re-merge.
      
      Change-Id: I436369b511257447a7b0ea064016cb63f5011849
      68033ca4
  20. 01 Mar, 2012 - 2 commits
  21. 29 Feb, 2012 - 2 commits
  22. 28 Feb, 2012 - 1 commit
    • Deb Mukherjee's avatar
      Initial refactoring of high_precision mv code. · 3e1cad9c
      Deb Mukherjee authored
      This is the first patch for refactoring of the code related to
      high-precision mv, so that 1/4 and 1/8 pel motion vectors can
      co-exist in the same bit-stream by use of a frame level flag.
      The current patch works fine for only use of 1/4th and
      only use of 1/8th pel mv, but there are some issues with the
      mode switching in between. Subsequent patches on this change Id
      will fix the remaining issues.
      
      Patch 2: Adds fixes to make sure that multiple mv precisions can
      co-exist in the bit-stream. Frame level switching has been tested
      to work correctly.
      
      Patch 3: Fixes lines exceeding 80 char
      
      Patch 4:
      http://www.corp.google.com/~debargha/vp8_results/enhinterp.html
      
      Results on derf after ssse3 bugfix, compared to everything
      enabled but the 8-tap, 1/8-subpel and 1/16-subpel uv. Overall the
      gains are about 3% now. Hopefully there are no more bugs lingering.
      Apparently the sse3 bug affected the quartel subpel results more than
      the eighth pel ones (which is understandabale because one bad predictor
      due to the bug, matters less if there are a lot more subpel options
      available as in the 1/8 subpel case).
      The results in the 4th column correspond to the current settings.
      The first two columns correspond to two settings of adaptive switching
      of the 1/4 or 1/8 subpel mode based on initial Q estimate. These
      do not work as good as just using 1/8 all the time yet.
      
      Change-Id: I3ef392ad338329f4d68a85257a49f2b14f3af472
      3e1cad9c
  23. 24 Feb, 2012 - 1 commit
  24. 17 Feb, 2012 - 1 commit
    • Paul Wilkins's avatar
      Code base simplification. · 4cfb8ed4
      Paul Wilkins authored
      Removal of most code to do with 1 pass.
      Removal of cyclic refresh code.
      
      Change-Id: I74971082bc19dd76e795d4d2e781a0424cec5c8c
      4cfb8ed4
  25. 16 Feb, 2012 - 2 commits
    • Paul Wilkins's avatar
      Code simplification · 79d330d7
      Paul Wilkins authored
      Removal of the pickinter.c and .h files and calls to this
      code.
      
      Removal of some code relating to real time and one pass
      settings  though there is more to be done in this regard.
      
      However,  vp8_set_speed_features() now
      only supports modes 0 and 1 and speeds up to 3
      so rd should always be set.
      
      Change-Id: I62c0c1b6154ab499785baef310536080e87bc4d8
      79d330d7
    • Ronald S. Bultje's avatar
      Remove dual prediction frame re-encoding loop. · 721711fb
      Ronald S. Bultje authored
      I'm basically not convinced that the concept works at all, let alone
      that this is the right place to do it. I think if we want something
      like this at all, I should integrate it with the main encoding loop
      and re-encode checks in onyx_if.c, and show that it has a significant
      benefit (which right now, it doesn't; removing this re-encode check
      actually increases all metrics by ~0.15%).
      
      Change-Id: I1b597385dc17f468384a994484fb24813389411f
      721711fb
  26. 15 Feb, 2012 - 1 commit
  27. 10 Feb, 2012 - 3 commits
    • Paul Wilkins's avatar
      Removal of threading code. · 2615ca5d
      Paul Wilkins authored
      For the experimental branch we are trying to slim the codebase
      down removing features such as threading for now which complicate
      the process of development and testing.
      
      Change-Id: I657c0246aef4d1fa8c8ffc6a1adfeee45bce8e24
      2615ca5d
    • Ronald S. Bultje's avatar
      Improved coding using 8x8 transform · f64725a0
      Ronald S. Bultje authored
      In summary, this commit encompasses a series of changes in attempt to
      improve the 8x8 transform based coding to help overall compression
      quality, please refer to the detailed commit history below for what
      are the rationale underly the series of changes:
      
      a. A frame level flag to indicate if 8x8 transform is used at all.
      b. 8x8 transform is not used for key frames and small image size.
      c. On inter coded frame, macroblocks using modes B_PRED, SPLIT_MV
      and I8X8_PRED are forced to using 4x4 transform based coding, the
      rest uses 8x8 transform based coding.
      d. Encoder and decoder has the same assumption on the relationship
      between prediction modes and transform size, therefore no signaling
      is encoded in bitstream.
      e. Mode decision process now calculate the rate and distortion scores
      using their respective transforms.
      
      Overall test results:
      1. HD set
      http://www.corp.google.com/~yaowu/no_crawl/t8x8/HD_t8x8_20120206.html
      (avg psnr: 3.09% glb psnr: 3.22%, ssim: 3.90%)
      2. Cif set:...
      f64725a0
    • Ronald S. Bultje's avatar
      Merge dualpred (compound prediction) experiment. · 29e4d7e8
      Ronald S. Bultje authored
      Change-Id: Ieaaa07c50eae41118596197f6a4d848135946e41
      29e4d7e8