1. 19 Jul, 2016 1 commit
    • Sarah Parker's avatar
      Add global motion parameters to compressed header · 5fa46c0b
      Sarah Parker authored
      Currently nothing is implemented to compute GM parameters, this
      just adds the capability to send them in the bitstream if they
      were computed. Still need to implement the reconstruction
      based on the parameters in reconinter.
      
      Change-Id: I72aea3c6a9de9f5a40f96da76c82b54a52781fe2
      5fa46c0b
  2. 11 Jul, 2016 1 commit
  3. 08 Jul, 2016 1 commit
  4. 01 Jul, 2016 1 commit
    • Wei-ting Lin's avatar
      Remove reference frame buffer update for show_exsiting_frame · f9e38a7b
      Wei-ting Lin authored
      Originally we need to send the refresh flag and the virtual indices
      mapping for the reference frame buffer update for show_existing_frame to
      have the BWDREF_FRAME replace the LAST_FRAME.
      
      To remove sending this information, we update the the virtual indices
      of the reference frame buffer after the last_bipred_frame is encoded,
      and therefore the decoder will receive the updated reference mapping
      at the next non-show-existing frame.
      
      As a result, we can save 4 bytes per show-existing frame, and get 0.12,
      0.2, and 0.07 BDRATE improvement in lowres, derf, and midref test set
      respectively.
      
      Change-Id: I63d41ee6ea99884798f0778b789d2701e2f2d3e0
      f9e38a7b
  5. 23 Jun, 2016 1 commit
  6. 17 Jun, 2016 1 commit
    • Zoe Liu's avatar
      Merge bi-predictive frames to EXT_REFS · 5805a14c
      Zoe Liu authored
      This patch removed the experiment of BIDIR_PRED and merged the feature
      into the experiment of EXT_REFS:
      
      (1) Each frame now has up to 6 reference frames, namely
          LAST_FRAME, LAST2_FRAME, LAST3_FRAME, GOLDEN_FRAME, (forward) and
          BWDREF_FRAME, ALTREF_FRAME (backward);
          LAST4_FRAME has been removed;
      (2) First pass still keeps the 8 updates:
          KF_UPDATE, LF_UPDATE, GF_UPDATE, ARF_UPDATE, OVERLAY_UPDATE, and
          BRF_UPDATE, LAST_BIPRED_UPDATE, BI_PRED_UPDATE;
      (3) show_existing_frame==1 is supported in the experiment of EXT_REFS;
      (4) New encoding modes are added for both single-ref and compound cases,
          through the use of the 2 extra forward references (LAST2 & LAST3)
          and the 1 extra backward reference (BWDREF).
      
      RD performance wise, using Overall PSNR: Avg/BDRate
              Bipred only      Prev EXT_REFS    Current EXT_REFS with bipred
      lowres: -3.474/-3.324    -1.748/-1.586    -4.613/-4.387
      derflr: -2.097/-1.353    -1.439/-1.215    -3.120/-2.252
      midres: -2.129/-1.901    -1.345/-1.185    -2.898/-2.636
      
      If in vp10/encoder/firstpass.h, change BFG_INTERVAL from 2 to 3, i.e. to
      use 2 bi-predictive frames than 1, a further improvement may be
      obtained:
                       Current EXT_REFS with bipred
              1 bi-predictive frame    2 bi-predictive frames
      lowres: -4.613/-4.387            -4.675/-4.465
      derflr: -3.120/-2.252            -3.333/-2.516
      midres: -2.898/-2.636            -3.406/-3.095
      
      Change-Id: Ib06fe9ea0a5cfd7418a1d79b978ee9d80bf191cb
      5805a14c
  7. 16 Jun, 2016 2 commits
  8. 10 Jun, 2016 1 commit
  9. 31 May, 2016 1 commit
  10. 28 May, 2016 1 commit
    • Zoe Liu's avatar
      Make the bi-predictive frame group interval adjustable · e89ca180
      Zoe Liu authored
      This is for the bidir-pred experiment. Previously the length of the
      bi-predictive frame group interval is fixed at 2, i.e. one
      bi-predictive frame may be inserted every other frame. This patch
      makes the length adjustable, i.e. any positive number may be
      specified, but the use of the backward ref will be turned off if the
      bi-predictive frame group interval is larger than the golden frame
      group.
      
      Further, an additional rate factor level has been added:
      INTER_LOW
      , which applies to LAST_BIPRED_UPDATE frames that are not used as
      references.
      
      Change-Id: I5514d34a64dd486bbb5756c2d0612946f598a789
      e89ca180
  11. 26 May, 2016 1 commit
  12. 24 May, 2016 1 commit
    • Zoe Liu's avatar
      Added an experiment "bidir_pred" for backward prediction · cf5083d4
      Zoe Liu authored
      Major parts have been implemented as follows:
      (1) Added BRF_UPDATE, LASTNRF_UPDATE, and NRF_UPDATE in firstpass.c;
      (2) Added the handling for the scenario of
      "cpi->common.show_existing_frame == 1" at the encoder;
      (3) Added a new reference frame of BWDREF_FRAME;
      (4) Have bwd-ref work with upsampled references.
      
      Note that when the experiment of "ext_refs" turned on, this experiment
      will be turned off automatically currently.
      
      RD performance in Overall PSNR has been improved, compared against the
      VP10 baseline:
      
      lowres: Avg -3.312; BDRate -3.154
      derflr: Avg -1.927; BDRate -1.176
      midres: Avg -2.149; BDRate -2.001
      hdres : Avg -0.567; BDRate -0.588
      
      Change-Id: I4c06ff51cc20194bffbd4d2346e57ba3dcf6b62c
      cf5083d4
  13. 20 May, 2016 1 commit
  14. 18 May, 2016 1 commit
    • Jingning Han's avatar
      Account sub8x8 block reference filter type for prob context · 9161464f
      Jingning Han authored
      If a reference block is coded with sub8x8 block size, and if it
      has sub-pixel level motion vectors, its prediction filter type
      should be used as context information.
      
      The coding performance gains of dual filter type coding scheme are
      lowres  0.57%
      hdres   0.88%
      
      Change-Id: I68b98f2518d02f11c29d0256aeb45b2580fe5cac
      9161464f
  15. 16 May, 2016 1 commit
  16. 10 May, 2016 2 commits
  17. 09 May, 2016 2 commits
    • Yunqing Wang's avatar
      Refine VP10 REFRESH_FRAME_CONTEXT_MODE · 484ba024
      Yunqing Wang authored
      In VP10, REFRESH_FRAME_CONTEXT_OFF mode is only set when the error
      resillient mode is on. Instead of being used to decide how to update
      the frame contexts, it is used to decide if or not to reset the
      frame contexts.
      
      To verify, ran borg test on lowres set. The result is neutral.
      Overall PSNR: -0.006%; SSIM: -0.006%.
      
      Change-Id: Ic48265cf7488e80c6f5aab3eef7ba1c273506419
      484ba024
    • Alex Converse's avatar
      Remove the ANS rename on pack_mb_tokens(). · 4d22cc15
      Alex Converse authored
      This fixes the ans+var_tx combination.
      
      Change-Id: I4c34edb1deac4475c97ce1907c1d6bdf23ce3fc0
      4d22cc15
  18. 07 May, 2016 3 commits
    • Yaowu Xu's avatar
      Make type conversions explicit · 98c59c98
      Yaowu Xu authored
      This eliminates MSVC compiler warnings.
      
      Change-Id: Id6ace2586ed7c6248366905b133448fe8ecbd53d
      98c59c98
    • Zoe Liu's avatar
      Make LAST_FRAME always point to the newly coded frame in ext-refs · a912c6ec
      Zoe Liu authored
      This patch changes the encoder only for the ext-refs experiment. For
      each newly coded frame to refresh the LAST_FRAME, the decoder is
      notified that the LAST4_FRAME is to be refreshed, and read out the
      updated reference frame buffer vitural indexes for the next coded
      frame in a way that:
      LAST4_FRAME => LAST_FRAME,
      LAST_FRAME  => LAST2_FRAME,
      LAST2_FRAME => LAST3_FRAME, and
      LAST3_FRAME => LAST4_FRAME.
      
      Compared against the original ext-refs experiment in TOT, a small gain
      is achieved in overall PSNR:
      lowres Avg: -0.154
      lowres BDRate: -0.044
      
      Change-Id: I648810c146a3cd915b408274a9373b7d38324864
      a912c6ec
    • Jingning Han's avatar
      Dual prediction filter type for motion compensated reference · bd333263
      Jingning Han authored
      Make the bit-stream level support per direction filter type coding
      for motion compensated reference.
      
      Change-Id: I61a2360b301075f6734cfd9711b7ae68f214174d
      bd333263
  19. 06 May, 2016 1 commit
    • Alex Converse's avatar
      Rename pick_filter_intra. · 130cccba
      Alex Converse authored
      The word 'pick' is usually used in functions that make decisions where
      the bitstream allows multiple legal choices, and not to limit the
      bitstream format itself.
      
      Change-Id: Ia60709c29e004475e1aa8861aefded27ebaf4712
      130cccba
  20. 05 May, 2016 2 commits
    • Jingning Han's avatar
      Clean up ext-interp experiment · 8b084b68
      Jingning Han authored
      Remove the unused sub-experiments within the ext-interp experiment.
      
      Change-Id: I716e3392412d02c56f9395a86c9cab02f580fa59
      8b084b68
    • Geza Lore's avatar
      Fix mismatch with ext-interp. · 1502d9e4
      Geza Lore authored
      The encoder signals the interp filter type in the frame header if all
      blocks use the same filter (see bitstream.c:fix_interp_filter). This
      decision is made based on the counts, but with ext-interp, the counts
      are actually only incremented for blocks that fail vp10_is_interp_needed
      (see for example encodeframe.c:update_state), otherwise a default value
      is used (EIGHTTAP_REGULAR). The decoder however first checks if the
      interp filter is signaled at the frame level, and uses that filter type
      for all blocks, even if the default value should have been used.
      
      This patch makes the decoder first check with vp10_is_interp_needed
      to see if the default value should be used and then checks the frame
      level signaling, which reconciles the difference between encoder and
      decoder.
      
      Change-Id: I87857ade42dea06b0d5ec2a029e9219268334dbb
      1502d9e4
  21. 03 May, 2016 1 commit
  22. 29 Apr, 2016 1 commit
  23. 28 Apr, 2016 2 commits
    • Debargha Mukherjee's avatar
      Brings back near-near compound mode into ext-inter · 7ff79434
      Debargha Mukherjee authored
      lowres: improves by 0.1%
      
      Change-Id: I245019916bf47c6e24bc8c3953b86715ab0193c9
      7ff79434
    • Geza Lore's avatar
      Fix some mismatches when using ext-interp. · bf93b385
      Geza Lore authored
      With ext interp, write_switchable_interp_filter calls
      vp10_is_interp_needed, which needs access to the reference frame
      buffers to check if they are scaled, the ref frame buffer pointer
      at this point used to be uninitialized in the encoder resulting in
      bitstream syntax mismatch when the encoder/decoder did not read/write
      the interp filter element consistently.
      
      Change-Id: Ie0be2a19cbfcb5639a751aa857458e91c23b8fe3
      bf93b385
  24. 27 Apr, 2016 1 commit
  25. 19 Apr, 2016 3 commits
  26. 16 Apr, 2016 1 commit
    • Yue Chen's avatar
      Optimization for EXT_INTER + OBMC combination · 321794c4
      Yue Chen authored
      In the rd loop, check the perf of obmc, whose mv is copied from regular
      inter predictor, when wedge interinter is better than regular inter
      (previously it will force allow_obmc = 0). The condition of the early
      termination before this step is relaxed to avoid skipping too many obmc
      predictions. The rates of the overhead are properly calculated for these tools.
      
      The logic of the bitstream syntax:
      (a single ref) the interintra flag is sent first, only if it is 0, we
      send the obmc flag;
      (compound refs) the obmc flag is sent first, only if it is 0, we send
      the wedge interinter flag
      
      Coding gain
      lowres: 0.428% (2.287%->2.715%)
      
      Change-Id: I5f3a34640b398e313cbf84235c9fe2073eb2173f
      321794c4
  27. 13 Apr, 2016 2 commits
    • Alex Converse's avatar
      Use an exponential growth approach for the ANS reversal buffer. · 5d2b0f93
      Alex Converse authored
      Memory constrained hardware can window the data via our standard windowing
      mechanism, tiles.
      
      Change-Id: Ib1cfd157604a8c9d9f9a9f2b0ba3bc2fd0643082
      5d2b0f93
    • Geza Lore's avatar
      Fix 2 warning when building with GCC 5. · c6cf7a61
      Geza Lore authored
      These caused the following warning with GCC 5:
           warning: logical not is only applied to the left hand side of
           comparison [-Wlogical-not-parentheses]
           assert(!is_compound == (cm->reference_mode == SINGLE_REFERENCE));
      
      Change-Id: If296aabb2311ceb7d903b395c1549ef81c2cbf9b
      c6cf7a61
  28. 12 Apr, 2016 2 commits
  29. 07 Apr, 2016 1 commit
    • Geza Lore's avatar
      Make superblock size variable at the frame level. · 454989ff
      Geza Lore authored
      The uncompressed frame header contains a bit to signal whether the
      frame is encoded using 64x64 or 128x128 superblocks. This can vary
      between any 2 frames.
      
      vpxenc gained the --sb-size={64,128,dynamic} option, which allows the
      configuration of the superblock size used (default is dynamic). 64/128
      will force the encoder to always use the specified superblock size.
      Dynamic would enable the encoder to choose the sb size for each
      frame, but this is not implemented yet (dynamic does the same as 128
      for now).
      
      Constraints on tile sizes depend on the superblock size, the following
      is a summary of the current bitstream syntax and semantics:
      
      If both --enable-ext-tile is OFF and --enable-ext-partition is OFF:
           The tile coding in this case is the same as VP9. In particular,
           tiles have a minimum width of 256 pixels and a maximum width of
           4096 pixels. The tile width must be multiples of 64 pixels
           (except for the rightmost tile column). There can be a maximum
           of 64 tile columns and 4 tile rows.
      
      If --enable-ext-tile is OFF and --enable-ext-partition is ON:
           Same constraints as above, except that tile width must be
           multiples of 128 pixels (except for the rightmost tile column).
      
      There is no change in the bitstream syntax used for coding the tile
      configuration if --enable-ext-tile is OFF.
      
      If --enable-ext-tile is ON and --enable-ext-partition is ON:
           This is the new large scale tile coding configuration. The
           minimum/maximum tile width and height are 64/4096 pixels. Tile
           width and height must be multiples of 64 pixels. The uncompressed
           header contains two 6 bit fields that hold the tile width/heigh
           in units of 64 pixels. The maximum number of tile rows/columns
           is only limited by the maximum frame size of 65536x65536 pixels
           that can be coded in the bitstream. This yields a maximum of
           1024x1024 tile rows and columns (of 64x64 tiles in a 65536x65536
           frame).
      
      If both --enable-ext-tile is ON and --enable-ext-partition is ON:
           Same applies as above, except that in the bitstream the 2 fields
           containing the tile width/height are in units of the superblock
           size, and the superblock size itself is also coded in the bitstream.
           If the uncompressed header signals the use of 64x64 superblocks,
           then the tile width/height fields are 6 bits wide and are in units
           of 64 pixels. If the uncompressed header signals the use of 128x128
           superblocks, then the tile width/height fields are 5 bits wide and
           are in units of 128 pixels.
      
      The above is a summary of the bitstream. The user interface to vpxenc
      (and the equivalent encoder API) behaves a follows:
      
      If --enable-ext-tile is OFF:
           No change in the user interface. --tile-columns and --tile-rows
           specify the base 2 logarithm of the desired number of tile columns
           and tile rows. The actual number of tile rows and tile columns,
           and the particular tile width and tile height are computed by the
           codec ensuring all of the above constraints are respected.
      
      If --enable-ext-tile is ON, but --enable-ext-partition is OFF:
           No change in the user interface. --tile-columns and --tile-rows
           specify the WIDTH and HEIGHT of the tiles in unit of 64 pixels.
           The valid values are in the range [1, 64] (which corresponds to
           [64, 4096] pixels in increments of 64.
      
      If both --enable-ext-tile is ON and --enable-ext-partition is ON:
           If --sb-size=64 (default):
               The user interface is the same as in the previous point.
               --tile-columns and --tile-rows specify tile WIDTH and HEIGHT,
               in units of 64 pixels, in the range [1, 64] (which corresponds
               to [64, 4096] pixels in increments of 64).
           If --sb-size=128 or --sb-size=dynamic:
               --tile-columns and --tile-rows specify tile WIDTH and HEIGHT,
               in units of 128 pixels in the range [1, 32] (which corresponds
               to [128, 4096] pixels in increments of 128).
      
      Change-Id: Idc9beee1ad12ff1634e83671985d14c680f9179a
      454989ff