1. 26 Nov, 2014 1 commit
  2. 25 Nov, 2014 1 commit
    • Yunqing Wang's avatar
      vp9_ethread: modify VP9_COMP structure · edbd61e1
      Yunqing Wang authored
      This patch modified struct VP9_COMP. Created a struct ThreadData
      to include data that need to be copied for each thread. In
      multiple thread case, one thread processes one tile. all threads
      share one copy of VP9_COMP,
      (refer to VP9_COMP *cpi in the code)
      but each thread has its own copy of ThreadData,
      (refer to ThreadData *td in the code).
      Therefore, within the scope of encode_tiles(), both cpi and td
      need to be passed as function parameters.
      
      In single thread case, the FRAME_COUNTS pointer in ThreadData
      points to "counts" in VP9_COMMON.
      
      Change-Id: Ib37908b2d8e2c0f4f9c18f38017df5ce60e8b13e
      edbd61e1
  3. 24 Nov, 2014 1 commit
    • Jingning Han's avatar
      Key frame non-RD mode decision process · 2fbdfd2c
      Jingning Han authored
      This commit makes a non-RD coding mode decision process for key
      frame coding. It can be optionally turned on in speed -6 and above.
      
      Change-Id: I0847258b392877a0210b4768bef88ebc9ad009b5
      2fbdfd2c
  4. 21 Nov, 2014 2 commits
    • Paul Wilkins's avatar
      Remove rate component adjustment for AQ1 · f5209d7e
      Paul Wilkins authored
      In AQ1 a rate adjustment was applied for blocks coded with a
      deltaq. This tends to skew the partition selection and cause
      rate overshoot.
      
      For example, consider a 64x64 super block where some but not all
      sub blocks are in a low q segment and some are in a high q segment.
      The choice of Q when considering large partition and transform sizes
      is defined by the lowest sub block segment id (currently this implies the
      lowest Q). If some parts of the larger partition are very hard this will
      cause a high rate component.
      
      The correct behavior here is for the rd code to discard the large partition
      choice and break down to sub blocks where some have low and some
      have high Q.  However the rate correction factor above mask the high
      cost of coding at a larger partition size.
      
      Change-Id: Ie077edd0b1b43c094898f481df772ea280b35960
      f5209d7e
    • Paul Wilkins's avatar
      Add variance restriction to AQ2. · d0312379
      Paul Wilkins authored
      Add an additional restriction to bit/complexity based
      segmentation based on spatial variance.
      
      Only lower Q when both the number of bits spent
      in the initial encoding pass and the spatial complexity are
      below a threshold. This will prevent the low Q segments
      being used just because there is a surfeit of bits.
      
      Small metrics gains especially opsnr.
      derf ~0.2% std-hd ~0.3%
      
      Change-Id: I6a8496d466d673f9b0e2b2ca6304ea7b6d8e1cce
      d0312379
  5. 20 Nov, 2014 3 commits
  6. 15 Nov, 2014 1 commit
    • Yunqing Wang's avatar
      vp9_ethread: combine encoder counts in separate struct · d0b547c6
      Yunqing Wang authored
      Several frame counters in encoder are updated at SB level. Combine
      those counters and put them in a separate struct, which allows us
      to allocate one copy for each thread.
      
      Change-Id: I00366296a13c0ada4d8fa12f5e07728388b6cab7
      d0b547c6
  7. 14 Nov, 2014 1 commit
  8. 13 Nov, 2014 1 commit
    • Yunqing Wang's avatar
      vp9_ethread: modify the cyclic refresh struct · 8ee605f1
      Yunqing Wang authored
      Two members in struct CYCLIC_REFRESH
        int64_t projected_rate_sb;
        int64_t projected_dist_sb;
      are updated at the superblock level, which makes them shared data
      in the multi-thread situation, and requires extra work to handle
      them. However, those values are updated and used immediately, and
      therefore can be removed. This patch cleaned up the code and
      removed the two members.
      
      Change-Id: I2c6ee4552bf49fb63ce590cdb47f9723974fffb1
      8ee605f1
  9. 07 Nov, 2014 1 commit
  10. 06 Nov, 2014 2 commits
    • Jingning Han's avatar
      Remove unused is_background function · 10da059b
      Jingning Han authored
      Change-Id: Ia540eac5f066ae95280c2f898370eddf0110c279
      10da059b
    • Jingning Han's avatar
      Rework cut-off decisions in cyclic refresh aq mode · caaf63b2
      Jingning Han authored
      This commit removes the cyclic aq mode dependency on
      in_static_area and reworks the corresponding cut-off thresholds.
      It improves the compression performance of speed -5 by 1.47% in
      PSNR and 2.07% in SSIM, and the compression performance of speed
      -6 by 3.10% in PSNR and 5.25% in SSIM. Speed wise, about 1% faster
      in both settings at high bit-rates.
      
      Change-Id: I1ffc775afdc047964448d9dff5751491ba4ff4a9
      caaf63b2
  11. 01 Nov, 2014 1 commit
    • hkuang's avatar
      Bind motion vectors with frame buffer structure. · 55577431
      hkuang authored
      This will save a lot of memory for decoder due to removing of prev_mi,
      but prev_mi is still needed in encoder. So this will increase a little bit
      memory for encoder.
      
      Change-Id: I24b2f1a423ebffa55a9bd2fcee1077dac995b2ed
      55577431
  12. 30 Oct, 2014 1 commit
    • Jingning Han's avatar
      Rework pred pixel buffer system in non-RD coding mode · 7bea8c59
      Jingning Han authored
      This commit makes the inter prediction buffer system to support
      hybrid partition search. It reduces the runtime of speed -5 by
      about 3%. No compression performance change.
      
      vidyo1 720p 1000 kbps
      11831 ms -> 11497 ms
      
      nik 720p 1000 kbps
      10919 ms -> 10645 ms
      
      Change-Id: I5b2da747c6395c253cd074d3907f5402e1840c36
      7bea8c59
  13. 28 Oct, 2014 2 commits
    • Jingning Han's avatar
      Use zero motion vector in choose_partitioning · 07436abb
      Jingning Han authored
      The zero motion vector was effectively used in the subsampled pixel
      based variance calculation. This commit makes it directly use zero
      mv to generate prediction.
      
      Change-Id: Ica83dc843e9f8da2f89c3ef451e50f16214c0def
      07436abb
    • Jingning Han's avatar
      Refactor encoder tile data structure · d56b3eb0
      Jingning Han authored
      Make the common tile info as one element in the encoder tile data
      struct.
      
      Change-Id: I8c474b4ba67ee3e2c86ab164f353ff71ea9992be
      d56b3eb0
  14. 27 Oct, 2014 1 commit
  15. 24 Oct, 2014 1 commit
    • Jingning Han's avatar
      Tile based adaptive mode search in RD loop · eee201c2
      Jingning Han authored
      Make the spatially adaptive mode search in rate-distortion
      optimization loop inter tile independent. Experiments suggest that
      this does not significantly change the coding staticstics.
      
      Single tile, speed 3:
      pedestrian_area 1080p 1500 kbps
      59192 b/f, 40.611 dB, 101689 ms
      
      blue_sky 1080p 1500 kbps
      58505 b/f, 36.347 dB, 62458 ms
      
      mobile_cal 720p 1000 kbps
      13335 b/f, 35.646 dB, 45655 ms
      
      as compared to 4 column tiles, speed 3:
      pedestrian_area 1080p 1500 kbps
      59329 b/f, 40.597 dB, 101917 ms
      
      blue_sky 1080p 1500 kbps
      58712 b/f, 36.320 dB, 62693 ms
      
      mobile_cal 720p 1000 kbps
      13191 b/f, 35.485 dB, 45319 ms
      
      Change-Id: I35c6e1e0a859fece8f4145dec28623cbc6a12325
      eee201c2
  16. 22 Oct, 2014 1 commit
  17. 21 Oct, 2014 4 commits
  18. 20 Oct, 2014 2 commits
    • Jingning Han's avatar
      Hybrid partition search for rtc coding mode · 9f128b3e
      Jingning Han authored
      This commit re-designs the recursive partition search scheme in
      rtc speed -5. It first checks if the current block is under cyclic
      refresh mode. If so, apply recursive partition search. Otherwise,
      perform sub-sampled pixel based partition selection. When the
      pre-selection finds the partition size should be 32x32 or above,
      use the partition size directly. Otherwise, apply partition search
      at nearby levels around the preset partition size.
      
      It is enabled in speed -5. The compression performance of rtc
      speed -5 is improved by 9.4%. Speed wise, the run-time goes slower
      from 1% to 10%.
      
      nik_720p, 1000 kbps
      33220 b/f, 38.977 dB, 10109 ms -> 33200 b/f, 39.119 dB, 10210 ms
      
      vidyo1_720p, 1000 kbps
      16536 b/f, 40.495 dB, 10119 ms -> 16536 b/f, 40.827 dB, 11287 ms
      
      Change-Id: I65adba352e3adc03bae50854ddaea1b421653c6c
      9f128b3e
    • Paul Wilkins's avatar
      Resolve compiler warning. · 9626a0cb
      Paul Wilkins authored
      conversion from 'const int64_t' to 'int', possible loss of data.
      
      Change-Id: I471a73bba5d448d9be0ef9cbf1590fa73aa74be1
      9626a0cb
  19. 18 Oct, 2014 1 commit
  20. 17 Oct, 2014 2 commits
    • Yunqing Wang's avatar
      Remove the dependency in token storing locations · 7c4992c4
      Yunqing Wang authored
      Currently, the tokens for a tile are stored immediately after its
      preceding tile, which causes a dependency. This is unnecessary
      since we always allocate enough memory for tokens. Removing
      the dependency allows token writing done in parallel. This patch
      doesn't change encoding result.
      
      Change-Id: I7365a6e5e2c2833eb14377c37e1503c9d0f26543
      7c4992c4
    • Jingning Han's avatar
      Remove unused VAR_BASED_FIXED_PARTITION flag · e1111fba
      Jingning Han authored
      Change-Id: I4ce19b7cb1c45fed86e81ee785e787630020fb4f
      e1111fba
  21. 15 Oct, 2014 4 commits
    • Jingning Han's avatar
      Add init and reset functions for RD_COST struct · e2612fbd
      Jingning Han authored
      Change-Id: I2902de7051a883fd22e27a655209233733969cfd
      e2612fbd
    • Jingning Han's avatar
      Use rate/distortion thresholds to control non-RD partition search · 5e766cce
      Jingning Han authored
      Compare the estimated rate and distortion to the thresholds scaled
      according to the operating block size and determine if further
      split partition search will be run. The compression performance of
      speed -5 is changed by -0.074%. The encoding speed is 10% - 15%
      faster.
      
      vidyo1 720p
      16545 b/f, 40.492 dB, 11475 ms -> 16535 b/f, 40.486 dB, 10100 ms
      
      nik720p
      16624 b/f, 36.310 dB, 10071 ms -> 16617 b/f, 36.313 dB, 8346 ms
      
      Change-Id: Ic9197ab5761279ae55d2fb7813b2af0e0db497b8
      5e766cce
    • Marco's avatar
      Some updates for Speed 6/VAR_BASED_PARTITION. · 09ea74f1
      Marco authored
      Reduce the intra_cost_penalty for non-rd mode,
      and some updates to VAR_BASED_PARTITION.
      
      Visual tests show some improvement at Speed 6, for RTC clips.
      
      Change-Id: If9090daf7aed14906a32d931a538ab544bbca606
      09ea74f1
    • Jingning Han's avatar
      Replace copy_partitioning use case with choose_partitioning · 89b8c7a5
      Jingning Han authored
      This commit replaces the use of copy_partitioning with
      choose_partitioning based on the sse of subsamped pixels, which
      provides significantly better coding performance and runs at
      similar speed, as compared to copy_partitioning. It improves rtc
      speed 5 coding performance by 3%.
      
      Change-Id: I52d3682a12dce0147f5e52383a594fc242ca3228
      89b8c7a5
  22. 13 Oct, 2014 1 commit
    • Jingning Han's avatar
      Refactor rate distortion cost structure · 811cef97
      Jingning Han authored
      This commit makes a struct that contains rate value, distortion
      value, and the rate-distortion cost. The goal is to provide a
      better interface for rate-distortion related operation. It is
      first used in rd_pick_partition and saves a few RDCOST calculations.
      
      Change-Id: I1a6ab7b35282d3c80195af59b6810e577544691f
      811cef97
  23. 10 Oct, 2014 1 commit
  24. 09 Oct, 2014 3 commits
  25. 07 Oct, 2014 1 commit
    • Jim Bankoski's avatar
      experimental : partition using 1/8 x 1/8 image · 0ce51d82
      Jim Bankoski authored
      The concept:
      
      There's too much noise in source pixels for variance and at low bitrate
      the reconstructed looks nothing like the source so we have problems
      getting good partitionings with either.   This skirts the issue by using
      a box blur scaled down version for variance calculations.  To compare
      against source_var_ moved keyframe to be rd based like source_var.
      
      Change-Id: Ie3babdbfadae324b7b5a76bea192893af27f0624
      0ce51d82