1. 13 Dec, 2011 1 commit
  2. 10 Dec, 2011 1 commit
  3. 18 Nov, 2011 1 commit
    • John Koleszar's avatar
      Speed selection support for disabled reference frames · e55974bf
      John Koleszar authored
      There was an implicit reference frame test order (typically LAST,
      GOLD, ARF) in the mode selection logic, but this doesn't provide the
      expected results when some reference frames are disabled. For
      instance, in real-time mode, the speed selection logic often disables
      the ARF modes. So if the user disables the LAST and GOLD frames, the
      encoder was always choosing INTRA, when in reality searching the ARF
      in this case has the same speed penalty as searching LAST would have
      had.
      
      Instead, introduce the notion of a reference frame search order. This
      patch preserves the former priorities, so if a frame is disabled, the
      other frames bump up a slot to take its place. This patch lays the
      groundwork for doing something smarter in the frame test order, for
      example considering temporal distance or looking at the frames used by
      nearby blocks.
      
      Change-Id: I1199149f8662a408537c653d2c021c7f1d29a700
      e55974bf
  4. 08 Nov, 2011 1 commit
  5. 11 Oct, 2011 1 commit
    • Adrian Grange's avatar
      Added rate-targeted temporal scalability · 217591fd
      Adrian Grange authored
      Added the ability to create rate-targeted, temporally
      scalable, VP8 compatible bitstreams.
      
      The application vp8_scalable_patterns.c demonstrates how
      to use this capability. Users can create output bitstreams
      containing upto 5 temporally separable streams encoded
      as a single VP8 bitstream.
      (previously abandoned as:
      I92d1483e887adb274d07ce9e567e4d0314881b0a)
      
      Change-Id: I156250a3fe930be57c069d508c41b6a7a4ea8d6a
      217591fd
  6. 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
  7. 26 Jul, 2011 1 commit
  8. 18 Jul, 2011 1 commit
    • John Koleszar's avatar
      Improved 1-pass CBR rate control · b5ea2fbc
      John Koleszar authored
      This patch attempts to improve the handling of CBR streams with
      respect to the short term buffering requirements. The "buffer level"
      is changed to be an average over the rc buffer, rather than a long
      running average. Overshoot is also tracked over the same interval
      and the golden frame targets suppressed accordingly to correct for
      overly aggressive boosting.
      
      Testing shows that this is fairly consistently positive in one
      metric or another -- some clips that show significant decreases
      in quality have better buffering characteristics, others show
      improvenents in both.
      
      Change-Id: I924c89aa9bdb210271f2e03311e63de3f1f8f920
      b5ea2fbc
  9. 23 Jun, 2011 1 commit
    • John Koleszar's avatar
      Revert "Reduce overshoot in 1 pass rate control" · db67dcba
      John Koleszar authored
      This reverts commit 212f6183.
      
      Further testing shows that the overshoot accumulation/damping is too
      aggressive on some clips. Allowing the accumulated overshoot to
      decay and limiting to damping to golden frames shows some promise.
      But some clips show significant overshoot in the buffer window, so
      I think this still needs work.
      
      Change-Id: Ic02a9ca34f55229f9cc04786f4fab54cdc1a3ef5
      db67dcba
  10. 03 Jun, 2011 1 commit
    • John Koleszar's avatar
      Reduce overshoot in 1 pass rate control · 212f6183
      John Koleszar authored
      This patch attempts to reduce the peak bitrate hit by the encoder
      when using small buffer windows.
      
      Tested on the CIF set over 200-500kbps using these settings:
      
        --buf-sz=500 --buf-initial-sz=250 --buf-optimal-sz=250 \
        --undershoot-pct=100
      
      Two pass encodes were tested at best quality. One pass encodes were
      tested only at realtime speed 4:
      
        --rt --cpu-used=-4
      
      The peak datarate (over the specified 500ms window) was measured
      for each encode, and averaged together to get metric for
      "average peak," computed as SUM(peak)/SUM(target). This patch
      reduces the average peak datarate as follows:
      
        One pass:
          baseline:   1.29715
          this patch: 1.23664
      
        Two pass:
          baseline:   1.32702
          this patch: 1.37824
      
      This change had a positive effect on our quality metrics as well:
      
        One pass CBR:
                          Min  / Mean / Max (pct)
          Average PSNR    -0.42 / 2.86 / 27.32
          Overall PSNR    -0.90 / 2.00 / 17.27
          SSIM            -0.05 / 3.95 / 37.46
      
        Two pass CBR:
                          Min  / Mean / Max (pct)
          Average PSNR    -4.47 / 4.35 / 35.99
          Overall PSNR    -3.40 / 4.18 / 36.46
          SSIM            -4.56 / 6.98 / 53.67
      
        One pass VBR:
                          Min  / Mean / Max (pct)
          Average PSNR    -5.21 /  0.01 / 3.30
          Overall PSNR    -8.10 / -0.38 / 1.21
          SSIM            -7.38 / -0.11 / 3.17
          (note: most values here were close to the mean, there were a few
           outliers on files that were very sensitive to golden frame size)
      
        Two pass VBR:
                          Min  / Mean / Max (pct)
          Average PSNR    0.00 / 0.00 / 0.00
          Overall PSNR    0.00 / 0.00 / 0.00
          SSIM            0.00 / 0.00 / 0.00
      
      Neither one pass or two pass CBR mode adheres particularly strictly
      to the short term buffer constraints, and two pass is less
      consistent, even in the baseline commit. This should be addressed
      in a later commit. This likely will hurt the quality numbers, as it
      will have to reduce the burstiness of golden frames.
      
      Aside: My work on this commit makes it clear that we need to make
      rate control modes "pluggable", where you can easily write a new
      one or work on one in isolation.
      
      Change-Id: I1ea9a48f2beedd59891f1288aabf7064956b4716
      212f6183
  11. 19 May, 2011 2 commits
    • John Koleszar's avatar
      cleanup: collect twopass variables · 63cb1a7c
      John Koleszar authored
      This patch collects the twopass specific memebers of VP8_COMP into a
      dedicated struct. This is a first step towards isolating the two pass
      rate control and aids readability by decorating these variables with
      the 'twopass.' namespace. This makes it clear to the reader in what
      contexts the variable will be valid, and is a hint that a section of
      code might be a good candidate to move to firstpass.c in later
      refactoring. There likely will be other rate control modes that need
      their own specific data as well.
      
      This notation is probably overly verbose in firstpass.c, so an
      alternative would be to access this struct through a pointer like
      'rc->' instead of 'cpi->firstpass.' in that file. Feel free to make
      a review comment to that effect if you prefer.
      
      Change-Id: I0ab8254647cb4b493a77c16b5d236d0d4a94ca4d
      63cb1a7c
    • John Koleszar's avatar
      Remove unused members of VP8_COMP · 04849772
      John Koleszar authored
      Various members that were either completely unreferenced or written
      and not read.
      
      Change-Id: Ie41ebac0ff0364a76f287586e4fe09a68907806e
      04849772
  12. 06 May, 2011 1 commit
    • John Koleszar's avatar
      Don't override active_worst_quality in 2 pass · abc9958c
      John Koleszar authored
      Commit db5057c7 introduced a bug in that the active_worst_quality
      selected by the 2 pass rate controller was being overridden for key
      frames, causing a severe quality loss.
      
      Change-Id: I4865a6fbe3e94e9b4fb9271c7dd68b455d7b371d
      abc9958c
  13. 26 Apr, 2011 2 commits
    • John Koleszar's avatar
      Refactor calc_iframe_target_size · db5057c7
      John Koleszar authored
      Combine calc_iframe_target_size, previously only used for forced
      keyframes, with calc_auto_iframe_target_size, which handled most
      keyframes.
      
      Change-Id: I227051361cf46727caa5cd2b155752d2c9789364
      db5057c7
    • John Koleszar's avatar
      Move pick_frame_size() to ratectrl.c · 81d2206f
      John Koleszar authored
      This is a first step in cleaning up the redundancies between
      vp8_calc_{auto_,}iframe_target_size. The pick_frame_size() function is
      moved to ratectrl.c, and made to be the primary interface. This means
      that the various calc_*_target_size functions can be made private.
      
      Change-Id: I66a9a62a5f9c23c818015e03f92f3757bf3bb5c8
      81d2206f
  14. 25 Apr, 2011 3 commits
  15. 19 Apr, 2011 1 commit
    • John Koleszar's avatar
      Remove unused kf rate variables · ad6a8ca5
      John Koleszar authored
      Remove tot_key_frame_bits and prior_key_frame_size[] as they were
      tracked but never used. Remove intra_frame_target, as it was only
      used to initialize prior_key_frame_size.
      
      Refactor vp8_adjust_key_frame_context() some to remove unnecessary
      calculations.
      
      Change-Id: Icbc2c83d2b90e184be03e6f9679e678f3a4bce8f
      ad6a8ca5
  16. 13 Apr, 2011 1 commit
    • John Koleszar's avatar
      Change rc undershoot/overshoot semantics · c99f9d7a
      John Koleszar authored
      This patch changes the rc_undershoot_pct and rc_overshoot_pct controls
      to set the "aggressiveness" of rate adaptation, by limiting the
      amount of difference between the target buffer level and the actual
      buffer level which is applied to the target frame rate for this frame.
      
      This patch was initially provided by arosenberg at logitech.com as
      an attachment to issue #270. It was modified to separate these controls
      from the other unrelated modifications in that patch, as well as to
      use the pre-existing variables rather than introducing new ones.
      
      Change-Id: Id542e3f5667dd92d857d5eabf29878f2fd730a62
      c99f9d7a
  17. 01 Apr, 2011 1 commit
    • Yunqing Wang's avatar
      Use full-pixel MV in mvsadcost calculation · 3d681581
      Yunqing Wang authored
      MV sad cost error is only used in full-pixel motion search,
      which only need full-pixel resolution instead of quarter-pixel
      resolution. This change reduced mvsadcost table size, and
      removed unneccessary pamameter passing since this table is
      constant once it is generated.
      
      Change-Id: I9f931e55f6abc3c99011321f1dfb2f3562e6f6b0
      3d681581
  18. 18 Mar, 2011 1 commit
    • John Koleszar's avatar
      Increase static linkage, remove unused functions · 429dc676
      John Koleszar authored
      A large number of functions were defined with external linkage, even
      though they were only used from within one file. This patch changes
      their linkage to static and removes the vp8_ prefix from their names,
      which should make it more obvious to the reader that the function is
      contained within the current translation unit. Functions that were
      not referenced were removed.
      
      These symbols were identified by:
      
        $ nm -A libvpx.a | sort -k3 | uniq -c -f2 | grep ' [A-Z] ' \
          | sort | grep '^ *1 '
      
      Change-Id: I59609f58ab65312012c047036ae1e0634f795779
      429dc676
  19. 11 Mar, 2011 1 commit
    • Paul Wilkins's avatar
      1 Pass CQ and VBR bug fixes · 2ae91fbe
      Paul Wilkins authored
      Issue 291 highlighted  the fact that CQ mode was not working
      as expected in 1 pass mode,
      
      This commit fixes that specific problem but in so doing I also
      uncovered an overflow issue in the VBR code for 1 pass and
      some data values not being correctly initialized.
      
      For some clips (particularly short clips), the resulting
      improvement is dramatic.
      
      Change-Id: Ieefd6c6e4776eb8f1b0550dbfdfb72f86b33c960
      2ae91fbe
  20. 10 Feb, 2011 1 commit
    • John Koleszar's avatar
      Fix relative include paths · 02321de0
      John Koleszar authored
      Allow compiling without adding vp8/{common,encoder,decoder} to the
      include paths.
      
      Change-Id: Ifeb5dac351cdfadcd659736f5158b315a0030b6c
      02321de0
  21. 07 Jan, 2011 1 commit
    • Paul Wilkins's avatar
      CQ Mode · e0846c9c
      Paul Wilkins authored
      The merge includes hooks to for CQ mode and other code
      changes merged from the test branch.
      
      CQ mode attempts to maintain a more stable quantizer within a clip
      whilst also trying to adhere to a guidline maximum bitrate.
      
      The existing target data rate parameter is used to specify the
      guideline maximum bitrate.
      
      A new parameter allows the user to specify a target CQ level.
      
      For normal (non kf/gf/arf) frames, the quantizer will not drop BELOW the
      user specified value (0-63). However, in some cases the encoder may
      choose to impose a target CQ that is above that specified by the user,
      if it estimates that consistent use of the target value is not compatible
      with guideline maximum bitrate.
      
      Change-Id: I2221f9eecae8cc3c431d36caf83503941b25e4c1
      e0846c9c
  22. 06 Dec, 2010 1 commit
    • Patrik Westin's avatar
      Fix for manual Golden frame frequency · 8534071d
      Patrik Westin authored
      When auto_golden wasn't set it forced all frames to be a golden
      frame. Now the manual configured frequency is adhered to.
      
      Change-Id: I360acac9bc487db0d9c4d4da6ee41f70c227c539
      8534071d
  23. 01 Dec, 2010 1 commit
    • Fritz Koenig's avatar
      Set refresh_alt_ref_frame on keyframe encode. · 9c8ad79f
      Fritz Koenig authored
      On a keyframe alt ref and golden are refreshed.  The flag was
      not being set and so on the frame after a keyframe, motion
      search would occur on the alt ref frame.  This is not necessary
      because the alt ref frame identical to the last frame in this
      scenario.
      
      Handle corner case where a forward alt-ref frame is put
      directly after a keyframe.
      
      Change-Id: I9be4cf290d694f8cf2f9a31852014b5ccf1504d3
      9c8ad79f
  24. 22 Nov, 2010 1 commit
    • Paul Wilkins's avatar
      Recalibration of bits per MB tables · ad6150f7
      Paul Wilkins authored
      The baseline bits per MB prediction tables have been
      re calibrated based on the assumption that bits per mb
      is inversely proportional to the quantizer level.
      
      Change-Id: Ibd355c7acac4b8053dda1baf1032fe35f11da7f7
      ad6150f7
  25. 14 Oct, 2010 1 commit
  26. 09 Sep, 2010 1 commit
  27. 31 Aug, 2010 1 commit
    • Paul Wilkins's avatar
      Improved Force Key Frame Behaviour · c239a1b6
      Paul Wilkins authored
      These changes improve the behaviour of the code with
      forced key frames sent in by a calling application.
      
      The sizing of the frames is still suboptimal for two pass in
      particular but the behaviour is much better than it was.
      
      Change-Id: I35fae610c67688ccc69d11f385e87dfc884e65a1
      c239a1b6
  28. 11 Aug, 2010 1 commit
  29. 19 Jul, 2010 1 commit
    • Paul Wilkins's avatar
      Rate control fix for ARNR filtered frames. · bf18069c
      Paul Wilkins authored
      Previously we had assumed that it was necessary to give a full frame's
      bit allocation to the alt ref frame if it has been created through temporal
      filtering. This is not the case. The active max quantizer control
      insures that sufficient bits are allocated if needed and allocating a
      full frame's worth of bits creates an excessive overhead for the ARF.
      
      Change-Id: I83c95ed7bc7ce0e53ccae6ff32db5a97f145937a
      bf18069c
  30. 18 Jun, 2010 1 commit
    • John Koleszar's avatar
      cosmetics: trim trailing whitespace · 94c52e4d
      John Koleszar authored
      When the license headers were updated, they accidentally contained
      trailing whitespace, so unfortunately we have to touch all the files
      again.
      
      Change-Id: I236c05fade06589e417179c0444cb39b09e4200d
      94c52e4d
  31. 08 Jun, 2010 1 commit
  32. 04 Jun, 2010 1 commit
  33. 25 May, 2010 1 commit
  34. 20 May, 2010 1 commit
  35. 19 May, 2010 1 commit
  36. 18 May, 2010 1 commit