1. 08 Feb, 2013 2 commits
    • John Koleszar's avatar
      Avoid allocating memory when resizing frames · c03d45de
      John Koleszar authored
      As long as the new frame is smaller than the size that was originally
      allocated, we don't need to free and reallocate the memory allocated.
      Instead, do the allocation on the size of the first frame. We could
      make this passed in from the application instead, if we wanted to
      support external upscaling.
      
      Change-Id: I204d17a130728bbd91155bb4bd863a99bb99b038
      c03d45de
    • John Koleszar's avatar
      Adds a test for the VP8E_SET_SCALEMODE control · 88f99f4e
      John Koleszar authored
      Tests that the external interface to set the internal codec scaling
      works as expected. Also updates the test to pull the height from
      the decoded frame size rather than parsing the keyframe header,
      in anticipation of allowing resolution changes on non-keyframes.
      
      Change-Id: I3ed92117d8e5288fbbd1e7b618f2f233d0fe2c17
      88f99f4e
  2. 05 Feb, 2013 1 commit
    • John Koleszar's avatar
      Convert subpixel filters to use convolve framework · 7a07eea1
      John Koleszar authored
      Update the code to call the new convolution functions to do subpixel
      prediction rather than the existing functions. Remove the old C and
      assembly code, since it is unused. This causes a 50% performance
      reduction on the decoder, but that will be resolved when the asm for
      the new functions is available.
      
      There is no consensus for whether 6-tap or 2-tap predictors will be
      supported in the final codec, so these filters are implemented in
      terms of the 8-tap code, so that quality testing of these modes
      can continue. Implementing the lower complexity algorithms is a
      simple exercise, should it be necessary.
      
      This code produces slightly better results in the EIGHTTAP_SMOOTH
      case, since the filter is now applied in only one direction when
      the subpel motion is only in one direction. Like the previous code,
      the filtering is skipped entirely on full-pel MVs. This combination
      seems to give the best quality gains, but this may be indicative of a
      bug in the encoder's filter selection, since the encoder could
      achieve the result of skipping the filtering on full-pel by selecting
      one of the other filters. This should be revisited.
      
      Quality gains on derf positive on almost all clips. The only clip
      that seemed to be hurt at all datarates was football
      (-0.115% PSNR average, -0.587% min). Overall averages 0.375% PSNR,
      0.347% SSIM.
      
      Change-Id: I7d469716091b1d89b4b08adde5863999319d69ff
      7a07eea1
  3. 30 Jan, 2013 3 commits
  4. 29 Jan, 2013 2 commits
    • Ronald S. Bultje's avatar
      Fix block pointer corruption in intra8x8 prediction with 4x4 transform. · ffc2e4f4
      Ronald S. Bultje authored
      The RD loop would change the pointer after the first mode (DC) was tested,
      leading to corrupt block objects being provided for the others. This
      would essentially render the i8x8 predictor useless.
      
      Change-Id: I16c5906ca64fb34878ac32ce59af8974e4582bb8
      ffc2e4f4
    • Paul Wilkins's avatar
      Remove eob_max_offset markers. · 93762ca9
      Paul Wilkins authored
      Remove eob_max_offset markers and replace
      with the generic skip_block flag to indicate
      to the quantizer that all coeffs to be set to 0
      and eob position set to 0;
      
      Change-Id: Id477e8f8d4ec1a5562758904071013c24b76bfd7
      93762ca9
  5. 28 Jan, 2013 2 commits
    • Paul Wilkins's avatar
      Segment Skip Flag · 0ff9b033
      Paul Wilkins authored
      First step in simplifying the segment mode and
      segment EOB flags into a simpler segment skip
      flag that implies 0,0 mv and EOB at position 0.
      
      Change-Id: Ib750cac31a7a02dc21082580498efd9f7d8d72a5
      0ff9b033
    • Paul Wilkins's avatar
      Simplify Zero bin and zero bin run code. · 8e2c03fb
      Paul Wilkins authored
      Simplification to eliminate a number of very large data
      data structures. All zero run, zbin boosts for different
      transform sizes are now limited to a maximum run length
      of 15 before they max out the boost.
      
      Some further work still needs be done to refactor, rationalize
      and optimize the multiple quantizer functions.
      
      The simplification coupled with tweaks to the 16 element array
      now used for all transform sizes, has minimal effect on quality.
      
      Change-Id: I6f3948b8ca0418b60d4db9030ff19026a34ed423
      8e2c03fb
  6. 26 Jan, 2013 1 commit
    • Deb Mukherjee's avatar
      Adding a frame parallel decoding mode · dfd89f2e
      Deb Mukherjee authored
      Adds a flag to disable features that would inhibit frame parallel
      decoding. This includes backward adaptation and MV sorting based
      on search in ref frame buffer.
      
      Also includes some minor clean-ups.
      
      Change-Id: I434846717a47b7bcb244b37ea670c5cdf776f14d
      dfd89f2e
  7. 25 Jan, 2013 1 commit
  8. 24 Jan, 2013 1 commit
    • Deb Mukherjee's avatar
      Adds an error-resilient mode with test · 01cafaab
      Deb Mukherjee authored
      Adds an error-resilient mode where frames can be continued
      to be decoded even when there are errors (due to network losses)
      on a prior frame. Specifically, backward updates are turned off
      and probabilities of various symbols are reset to defaults at
      the beginning of each frame. Further, the last frame's mvs are
      not used for the mv reference list, and the sorting of the
      initial list based on search on previous frames is turned off
      as well.
      
      Also adds a test where an arbitrary set of frames are skipped
      from decoding to simulate errors. The test verifies (1) that if
      the error frames are droppable - i.e. frame buffer updates have
      been turned off - there are no mismatch errors for the remaining
      frames after the error frames; and (2) if the error-frames are non
      droppable, there are not only no decoding errors but the mismatch
      PSNR between the decoder's version of the post-error frames and the
      encoder's version is at least 20 dB.
      
      Change-Id: Ie6e2bcd436b1e8643270356d3a930e8989ff52a5
      01cafaab
  9. 18 Jan, 2013 1 commit
    • John Koleszar's avatar
      Use alt-ref frame context for keyframes · 2f24ad9e
      John Koleszar authored
      This matches the behavior prior to generalizing the frame context
      selection, and intuitively makes sense in that the first forward ref
      is immediately after the keyframe, so it's quality is improved a bit
      by using the keyframe's entropy context rather than the default.
      
      Change-Id: Ia82cef79382b9d8cfafdc44ba0533d4dc3e44053
      2f24ad9e
  10. 16 Jan, 2013 5 commits
    • John Koleszar's avatar
      Preserve the previous golden frame on golden updates · 26bd81b9
      John Koleszar authored
      This commit restores the quality lost when the buffer-to-buffer copy
      logic was removed. Note that this is specific to the current use of
      golden frames and will need rework when RTC functionality is added.
      
      Change-Id: I7324a75acd96eafd9e0f9b8633d782e390d5dc21
      26bd81b9
    • John Koleszar's avatar
      Generalize and increase frame coding contexts · 4b65837b
      John Koleszar authored
      Previously there were two frame coding contexts tracked, one for normal
      frames and one for alt-ref frames. Generalize this by signalling the
      context to use in the bitstream, rather than tieing it to the alt ref
      refresh bit. Also increase the number of contexts available to 4, which
      may be useful for temporal scalability.
      
      Change-Id: I7b66daaddd55c535c20cd16713541fab182b1662
      4b65837b
    • John Koleszar's avatar
      Start to anonymize reference frames · da832a80
      John Koleszar authored
      Remove lst_fb_idx, gld_fb_idx, alt_fb_idx, refresh_last_frame,
      refresh_golden_frame, refresh_alt_ref_frame from common. Gold/Alt are
      encode side conventions. From the decoder's perspective, we want to be
      dealing with numbered references.
      
      Updates to active_ref 2 signal mode context switches, vestigial from
      refresh_alt_ref_frame. This needs some clean up to make sense with
      increased numbers of reference frames, as well as reimplementing the
      swapping of alt/golden which was previously done using the
      buffer-to-buffer copy mechanism removed in an earlier commit.
      
      Change-Id: I7334445158b7666f9295d2a2dd22aa03f4485f58
      da832a80
    • John Koleszar's avatar
      Update encoder to use fb_idx_ref_cnt · 394b0a6a
      John Koleszar authored
      Do reference counting the same way on the encoder as the decoder does,
      rather than maintaining the 'flags' member of YV12_BUFFER_CONFIG.
      
      Change-Id: I91dc210ffca081acaf9d5c09a06e7461b3c3139c
      394b0a6a
    • John Koleszar's avatar
      Remove buffer-to-buffer copy logic · b8e02798
      John Koleszar authored
      This is the first in a series of commits to add additional reference
      frames to the codec. Each frame will be able to update any of the
      available references, but copying between references is not
      supported.
      
      Change-Id: I5945b5ce6cc3582c495102b4e7eed4f08c44d5a1
      b8e02798
  11. 15 Jan, 2013 1 commit
  12. 14 Jan, 2013 6 commits
    • John Koleszar's avatar
      Use INT64_MAX instead of LLONG_MAX · 24bc1a71
      John Koleszar authored
      These variables have the type int64_t, not long long. long long could
      be a larger type than 64 bits. Emulate INT64_MAX for older versions of
      MSVC, and remove the unreferenced vpx_ports/vpxtypes.h
      
      Change-Id: Ideaca71838fcd3849d816d5ab17aa347c97d03b0
      24bc1a71
    • Ronald S. Bultje's avatar
      Remove compound intra-intra experiment. · c9071601
      Ronald S. Bultje authored
      This experiment gives little gains and adds relatively much code
      complexity (and it hinders other experiments), so let's get rid of
      it.
      
      Change-Id: Id25e79a137a1b8a01138aa27a1fa0ba4a2df274a
      c9071601
    • Yaowu Xu's avatar
      Fix compiler warnings · 113005b1
      Yaowu Xu authored
      The warnings caused verify failure with gerrit for several  commits
      
      Change-Id: I030df8638bd69b8783a3ac58e720ff9f0bfd546c
      113005b1
    • Adrian Grange's avatar
      Merge prediction filter · 7bcaac3e
      Adrian Grange authored
      Removed the experimental flag from around the prediction filter.
      
      Change-Id: Ic1dd2db8fe8ac17ed5129f83094d4c5cdd5527d2
      7bcaac3e
    • Ronald S. Bultje's avatar
      Reset x->skip for each iteration in the RD loop. · 290b83ab
      Ronald S. Bultje authored
      This prevents ill-defined behaviour, such as setting x->skip for a mode
      that is excluded because of frame-level flags (e.g. filter selection,
      compound prediction selection), then not breaking out of the RD loop
      because the mode is not allowed, but keeping the flag on. Whatever mode
      is iterated through next in the RD loop will then carry this flag, and
      all sort of bad stuff happens, such as x->skip being set on intra pred
      modes.
      
      Change-Id: I5bec46b36e38292174acb1c564b3caf00a9b4b9a
      290b83ab
    • John Koleszar's avatar
      Fix unused variable warnings · 76ac5b39
      John Koleszar authored
      Previous commit does not build cleanly on Jenkins with the DWT/DCT
      hybrid experiment enabled (--enable-dwtdcthybrid).
      
      Change-Id: Ia67e8f59d17ef2d5200ec6b90dfe6711ed6835a5
      76ac5b39
  13. 13 Jan, 2013 1 commit
    • Deb Mukherjee's avatar
      Further enhancements/fixes on dct/dwt hybrid txfm · 516db21c
      Deb Mukherjee authored
      Fixes some scaling issues. Adds an option to only compute the
      dct on the low-low subband for 32x32 and 64x64 blocks using
      only a single 16x16 dct after 1 and 2 wavelet decomposition
      levels respectively. Also adds an option to use a 8x8 dct
      as building block.
      
      Currenlty with the 2/6 filter and with a single 16x16 dct on
      the low low band, the reuslts compared to full 32x32 dct is
      as follows:
      derf: -0.15%
      yt: -0.29%
      std-hd: -0.18%
      hd: -0.6%
      These are my current recommended settings, since the 2/6 filter
      is very simple.
      
      Results with 8x8 dct are about 0.3% worse.
      
      Change-Id: I00100cdc96e32deced591985785ef0d06f325e44
      516db21c
  14. 11 Jan, 2013 1 commit
    • Paul Wilkins's avatar
      Remove INT64_MAX references. · d27ae620
      Paul Wilkins authored
      Replace INT64_MAX references with LLONG_MAX
      for windows build.
      
      Change-Id: Ib8b45c1e9c15c043b2f54c27ed83b8682b2be34f
      d27ae620
  15. 10 Jan, 2013 2 commits
  16. 09 Jan, 2013 1 commit
    • Adrian Grange's avatar
      New prediction filter · 7d6b5425
      Adrian Grange authored
      This patch removes the old pred-filter experiment and replaces it
      with one that is implemented using the switchable filter framework.
      
      If the pred-filter experiment is enabled, three interopolation
      filters are tested during mode selection; the standard 8-tap
      interpolation filter, a sharp 8-tap filter and a (new) 8-tap
      smoothing filter.
      
      The 6-tap filter code has been preserved for now and if the
      enable-6tap experiment is enabled (in addition to the pred-filter
      experiment) the original 6-tap filter replaces the new 8-tap smooth
      filter in the switchable mode.
      
      The new experiment applies the prediction filter in cases of a
      fractional-pel motion vector. Future patches will apply the filter
      where the mv is pel-aligned and also to intra predicted blocks.
      
      Change-Id: I08e8cba978f2bbf3019f8413f376b8e2cd85eba4
      7d6b5425
  17. 08 Jan, 2013 4 commits
    • Deb Mukherjee's avatar
      Adds 64x64 hybrid dct/dwt transform · 4b7304ee
      Deb Mukherjee authored
      This is to add to the 64x64 transform experiment as an alternative to
      a 64x64 DCT.
      Two levels of wavelet decomposition is used on a 64x64 block, followed
      by 16x16 DCT on the four lowest subbands. The highest three subbands
      are left untransformed after the first level DWT.
      
      Change-Id: I3d48d5800468d655191933894df6b46e15adca56
      4b7304ee
    • Ronald S. Bultje's avatar
      Merge superblocks (32x32) experiment. · 4455036c
      Ronald S. Bultje authored
      Change-Id: I0df99742029834a85c4933652b0587cf5b6b2587
      4455036c
    • Yaowu Xu's avatar
      reset segement map on key frame · c14439c3
      Yaowu Xu authored
      This is to fix a decoder crash when decoder skips a number of frame to
      continue decoding from a later key frame.
      
      Change-Id: I3ba116eba6c3440e0528a21f53745f694302e4ad
      c14439c3
    • Yaowu Xu's avatar
      minor loop filter refactoring and cleanup · d278d018
      Yaowu Xu authored
      This commit did a couple of minor cleanup/refactoring to prepare for
      futher loop filter experiments. It merged y_only version of loop filter
      function into the regular one, which makes sure that same logic is used
      for functions for picking level and for actual loop filtering.
      
      Change-Id: Id10c94dccd45f58e5310bacfdf6ee63cbb60b86f
      d278d018
  18. 07 Jan, 2013 3 commits
  19. 06 Jan, 2013 1 commit
  20. 04 Jan, 2013 1 commit
    • Adrian Grange's avatar
      Fix mode selection infinite loop bug · 81d1171f
      Adrian Grange authored
      Mode selection for SBs could enter an infinite loop because
      the interpolation filter mode index was not being reset
      correctly.
      
      Change-Id: I4bbe726f29ef5b6836e94884067c46084713cc11
      81d1171f