1. 24 Feb, 2012 1 commit
  2. 16 Feb, 2012 1 commit
    • 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
  3. 17 Jan, 2012 1 commit
    • Paul Wilkins's avatar
      Rate control on static scenes plus Y2dc delta Q fix. · cf561bad
      Paul Wilkins authored
      A problem can arise on static clips with force key frames where
      attempts to avoid popping lead to a progressive reduction in key
      frame Q that ultimately may lead to unexpected overspend against
      the  rate target.
      
      The changes in this patch help to insure that in such clips the
      quality of the key frames across the clip is more uniform (rather
      than starting bad and getting better - especially at low target rates).
      
      This patch also includes a fix that removes a delta on the Y2DC
      when the baseline q index < 4 as this is no longer needed.
      
      There is also a fix to try and prevent repeat single step Q adjustment in
      the recode loop leading to lots of recodes, especially where the use
      of forced skips as part of segmentation has made the impact of Q on
      the number of bits generated much smaller.
      
      Patch 2: Amend "last_boosted_qindex" calculation for arf overlay frames.
      
      Change-Id: Ia1feeb79ed8ed014e4239994fcf5e58e68fd9459
      cf561bad
  4. 19 Dec, 2011 1 commit
    • Paul Wilkins's avatar
      QRange experiements. · ec670bc5
      Paul Wilkins authored
      High Q end extended a little.
      Some clean up.
      
      Slightly better on SSIM, Slightly worse on PSNR over derf set.
      
      Change-Id: I3dceea8a39e11c26e1a389a40e40b86efc76d28c
      ec670bc5
  5. 12 Dec, 2011 1 commit
    • Paul Wilkins's avatar
      QINDEX_RANGE fixed tables. · ae9023a3
      Paul Wilkins authored
      Removed a couple more fixed tables for the extended quantizer experiment
      that depend on QINDEX_RANGE.
      
      Change-Id: I2c15ffc7488c2a2b8d6504e2c4b6b2339799d117
      ae9023a3
  6. 06 Dec, 2011 1 commit
    • Paul Wilkins's avatar
      Some further QIndex issues with extended Q · b4ad9b5d
      Paul Wilkins authored
      Resolved or factored out some further issues with Q index.
      Put in a 3rd order polynomial instead of less accurate power function
      as the best fit on gf and kf boost adjustment.
      Added avg_q value to use instead of ni_av_qi.
      Compute segment delta Q values based on avg_q.
      Fixed bug in adjust_maxq_qrange().
      
      The extended range Q on the derf set, using standard data rates
      (which do not extend high enough to get big benefits) still show
      a shortfall of between 0.5 and 1% though so there would appear to
      be further issues that need to be tracked down.
      
      Change-Id: Icfd49b9f401906ba487ef1bef7d397048295d959
      b4ad9b5d
  7. 29 Nov, 2011 2 commits
    • Paul Wilkins's avatar
      Extended Q Range: · b9ce9bcb
      Paul Wilkins authored
      Addressed a couple of other QIndex dependencies.
      
      Change-Id: I15b224bffd0210d3c7065cb6905156f2ca8e9ea9
      b9ce9bcb
    • Paul Wilkins's avatar
      Further work on extended Q range. · 99df6bb6
      Paul Wilkins authored
      Fixed bug in firspass.c call to vp8_initialize_rd_consts()
      
      This was passing in vp8_dc_quant(cm->base_qindex, cm->y1dc_delta_q)
       instead of (cm->base_qindex + cm->y1dc_delta_q).
      
      It just so happens that for the value 26 used for cm->base_qindex in the
      unextended Q case,  the two give similar results. However, when using
      the extended Q range the two are very different.
      
      Also added more stats output and partly disabled another broken feature.
      
      Change-Id: Iddf6cf5ea8467c44b7c133f38e629f6ba6f2581e
      99df6bb6
  8. 23 Nov, 2011 2 commits
    • Paul Wilkins's avatar
      Two pass rate control code changes. · ee2051f6
      Paul Wilkins authored
      This comitt brings accross changes from the public branch
      commit number Icf74d13af77437c08602571dc7a97e747cce5066.
      
      The main puurpose of this comit relates to CQ mode but it
      also includes some refactoring of the two pass code which
      I hope will make tuning the experimental branch for the new
      quantizer range a little less painfull.
      
      Change-Id: I278e989436a928fc1fe7761068960048f9d7a376
      ee2051f6
    • Paul Wilkins's avatar
      Further resolution of QIndex LUTS; · a0b7db22
      Paul Wilkins authored
      This commit resolves further QIndex look up tables to facilitate
      experimentation with the quantizer range.
      
      In some cases  rather than remove the look up tables completely
      I have created functions that are called once  to populate them
      using a formulaic approach base on the actual quantizer.
      
      The use of these functions based on best fit of data from the original
      tables does affect the results on some clips but across the derf test
      set the effect was broadly neutral.
      
      Change-Id: I8baa61c97ce87dc09a6340d56fdeb681b9345793
      a0b7db22
  9. 22 Nov, 2011 1 commit
    • Paul Wilkins's avatar
      Removal of Qindex LUTS. · d39b5d05
      Paul Wilkins authored
      One of the problems arising when tweaking or adjusting the quantizer
      tables is that there are a lot of look up tables that depend on the QINDEX.
      Any adjustment to the link between QINDEX and real quantizer therefore tends
      to break aspects of for example the rate control.
      
      In this check in I have replaced several of the look up tables with functions that
      approximate the same results as the old Q luts but use a formulaic approach
      based on real Q values rather than QIndex. This should hopefully make it easier
      to experiment with changes to the Q tables without always having to go through
      and hand optimize a set of look up tables. Once things stabilize we may choose
      to re-instate luts for the sake of performance.
      
      Patch 2:
          Addressed Ronald's comments.
          vp8_init_me_luts() Added so luts only initialized once.
      
      Change-Id: Ic80db2212d2fd01e08e8cb5c7dca1fda1102be57
      d39b5d05
  10. 24 Aug, 2011 1 commit
  11. 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
  12. 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
  13. 26 Jul, 2011 1 commit
  14. 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
  15. 08 Jul, 2011 1 commit
  16. 29 Jun, 2011 1 commit
    • Paul Wilkins's avatar
      Change to arf boost calculation. · 11694aab
      Paul Wilkins authored
      In this commit I have added an experimental function
      that tests prediction quality either side of a central position
      to calculate a suggested boost number for an ARF frame.
      
      The function is passed an offset from the current position and
      a number of frames to search forwards and backwards.
      It returns a forward, backward and compound boost number.
      
      The new code can be deactivated using #define NEW_BOOST 0
      
      In its current default state the code searches forwards and backwards
      from the proposed  position of the next alt ref.
      
      The the old code used a boost number calculated by scanning forward
      from the previous GF up to the proposed alt ref frame position.
      
      I have also added some code to try and prevent placement of a gf/arf
      where there is a brief flash.
      
      Change-Id: I98af789a5181148659f10dd5dd2ff2d4250cd51c
      11694aab
  17. 23 Jun, 2011 2 commits
    • Yunqing Wang's avatar
      Copy macroblock data to a buffer before encoding it · 0d87098e
      Yunqing Wang authored
      I got this idea from Pascal (Thanks). Before encoding a macroblock,
      copy it to a 16x16 buffer, and then read source data from there
      instead. This will help keep the source data in cache, and help
      with the performance.
      
      Change-Id: Id05f4cb601299150511d59dcba0ae62c49b5b757
      0d87098e
    • 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
  18. 16 Jun, 2011 1 commit
    • Ronald S. Bultje's avatar
      Assign boost to GF bit allocation if past frame had no ARF. · 87fd66bb
      Ronald S. Bultje authored
      Modify the second-pass code to provide a full golden-frame (GF) bit
      allocation boost if the past GF group (GFG) had no alt-ref frame (ARF),
      even if the current GFG does contain and ARF.
      
      This mostly has no effect on clips, since switching ARFs on/off between
      GFGs is not very common. Has a positive effect on e.g. cheer (+0.45 SSIM
      at 600kbps) and football (+0.25 SSIM at 600kbps), particularly at high
      bitrates. Has a negative effect (-0.04 SSIM at 300kbps) at pamphlet,
      which appears only marginally related to this patch, and crew (-0.1 SSIM
      at 700kbps).
      
      Change-Id: I2e32899638b59f857e26efeac18a82e0c0b77089
      87fd66bb
  19. 15 Jun, 2011 1 commit
    • Ronald S. Bultje's avatar
      Disable specialcase for last frames if the sequence contains ARFs. · 299193dd
      Ronald S. Bultje authored
      firstpass.c contains some rate adjustment code that assures that the
      last few frames in a sequence abide by rate limits. If the second-to-
      last group of frames contains an alt-ref frame (ARF), the last golden
      frame (GF) is zero bytes, and we will thus spend a ridiculously high
      number of bits on regular P-frames trying to hit the target rate. This
      does slightly enhance the quality of these last few frames, but has
      no perceptual value (other than hitting the target rate).
      
      Disabling this code means we consistently (slightly) undershoot the
      target rate and consequently do worse on the last few frames of a
      clip, which is particularly noticeable for small clips. The quality-
      per-bitrate is generally better, ~0.2% better overall on derf-set,
      especially on clips such as garden, tennis, foreman at low bitrates.
      Has a negative effect on hallmonitor at high bitrates.
      
      Change-Id: I1d63452fef5fee4a0ad2fb2e9af4c9f2e0d86d23
      299193dd
  20. 14 Jun, 2011 1 commit
    • Tero Rintaluoma's avatar
      Fix RT only build · 99090474
      Tero Rintaluoma authored
      Moved encode_intra function from firstpass.c to encodeintra.c to
      prevent linking problem in real-time only build. Also changed name
      of the function to vp8_encode_intra because it is not a static.
      
      Change-Id: Ibf3c6c1de3152567347e5fbef47d1d39564620a5
      99090474
  21. 08 Jun, 2011 1 commit
    • Paul Wilkins's avatar
      Further activity masking changes: · 4e81a68a
      Paul Wilkins authored
      Some further re-structuring of activity masking code.
      Still has various experimental switches.
      Supports a metric based on intra encode.
      Experimental comparison against a fixed activity target  rather
      than a frame average, for altering rd and zbin.
      
      Overall the SSIM performance is similar  to TT's original
      code but there is a much smaller PSNR hit of circa
      0.5% instead of 3.2%
      
      Change-Id: I0fd53b2dfb60620b3f74d7415e0b81c1ac58c39a
      4e81a68a
  22. 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
  23. 02 Jun, 2011 2 commits
    • Scott LaVarnway's avatar
      Removed B_MODE_INFO · 773768ae
      Scott LaVarnway authored
      Declared the bmi in BLOCKD as a union instead of B_MODE_INFO.
      Then removed B_MODE_INFO completely.
      
      Change-Id: Ieb7469899e265892c66f7aeac87b7f2bf38e7a67
      773768ae
    • Ronald S. Bultje's avatar
      Don't allow very short GF groups even when the GF is predicted from an ARF. · 9f002bee
      Ronald S. Bultje authored
      This is basically a slightly modified version of the previous patch,
      and it has a moderately positive effect (SSIM/PSNR both +0.08% avg
      on derf-set). Most clips show no change, except waterfall/coastguard,
      each ~ +0.8% SSIM/PSNR. You can see similar effects in other clips
      by shortening their length to terminate at a very short last group
      of frames.
      
      Change-Id: I7a70de99ca1f9fe6a8b6ca7a6e30e8a4b64383e4
      9f002bee
  24. 01 Jun, 2011 1 commit
    • Yaowu Xu's avatar
      further clean up of errorperbit and sadperbit · 5b2fb329
      Yaowu Xu authored
      this commit makes the usage errorperbit and sadperbit consistent for
      encoding modes and passes. Removed all different magic weight factors
      associated with errorperbit. Now 1/2 is used for both sadperbit16 and
      sadperbit4, the /2 operation is merged into initializations of the 2
      variables.
      
      Tests on cif set show .23%, 0.18% and 0.19% gain by avg psnr, overall
      psnr and ssim respectively.
      
      Change-Id: Ifa285c3e065ce0a5a77addfc9f95aabf54ee270d
      5b2fb329
  25. 20 May, 2011 1 commit
  26. 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
  27. 12 May, 2011 1 commit
    • Scott LaVarnway's avatar
      Using int_mv instead of MV · 6b25501b
      Scott LaVarnway authored
      The compiler produces better assembly when using int_mv
      for assignments.  The compiler shifts and ors the two 16bit
      values when assigning MV.
      
      Change-Id: I52ce4bc2bfbfaf3f1151204b2f21e1e0654f960f
      6b25501b
  28. 13 Apr, 2011 1 commit
    • John Koleszar's avatar
      Refactor lookahead ring buffer · 88841f10
      John Koleszar authored
      This patch cleans up the source buffer storage and copy mechanism to
      allow access through a standard push/pop/peek interface. This approach
      also avoids an extra copy in the case where the source is not a
      multiple of 16, fixing issue #102.
      
      Change-Id: I05808c39f5743625cb4c7af54cc841b9b10fdbd9
      88841f10
  29. 04 Apr, 2011 1 commit
  30. 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
  31. 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
  32. 10 Mar, 2011 3 commits
    • Adrian Grange's avatar
      Added missing format specifier in print statement · 6daacdb7
      Adrian Grange authored
      Printout of firstpass stats for frame had one fewer
      format specifiers than arguments.
      
      Change-Id: I5a42c85aa79c471e1a70afd75e24a91546b7a1cd
      6daacdb7
    • Adrian Grange's avatar
      Removed firstpass motion map · ed40ff9e
      Adrian Grange authored
      The firstpass motion map consists of an 8-bit flag for
      each MB indicating how strongly the firstpass code
      believes it should be filtered during the second pass
      ARNR filtering.
      
      For long or large format material the motion map can
      become extremely large and hamper the operation of
      the encoding process.
      
      This change removes the motion map altogether, leaving
      the second pass to rely on the magnitude of the motion
      compensated error to determine the filter weight to
      use for the MB during ARNR filtering.
      
      Tests on the derf set indicate that the effect of this
      change is neutral, with some small wins and losses. The
      motion map has therefore been removed based on
      a cost/benefit evaluation.
      
      Change-Id: I53e07d236f5ce09a6f0c54e7c4ffbb490fb870f6
      ed40ff9e
    • James Berry's avatar
      Fix incorrect macroblock counts in twopass rate control · f3e9e2a0
      James Berry authored
      The previous calculation of macroblock count (w*h)/256
      is not correct when the width/height are not multiples of
      16. Use the precalculated macroblock count from
      cpi->common instead. This manifested itself as a divide
      by zero when the number of pixels was less than 256.
      num_mbs updated in estimate_max_q, estimate_q,
       estimate_kf_group_q, and estimate_cq
      
      Change-Id: I92ff98587864c801b1ee5485cfead964673a9973
      f3e9e2a0
  33. 08 Mar, 2011 1 commit
    • Ralph Giles's avatar
      Fix a multi-line format-string warning. · e6948bf0
      Ralph Giles authored
      GCC 4.5 and 4.6 both issue a warning about the multi-line format
      string introduced in bc9c30a0, which also changed the whitespace
      in the associated stt file by line-wrapping the long format string.
      
      Instead, use multiple string constants, which the compiler will
      concatenate. This maintains the original formatting, but remains
      legible within the standard line length.
      
      Change-Id: I27c9f92d46be82d408105a3a4091f145f677e00e
      e6948bf0