1. 27 Feb, 2013 2 commits
    • John Koleszar's avatar
      Use ref_frame_map vice active_ref_idx on the encoder · 800ad0b8
      John Koleszar authored
      This patch makes the encoder's use of ref_frame_map and active_ref_idx
      consistent with the decoder. ref_frame_map[] maps a reference buffer
      index to its actual location in the yv12_fb array, since many
      references may share an underlying buffer. active_ref_idx[] mirrors
      cpi->{lst,gld,alt}_fb_idx, holding the active references in each
      slot.
      
      This also fixes a bug in setup_buffer_inter() where the incorrect
      reference was used to populate the scaling factors.
      
      Change-Id: Id3728f6d77cffcd27c248903bf51f9c3e594287e
      800ad0b8
    • 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
  2. 26 Feb, 2013 1 commit
    • John Koleszar's avatar
      Refactor inter recon functions to support scaling · 6a4f708c
      John Koleszar authored
      Ensure that all inter prediction goes through a common code path
      that takes scaling into account. Removes a bunch of duplicate
      1st/2nd predictor code. Also introduces a 16x8 mode for 8x8
      MVs, similar to the 8x4 trick we were doing before. This has an
      unexpected effect with EIGHTTAP_SMOOTH, so it's disabled in that
      case for now.
      
      Change-Id: Ia053e823a8bc616a988a0af30452e1e75a739cba
      6a4f708c
  3. 23 Feb, 2013 1 commit
  4. 20 Feb, 2013 1 commit
  5. 19 Feb, 2013 1 commit
    • Yaowu Xu's avatar
      Use lossless for Q0 · 93d6b86c
      Yaowu Xu authored
      The commit changes the coding mode to lossless whenever the lowest
      quantizer is choosen.
      
      As expected, test results showed no difference for cif and std-hd
      set where Q0 is rarely used. For yt and yt-hd set, Q0 is used for
      a number of clips, where this commit helped a lot in the high end.
      
      Average over all clips in the sets:
      yt: 2.391% 1.017% 1.066%
      hd: 1.937%  .764%  .787%
      
      Change-Id: I9fa9df8646fd70cb09ffe9e4202b86b67da16765
      93d6b86c
  6. 15 Feb, 2013 1 commit
  7. 13 Feb, 2013 2 commits
    • Ronald S. Bultje's avatar
      Add support for tile rows. · 89a206ef
      Ronald S. Bultje authored
      These allow sending partial bitstream packets over the network before
      encoding a complete frame is completed, thus lowering end-to-end
      latency. The tile-rows are not independent.
      
      Change-Id: I99986595cbcbff9153e2a14f49b4aa7dee4768e2
      89a206ef
    • Yaowu Xu's avatar
      fix the lossless experiment · 16f25f9d
      Yaowu Xu authored
      Change-Id: I95acfc1417634b52d344586ab97f0abaa9a4b256
      16f25f9d
  8. 12 Feb, 2013 1 commit
  9. 08 Feb, 2013 1 commit
    • John Koleszar's avatar
      Pass macroblock index to pick inter functions · 6125a1ed
      John Koleszar authored
      Pass the current mb row and column around rather than the
      recon_yoffset and recon_uvoffset, since those offsets will
      change from predictor to predictor, based on the reference
      frame selection.
      
      Change-Id: If3f9df059e00f5048ca729d3d083ff428e1859c1
      6125a1ed
  10. 07 Feb, 2013 1 commit
    • Paul Wilkins's avatar
      Added skip switches for SB32 and SB64 · 29731308
      Paul Wilkins authored
      Added switches and code to skip/breakout from
      doing SB32 and SB64 tests based on whether
      the 16x16 MB tests used split modes. Also to
      optionally skip 64x64 if 16x16 was chosen over
      32x32.
      
      Impact varies depending on clip from a few %
      up to almost 50% on encode speed. Only the
      split mode breakout is currently enabled.
      
      Change-Id: Ib5836140b064b350ffa3057778ed2cadcc495cf8
      29731308
  11. 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
  12. 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
  13. 25 Jan, 2013 1 commit
  14. 24 Jan, 2013 1 commit
    • Deb Mukherjee's avatar
      Adds an error-resilient mode with test · 01cafaab
      Deb Mukherjee authored
      Adds an error-resilient mode where frames can be continued
      to be decoded even when there are errors (due to network losses)
      on a prior frame. Specifically, backward updates are turned off
      and probabilities of various symbols are reset to defaults at
      the beginning of each frame. Further, the last frame's mvs are
      not used for the mv reference list, and the sorting of the
      initial list based on search on previous frames is turned off
      as well.
      
      Also adds a test where an arbitrary set of frames are skipped
      from decoding to simulate errors. The test verifies (1) that if
      the error frames are droppable - i.e. frame buffer updates have
      been turned off - there are no mismatch errors for the remaining
      frames after the error frames; and (2) if the error-frames are non
      droppable, there are not only no decoding errors but the mismatch
      PSNR between the decoder's version of the post-error frames and the
      encoder's version is at least 20 dB.
      
      Change-Id: Ie6e2bcd436b1e8643270356d3a930e8989ff52a5
      01cafaab
  15. 16 Jan, 2013 1 commit
    • John Koleszar's avatar
      Start to anonymize reference frames · da832a80
      John Koleszar authored
      Remove lst_fb_idx, gld_fb_idx, alt_fb_idx, refresh_last_frame,
      refresh_golden_frame, refresh_alt_ref_frame from common. Gold/Alt are
      encode side conventions. From the decoder's perspective, we want to be
      dealing with numbered references.
      
      Updates to active_ref 2 signal mode context switches, vestigial from
      refresh_alt_ref_frame. This needs some clean up to make sense with
      increased numbers of reference frames, as well as reimplementing the
      swapping of alt/golden which was previously done using the
      buffer-to-buffer copy mechanism removed in an earlier commit.
      
      Change-Id: I7334445158b7666f9295d2a2dd22aa03f4485f58
      da832a80
  16. 14 Jan, 2013 1 commit
    • Yaowu Xu's avatar
      Fix compiler warnings · 113005b1
      Yaowu Xu authored
      The warnings caused verify failure with gerrit for several  commits
      
      Change-Id: I030df8638bd69b8783a3ac58e720ff9f0bfd546c
      113005b1
  17. 10 Jan, 2013 2 commits
  18. 09 Jan, 2013 1 commit
    • Adrian Grange's avatar
      New prediction filter · 7d6b5425
      Adrian Grange authored
      This patch removes the old pred-filter experiment and replaces it
      with one that is implemented using the switchable filter framework.
      
      If the pred-filter experiment is enabled, three interopolation
      filters are tested during mode selection; the standard 8-tap
      interpolation filter, a sharp 8-tap filter and a (new) 8-tap
      smoothing filter.
      
      The 6-tap filter code has been preserved for now and if the
      enable-6tap experiment is enabled (in addition to the pred-filter
      experiment) the original 6-tap filter replaces the new 8-tap smooth
      filter in the switchable mode.
      
      The new experiment applies the prediction filter in cases of a
      fractional-pel motion vector. Future patches will apply the filter
      where the mv is pel-aligned and also to intra predicted blocks.
      
      Change-Id: I08e8cba978f2bbf3019f8413f376b8e2cd85eba4
      7d6b5425
  19. 08 Jan, 2013 1 commit
  20. 07 Jan, 2013 2 commits
  21. 06 Jan, 2013 1 commit
  22. 03 Jan, 2013 1 commit
    • Adrian Grange's avatar
      New interpolation filter selection algorithm · 259b8008
      Adrian Grange authored
      Old Scheme:
      When SWITCHABLE filter selection is enabled the encoder
      evaluates the use of each interpolation filter type and
      selects the best one to use at the MB level. A frame-
      level flag can be set to force the use of a particular
      filter type for all MBs in a frame if it is more efficient
      to encode that way. The logic here involved a Q dependent
      threshold that assumed that the second 8-tap filter was
      a high-pass filter. However, this requires a trip around
      the recode loop. If the frame-level flag indicates use
      of a particular filter, the other filters are not
      evaluated in the pick_mode loop.
      
      New Scheme:
      Each filter type is evaluated at the MB level and a record
      of the best filter is kept, irrespective of what filter
      is signaled at the frame-level. Once all MBs have been
      encoded, a decision is made as to what frame-level mode
      to set for the *next* frame. If one filter is used by 80%
      or more of the MBs, then this filter is forced since it
      is assumed that this will be more efficient if the
      next frame has similar characteristics. i.e. there is a
      one-frame lag between measuring the filter selection and
      setting the frame-level mode to use.
      
      Change-Id: I6a7e7ced8f27e120fafb99db2dc9c6293f8d20f7
      259b8008
  23. 02 Jan, 2013 1 commit
  24. 26 Dec, 2012 1 commit
  25. 18 Dec, 2012 1 commit
  26. 10 Dec, 2012 2 commits
    • Deb Mukherjee's avatar
      A bug fix related to switchable filters · 14a38a87
      Deb Mukherjee authored
      The switchable count update was mistakenly inside a macro.
      
      Change-Id: Iec04c52ad57034b88312dbaf05eee1f47ce265b3
      14a38a87
    • Paul Wilkins's avatar
      Further changes to mv reference code. · d1244659
      Paul Wilkins authored
      Some further changes and refactoring of mv
      reference code and selection of center point for
      searches. Mainly relates to not passing so many
      different local copies of things around.
      
      Some place holder comments.
      
      Change-Id: I309f10ffe9a9cde7663e7eae19eb594371c8d055
      d1244659
  27. 08 Dec, 2012 2 commits
    • Yaowu Xu's avatar
      experiment with CONTEXT conversion · ab480ced
      Yaowu Xu authored
      This commit changed the ENTROPY_CONTEXT conversion between MBs that
      have different transform sizes.
      
      In additioin, this commit also did a number of cleanup/bug fix:
      1. removed duplicate function vp9_fix_contexts() and changed to use
      vp8_reset_mb_token_contexts() for both encoder and decoder
      2. fixed a bug in stuff_mb_16x16 where wrong context was used for
      the UV.
      3. changed reset all context to 0 if a MB is skipped to simplify the
      logic.
      
      Change-Id: I7bc57a5fb6dbf1f85eac1543daaeb3a61633275c
      ab480ced
    • Ronald S. Bultje's avatar
      Introduce vp9_coeff_probs/counts/stats/accum types. · 885cf816
      Ronald S. Bultje authored
      Use these, instead of the 4/5-dimensional arrays, to hold statistics,
      counts, accumulations and probabilities for coefficient tokens. This
      commit also re-allows ENTROPY_STATS to compile.
      
      Change-Id: If441ffac936f52a3af91d8f2922ea8a0ceabdaa5
      885cf816
  28. 07 Dec, 2012 1 commit
    • Ronald S. Bultje's avatar
      32x32 transform for superblocks. · c456b35f
      Ronald S. Bultje authored
      This adds Debargha's DCT/DWT hybrid and a regular 32x32 DCT, and adds
      code all over the place to wrap that in the bitstream/encoder/decoder/RD.
      
      Some implementation notes (these probably need careful review):
      - token range is extended by 1 bit, since the value range out of this
        transform is [-16384,16383].
      - the coefficients coming out of the FDCT are manually scaled back by
        1 bit, or else they won't fit in int16_t (they are 17 bits). Because
        of this, the RD error scoring does not right-shift the MSE score by
        two (unlike for 4x4/8x8/16x16).
      - to compensate for this loss in precision, the quantizer is halved
        also. This is currently a little hacky.
      - FDCT and IDCT is double-only right now. Needs a fixed-point impl.
      - There are no default probabilities for the 32x32 transform yet; I'm
        simply using the 16x16 luma ones. A future commit will add newly
        generated probabilities for all transforms.
      - No ADST version. I don't think we'll add one for this level; if an
        ADST is desired, transform-size selection can scale back to 16x16
        or lower, and use an ADST at that level.
      
      Additional notes specific to Debargha's DWT/DCT hybrid:
      - coefficient scale is different for the top/left 16x16 (DCT-over-DWT)
        block than for the rest (DWT pixel differences) of the block. Therefore,
        RD error scoring isn't easily scalable between coefficient and pixel
        domain. Thus, unfortunately, we need to compute the RD distortion in
        the pixel domain until we figure out how to scale these appropriately.
      
      Change-Id: I00386f20f35d7fabb19aba94c8162f8aee64ef2b
      c456b35f
  29. 05 Dec, 2012 1 commit
    • Paul Wilkins's avatar
      Change to MV reference search. · 4cc657ec
      Paul Wilkins authored
      This patch reduces the cpu cost of the MV ref
      search by only allowing insert for candidates
      that would be in the current top 4.
      
      This could alter the outcome and slightly favors
      near candidates which are tested first but also
      limits the worst case loop count to 4 and means in
      many cases it will drop out and not happen.
      
      Change-Id: Idd795a825f9fd681f30f4fcd550c34c38939e113
      4cc657ec
  30. 03 Dec, 2012 1 commit
  31. 30 Nov, 2012 2 commits
    • Deb Mukherjee's avatar
      Adds switchable filters with superblocks · 66323307
      Deb Mukherjee authored
      Allows switchbale filters to be used without mismatch when the
      superblock experiment is on.
      
      Also removes a spurious clamping code in decodemv.c which causes
      rare encode/decode mismatches.
      
      Change-Id: I809d9ee0b2859552b613500b539a615515b863ae
      66323307
    • Jim Bankoski's avatar
      warnings in various experiments · 9f937042
      Jim Bankoski authored
      Change-Id: Ib5106d4772450f8026f823dd743f162ab833b1d6
      9f937042
  32. 29 Nov, 2012 2 commits