1. 15 Nov, 2011 2 commits
    • Paul Wilkins's avatar
      Further clean up of Segmentation experiment code · 6394ef28
      Paul Wilkins authored
      Changed name and sense of segment_flag to "seg_id_predicted"
      Added some additional comments and retested.
      
      I also did some experimentation with a spatial prediction option
      using a similar strategy to the temporal mode implemented.
      This helps in some cases where temporal prediction is bad but
      I suspect there is more overlap here with work on a larger scale
      block structure and spatial correlation will likely be better
      handled through that mechanism.
      
      Next check in will remove #ifdefs and legacy mode code.
      
      Change-Id: I3b382b65ed2a57bd7775ac0f3a01a9508a209cbc
      6394ef28
    • Paul Wilkins's avatar
      Further work on Segmentation Experiment: · 661b2c2d
      Paul Wilkins authored
      This check in includes quite a lot of clean up and refactoring.
      
      Most of the analysis and set up for the different coding options for the
      segment map (currently simple distribution based coding or temporaly
      predicted coding), has been moved to one location (the function
      choose_segmap_coding_method() in segmenation.c). This code was previously
      scattered around in various locations making integration with other
      experiments and modification / debug more difficult.
      
      Currently the functionality is as it was with the exception that the
      prediction probabilities are now only transmitted when the temporal
      prediction mode is selected.
      
      There is still quite a bit more clean up work that will be possible
      when the #ifdef is removed. Also at that time I may rename and alter
      the sense of macroblock based variable "segment_flag" which indicates
      (1 that the segmnet id is not predicted vs 0 that it is predicted).
      
      I also intend to experiment with a spatial prediction mode that can be
      used when coding a key frame segment map or in cases where temporal
      prediction does not work well but there is spatial correlation.
      
      In a later check in when the ifdefs have gone I may also move the call
      to choose_segmap_coding_method() to just before where the bitsream is
      packed (currently it is in vp8_encode_frame()) to further reduce the
      possibility of clashes with other experiments and prevent it being called
      on each itteration of the recode loop.
      
      Change-Id: I3d4aba2a2826ec21f367678d5b07c1d1c36db168
      661b2c2d
  2. 11 Nov, 2011 6 commits
    • Paul Wilkins's avatar
      Segmentation experiment: · c9130bdb
      Paul Wilkins authored
      Added last_segmentation_map[] structure
      to keep track of what we had before when
      doing temporal prediction. With this change
      the existing code does once again appear to
      be giving a decodable bitstream for both
      temporal and standard prediction modes.
      However, it is still somewhat messy and
      confused and there is no option to take
      advantage of spatial prediction so it could
      do with further work.
      
      Some housekeeping / clean out.
      
      Change-Id: I368258243f82127b81d8dffa7ada615208513b47
      c9130bdb
    • Paul Wilkins's avatar
      SEGMENTATION experiment: · bf25d4ad
      Paul Wilkins authored
      Some initial cleanup to aid testing and debug.
      
      Pull code to choose temporal or spatial encoding
      out of encodeframe.c into a dedicated function
      in segmentation.c.
      
      For now disable broken temporal mode.
      
      Move the coding of "temporal_update" flag and
      only transmit if segment map update is indicated.
      
      Rename the functions read_mb_features() and
      write_mb_features() to read_mb_segid() and
      read_mb_segid() as they only read and write
      the macroblock segment id not any of the
      features.
      
      Change-Id: Ib75118520b1144c24d35fdfc6ce46106803cabcf
      bf25d4ad
    • Yaowu Xu's avatar
      changed function name for clarity · e01b3925
      Yaowu Xu authored
      The dequantizer functions for 2nd order haar block had confusing 8x8
      in their names. this commit fixed their name to avoid confusion.
      
      Change-Id: I6ae4e7888330865f831436313637d4395b1fc273
      e01b3925
    • Yaowu Xu's avatar
    • Yaowu Xu's avatar
      Make 8x8 and extend_qrange to work together · 982b061d
      Yaowu Xu authored
      This commit added scaling factors to 8x8 transform, quant, dequant and
      inverse transform pipeline to make 8x8 transform to work when configed
      with enable-extend_qrange. This commit also disabled the trellis-quant
      when extend_qrange is configured.
      
      Change-Id: Icfb3192e4746f70a4bb35ad18b7b47705b657e52
      982b061d
    • Yaowu Xu's avatar
      fixed the decoder when using 8x8 transform · 7189198d
      Yaowu Xu authored
      updated the decode_macroblock logic to reflect that 8x8 transform is
      not used for "SPLITMV". Also fixed an issue where 2nd order haar block
      has wrong dequant/idct process.
      
      Change-Id: I1e373f6535c009dfec503b6362c8a5cfc196e1da
      7189198d
  3. 10 Nov, 2011 5 commits
  4. 09 Nov, 2011 4 commits
    • Paul Wilkins's avatar
      T8x8 experiment merge. · 07892531
      Paul Wilkins authored
      For ease of testing and merging experiments I have
      removed in line code in encode_frame() that assigns
      MBs to be t8x8 or t4x4 coded segments and have
      moved the decision point and segment setup to
      the init_seg_features0 test function.
      
      Keeping everything in one place helps make sure
      for now that experiments using segmentation are
      not fighting each other.
      
      Also made sure mode selection code can't choose 4x4
      modes if t8x8 is selected.
      
      Patch2: In init_seg_features() add checks
      for SEG_LVL_TRANSFORM active.
      
      Change-Id: Ia1767edd99b78510011d4251539f9bc325842e3a
      07892531
    • Paul Wilkins's avatar
      Merging and testing of SEGMENTATION experiment. · b0f9f15d
      Paul Wilkins authored
      Removed code in #if CONFIG_SEGMENTATION that
      enables segmentation and creates a test segmentation
      map, to avoid conflicts with the other segmentation test
      code,
      
      Change-Id: I7a21a44ed188b814cd80b30dd628c62474eba730
      b0f9f15d
    • Paul Wilkins's avatar
      Segmentation feature logic fix. · ac2ab02d
      Paul Wilkins authored
      Bug fix to logic in vp8_pick_inter_mode() and
      vp8_rd_pick_inter_mode().
      
      The block on the use of segment features
      for the cm->refresh_alt_ref_frame case
      was just for testing and is not correct.
      
      The special case code for alt ref can
      be re-enabled as an else clause.
      
      Change-Id: Ic9b57cdb5f04ea7737032b8fb953d84d7717b3ce
      ac2ab02d
    • Yaowu Xu's avatar
      make debug match release build on win32 with 8x8 transform enabled · 5883246d
      Yaowu Xu authored
      The 8x8 forward transform makes use of floating operations, therefore
      requires emms call to reset mmx registers to correct state. Without
      the resets, the 8x8 forward transform results are indefinite on win32
      platform.
      
      Change-Id: Ib5b71c3213e10b8a04fe776adf885f3714e7deb1
      5883246d
  5. 08 Nov, 2011 2 commits
  6. 04 Nov, 2011 4 commits
    • Yaowu Xu's avatar
    • Paul Wilkins's avatar
      Segment Features with 8x8DCT. · fe38082f
      Paul Wilkins authored
      Temporary check in to turn off other segment features
      tests when #if CONFIG_T8X8 is set as the assignment of
      MBs to differnt segments in each case  will conflict.
      
      The 8x8 code will be modified to use the new segment
      feature method properly in a later check in.
      
      Increase bits allowed for EOB end stop marker to 6 ready
      for 8x8.
      
      Change-Id: I4835bc8d3bf98e1775c3d247d778639c90b01f7f
      fe38082f
    • Paul Wilkins's avatar
      Segment Feature Data Access · a258bba1
      Paul Wilkins authored
      No change to functionality or output.
      
      Updates to the segment feature data structure now all done
      through functions such as set_segdata() and get_segdata()
      in seg_common.c.
      
      The reason for this is to make changing the structures (if needed)
      and debug easier.
      
      In addition it provides a single location for subsequent addition
      of range and validity checks. For  example valid combination of
      mode and reference frame.
      
      Change-Id: I2e866505562db4e4cb6f17a472b25b4465f01add
      a258bba1
    • Yaowu Xu's avatar
      make uv intra mode coding adaptive to Y mode · 2bbde250
      Yaowu Xu authored
      This commit tries to do UV intra mode coding adaptive to Y intra mode.
      Entropy context is defined as conditional PDF of uv intra mode given
      the Y mode. All constants are normalized with 256 to be fit in 8 bits.
      
      This provides further coding efficiency beyond the quantizer adaptive
      y intra mode coding. Consistent gains were observed on all clips and
      all bit rates for HD all key encoding tests.
      
      To test, configure with
      --enable-experimental --enable-uvintra
      
      Change-Id: I2d78d73f143127f063e19bd0bac3b68c418d756a
      2bbde250
  7. 03 Nov, 2011 3 commits
    • Yaowu Xu's avatar
      Added context reset when 2nd order coefficients are cleared · d8afecef
      Yaowu Xu authored
      As discovered in path 10 of Change Ia12acd2f, reset 2nd order coeffs
      without reset of above and left coding context may have introduced
      problem that causes encoder/decoder mismatching. This commit added
      update to coding context when the 2nd coefficients are cleared.
      
      In addition, this commit also introduced early breakout in the checks
      to speed up when coefficients are too significant to be cleared.
      
      Change-Id: I85322a432b11e8af85001525d1e9dc218f9a0bd6
      d8afecef
    • Paul Wilkins's avatar
      Segment Features. Removal of #ifdefs · a10a268e
      Paul Wilkins authored
      Removal of configure #ifdefs so that segment features
      always available. Removal of code supporting old
      segment feature method.
      
      Still a good deal of tidying up to do.
      
      Change-Id: I397855f086f8c09ab1fae0a5f65d9e06d2e3e39f
      a10a268e
    • Paul Wilkins's avatar
      2370d440
  8. 02 Nov, 2011 2 commits
    • Paul Wilkins's avatar
    • Paul Wilkins's avatar
      Segmentation: Reference frames · 87ff8620
      Paul Wilkins authored
      Modify reference frame segmentation so that ONE or MORE
      reference frames may be marked as a available for a given
      segment.
      
      Fixed bugs relating to segment coding of INTRA and some
      INTER modes at the segment level.
      
      Modified Q boost for static areas based on ambient average Q.
      
      Strong results now on clips with significant static areas.
      (some data points in derf set as high as 9% and some static &
      slide show type content in YT set > 20%)
      
      Change-Id: Ia79f912efa84b977f35a23683ae3643251e24f0c
      87ff8620
  9. 01 Nov, 2011 1 commit
    • Adrian Grange's avatar
      Deleted repeated code block · 2b450a46
      Adrian Grange authored
      The block of code skipped testing the current mode if the
      reference frame is AltRef, the mv is not (0,0) and
      ARNR filtering is disabled.
      
      This block of code has already been tested above if the
      macro CONFIG_SEGFEATURES is set to 0.
      
      Change-Id: I3f5710bb8270caad06c9a0eee59fa0daf1f70776
      2b450a46
  10. 31 Oct, 2011 2 commits
    • Adrian Grange's avatar
      Fixed this_mode used before set in vp8_pick_inter_mode · 71fb1f8e
      Adrian Grange authored
      The variable this_mode was being used before it had been
      initialized.
      
      Moved the line that sets-up this_mode toward the top of the
      enclosing loop, prior to its first use. The bug would result in
      tests in the loop lagging the mode that was expected to be
      tested.
      
      Change-Id: If4e51600449ce6b4285f112da17a44c24b4a19fb
      71fb1f8e
    • Paul Wilkins's avatar
      Segmentation Entropy and tweaks. · 795c6dd2
      Paul Wilkins authored
      Some correction for entropy impact of segment signaled (EOB and ref frame)
      
      Other slight tweaks.
      
      Derf VBR average gain now over 1% (best over 7%)
      One YT test clip has gains of circa 30% (VBR)
      
      There is still an issue with noisy clips where making the background static
      and coded with 0,0 can have a negative effect, especially at low Q.
      This is probably because of the loss of smoothing by fractional pixel filters.
      
      Change-Id: I7a225613c98067b96f8fc7a7e36f95d465b2b834
      795c6dd2
  11. 27 Oct, 2011 1 commit
    • Paul Wilkins's avatar
      Resolve build problem · afb52f65
      Paul Wilkins authored
      Resolved experimental branch build problem when seg_features not configured.
      
      Change-Id: Ia0f9b460a26dc3eac9844ee595a7b196e9faf6a5
      afb52f65
  12. 25 Oct, 2011 2 commits
  13. 24 Oct, 2011 3 commits
    • Yaowu Xu's avatar
      added a last stage rounding for 8x8 inverse dct · a66c945c
      Yaowu Xu authored
      Prior to the added rounding, tests on randomly generated data showed
      that forward-inverse transform round trip errors are about 3.02/block
      for input range [-10,10] and 2.68/block for input range [-256, 255].
      The added rounding reduced the errors to 0.031/block for input range
      [-10,10] and 0.037/block for input range [-256, 255].
      
      Maximum round trip error on for any pixel position is 1.
      
      The average errors are calculated based on 100,000 blocks of randomly
      with the specified ranges.
      
      Paul mentioned in discussion that the change was not clear on why we
      need change the rounding, so Patch 2 intends to make the rationale
      obvious in code, it merged the two separate shifts into one, and the
      two separate rounding factors into one. Patch 1 and 2 have same
      numerical test results.
      
      Change-Id: Ic5e2f5463de17253084d8b2398c4a210194b20de
      a66c945c
    • Paul Wilkins's avatar
      Segmentation Features; · 23701f4f
      Paul Wilkins authored
      Only encode sign bit for feature data that can have a sign.
      
      Tweaks to the test segmentation rules so that it now actually gives
      a net benefit on the derf set of about 0.4% though much higher
      on some clips at the low end.
      
      Change-Id: I8e61f1aebf41c9037db7e67e2f8975aa18a0c986
      23701f4f
    • Paul Wilkins's avatar
      Further segment feature extensions. · 01ce04bc
      Paul Wilkins authored
      This quite large check in includes the following:
      
      Merge in some code from Ronald (mbgraph.c) that scans a Gf/arf group.
      This is used as a basis for a simple segmentation for the normal frames
      in a gf/arf group. This code also uses satd functions from Yaowu.
      
      Adds functionality for coding the latest possible position of an EOB for
      blocks in the segment. (Currently 0-15 only, hence just for 4x4 dct).
      Where the EOB position is 0 this acts like "skip" and the normal coding
      of skip at the per mb level is disabled.
      
      Added functions (seg_common.c) for setting and reading segment feature
      elements. These may want to be optimized away at some point but while the
      mecahnism is in a state of flux they provide a single location for making
      changes and keep things a bit cleaner.
      
      This is still proof of concept code. Currently the tested feature set:-
      
      Quantizer,
      Loop Filter level,
      Reference frame,
      Prediction Mode,
      EOB end stop.
      
      TBD:-
      
      Add functions for setting and reading the feature data with range
      and validity checking.
      
      Handling of signed and unsigned feature data. At the moment all is assumed
      to be signed and a sign bit is coded but many cannot be negative.
      
      Correct handling of EOB feature with intra coded blocks.
      
      Testing/trapping of legal/illegal ref frame and mode combinations.
      
      Transform size switch plus merge and test with 8c8 DCT work
      
      Merge and test with Sumans Segmenation coding optimizations
      
      Change-Id: Iee12e83661c7abbd1e0ce6810915eb4ec35e2d8e
      01ce04bc
  14. 14 Oct, 2011 1 commit
    • Yaowu Xu's avatar
      fixed the wrong rounding in inverse haar transform · 152ce6b2
      Yaowu Xu authored
      Given the current forward haar transform:
       f0 = I0 + I1 + I2 + I3
       f1 = I0 + I1 - I2 - I3
       f2 = I0 - I1 + I2 - I3
       f3 = I0 - I1 - I2 + I3
      the output of the inverse haar prior rounding:
       i0 = f0 + f1 + f2 + f3 = I0 * 4;
       i1 = f0 + f1 - f2 - f3 = I1 * 4;
       i2 = f0 - f1 + f2 - f3 = I2 * 4;
       i3 = f0 - f1 - f2 + f3 = I3 * 4;
      As all the numbers are 4 multiples, simply >>2 always produces prefect
      results in term of forward-inverse transform round trip error.
      
      Change-Id: Id6658b00ea819ee61cfeef8c5985d4cd3e77f44e
      152ce6b2
  15. 08 Oct, 2011 1 commit
    • Yaowu Xu's avatar
      fixed a decoder bug · 3ca84969
      Yaowu Xu authored
      When 8x8 transform is enabled, the decoder does an extra reconstruct
      on MBs that are coded using 8x8. This commit fixed the logic around
      the decoding of mb encoded with 8x8 transform.
      
      Change-Id: I6926557c9ef00eecb375f62946f7e140c660bf6f
      3ca84969
  16. 30 Sep, 2011 1 commit
    • Paul Wilkins's avatar
      Segment coding of mode and reference frame. · 156b221a
      Paul Wilkins authored
      Proof of concept test code that encodes mode and reference
      frame data at the segment level.
      
      Decode-able bit stream but some issues not yet resolved.
      As it this helps a little on a couple of clips but hurts on most as
      the basis for segmentation is unsound.
      
      To build and test, configure with
      --enable-experimental --enable-segfeatures
      
      Change-Id: I22a60774f69273523fb152db8c31f4b10b07c7f4
      156b221a