1. 08 Jul, 2015 2 commits
    • paulwilkins's avatar
      Changes to use of rectangular partitions. · 8dd466ed
      paulwilkins authored
      Changes to allow more use of rectangular partitions at
      speeds 1 and 2 for content classed by the first pass as
      animation and for blocks near the active image edge.
      
      This has quite a big impact in quality for the animated
      test sequence but also hurts encode speed for speed 2.
      
      For other content types the impact on both speed and
      quality is small.
      
      Added some plumbing for detection of internal vertical
      image edges.
      
      Change-Id: I3fc48de2349f8cb87946caaf0b06dbb0ea261a9a
      8dd466ed
    • paulwilkins's avatar
      Change speed and rd features for formatting bars. · a126b6ce
      paulwilkins authored
      Change speed features / behavior for split mode when there
      is an internal active edge (e.g. formatting bars).
      
      Remove some threshold constraints in rd code near the active
      edge of the image.
      
      Add some plumbing for left and right active edge detection.
      
      Patch set 5. Limit rd pass through for sub 8x8 to internal active edges.
      This takes away any speed penalty for most clips but keeps the enhanced
      edge coding for the more critical case of internal image edges
      
      Change-Id: If644e4762874de4fe9cbb0a66211953fa74c13a5
      a126b6ce
  2. 07 Jul, 2015 1 commit
  3. 06 Jul, 2015 2 commits
  4. 29 Jun, 2015 1 commit
  5. 22 Jun, 2015 1 commit
  6. 11 Jun, 2015 2 commits
  7. 04 Jun, 2015 1 commit
    • Scott LaVarnway's avatar
      Reducing size of MODE_INFO struct · baaaa575
      Scott LaVarnway authored
      Reduced size from 124 bytes to 104 bytes.  For decode only builds,
      it is reduced to 68 bytes.
      
      Change-Id: If9e6b92285459425fa086ab5a743d0a598a69de3
      baaaa575
  8. 22 May, 2015 1 commit
    • Scott LaVarnway's avatar
      Re-worked header files · b962646f
      Scott LaVarnway authored
      Various header/test files had to be re-worked in order to
      build "Remove cm parameter from vp9_decode_block_tokens()".
      
      This patch reverts the "Remove cm" part and only contains
      the re-worked header files.
      
      Change-Id: I520958a88d1991fee988a3c784d0eac40e117a32
      b962646f
  9. 13 May, 2015 1 commit
    • Johann's avatar
      Relocate memory operations for common code · 1d7ccd53
      Johann authored
      With the sad functions, and hopefully the variance functions soon,
      moving to the vpx_dsp location, place the defines used in the
      reference C code in a common location.
      
      Change-Id: I4c8ce7778eb38a0a3ee674d2f1c488eda01cfeca
      1d7ccd53
  10. 07 May, 2015 1 commit
    • James Zern's avatar
      replace DECLARE_ALIGNED_ARRAY w/DECLARE_ALIGNED · fd3658b0
      James Zern authored
      this macro was used inconsistently and only differs in behavior from
      DECLARE_ALIGNED when an alignment attribute is unavailable. this macro
      is used with calls to assembly, while generic c-code doesn't rely on it,
      so in a c-only build without an alignment attribute the code will
      function as expected.
      
      Change-Id: Ie9d06d4028c0de17c63b3a27e6c1b0491cc4ea79
      fd3658b0
  11. 29 Apr, 2015 3 commits
    • James Zern's avatar
      vpx_mem: remove vpx_memset · f58011ad
      James Zern authored
      vestigial. replace instances with memset() which they already were being
      defined to.
      
      Change-Id: Ie030cfaaa3e890dd92cf1a995fcb1927ba175201
      f58011ad
    • James Zern's avatar
      vpx_mem: remove vpx_memcpy · f274c219
      James Zern authored
      vestigial. replace instances with memcpy() which they already were being
      defined to.
      
      Change-Id: Icfd1b0bc5d95b70efab91b9ae777ace1e81d2d7c
      f274c219
    • James Zern's avatar
      vpx_mem: remove vpx_memmove · fbd3b894
      James Zern authored
      vestigial. replace instances with memmove() which they already were
      being defined to.
      
      Change-Id: If396d3f9e3cf79c0ee5d7429615ef3d6b2a34afa
      fbd3b894
  12. 21 Apr, 2015 1 commit
    • Scott LaVarnway's avatar
      Revert "Remove mi_grid_* structures." · 8b17f7f4
      Scott LaVarnway authored
      (see I3a05cf1610679fed26e0b2eadd315a9ae91afdd6)
      
      For the test clip used, the decoder performance improved by ~2%.
      This is also an intermediate step towards adding back the
      mode_info streams.
      
      Change-Id: Idddc4a3f46e4180fbebddc156c4bbf177d5c2e0d
      8b17f7f4
  13. 02 Apr, 2015 1 commit
    • Adrian Grange's avatar
      Fix use of scaling in joint motion search · 5ef2d1dd
      Adrian Grange authored
      To enable us to the scale-invariant motion estimation
      code during mode selection, each of the reference
      buffers is scaled to match the size of the frame
      being encoded.
      
      This fix ensures that a unit scaling factor is used in
      this case rather than the one calculated assuming that
      the reference frame is not scaled.
      
      (cherry picked from commit 8d8d7bfd)
      
      Change-Id: Id9a5c85dad402f3a7cc7ea9f30f204edad080ebf
      5ef2d1dd
  14. 01 Apr, 2015 1 commit
    • Jingning Han's avatar
      Refactor block_yrd function for RTC coding mode · 1470529f
      Jingning Han authored
      This commit separates Hadamard transform/quantization operations
      from rate and distortion computation in block_yrd. This allows one
      to skip SATD computation when all transform blocks are quantized
      to zero. It also uses a new block error function that skips
      repeated computation of sum of squared residuals. It reduces the
      CPU cycles spent on block error calculation in block_yrd by 40%.
      
      Change-Id: I726acb2454b44af1c3bd95385abecac209959b10
      1470529f
  15. 25 Mar, 2015 3 commits
    • Adrian Grange's avatar
      Remove 8-bit array in HBD · ad18b2b6
      Adrian Grange authored
      Creating both 8- and 16-bit arrays and then only using one
      of them is wasteful.
      
      Change-Id: Ic5b397c283efaff7bcfff2d2413838ba3e065561
      ad18b2b6
    • Adrian Grange's avatar
      Replace heap with stack memory allocation · 65df3d13
      Adrian Grange authored
      Replaced the dynamic memory allocation of the
      second_pred buffer with an allocation on the stack.
      
      Change-Id: I2716c46b71e8587714ca5733a99eca2c68419b23
      65df3d13
    • Adrian Grange's avatar
      Fix use of scaling in joint motion search · 8d8d7bfd
      Adrian Grange authored
      To enable us to the scale-invariant motion estimation
      code during mode selection, each of the reference
      buffers is scaled to match the size of the frame
      being encoded.
      
      This fix ensures that a unit scaling factor is used in
      this case rather than the one calculated assuming that
      the reference frame is not scaled.
      
      Change-Id: Id9a5c85dad402f3a7cc7ea9f30f204edad080ebf
      8d8d7bfd
  16. 20 Mar, 2015 2 commits
    • paulwilkins's avatar
      Revised rd adjustment for variance. · 7e234b92
      paulwilkins authored
      Revised adjustment for rd based on source complexity.
      Two cases:
      
      1) Bias against low variance intra predictors
      when the actual source variance is higher.
      
      2) When the source variance is very low to give a slight
      bias against predictors that might introduce false texture
      or features.
      
      The impact on metrics of this change across the test sets is
      small and mixed.
      
      derf -0.073%, -0.049%, -0.291%
      std hd -0.093%, -0.1%, -0.557%
      yt  +0.186%, +0.04%, - 0.074%
      ythd +0.625%, + 0.563%, +0.584%
      
      Medium to strong psycho-visual improvements in some
      problem clips.
      
      This feature and intra weight on GF group length now
      turned on by default.
      
      Change-Id: Idefc8b633a7b7bc56c42dbe19f6b2f872d73851e
      7e234b92
    • paulwilkins's avatar
      Experimental rd bias based on source vs recon variance. · 9a1ce7be
      paulwilkins authored
      This experiment biases the rd decision based on the impact
      a mode decision has on the relative spatial complexity of the
      reconstruction vs the source.
      
      The aim is to better retain a semblance of texture even if it
      is slightly misaligned / wrong, rather than use a simple rd
      measure that tends to favor use of a flat predictor if a perfect
      match can't be found.
      
      This improves the appearance of texture and visual quality
      on specific test clips but is hidden under a flag and currently
      off by default pending visual quality testing on a wider Yt set.
      
      Change-Id: Idf6e754a8949bf39ed9d314c6f2daaa20c888aad
      9a1ce7be
  17. 19 Mar, 2015 2 commits
    • Adrian Grange's avatar
      Restore first ref frame pointer to the correct value · 12d946df
      Adrian Grange authored
      The joint_motion_search function alternates prediction
      between two reference frames. In order to reuse existing
      code, a pointer to the appropriate reference frame is
      written into xd->plane[0].pre[0], that the motion
      estimation code assumes points to the reference frame.
      
      If this first reference frame was scaled then the
      pointer was incorrectly being reset to point to the
      unscaled reference frame rather than the scaled
      version.
      
      Change-Id: I76f73a8d8f4f15c1f3a5e7e08a35140cdb7886ab
      12d946df
    • Adrian Grange's avatar
      Move joint_motion_search & delete function prototype · 53c9ebe6
      Adrian Grange authored
      Change-Id: I7fb3a78ed0e0bc940d8b4a57c470302f8369782f
      53c9ebe6
  18. 05 Mar, 2015 1 commit
    • Alex Converse's avatar
      Don't inline cost_coeffs. · 2eb113d0
      Alex Converse authored
      It was tiny when it was orginally marked INLINE. Forcing this function
      to be inlined prevents the compiler from inlining its much smaller
      callers.
      
      No measurable speed impact, 28320 byte smaller libvpx.a
      
      Change-Id: I6bf4c917157d15cbadb3cd3e20a9e82d35dc7d6f
      2eb113d0
  19. 04 Mar, 2015 1 commit
    • Adrian Grange's avatar
      Make encoder buffer allocation dynamic · 3807dd82
      Adrian Grange authored
      Frame buffers are now allocated dynamically on-demand.
      
      Entries in the reference frame map, cm->ref_frame_map,
      may now be set to -1 (INVALID_IDX) to indicate that
      there is not a valid reference buffer in that "slot".
      
      All slots in the reference frame map are now initialized
      to the empty state (-1) and each buffer is initialized
      to have a reference count of 0.
      
      Change-Id: Id1afe98de98db4ae8b2dfefed7889c3b28c68582
      3807dd82
  20. 03 Mar, 2015 1 commit
  21. 12 Feb, 2015 1 commit
  22. 10 Feb, 2015 1 commit
    • Adrian Grange's avatar
      Auto-adaptive encoder frame resizing logic · 23ebacdb
      Adrian Grange authored
      Note: This feature is still in development.
      
      Add an option for the encoder to decide the resolution
      at which to encode each frame.
      
      Each KF/GF/ARF goup is tested to see if it would be
      better encoded at a lower resolution. At present, each
      KF/GF/ARF is coded first at full-size and if the coded
      size exceeds a threshold (twice target data rate) at
      the maximum active Q then the entire group is encoded
      at lower resolution.
      
      This feature is enabled in vpxenc by setting:
        --resize-allowed=1
      
      In addition, if the vpxenc command line also specifies
      valid frame dimensions using:
        --resize-width=XXXX & --resize_height=YYYY
      then *all* frames will be encoded at this resolution.
      
      Change-Id: I13f341e0a82512f9e84e144e0f3b5aed8a65402b
      23ebacdb
  23. 31 Jan, 2015 1 commit
    • hkuang's avatar
      Try again to merge branch 'frame-parallel' into master branch. · be6aeada
      hkuang authored
      In frame parallel decode, libvpx decoder decodes several frames on all
      cpus in parallel fashion. If not being flushed, it will only return frame
      when all the cpus are busy. If getting flushed, it will return all the
      frames in the decoder. Compare with current serial decode mode in which
      libvpx decoder is idle between decode calls, libvpx decoder is busy
      between decode calls.
      
      Current frame parallel decode will only speed up the decoding for frame
      parallel encoded videos. For non frame parallel encoded videos, frame
      parallel decode is slower than serial decode due to lack of loopfilter
      worker thread.
      
      There are still some known issues that need to be addressed. For example:
      decode frame parallel videos with segmentation enabled is not right sometimes.
      
      * frame-parallel:
        Add error handling for frame parallel decode and unit test for that.
        Fix a bug in frame parallel decode and add a unit test for that.
        Add two test vectors to test frame parallel decode.
        Add key frame seeking to webmdec and webm_video_source.
        Implement frame parallel decode for VP9.
        Increase the thread test range to cover 5, 6, 7, 8 threads.
        Fix a bug in adding frame parallel unit test.
        Add VP9 frame-parallel unit test.
        Manually pick "Make the api behavior conform to api spec." from master branch.
        Move vp9_dec_build_inter_predictors_* to decoder folder.
        Add segmentation map array for current and last frame segmentation.
        Include the right header for VP9 worker thread.
        Move vp9_thread.* to common.
        ctrl_get_reference does not need user_priv.
        Seperate the frame buffers from VP9 encoder/decoder structure.
        Revert "Revert "Revert "Revert 3 patches from Hangyu to get Chrome to build:"""
       Conflicts:
             test/codec_factory.h
             test/decode_test_driver.cc
             test/decode_test_driver.h
             test/invalid_file_test.cc
             test/test-data.sha1
             test/test.mk
             test/test_vectors.cc
             vp8/vp8_dx_iface.c
             vp9/common/vp9_alloccommon.c
             vp9/common/vp9_entropymode.c
             vp9/common/vp9_loopfilter_thread.c
             vp9/common/vp9_loopfilter_thread.h
             vp9/common/vp9_mvref_common.c
             vp9/common/vp9_onyxc_int.h
             vp9/common/vp9_reconinter.c
             vp9/decoder/vp9_decodeframe.c
             vp9/decoder/vp9_decodeframe.h
             vp9/decoder/vp9_decodemv.c
             vp9/decoder/vp9_decoder.c
             vp9/decoder/vp9_decoder.h
             vp9/encoder/vp9_encoder.c
             vp9/encoder/vp9_pickmode.c
             vp9/encoder/vp9_rdopt.c
             vp9/vp9_cx_iface.c
             vp9/vp9_dx_iface.c
      
      This reverts commit a18da976.
      
      Change-Id: I361442ffec1586d036ea2e0ee97ce4f077585f02
      be6aeada
  24. 23 Jan, 2015 2 commits
  25. 25 Dec, 2014 1 commit
    • Jingning Han's avatar
      Enable sub8x8 inter block search for RTC coding mode · dad89d5c
      Jingning Han authored
      This commit enables sub8x8 inter block coding for RTC mode. The
      use of sub8x8 blocks can be turned on by allowing
      choose_partitioning function to select 4x4/4x8/8x4 block sizes.
      
      Change-Id: Ifbf1fb3888fe4c094fc85158ac3aa89867d8494a
      dad89d5c
  26. 23 Dec, 2014 1 commit
  27. 22 Dec, 2014 1 commit
  28. 16 Dec, 2014 2 commits
    • Jingning Han's avatar
      Set second ref frame to be NONE in key frame coding · 01613aa7
      Jingning Han authored
      This commit explicitly set the second reference frame type to be
      NONE in key frame coding mode. This fixes a subtle dependency of
      reference motion vector used by next inter frame on mode_info
      reset before key frame coding.
      
      Change-Id: I5ff0359753fdc9992b0bfe889490f7a32d7d5f6a
      01613aa7
    • Paul Wilkins's avatar
      Improve motion detection for low complexity regions. · b6c75c5a
      Paul Wilkins authored
      Where there is very subtle motion, especially when combined
      with low spatial complexity, the codec sometimes fails to quickly
      pick up the ambient motion field.
      
      Once it has been established though the field propagates well using
      Nearest and Near MV.
      
      This patch looks specifically at the case where the Nearest and Near
      have not been established as non zero vectors and in this case
      discounts the cost of searching for a new vector in the rd code.
      
      This will almost certainly have some implications in terms of encode
      speed but it should be possible to mitigate the impact in a subsequent
      using first pass stats and the local spatial complexity.
      
      Average results for test sets approximately neutral.
      
      Change-Id: I44a29e20f11f7ab10f8c93ffbdc50183d9801524
      b6c75c5a
  29. 15 Dec, 2014 1 commit