1. 24 Apr, 2013 2 commits
    • Paul Wilkins's avatar
      Extension of segmentation to 8 segments. · 31ee193a
      Paul Wilkins authored
      Also some further simplification following removal
      of top node code.
      
      There is an issue in regards to the shared file vp8cx.h
      in regard to the roi_map as this interface assumes that
      there are only 4 segments. I have left the value here as
      4 for now meaning that the roi_map interface is broken
      for VP9.
      
      Note that this change would have been easier if I hadn't
      had to search for hard wire instances of the number 4
      and <= 3.
      
      Change-Id: Ia8b6deea4be4dbd20deb1656e689dd43a5f190e8
      31ee193a
    • Paul Wilkins's avatar
      Simplify Segment Coding · c77aff12
      Paul Wilkins authored
      Remove top node optimization.
      The improvement this gives is not sufficient to justify
      the extra complexity.
      
      Change-Id: I2bb4a12a50ffd52cacfa4a3e8acbb2e522066905
      c77aff12
  2. 23 Apr, 2013 1 commit
  3. 22 Apr, 2013 3 commits
  4. 19 Apr, 2013 5 commits
  5. 18 Apr, 2013 1 commit
  6. 17 Apr, 2013 3 commits
    • Dmitry Kovalev's avatar
      Changing argument type of vp9_get_mv_joint from MV to MV*. · 0db175ff
      Dmitry Kovalev authored
      Change-Id: I28c3026946fc1bde7074e6e0198da93bb0d75dfe
      0db175ff
    • Jingning Han's avatar
      Recursive partition syntax coding · 90a91cc6
      Jingning Han authored
      Enable recursive partition information coding from SB64X64 down to
      MB16X16. The bit-stream syntax is now supporting rectangular block
      sizes. It starts from SB64X64 and recursively describes the partition
      type of the current block. If the partition type is PARTITION_NONE,
      the block is coded as a single unit; if it is PARTITION_HORZ or
      PARTITION_VERT, the block is segmented into two independently coded
      rectangular units, with no further partition needed; otherwise, the
      block is segmented into 4 square blocks. i.e., PARTITION_SPLIT case,
      each can be potentially further partitioned.
      
      Forward adaptive probability modeling is used for the partition
      information coding, conditioned on the current block size.
      
      Change-Id: I499365fb547839d555498e3bcc0387d8a3587d87
      90a91cc6
    • Dmitry Kovalev's avatar
      Replacing BOOL_DECODER with vp9_reader inside vp9_decodemv. · 1db8fa52
      Dmitry Kovalev authored
      Also a little bit of code cleanup: replacing pbi->common with cm,
      pbi->mb with xd.
      
      Change-Id: I2f70a005704a2833d644dfaafc4cd354e6e8532b
      1db8fa52
  7. 16 Apr, 2013 1 commit
    • John Koleszar's avatar
      Remove the mb_no_coeff_skip flag · e3cfe4e8
      John Koleszar authored
      This flag was added to VP8 to allow a mode where MB-level skipping
      was not allowed, saving a bit per mb. It was never used in practice,
      and hasn't been tested in VP9, so remove it.
      
      Change-Id: Id450ec6904c6d06c1919508e7efc52d05cde5631
      e3cfe4e8
  8. 15 Apr, 2013 1 commit
  9. 12 Apr, 2013 2 commits
  10. 11 Apr, 2013 1 commit
  11. 08 Apr, 2013 1 commit
    • Jingning Han's avatar
      Clamp inferred motion vectors only · 12bf0796
      Jingning Han authored
      Clamp only the motion vectors inferred from neighboring reference
      macroblocks. The motion vectors obtained through motion search in
      NEWMV mode are constrained during the search process, which allows
      a relatively larger referencing region than the inferred mvs.
      Hence further clamping the best mv provided by the motion search may
      affect the efficacy of NEWMV mode.
      
      Synchronized the decoding process. The decoded mvs in NEWMV modes
      should be guaranteed to fit in the effective range. Put a mv range
      clamping function there for security purpose.
      
      This improves the coding performance of high motion sequences, e.g.,
      derf set:
      foreman 0.233%
      husky   0.175%
      icd     0.135%
      mother_daughter 0.337%
      pamphlet        0.561%
      
      stdhd set:
      blue_sky 0.408%
      city     0.455%
      also saw sunflower goes down by -0.469%.
      
      Change-Id: I3fcbba669e56dab779857a8126a91b926e899cb5
      12bf0796
  12. 04 Apr, 2013 1 commit
    • Dmitry Kovalev's avatar
      Motion vector decoder cleanup. · 19fb4df8
      Dmitry Kovalev authored
      Better formatting, shorter code, adding read_switchable_filter_type
      function.
      
      Change-Id: Ib919b529385cae34c2d682b1c3093518b6942fc1
      19fb4df8
  13. 28 Mar, 2013 1 commit
    • Deb Mukherjee's avatar
      Framework changes in nzc to allow more flexibility · fe9b5143
      Deb Mukherjee authored
      The patch adds the flexibility to use standard EOB based coding
      on smaller block sizes and nzc based coding on larger blocksizes.
      The tx-sizes that use nzc based coding and those that use EOB based
      coding are controlled by a function get_nzc_used().
      By default, this function uses nzc based coding for 16x16 and 32x32
      transform blocks, which seem to bridge the performance gap
      substantially.
      
      All sets are now lower by 0.5% to 0.7%, as opposed to ~1.8% before.
      
      Change-Id: I06abed3df57b52d241ea1f51b0d571c71e38fd0b
      fe9b5143
  14. 27 Mar, 2013 1 commit
  15. 26 Mar, 2013 1 commit
    • Deb Mukherjee's avatar
      Implicit weighted prediction experiment · 23144d23
      Deb Mukherjee authored
      Adds an experiment to use a weighted prediction of two INTER
      predictors, where the weight is one of (1/4, 3/4), (3/8, 5/8),
      (1/2, 1/2), (5/8, 3/8) or (3/4, 1/4), and is chosen implicitly
      based on consistency of the predictors to the already
      reconstructed pixels to the top and left of the current macroblock
      or superblock.
      
      Currently the weighting is not applied to SPLITMV modes, which
      default to the usual (1/2, 1/2) weighting. However the code is in
      place controlled by a macro. The same weighting is used for Y and
      UV components, where the weight is derived from analyzing the Y
      component only.
      
      Results (over compound inter-intra experiment)
      derf: +0.18%
      yt: +0.34%
      hd: +0.49%
      stdhd: +0.23%
      
      The experiment suggests bigger benefit for explicitly signaled weights.
      
      Change-Id: I5438539ff4485c5752874cd1eb078ff14bf5235a
      23144d23
  16. 21 Mar, 2013 1 commit
  17. 20 Mar, 2013 1 commit
  18. 15 Mar, 2013 1 commit
    • Dmitry Kovalev's avatar
      Motion vector code cleanup. · 4a0686e7
      Dmitry Kovalev authored
      Moving identical code to separate functions, variable declaration and
      initialization on the same line.
      
      Change-Id: Ifa6474a64189f9d8051e88e19850453b0227752c
      4a0686e7
  19. 09 Mar, 2013 1 commit
    • Deb Mukherjee's avatar
      Continued experiment with nonzero count · a28139c8
      Deb Mukherjee authored
      Adds probability updates for extra bits for the nzcs, code for
      getting nzc stats, plus some minor cleanups and fixes.
      
      Change-Id: If2814e7f04fb52f5025ad9f400f3e6c50a00b543
      a28139c8
  20. 07 Mar, 2013 1 commit
    • Deb Mukherjee's avatar
      Coding con-zero count rather than EOB for coeffs · eb6ef241
      Deb Mukherjee authored
      This patch revamps the entropy coding of coefficients to code first
      a non-zero count per coded block and correspondingly remove the EOB
      token from the token set.
      
      STATUS:
      Main encode/decode code achieving encode/decode sync - done.
      Forward and backward probability updates to the nzcs - done.
      Rd costing updates for nzcs - done.
      Note: The dynamic progrmaming apporach used in trellis quantization
      is not exactly compatible with nzcs. A suboptimal approach has been
      used instead where branch costs are updated to account for changes
      in the nzcs.
      
      TODO:
      Training the default probs/counts for nzcs
      
      Change-Id: I951bc1e22f47885077a7453a09b0493daa77883d
      eb6ef241
  21. 27 Feb, 2013 3 commits
    • Dmitry Kovalev's avatar
      Motion vectors code cleanup. · 0c0de002
      Dmitry Kovalev authored
      Fixing indentation, removing redundant parenthesis, deciphering single
      letter variable names, better spacing.
      
      Change-Id: I1d447a7d69eddbf1e94e0820423615f40ea2d591
      0c0de002
    • John Koleszar's avatar
      Combined motion compensation with scaled predictors · 77f88e97
      John Koleszar authored
      This patch extends the previous support for using references of a
      different resolution in ZEROMV mode to all inter prediction modes.
      Subpixel based best-mv scoring is disabled when the reference frame
      differs in resolution from the current frame.
      
      Change-Id: Id4dc3e5e6692de98d9857fd56bfad3ac57e944ac
      77f88e97
    • John Koleszar's avatar
      Spatial resamping of ZEROMV predictors · eb939f45
      John Koleszar authored
      This patch allows coding frames using references of different
      resolution, in ZEROMV mode. For compound prediction, either
      reference may be scaled.
      
      To test, I use the resize_test and enable WRITE_RECON_BUFFER
      in vp9_onyxd_if.c. It's also useful to apply this patch to
      test/i420_video_source.h:
      
        --- a/test/i420_video_source.h
        +++ b/test/i420_video_source.h
        @@ -93,6 +93,7 @@ class I420VideoSource : public VideoSource {
      
           virtual void FillFrame() {
             // Read a frame from input_file.
        +    if (frame_ != 3)
             if (fread(img_->img_data, raw_sz_, 1, input_file_) == 0) {
               limit_ = frame_;
             }
      
      This forces the frame that the resolution changes on to be coded
      with no motion, only scaling, and improves the quality of the
      result.
      
      Change-Id: I1ee75d19a437ff801192f767fd02a36bcbd1d496
      eb939f45
  22. 23 Feb, 2013 1 commit
  23. 09 Feb, 2013 1 commit
    • John Koleszar's avatar
      Replace as_mv struct with array · 7ca517f7
      John Koleszar authored
      Replace as_mv.{first, second} with a two element array, so that they
      can easily be processed with an index variable.
      
      Change-Id: I1e429155544d2a94a5b72a5b467c53d8b8728190
      7ca517f7
  24. 08 Feb, 2013 1 commit
    • Paul Wilkins's avatar
      Nearest / Zero Mv default entropy tweak. · bbede82f
      Paul Wilkins authored
      Tweak to default mode context to account for the fact
      that when there are no non zero motion candidates
      Nearest is now the preferred mode for coding a 0,0
      vector.
      
      Also resolve duplicate function name and typos.
      
      Change-Id: I76802788d46c84e3d1c771be216a537ab7b12817
      bbede82f
  25. 05 Feb, 2013 1 commit
    • Ronald S. Bultje's avatar
      [WIP] Add column-based tiling. · 1407bdc2
      Ronald S. Bultje authored
      This patch adds column-based tiling. The idea is to make each tile
      independently decodable (after reading the common frame header) and
      also independendly encodable (minus within-frame cost adjustments in
      the RD loop) to speed-up hardware & software en/decoders if they used
      multi-threading. Column-based tiling has the added advantage (over
      other tiling methods) that it minimizes realtime use-case latency,
      since all threads can start encoding data as soon as the first SB-row
      worth of data is available to the encoder.
      
      There is some test code that does random tile ordering in the decoder,
      to confirm that each tile is indeed independently decodable from other
      tiles in the same frame. At tile edges, all contexts assume default
      values (i.e. 0, 0 motion vector, no coefficients, DC intra4x4 mode),
      and motion vector search and ordering do not cross tiles in the same
      frame.
      t log
      
      Tile independence is not maintained between frames ATM, i.e. tile 0 of
      frame 1 is free to use motion vectors that point into any tile of frame
      0. We support 1 (i.e. no tiling), 2 or 4 column-tiles.
      
      The loopfilter crosses tile boundaries. I discussed this briefly with Aki
      and he says that's OK. An in-loop loopfilter would need to do some sync
      between tile threads, but that shouldn't be a big issue.
      
      Resuls: with tiling disabled, we go up slightly because of improved edge
      use in the intra4x4 prediction. With 2 tiles, we lose about ~1% on derf,
      ~0.35% on HD and ~0.55% on STD/HD. With 4 tiles, we lose another ~1.5%
      on derf ~0.77% on HD and ~0.85% on STD/HD. Most of this loss is
      concentrated in the low-bitrate end of clips, and most of it is because
      of the loss of edges at tile boundaries and the resulting loss of intra
      predictors.
      
      TODO:
      - more tiles (perhaps allow row-based tiling also, and max. 8 tiles)?
      - maybe optionally (for EC purposes), motion vectors themselves
        should not cross tile edges, or we should emulate such borders as
        if they were off-frame, to limit error propagation to within one
        tile only. This doesn't have to be the default behaviour but could
        be an optional bitstream flag.
      
      Change-Id: I5951c3a0742a767b20bc9fb5af685d9892c2c96f
      1407bdc2
  26. 30 Jan, 2013 1 commit
  27. 28 Jan, 2013 1 commit
    • Paul Wilkins's avatar
      Segment Skip Flag · 0ff9b033
      Paul Wilkins authored
      First step in simplifying the segment mode and
      segment EOB flags into a simpler segment skip
      flag that implies 0,0 mv and EOB at position 0.
      
      Change-Id: Ib750cac31a7a02dc21082580498efd9f7d8d72a5
      0ff9b033
  28. 26 Jan, 2013 1 commit
    • Deb Mukherjee's avatar
      Adding a frame parallel decoding mode · dfd89f2e
      Deb Mukherjee authored
      Adds a flag to disable features that would inhibit frame parallel
      decoding. This includes backward adaptation and MV sorting based
      on search in ref frame buffer.
      
      Also includes some minor clean-ups.
      
      Change-Id: I434846717a47b7bcb244b37ea670c5cdf776f14d
      dfd89f2e