1. 09 Sep, 2010 1 commit
  2. 08 Sep, 2010 2 commits
    • Jim Bankoski's avatar
      Skip unnecessary search of identical frames · 69ae8f47
      Jim Bankoski authored
      vp8_get_compressed_data() was defeating logic in
      encode_frame_to_datarate() that determined the reference buffers to
      search and forcing all frames to be eligible to search. In cases
      where buffers have identical contents, this is unnecessary extra
      work.
      
      Change-Id: I9e667ac39128ae32dc455a3db4c62e3efce6f114
      69ae8f47
    • Jim Bankoski's avatar
      Enable ARFs for non-lagged compress · 63ccfbd5
      Jim Bankoski authored
      ARFs were explicitly disabled except in lagged compress mode. New
      ARF logic allows for the ARF buffer to hold an older golden frame,
      which does not require lagged compress.
      
      Change-Id: I1dff82b6f53e8311f1e0514b1794ae05919d5f79
      63ccfbd5
  3. 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
  4. 02 Sep, 2010 2 commits
  5. 31 Aug, 2010 2 commits
    • 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
    • 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
  6. 20 Aug, 2010 1 commit
    • John Koleszar's avatar
      increase rate control buffer level precision · 8e7ebacb
      John Koleszar authored
      The external API exposes the RC initial/optimal/full buffer level in
      milliseconds, but this value was truncated internally to seconds. This
      patch allows the use of the full precision during the conversion from
      time to bits.
      
      Change-Id: If8dd2a87614c05747f81432cbe75dd9e6ed2f04e
      8e7ebacb
  7. 13 Aug, 2010 1 commit
    • John Koleszar's avatar
      move segmentation_common to encoder · 80d3923a
      John Koleszar authored
      vp8_update_gf_useage_maps() is only used by the encoder. This patch
      fixes the ability to build in decode-only or encode-only
      configurations.
      
      Change-Id: I3a5211428e539886ba998e09e8abd747ac55c9aa
      80d3923a
  8. 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
  9. 11 Aug, 2010 6 commits
    • John Koleszar's avatar
      cosmetics: add missing 2D array braces · d22e2968
      John Koleszar authored
      Silences compile warning.
      
      Change-Id: I4b207d97f8570fe29aa2710e4ce4f02e7e43b57a
      d22e2968
    • 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
    • Scott LaVarnway's avatar
      Moved gf_active code to encoder only · 99f46d62
      Scott LaVarnway authored
      The gf_active code is only used by the encoder, so it was moved from
      common and decoder.
      
      Change-Id: Iada15acd5b2b33ff70c34668ca87d4cfd0d05025
      99f46d62
    • Yaowu Xu's avatar
      Removed duplicate functions · c404fa42
      Yaowu Xu authored
      Change-Id: Ie587972ccefd3c762b8cdf8ef39345cd22924b9b
      c404fa42
    • Yaowu Xu's avatar
      Normalize quantizer's zero bin and rounding factors · 3b95a46c
      Yaowu Xu authored
      This patch changes a few numbers in the two constant arrays
      for quantizer's zerobin and rounding factors, in general to
      make the sum of the two factors for any Q to be 128.  While
      it might be beneficial to calibrate the two arrays for best
      quantizer performance, it is not the purpose of this patch.
      Normalizing the two arrays will enable quick optimization
      of the current faster quantizer, i.e .zerobin check can be
      removed.
      
      Change-Id: If9abfd7929bf4b8e9ecd64a79d817c6728c820bd
      3b95a46c
    • 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
  10. 02 Aug, 2010 2 commits
    • Jan Kratochvil's avatar
      nasm: end labels with colon (':') · 0327d3df
      Jan Kratochvil authored
      Labels should end by colon (':'), nasm requires it.
      
      Provide nasm compatibility.  No binary change by this patch with yasm
      on {x86_64,i686}-fedora13-linux-gnu.  Few longer opcodes with nasm on
      {x86_64,i686}-fedora13-linux-gnu have been checked as safe.
      
      Change-Id: I0b2ec6f01afb061d92841887affb5ca0084f936f
      0327d3df
    • Jan Kratochvil's avatar
      nasm: use OWORD vs DQWORD · c8134bc5
      Jan Kratochvil authored
      nasm knows only OWORD.  yasm knows both OWORD and DQWORD.
      
      Provide nasm compatibility.  No binary change by this patch with yasm on
      {x86_64,i686}-fedora13-linux-gnu.  Few longer opcodes with nasm on
      {x86_64,i686}-fedora13-linux-gnu have been checked as safe.
      
      Change-Id: I62151390089e90df9a7667822fa594ac20b00e78
      c8134bc5
  11. 28 Jul, 2010 1 commit
    • Yaowu Xu's avatar
      Enable the switch between two versions of quantizer · f95c80b6
      Yaowu Xu authored
      To facilitate more testing related to quantizer and rate
      control, the old version quantizer is added back. old and
      new quantizer can be switched back and forth by define or
      un-define the macro "EXACT_QUANT".
      
      Change-Id: Ia77e687622421550f10e9d65a9884128a79a65ff
      f95c80b6
  12. 27 Jul, 2010 2 commits
    • Johann's avatar
      x86/sse2: disable asm quantizer · a570bbd4
      Johann authored
      follow up to Change I0e51492d: neon: disable asm quantizer
      
      Now x86 doesn't segfault with --disable-runtime-cpu-detect and -p=2
      
      Change-Id: I8ca127bb299198efebbcbd5a661e81788361933f
      a570bbd4
    • John Koleszar's avatar
      neon: disable asm quantizer · d8009c07
      John Koleszar authored
      The assembly version of the quantizer has not been updated to match
      the new exact quantizer introduced in commit e04e2935. That commit tried
      to disable this code but missed the non-RTCD case.
      
      Thanks to David Baker <david.baker at openmarket.com> for isolating the
      issue and testing this fix.
      
      Change-Id: I0e51492dc6f8e44d2c10b587427448bf94135c65
      d8009c07
  13. 23 Jul, 2010 4 commits
    • 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
    • Paul Wilkins's avatar
      Rate control bug with long key frame interval. · 9404c7db
      Paul Wilkins authored
      In two pass encodes, the calculation of the number of bits
      allocated to a KF group had the potential to overflow for high data
      rates if the interval is very long.
      
      We observed the problem in one test clip where there was one
      section where there was an 8000 frame gap between key frames.
      
      Change-Id: Ic48eb86271775d7573b4afd166b567b64f25b787
      9404c7db
    • Timothy B. Terriberry's avatar
      Make the quantizer exact. · e04e2935
      Timothy B. Terriberry authored
      This replaces the approximate division-by-multiplication in the
       quantizer with an exact one that costs just one add and one
       shift extra.
      The asm versions have not been updated in this patch, and thus
       have been disabled, since the new method requires different
       multipliers which are not compatible with the old method.
      
      Change-Id: I53ac887af0f969d906e464c88b1f4be69c6b1206
      e04e2935
    • Paul Wilkins's avatar
      80 character line length on Arnr LUT · d576690b
      Paul Wilkins authored
      Tweaked table to fit to 80 characters.
      
      Change-Id: Ie6ba80e0b31b33e23d2bf78599abe223369fcefb
      d576690b
  14. 19 Jul, 2010 2 commits
    • Paul Wilkins's avatar
      ARNR Lookup Table. · 0ba32632
      Paul Wilkins authored
      Change submitted for Adrian Grange. Convert threshold
      calculation in ARNR filter to a lookup table.
      
      Change-Id: I12a4bbb96b9ce6231ce2a6ecc2d295610d49e7ec
      0ba32632
    • 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
  15. 16 Jul, 2010 1 commit
  16. 07 Jul, 2010 1 commit
    • Yaowu Xu's avatar
      Fix a compiling error on armv6 · 3d0a1eda
      Yaowu Xu authored
      The issue was caused by a bad merge in Change I5559d1e8
      
      Change-Id: I6563f652bc1500202de361f8f51d11cc6ddf3331
      3d0a1eda
  17. 01 Jul, 2010 1 commit
    • Adrian Grange's avatar
      Fix bug in 1st pass motion compensation · 0618ff14
      Adrian Grange authored
      In the case where the best reference mv is not (0,0) a secondary
      search is carried out centered on (0,0). However, rather than
      sending tmp_err into the search function, motion_error was
      inadvertently passed.
      
      As a result tmp_err remains set at INT_MAX and the (0,0)-based
      search result will never be selected, even if it is better.
      
      Change-Id: I3c82b246c8c82ba887b9d3fb4c9e0a0f2fe5a76c
      0618ff14
  18. 29 Jun, 2010 2 commits
    • 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
    • Yaowu Xu's avatar
      Improve the accuracy of forward walsh-hadamard transform · b62d093e
      Yaowu Xu authored
      Besides the slight improvement in round trip error. This
      also fixes a sign bias in the forward transform, so the
      round trip errors are evenly distributed between +1s and
      -1s. The old bias seemed to work well with the dc sign bias
      in old fdct,  which no longer exist in the improved fdct.
      
      Change-Id: I8635e7be16c69e69a8669eca5438550d23089cef
      b62d093e
  19. 28 Jun, 2010 1 commit
    • Adrian Grange's avatar
      Fixed buffer selection for UV in AltRef filtering · aa8fe0d2
      Adrian Grange authored
      Corrected setting of "which_buffer" for U & V cases to match that
      used for Y, i.e. to refer to the temporally most recent frame of
      those to be filtered.
      
      Change-Id: Idf94b287ef47a05f060da3e61134a0b616adcb6b
      aa8fe0d2
  20. 24 Jun, 2010 4 commits
    • Scott LaVarnway's avatar
      Added first-pass sse2 version of Yaowu's new fdct. · f1a3b1e0
      Scott LaVarnway authored
      Change-Id: Ib479210067510162879c368428b92690591120b2
      f1a3b1e0
    • 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
    • Fritz Koenig's avatar
      vp8cx : bestsad declared and initialized incorrectly. · a5906668
      Fritz Koenig authored
      bestsad needs to be a int and set to INT_MAX because at the end
      of the function it is compared to INT_MAX to determine if there
      was a match in the function.
      
      Change-Id: Ie80e88e4c4bb4a1ff9446079b794d14d5a219788
      a5906668
    • Fritz Koenig's avatar
      vp8cx : bestsad declared and initialized incorrectly. · cecdd73d
      Fritz Koenig authored
      bestsad should be an int initialized to INT_MAX.  The optimized
      SAD function expects a signed value for bestsad to use for comparison
      and early loop termination.  When no match is made, which is
      determined by a comparison of bestsad to INT_MAX, INT_MAX is returned.
      cecdd73d
  21. 21 Jun, 2010 2 commits
    • agrange's avatar
      Fix breakout thresh computation for golden & AltRef frames · a08df455
      agrange authored
      1. Unavailability of each reference frame type should be tested
      independently,
      2. Also, only the VP8_GOLD_FLAG needs to be tested before setting
      golden frame specific thresholds, and only VP8_ALT_FLAG needs
      testing before setting thresholds relevant to the AltRef frame.
      (Raised by gbvalor, in response to Issue 47)
      
      Change-Id: I6a06fc2a6592841d85422bc1661e33349bb6c3b8
      a08df455
    • agrange's avatar
      Changed unary operator from ! to ~ · daa5d0eb
      agrange authored
      Since the intent is
      to reset the appropriate bit in ref_frame_flags not to
      test a logic condition. Prior result would always have
      been ref_frame_flags being set to 0.
      (Issue reported by dgohman, issue 47)
      
      Change-Id: I2c12502ed74c73cf38e98c9680e0249c29e16433
      daa5d0eb