1. 24 Mar, 2011 1 commit
    • Johann's avatar
      use asm_offsets with vp8_regular_quantize_b_sse2 · 8edaf6e2
      Johann authored
      remove helper function and avoid shadowing all the arguments to the
      stack on 64bit systems
      
      when running with --good --cpu-used=0:
      ~2% on linux x86 and x86_64
      ~2% on win32 x86 msys and visual studio
      more on darwin10 x86_64
      significantly more on
      x86_64-win64-vs9
      
      Change-Id: Ib7be12edf511fbf2922f191afd5b33b19a0c4ae6
      8edaf6e2
  2. 21 Mar, 2011 2 commits
    • John Koleszar's avatar
      Remove unused vp8_get4x4sse_cs_mmx declaration · 2cbd9620
      John Koleszar authored
      This declaration did not match the prototype_sad() prototype, but was
      unused in this translation unit, so it is removed instead. Fixes
      issue 290.
      
      Change-Id: I168854f88a85f73ca9aaf61d1e5dc0f43fc3fdb3
      2cbd9620
    • Tero Rintaluoma's avatar
      ARMv6 optimized fdct4x4 · a61785b6
      Tero Rintaluoma authored
      Optimized fdct4x4 (8x4) for ARMv6 instruction set.
        - No interlocks in Cortex-A8 pipeline
        - One interlock cycle in ARM11 pipeline
        - About 2.16 times faster than current C-code compiled with -O3
      
      Change-Id: I60484ecd144365da45bb68a960d30196b59952b8
      a61785b6
  3. 18 Mar, 2011 2 commits
    • Attila Nagy's avatar
      Fix multithreaded encoding for 1 MB wide frame · bfe803bd
      Attila Nagy authored
      Thread synchronization was not correct when frame width was 1 MB.
      Number of allocated encoding threads is limited by the sync_range.
      There is no point having more because each thread lags sync_range MBs
      behind the thread processing the row above.
      
      http://code.google.com/p/webm/issues/detail?id=302
      
      Change-Id: Icaf67a883beecc5ebf2f11e9be47b6997fdf6f26
      bfe803bd
    • 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
  4. 17 Mar, 2011 2 commits
    • Ralph Giles's avatar
      Set bounds from the array when iterating mmaps. · 18555734
      Ralph Giles authored
      The mmap allocation code in vp8_dx_iface.c was inconsistent.
      The static array vp8_mem_req_segs defines two descriptors,
      but only the first is real. The second is a sentinel and
      isn't actually allocated, so vpx_codec_alg_priv is declared
      with mmaps[NELEMENTS(vp8_mem_req_segs)-1]. Some functions
      use this reduced upper bound when iterating though the mmap
      array, but these two functions did not.
      
      Instead, this commit calls NELEMENTS(...->mmaps) to directly
      query the bounds of the dereferenced array.
      
      This fixes an array-bounds warning from gcc 4.6 on
      vp8_xma_set_mmap.
      
      Change-Id: I918e2721b401d134c1a9764c978912bdb3188be1
      18555734
    • Ralph Giles's avatar
      Remove commented-out VP6 code from vp8_finalize_mmaps · de5182ee
      Ralph Giles authored
      Change-Id: I48642c380353043bed96026f56de5908fcee270a
      de5182ee
  5. 16 Mar, 2011 1 commit
    • John Koleszar's avatar
      apple: include proper mach primatives · de50520a
      John Koleszar authored
      Fixes implicit declaration warning for 'mach_task_self'. This change
      is an update to Change I9991dedd1ccfddc092eca86705ecbc3b764b799d,
      which fixed this issue for the decoder but not the encoder.
      
      Change-Id: I9df033e81f9520c4f975b7a7cf6c643d12e87c96
      de50520a
  6. 15 Mar, 2011 1 commit
  7. 14 Mar, 2011 1 commit
  8. 11 Mar, 2011 10 commits
    • John Koleszar's avatar
      Move build_intra_predictors_mby to RTCD framework · 27972d2c
      John Koleszar authored
      The vp8_build_intra_predictors_mby and vp8_build_intra_predictors_mby_s
      functions had global function pointers rather than using the RTCD
      framework. This can show up as a potential data race with tools such as
      helgrind. See https://bugzilla.mozilla.org/show_bug.cgi?id=640935
      for an example.
      
      Change-Id: I29c407f828ac2bddfc039f852f138de5de888534
      27972d2c
    • John Koleszar's avatar
      Only enable ssim_opt.asm on X86_64 · 5db0eeea
      John Koleszar authored
      Fix compiling on 32 bit x86.
      
      Change-Id: I6210573e1d9287ac49acbe3d7e5181e309316107
      5db0eeea
    • Paul Wilkins's avatar
      Clean up of vp8_init_config() · 6e737484
      Paul Wilkins authored
      Clean up vp8_init_config() a bit and remove null pointer case,
      as this code can't be called any more and is not an adequate
      trap anyway, as a null pointer would cause exceptions before
      hitting the test.
      
      Change-Id: I937c00167cc039b3aa3f645f29c319d58ae8d3ee
      6e737484
    • 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
    • Jim Bankoski's avatar
      vp8cx - psnr converted to call assemblerized sse · 3dc38229
      Jim Bankoski authored
      Change-Id: Ie388d4618c44b131f96b9fe526618b457f020dfa
      3dc38229
    • Jim Bankoski's avatar
      vp8cx- alternate ssim function with optimizations · 3f6f7289
      Jim Bankoski authored
      Change-Id: I91921b0a90dbaddc7010380b038955be347964b3
      3f6f7289
    • Yunqing Wang's avatar
      Align SAD output array to be 16-byte aligned · b2aa4017
      Yunqing Wang authored
      Use aligned store.
      
      Change-Id: Icab4c0c53da811d0c52bb7e8134927f249ba2499
      b2aa4017
    • Attila Nagy's avatar
      Fix "used uninitialized" warning in vp8_pack_bitstream() · 9c836daf
      Attila Nagy authored
      Change-Id: Iadcbdba717439f47a2c24e65fd69a3a1464174b5
      9c836daf
    • Attila Nagy's avatar
      Encoder loopfilter running in its own thread · 3ae24657
      Attila Nagy authored
      In multithreaded mode the loopfilter is running in its own thread (filter level
      calculation and frame filtering). Filtering is mostly done in parallel with the
      bitstream packing. Before starting the packing the loopfilter level has
      to be calculated. Also any needed reference frame copying is done in the
      filter thread.
      
      Currently the encoder will create n+1 threads, where n > 1 is the number of
      threads specified by application  and 1 is the extra filter thread. With n = 1
      the encoder runs in single thread mode. There will never be more than n threads
      running concurrently.
      
      Change-Id: I4fb29b559a40275d6d3babb8727245c40fba931b
      3ae24657
    • Tero Rintaluoma's avatar
      ARMv6 optimized quantization · 7ab08e1f
      Tero Rintaluoma authored
      Adds new ARMv6 optimized function vp8_fast_quantize_b_armv6
      to the encoder.
      
      Change-Id: I40277ec8f82e8a6cbc453cf295a0cc9b2504b21e
      7ab08e1f
  9. 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
  10. 09 Mar, 2011 3 commits
  11. 08 Mar, 2011 7 commits
    • Ralph Giles's avatar
      Fix an unused variable warning. · 56efffdc
      Ralph Giles authored
      Move the update of the loopfilter info to the same block where it
      is used. GCC 4.5 is not able trace the initialization of the local
      filter_info across the other calls between the two conditionals on
      pbi->common and issues an uninitialized variable warning.
      
      Change-Id: Ie4487b3714a096b3fb21608f6b0c74e745e3c6fc
      56efffdc
    • Yunqing Wang's avatar
      Improve SSE2 half-pixel filter funtions · 419f6389
      Yunqing Wang authored
      Rewrote these functions to process 16 pixels once instead of 8.
      
      Change-Id: Ic67e80124467a446a3df4cfecfb76a4248602adb
      419f6389
    • Yunqing Wang's avatar
      Add zero offset checking in SSE2 sub-pixel filter function · 8432a172
      Yunqing Wang authored
      Skip filter at zero offset.
      
      Change-Id: I95fc7e211869bc0ab5bcfb7ab2e3259d1c0ccf38
      8432a172
    • Yunqing Wang's avatar
      Write SSSE3 sub-pixel filter function · 244e2e14
      Yunqing Wang authored
      1. Process 16 pixels at one time instead of 8.
      2. Add check for both xoffset =0 and yoffset=0, which happens
         during motion search.
      This change gave encoder 1%~3% performance gain.
      
      Change-Id: Idaa39506b48f4f8b2fbbeb45aae8226fa32afb3e
      244e2e14
    • 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
    • Paul Wilkins's avatar
      Corrected minor typos. · de87c420
      Paul Wilkins authored
      Change-Id: Icc9f12bd1e1bdaf51256dc8a90d08aa9be89ef34
      de87c420
    • John Koleszar's avatar
      correct zbin boost for splitmv mode · 5d1d9911
      John Koleszar authored
      Disable zbin boost in SPLITMV mode as intended. Was incorrectly looking
      at vp8_ref_frame_order instead of vp8_mode_order when comparing against
      SPLITMV. This condition should have always been false, as SPLITMV is
      not in the range of valid reference frames.
      
      Change-Id: I0408cc7595eff68f00efef6d008e79f5b60d14bf
      5d1d9911
  12. 07 Mar, 2011 2 commits
    • Paul Wilkins's avatar
      Improved key frame detection. · bc9c30a0
      Paul Wilkins authored
      In some cases where clips have been encoded with
      borders (eg. some wide-screen content where there is a
      border top and bottom and slide shows containing portrait
      format photographs (border left and right)) key frames were
      not being correctly detected.
      
      The new code looks to measure cases where a portion of
      the image can be coded equally easily using intra or inter
      modes and where the resulting error score is also very low.
      These "neutral" areas are then discounted in the key frame
      detection code.
      
      Change-Id: I00c3e8230772b8213cdc08020e1990cf83b780d8
      bc9c30a0
    • Paul Wilkins's avatar
      Improved KF insertion after fades to still. · 9fc8cb39
      Paul Wilkins authored
      This code extends what was previously done for GFs, to pick
      cases where insertion of a key frame after a fade (or other
      transition or complex motion)  followed by a still section, will
      be beneficial and will reduce the number of forced key frames.
      
      Change-Id: If8bca00457f0d5f83dc3318a587f61c17d90f135
      9fc8cb39
  13. 03 Mar, 2011 3 commits
    • Mikhal Shemer's avatar
      Configuration updates:Making a clear distinction between Init and Change · 84f7f209
      Mikhal Shemer authored
      Change-Id: I7b2fb326e1aabc08b032177a7b914a5b8bb7376f
      84f7f209
    • Mikhal Shemer's avatar
      Fixing divide by zero · 1de99a2a
      Mikhal Shemer authored
      Change-Id: I9d8a98a2f7ed1e3116d0bae35164618c41998bac
      1de99a2a
    • John Koleszar's avatar
      Fix drastic undershoot in long form content · 36be4f7f
      John Koleszar authored
      When the modified_error_left accumulator exceeds INT_MAX, an incorrect
      cast to int resulted in a negative value, causing the rate control to
      allocate no bits to that keyframe group, leading to severe undershoot
      and subsequent poor quality.
      
      This error was exposed by the recent change to the rolling target and
      actual spend accumulators in commit 305be4e4 which fixed them to
      actually calculate the average value rather than be re-initialized
      on every frame to the average per-frame bitrate. When this bug was
      triggered, the target bitrate could be 0, so the rolling target
      becomes small, which causes the undershoot. The code prior to 305be4e4
      did not exhibit this behavior because the rolling target was always
      set to a reasonable value and was independent of the actual target
      bitrate. With this patch, the actual target bitrate is calculated
      correctly, and the rate control tracks as expected.
      
      This cast was likely added to silence a compiler warning on a comparison
      between a double (modified_error_left) and an int (0). Instead, this
      patch removes the cast and changes the comparison to be against 0.0,
      which should prevent the warning from reoccuring.
      
      This fixes issue #289. Special thanks to gnafu for his efforts in
      reporting and debugging this fix.
      
      Change-Id: Ie5cc1a7b516c578a76c3a50c892a6f04a11621fe
      36be4f7f
  14. 28 Feb, 2011 1 commit
  15. 25 Feb, 2011 1 commit