1. 26 Jan, 2012 1 commit
    • John Koleszar's avatar
      Correct clamping in use of vp8_find_near_mvs() · 83cef816
      John Koleszar authored
      Commit e06c242b introduced a change to call vp8_find_near_mvs() only
      once instead of once per reference frame by observing that the only
      effect that the frame had was on the bias applied to the motion
      vector. By keeping track of the sign_bias value, the mv to use could
      be flip-flopped by multiplying its components by -1.
      
      This behavior was subtley wrong in the case when clamping was applied
      to the motion vectors found by vp8_find_near_mvs(). A motion vector
      could be in-bounds with one sign bias, but out of bounds after
      inverting the sign, or vice versa. The clamping must match that done
      by the decoder.
      
      This change modifies vp8_find_near_mvs() to remove the clamping from
      that function. The vp8_pick_inter_mode() and vp8_rd_pick_inter_mode()
      functions instead track the correctly clamped values for both bias
      values, switching between them by simple assignment. The common
      clamping and inversion code is in vp8_find_near_mvs_bias()
      
      Change-Id: I17e1a348d1643497eca0be232e2fbe2acf8478e1
      83cef816
  2. 24 Jan, 2012 1 commit
    • John Koleszar's avatar
      Revert "Multithreaded encoder, late sync loopfilter" · 630d3b95
      John Koleszar authored
      This commit is incomplete, as it does not synchronize the loop filter
      before returning a handle to the reconstructed frame in
      vpx_codec_get_preview_frame(), which can cause (false?) failures
      when running the test_reconstruct_buffer test.
      
      This may be related to a bug that does cause visible artifacts, which
      is also under investigation.
      
      This reverts commit 380d64ec.
      
      Change-Id: Iad710941e7731d44fc2bde63bc63d6763cc4629e
      630d3b95
  3. 18 Jan, 2012 2 commits
  4. 14 Jan, 2012 1 commit
    • Adrian Grange's avatar
      Fixed bugs in multi-layer code related to changing params · e479379a
      Adrian Grange authored
      When running multi-layer (ML) encodes and dynamically
      changing coding parameters on the fly (e.g. frame
      duration/rate, bandwidths allocated to each layer)
      the encoder would not produce sensible output.
      
      In certain cases the rate targeting would be
      hideously inaccurate.
      
      These fixes make it possible to change these coding
      parameters correctly and to maintain accurate control
      of the rate targeting.
      
      I also added the specification of the input timebase
      into the test program, vp8_scalable_patterns.c.
      
      Patch 2: Moved declaration to appease MS compiler)
      
      Change-Id: Ic8bb5a16daa924bb64974e740696e040d07ae363
      e479379a
  5. 11 Jan, 2012 2 commits
  6. 06 Jan, 2012 1 commit
  7. 29 Dec, 2011 1 commit
  8. 28 Dec, 2011 3 commits
  9. 22 Dec, 2011 4 commits
    • John Koleszar's avatar
      Remove unnecessary ternary constructs · 0c2b2c79
      John Koleszar authored
      The code had a number of constructs like (condition)?1:0,
      which is redundant with C's semantics. In the cases where a boolean
      operator was used in the condition, simply remove the ternary part.
      Otherwise adjust the surrounding expression to remove the condition
      (eg, for rounding up. See pickinter.c and rdopt.c)
      
      Change-Id: Icb2372defa3783cf31857d90b2630d06b2c7e1be
      0c2b2c79
    • John Koleszar's avatar
      Remove legacy integer types · f56918ba
      John Koleszar authored
      Remove BOOL, INTn, UINTn, etc, in favor of C99-style fixed width
      types.
      
      Change-Id: I396636212fb5edd6b347d43cc940186d8cd1e7b5
      f56918ba
    • John Koleszar's avatar
      Use lookup tables for mode_check_freq · aa8650dd
      John Koleszar authored
      Mostly cosmetic. Trying for a more compact representation of speed
      selection thresholds.
      
      Change-Id: I339e7840049b91ad569aabbdc9c702a496110d3b
      aa8650dd
    • John Koleszar's avatar
      Use lookup tables for thresh_mult · efb4783d
      John Koleszar authored
      Mostly cosmetic. Trying for a more compact representation of speed
      selection thresholds.
      
      Change-Id: Icaebea632c7bb71ca8e07b4def04a046d4515e27
      efb4783d
  10. 21 Dec, 2011 3 commits
  11. 19 Dec, 2011 1 commit
    • John Koleszar's avatar
      remove armv6 files from armv5 build · 056bcc87
      John Koleszar authored
      Make bilinearfilter_arm.c compiled only when HAVE_ARMV6, as its definitions
      are v6 only. This is normally not a problem for static builds as the file
      is elided at link time, but this was not being done properly for the
      --enable-shared --enable-pic build.
      
      Change-Id: Ic800a7cde751f74f22555c5b247f99f9df5e550d
      056bcc87
  12. 16 Dec, 2011 3 commits
    • Yunqing Wang's avatar
      Merge mr_pick_inter_mode and pick_inter_mode · c647ec44
      Yunqing Wang authored
      Merged multi-resolution motion estimation with regular motion
      estimation function in order to remove duplicated part. This
      caused slight changes in multi-resulotion encoder quality &
      performance.
      
      Change-Id: Ib4ecc7acfebfe5eea959b5b91febae6db7b95fd1
      c647ec44
    • James Berry's avatar
      fix: make sure ss_err is large enough · 24196dd9
      James Berry authored
      increase size of ss_err by one to make
      sure there is room for 64 elements.
      
      Change-Id: I355cb8c499aa7da3b9675f2326a8d25a74bb88d2
      24196dd9
    • John Koleszar's avatar
      Avoid heap allocation of firstpass stats · 26c6a44c
      John Koleszar authored
      The total_stats, this_frame_stats, and total_left_stats structures
      were previously create by a heap allocation, despite being of fixed
      size. These structures were allocated and deallocated during
      {de,}allocate_compressor_data, which is reinvoked whenever the frame
      size changes. Unfortunately, this clobbers the total_stats and
      total_left_stats data.
      
      Historically, these were variable size at one time, due to the first
      pass motion map, which necessitated their being created by a unique
      heap allocation. However, this bug with the total_stats being
      clobbered has probably been present since that initial implementation.
      
      These structures are instead moved to be stored within the struct
      twopass_rc directly, rather than being heap allocated separately.
      
      Change-Id: I7f9e519e25c58b92969071f0e99fa80307e0682b
      26c6a44c
  13. 15 Dec, 2011 2 commits
    • Scott LaVarnway's avatar
      Moved dequant idct into common · a53d5a4c
      Scott LaVarnway authored
      These functions are now used by the encoder.
      This is WIP with the goal of creating a common idct/add for
      the encoder and decoder.  A boost of 1.8% was seen for
      the HD rt test clip used.
      
      [Tero] Added needed changes to ARM side.
      
      Change-Id: Ibbb8000be09034203d7adffc457d3c3f8b06a5bf
      a53d5a4c
    • Yunqing Wang's avatar
      Only call vp8_find_near_mvs() once for each macroblock · e06c242b
      Yunqing Wang authored
      While doing motion search on a macroblock, we usually call
      vp8_find_near_mvs once per reference frame. Actually, for
      different reference frames, the only difference in calculating
      these near_mvs is they may have different sign_bias, which
      causes a sign change in resulting near_mvs. In this change, we
      only do find_near_mvs for the first reference frame. For other
      reference frames, only need to adjust the near_mvs according to
      that reference frame's sign_bias value.
      
      Change-Id: I661394b49c6ad79fed7d0f2eb2be239b9c56f149
      e06c242b
  14. 14 Dec, 2011 2 commits
  15. 13 Dec, 2011 2 commits
  16. 10 Dec, 2011 1 commit
  17. 07 Dec, 2011 1 commit
    • Attila Nagy's avatar
      Reduce mem copies in encoder loopfilter level picking · e570b040
      Attila Nagy authored
      Do the test filtering in the existing backup frame buffer instead of
      the original. Copy the original data into extra buffer before doing
      the  filtering. This way there is no need to restore the original
      unfiltered  frame at the end of level picking process.
      
      This came up in some discussions with Johann. Thanks!
      
      Change-Id: I495f4301d983854673276c34ec0ddf9a9d622122
      e570b040
  18. 05 Dec, 2011 1 commit
    • Yunqing Wang's avatar
      Multiple-resolution encoder · aa7335e6
      Yunqing Wang authored
      The example encoder down-samples the input video frames a number of
      times with a down-sampling factor, and then encodes and outputs
      bitstreams with different resolutions.
      
      Support arbitrary down-sampling factor, and down-sampling factor
      can be different for each encoding level.
      
      For example, the encoder can be tested as follows.
      1. Configure with multi-resolution encoding enabled:
      ../libvpx/configure --target=x86-linux-gcc --disable-codecs
      --enable-vp8 --enable-runtime_cpu_detect --enable-debug
      --disable-install-docs --enable-error-concealment
      --enable-multi-res-encoding
      2. Run make
      3. Encode:
      If input video is 1280x720, run:
      ./vp8_multi_resolution_encoder 1280 720 input.yuv 1.ivf 2.ivf 3.ivf 1
      (output: 1.ivf(1280x720); 2.ivf(640x360); 3.ivf(320x180).
      The last parameter is set to 1/0 to show/not show PSNR.)
      4. Decode:
      ./simple_decoder 1.ivf 1.yuv
      ./simple_decoder 2.ivf 2.yuv
      ./simple_decoder 3.ivf 3.yuv
      5. View video:
      mplayer 1.yuv -demuxer rawvideo -rawvideo w=1280:h=720 -loop 0 -fps 30
      mplayer 2.yuv -demuxer rawvideo -rawvideo w=640:h=360 -loop 0 -fps 30
      mplayer 3.yuv -demuxer rawvideo -rawvideo w=320:h=180 -loop 0 -fps 30
      
      The encoding parameters can be modified in vp8_multi_resolution_encoder.c,
      for example, target bitrate, frame rate...
      
      Modified API. John helped a lot with that. Thanks!
      
      Change-Id: I03be9a51167eddf94399f92d269599fb3f3d54f5
      aa7335e6
  19. 28 Nov, 2011 1 commit
    • Yunqing Wang's avatar
      Populate q_index in multi-thread encoding · 06fc0f83
      Yunqing Wang authored
      This value needs to be copied to each thread's data structure.
      This fixed artifact problem in multi-thread encoder.
      
      Change-Id: Iab6d9745a1d44846aa503184705376f63a505597
      06fc0f83
  20. 23 Nov, 2011 1 commit
    • Attila Nagy's avatar
      Fix encoder partitioned output on ARM · 97259b46
      Attila Nagy authored
      API was not returning correct partition sizes on arm targets.
      The armv5 token packing functions were not storing the information to the
      partition size table.
      As a fix, have one boolcoder instance allocated for each partition so
      that partition sizes are internally available after all partitions
      were encoded. This will also allow more flexibility in producing
      several partitions in parallel.
      
      Use buffer validation (overflow check) in all ARM bitpacking
      functions.
      
      Change-Id: I31c8a11d8a7613676f0ff50928cb2a2ab14fd169
      97259b46
  21. 19 Nov, 2011 1 commit
    • Johann's avatar
      Move shared data to shared location · f2cd4ded
      Johann authored
      Storing vp8_bilinear_filters_mmx in an mmx file and using it in an sse2
      file is bad
      
      Moving towards allowing --disable-mmx
      
      Change-Id: I20493b35bdedcdcfc0915e6f05fdbe6c81a4a742
      f2cd4ded
  22. 18 Nov, 2011 2 commits
    • John Koleszar's avatar
      Speed selection support for disabled reference frames · e55974bf
      John Koleszar authored
      There was an implicit reference frame test order (typically LAST,
      GOLD, ARF) in the mode selection logic, but this doesn't provide the
      expected results when some reference frames are disabled. For
      instance, in real-time mode, the speed selection logic often disables
      the ARF modes. So if the user disables the LAST and GOLD frames, the
      encoder was always choosing INTRA, when in reality searching the ARF
      in this case has the same speed penalty as searching LAST would have
      had.
      
      Instead, introduce the notion of a reference frame search order. This
      patch preserves the former priorities, so if a frame is disabled, the
      other frames bump up a slot to take its place. This patch lays the
      groundwork for doing something smarter in the frame test order, for
      example considering temporal distance or looking at the frames used by
      nearby blocks.
      
      Change-Id: I1199149f8662a408537c653d2c021c7f1d29a700
      e55974bf
    • Attila Nagy's avatar
      Validate encoder buffer writes for single token partition · c84d42f8
      Attila Nagy authored
      Extend buffer write validation (overflow check) to single token
      partition packing, both mb and row based functions.
      
      Change-Id: I36e19b7d37fc43712d05c70e3ad223d3eb5b973d
      c84d42f8
  23. 15 Nov, 2011 1 commit
    • Scott LaVarnway's avatar
      Added predictor stride argument(s) to subtract functions · edd98b73
      Scott LaVarnway authored
      Patch set 2: 64 bit build fix
      Patch set 3: 64 bit crash fix
      
      [Tero]
      Patch set 4: Updated ARMv6 and NEON assembly.
                   Added also minor NEON optimizations to subtract
                   functions.
      
      Patch set 5: x86 stride bug fix
      
      Change-Id: I1fcca93e90c89b89ddc204e1c18f208682675c15
      edd98b73
  24. 11 Nov, 2011 1 commit
    • John Koleszar's avatar
      avoid resetting framerate during vpx_codec_enc_config_set() · bdd35c13
      John Koleszar authored
      The calculated frame_rate is a state variable in the codec, and
      shouldn't be maintained in the configuration struct. Move it to the
      main part of cpi so that it isn't clobbered when the configuration
      struct is updated. The initial framerate estimate is moved from the
      vp8_cx_iface.c wrapper into the body of init_config() in onyx_if.c, so
      that it is only called once and not reset on every call to
      vp8_change_config().
      
      Change-Id: I8d9a3d1283330d1ee297d07e9d78d1f2875f2465
      bdd35c13
  25. 09 Nov, 2011 1 commit
    • Scott LaVarnway's avatar
      Relocated idct/add calls for encoder · 861ed6a5
      Scott LaVarnway authored
      Call the idct/add after the tokenize.  This is WIP with
      the goal of creating a common idct/add for the encoder and
      decoder. This move is necessary because the decoder's version
      of the idct clobbers qcoeff, which is used by the tokenize.
      
      Change-Id: I6b08d8e8397cd873647fa4fb9469884e3c876756
      861ed6a5