1. 27 Jan, 2011 1 commit
    • Johann's avatar
      warning: pointer targets differ in signedness · 73207a1d
      Johann authored
      vp8/encoder/rdopt.c:728: warning: pointer targets in passing argument 3
      of 'macro_block_yrd' differ in signedness
      vp8/encoder/rdopt.c:541: note: expected 'int *' but argument is of type
      'unsigned int *'
      
      distortion is signed when calling macro_block_yrd is both other cases,
      as well as for RDCOST
      
      Change-Id: I5e22358b7da76a116f498793253aac8099cb3461
      73207a1d
  2. 26 Jan, 2011 3 commits
    • Yunqing Wang's avatar
      Remove copies of same functions · cac54404
      Yunqing Wang authored
      Reduce the code size.
      
      Change-Id: I2e1998557a3c8776e262c442fd758c25e17aff7a
      cac54404
    • Paul Wilkins's avatar
      Rationalize vp8_rd_pick_intra16x16mby_mode() · 35bb74a6
      Paul Wilkins authored
      Use the function macro_block_yrd() to calculate error and distortion
      in keeping with what is done for inter frames.
      
      The old code was using a variance metric for once case and an
      SSE function for measuring distortion in the other case.
      
      The function vp8_encode_intra16x16mbyrd() is no longer used.
      
      Change-Id: Ic228cb00a78ff637f4365b43f58fbe5a9273d36f
      35bb74a6
    • Yaowu Xu's avatar
      cap the best quantizer for 2nd order DC · 999e155f
      Yaowu Xu authored
      This commit also removes artificial RDMULT cap for low quantizers.
      The intention is to address some abnormal behavior of mode selections
      at the low quantizer end, where many macroblocks were coded with
      SPLITMV with all partitions using same motion vector including (0,0).
      This change improves the compression quality substantially for high
      quality encodings in both PSNR and SSIM terms. Overall effect on
      mid/low rate range is also positive for all metrics, but smaller
      in magnitude.
      
      Change-Id: I864b29c4bd9ff610d2545fa94a19cc7e80c02667
      999e155f
  3. 25 Jan, 2011 1 commit
    • Yunqing Wang's avatar
      Refine motion vector prediction for NEWMV mode · dcaaadd8
      Yunqing Wang authored
      Adjust checking points in motion vector prediction to better cover
      possible movements, and get a better prediction. Tests on test
      clips showed a 0.1% improvement in SSIM, and no change in PSNR
      and performance.
      
      Change-Id: Ifdab05d35e10faea1445c61bb73debf888c9d2f8
      dcaaadd8
  4. 24 Jan, 2011 1 commit
    • Scott LaVarnway's avatar
      Added vp8_update_zbin_extra · 0ee525d6
      Scott LaVarnway authored
      vp8cx_mb_init_quantizer was being called for every mode checked
      in vp8_rd_pick_inter_mode.  zbin_extra is the only value that
      really needs to be recalculated.  This calculation is disabled
      when using the fast quantizer for mode selection.
      This gave a small performance boost (~.5% to 1%).
      Note: This needs to be verified with segmentation_enabled.
      
      Change-Id: I62716a870b3c82b4a998bdf95130ff0b02106f1e
      0ee525d6
  5. 14 Jan, 2011 2 commits
    • Paul Wilkins's avatar
      Testing of modes with Alt Ref frame · 415371c9
      Paul Wilkins authored
      Previously when a frame was being overlaid on a previously coded
      alt ref frame we only checked the alt ref 0,0 mode. Where there is
      a possibility that the alt ref buffer is a filtered frame we should allow
      the other prediction modes as normal or at the least allow use of
      the last frame buffer.
      
      Change-Id: I4d6227223d125c96b4f3066ec6ec9484fee7768c
      415371c9
    • Paul Wilkins's avatar
      Experimental change to help with ARNR problem. · 72e22b0b
      Paul Wilkins authored
      Allow use of other reference frames for the ARF overlay frame
      when ARNR filtering is enabled
      
      Change-Id: Icd6a9fb38977a88fbe7cc9b9c18198eb454c0273
      72e22b0b
  6. 11 Jan, 2011 2 commits
  7. 10 Jan, 2011 1 commit
    • Yunqing Wang's avatar
      Fix bug in motion search · 3675b229
      Yunqing Wang authored
      The maximum possible MV in 1/8 pel units is (1<<11), which could
      cause mvcost out of its range that is 1023. Change maximum
      possible MV in 1/8 pel units to (1<<11)-8 will fix this problem.
      
      Change-Id: I5788ed1de773f66658c14f225fb4ab5b1679b74b
      3675b229
  8. 07 Jan, 2011 1 commit
    • Scott LaVarnway's avatar
      Removed cpi->target_bits_per_mb · 6dbdfe34
      Scott LaVarnway authored
      cpi->target_bits_per_mb is currently not being used,
      so delete it.  Also removed other unused code in rdopt.c.
      
      Change-Id: I98449f9030bcd2f15451d9b7a3b9b93dd1409923
      6dbdfe34
  9. 28 Dec, 2010 2 commits
    • Yunqing Wang's avatar
      Adjust MV borders for SPLITMV mode · bf53ec49
      Yunqing Wang authored
      Add limits to avoid MV going out of range.
      
      Change-Id: I8a5deb40bf393488d29f694b5a56804d578e68b5
      bf53ec49
    • Yunqing Wang's avatar
      Modify motion estimation for SPLITMV mode · a5a8d929
      Yunqing Wang authored
      1. Search for block8x16/block16x8 uses block8x8's search results.
      2. Check block4x4 only if block8x8 is chosen. (This hurts quality,
         which will be improved in another check-in.)
      3. In block4x4 search, the previous block's result is used as
         MV predictor for next block.
      
      This change improves performance.
      
      Change-Id: I9dc089007ca08129fb6c11fe7692777ebb8647b0
      a5a8d929
  10. 24 Dec, 2010 1 commit
    • Yaowu Xu's avatar
      adjusted sad_per_bit to correlate with quantizer · 0f5264b5
      Yaowu Xu authored
      Re-calibrated sad_per_bit16 and sad_per_bit4 tables to linearly
      correlated to quantizer values, these two variables are used in
      motion search for costing motion vectors. This change has an small
      positive effect on compression.
      
      Change-Id: Ic9b5ea6fb8d5078ef663ba4899db019cc51f4166
      0f5264b5
  11. 16 Dec, 2010 2 commits
    • Scott LaVarnway's avatar
      Changed segmentation check order · 64baa8df
      Scott LaVarnway authored
      In SPLITMV, the 8x8 segment will be checked first.  If the 8x8 rd
      is better than the best, we check the other segments.  Otherwise
      bail.  Adjustments to the thresh_mult were necessary to make
      up for the initial quality loss.
      The performance improved by 20% (average) for good quality,
      speed 0 and speed 1, while the overall quality remained the same.
      
      Change-Id: I717aef401323c8a254fba3e9777d2a316c774cc3
      64baa8df
    • Scott LaVarnway's avatar
      Adjusted breakout RD for SPLITMV · 81cdeb71
      Scott LaVarnway authored
      vp8_rd_pick_best_mbsegmentation looks at y only.  The new
      breakout does not include the frame cost, the prob_skip_false
      cost, or the uv rate.  Performance improved by a few percent
      and the quality remained the same.
      
      Change-Id: I94ff013998ac51e8ecce7130870f7b6600758e15
      81cdeb71
  12. 14 Dec, 2010 2 commits
    • Yunqing Wang's avatar
      Fix a bug in motion search code(2) · 08706a3e
      Yunqing Wang authored
      This fix added MV range checks for NEWMV mode as suggested by Jim.
      To reduce unnecessary MV range checks, I tried Yaowu's suggestion.
      Update UMV borders in NEWMV mode to also cover MV range check.
      Also, in this way, every MV that is valid gets checked in diamond
      search function.
      
      Change-Id: I95a89ce0daf6f178c454448f13d4249f19b30f3a
      08706a3e
    • Yunqing Wang's avatar
      Fix a bug in motion search code · 7fb0f868
      Yunqing Wang authored
      The MV's range is 256. Since the new motion search uses a different
      starting MV than the center ref MV, a MV range checking needs to
      be done to avoid corruption.
      
      Change-Id: I8ae0721d1bd203639e13891e2e54a2e87276f306
      7fb0f868
  13. 09 Dec, 2010 1 commit
    • John Koleszar's avatar
      fix uninitialized read in encode breakout · cb969895
      John Koleszar authored
      Change I3430820b performed an uninitialized read when
      encode_breakout == 0, since the sum and sse wouldn't be set:
      
         if(x->encode_breakout)
             VARIANCE_INVOKE(..., get16x16var)(..., &sum, &sse);
         if (cpi->active_map_enabled && x->active_ptr[0] == 0) {
             ...
         } else if (sse < x->encode_breakout)
      
      Change-Id: I915eb76d1227b4b6d1137a0dedf2c143860098a2
      cb969895
  14. 07 Dec, 2010 1 commit
    • Jim Bankoski's avatar
      vp8e - static threshold play · 718c1971
      Jim Bankoski authored
      Realized no need for new assembly code sum is already
      calculated.
      
      Change-Id: Ie2d94feb4b7c1f77c5359bca29b66228e41638c9
      718c1971
  15. 06 Dec, 2010 1 commit
    • Scott LaVarnway's avatar
      vp8_rd_pick_best_mbsegmentation code restructure · 2fa5d5a2
      Scott LaVarnway authored
      Moved the code from the segmentation loop into a function
      which is now called for each segment. This will allow us
      to change the segment order checking more easily.
      
      Change-Id: I9510d26f0acae5a73043fcca8f1984b121d3e052
      2fa5d5a2
  16. 03 Dec, 2010 1 commit
    • Yunqing Wang's avatar
      Improve MV prediction accuracy to achieve performance gain · c3bbb291
      Yunqing Wang authored
      Add vp8_mv_pred() to better predict starting MV for NEWMV
      mode in vp8_rd_pick_inter_mode(). Set different search
      ranges according to MV prediction accuracy, which improves
      encoder performance without hurting the quality. Also,
      as Yaowu suggested, using diamond search result as full
      search starting point and therefore adjusting(reducing)
      full search range helps the performance.
      
      Change-Id: Ie4a3c8df87e697c1f4f6e2ddb693766bba1b77b6
      c3bbb291
  17. 27 Nov, 2010 1 commit
  18. 17 Nov, 2010 1 commit
  19. 10 Nov, 2010 1 commit
    • Paul Wilkins's avatar
      Tuning for the more exact quantizer. · 6adbe090
      Paul Wilkins authored
      Small changes to the default zero bin and rounding tables.
      Though the tables are currently the same for the Y1 and Y2 cases
      I have left them as separate tables in case we want to tune this later.
      
      There is now some adjustment of the zbin based on the prediction mode.
      Previously this was restricted to an adjustment for gf/arf 0,0 MV.
      
      The exact quantizer now marginal outperforms and is the default.
      
      The overall average gain is about 0.5%
      
      Change-Id: I5e4353f3d5326dde4e86823684b236a1e9ea7f47
      6adbe090
  20. 29 Oct, 2010 1 commit
    • Scott LaVarnway's avatar
      Finding first label · dcee88ea
      Scott LaVarnway authored
      Using tables for the label count and label offset.
      
      Change-Id: Iac3d5b292c37341a881be0af282f5cac3b3e01eb
      dcee88ea
  21. 27 Oct, 2010 1 commit
    • John Koleszar's avatar
      Add half-pixel variance RTCD functions · 209d82ad
      John Koleszar authored
      NEON has optimized 16x16 half-pixel variance functions, but they
      were not part of the RTCD framework. Add these functions to RTCD,
      so that other platforms can make use of this optimization in the
      future and special-case ARM code can be removed.
      
      A number of functions were taking two variance functions as
      parameters. These functions were changed to take a single
      parameter, a pointer to a struct containing all the variance
      functions for that block size. This provides additional flexibility
      for calling additional variance functions (the half-pixel special
      case, for example) and by initializing the table for all block sizes,
      we don't have to construct this function pointer table for each
      macroblock.
      
      Change-Id: I78289ff36b2715f9a7aa04d5f6fbe3d23acdc29c
      209d82ad
  22. 09 Sep, 2010 1 commit
  23. 03 Sep, 2010 1 commit
    • Scott LaVarnway's avatar
      Reduced the size of MB_MODE_INFO · 0de458f6
      Scott LaVarnway authored
      Moved partition_bmi and partition_count out of MB_MODE_INFO and
      placed into MACROBLOCK.  Also reduced the size of other members
      of the MB_MODE_INFO struct.  For 1080p, the memory was reduced
      by 1,209,516 bytes.  The decoder performance appeared to improve
      by 3% for the clip used.
      Note:  The main goal for this change is to improve the decoder
      performance.  The encoder will be revisited at a later date for
      further structure cleanup.
      
      Change-Id: I4733621292ee9cc3fffa4046cb3fd4d99bd14613
      0de458f6
  24. 31 Aug, 2010 1 commit
    • Scott LaVarnway's avatar
      Changed above and left context data layout · e85e6315
      Scott LaVarnway authored
      The main reason for the change was to reduce cycles in the token
      decoder. (~1.5% gain for 32 bit)  This layout should be more
      cache friendly.
      
      As a result of this change, the encoder had to be updated.
      
      Change-Id: Id5e804169d8889da0378b3a519ac04dabd28c837
      Note: dixie uses a similar layout
      e85e6315
  25. 12 Aug, 2010 1 commit
    • Scott LaVarnway's avatar
      Removed unnecessary MB_MODE_INFO copies · 9c7a0090
      Scott LaVarnway authored
      These copies occurred for each macroblock in the encoder and decoder.
      Thetemp MB_MODE_INFO mbmi was removed from MACROBLOCKD.  As a result,
      a large number compile errors had to be fixed.
      
      Change-Id: I4cf0ffae3ce244f6db04a4c217d52dd256382cf3
      9c7a0090
  26. 11 Aug, 2010 2 commits
    • John Koleszar's avatar
      avoid negative array subscript warnings · 392a9582
      John Koleszar authored
      The mv_ref and sub_mv_ref token encodings are indexed from NEARESTMV
      and LEFT4X4, respectively, rather than being zero-based like the
      other token encodings.
      
      Change-Id: I3699c3f84111209ecfb91097c4b900773e9a3ad5
      392a9582
    • Timothy B. Terriberry's avatar
      Add trellis quantization. · 8fa38096
      Timothy B. Terriberry authored
      Replace the exponential search for optimal rounding during
       quantization with a linear Viterbi trellis and enable it
       by default when using --best.
      Right now this operates on top of the output of the adaptive
       zero-bin quantizer in vp8_regular_quantize_b() and gives a small
       gain.
      It can be tested as a replacement for that quantizer by
       enabling the call to vp8_strict_quantize_b(), which uses
       normal rounding and no zero bin offset.
      Ultimately, the quantizer will have to become a function of lambda
       in order to take advantage of activity masking, since there is
       limited ability to change the quantization factor itself.
      However, currently vp8_strict_quantize_b() plus the trellis
       quantizer (which is lambda-dependent) loses to
       vp8_regular_quantize_b() alone (which is not) on my test clip.
      
      Patch Set 3:
      
      Fix an issue related to the cost evaluation of successor
      states when a coefficient is reduced to zero. With this
      issue fixed, now the trellis search almost exactly matches
      the exponential search.
      
      Patch Set 2:
      
      Overall, the goal of this patch set is to make "trellis"
      search to produce encodings that match the exponential
      search version. There are three main differences between
      Patch Set 2 and 1:
      a. Patch set 1 did not properly account for the scale of
      2nd order error, so patch set 2 disable it all together
      for 2nd blocks.
      b. Patch set 1 was not consistent on when to enable the
      the quantization optimization. Patch set 2 restore the
      condition to be consistent.
      c. Patch set 1 checks quantized level L-1, and L for any
      input coefficient was quantized to L. Patch set 2 limits
      the candidate coefficient to those that were rounded up
      to L. It is worth noting here that a strategy to check
      L and L+1 for coefficients that were truncated down to L
      might work.
      
      (a and b get trellis quant to basically match the exponential
      search on all mid/low rate encodings on cif set, without
      a, b, trellis quant can hurt the psnr by 0.2 to .3db at
      200kbps for some cif clips)
      (c gets trellis quant  to match the exponential search
      to match at Q0 encoding, without c, trellis quant can be
      1.5 to 2db lower for encodings with fixed Q at 0 on most
      derf cif clips)
      
      Change-Id:	Ib1a043b665d75fbf00cb0257b7c18e90eebab95e
      8fa38096
  27. 23 Jul, 2010 1 commit
    • Fritz Koenig's avatar
      Swap alt/gold/new/last frame buffer ptrs instead of copying. · 0ce39012
      Fritz Koenig authored
      At the end of the decode, frame buffers were being copied.
      The frames are not updated after the copy, they are just
      for reference on later frames.  This change allows multiple
      references to the same frame buffer instead of copying it.
      
      Changes needed to be made to the encoder to handle this.  The
      encoder is still doing frame buffer copies in similar places
      where pointer reference could be done.
      
      Change-Id: I7c38be4d23979cc49b5f17241ca3a78703803e66
      0ce39012
  28. 29 Jun, 2010 1 commit
    • Paul Wilkins's avatar
      Further adjustment of RD behaviour with Q and Zbin. · 1ca39bf2
      Paul Wilkins authored
      Following conversations with Tim T (Derf) I ran a large number of
      tests comparing the existing polynomial expression with a simpler
      ^2 variant. Though the polynomial was sometimes a little better at
      the extremes of Q it was possible to get close for most clips and
      even a little better on some.
      
      This code also changes the way the RD multiplier is calculated
      when the ZBIN is extended to use a variant of the same ^2
      expression.
      
      I hope that this simpler expression will be easier to tune further
      as we expand our test set and consider adjustments based on content.
      
      Change-Id: I73b2564346e74d1332c33e2c1964ae093437456c
      1ca39bf2
  29. 24 Jun, 2010 1 commit
    • Yaowu Xu's avatar
      Redo the forward 4x4 dct · d0dd01b8
      Yaowu Xu authored
      The new fdct lowers the round trip sum squared error for a
      4x4 block ~0.12. or ~0.008/pixel. For reference, the old
      matrix multiply version has average round trip error 1.46
      for a 4x4 block.
      
      Thanks to "derf" for his suggestions and references.
      
      Change-Id: I5559d1e81d333b319404ab16b336b739f87afc79
      d0dd01b8
  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. 14 Jun, 2010 1 commit
  32. 11 Jun, 2010 1 commit