1. 17 Feb, 2017 1 commit
    • Rostislav Pehlivanov's avatar
      Implement a new rate control system · 002e7b7a
      Rostislav Pehlivanov authored
      This commit implements a new rate control system which was ported from
      Daala's rate control system (which was based off of Theora's rate
      control system) to the encoder. Its aim is to address the weaknesses of
      the current rate control system and eventually serve as its replacement.
      
      This is still work in progress. So far this commit only implements
      support for single pass encoding for constant quality and bitrate
      targeting.
      Additional commits which implement two-pass support and the rest to
      match the feature set of the current rate control system are coming
      soon.
      
      The rate control system hasn't been fully tuned (and will likely need
      additional tuning as the encoder's development progresses) and does
      contain some "hacks", to convert the quality to a quantizer value
      (empirical) and to tweak the quantizer in between golden frames (which
      uses some code from the current rate control system as well as code
      which attempts to model what that code does), the latter of which is
      only in the constant quality codepath.
      
      Bitrate targeting works much better than the current rate control
      system's targeting and will actually closely match the rate specified by
      the user without the current rate control system's bursty behaviour.
      
      Change-Id: I588fbfd2e80a3d21ce7176903115d6a96ef1700a
      002e7b7a
  2. 04 Feb, 2017 1 commit
  3. 03 Feb, 2017 2 commits
  4. 23 Jan, 2017 1 commit
  5. 19 Jan, 2017 1 commit
  6. 04 Jan, 2017 1 commit
    • Ryan Lei's avatar
      Add an experiment to disable lpf on tile boundaries · 7386eda0
      Ryan Lei authored
      This commit adds a new experiment to allow disabling of loop filtering
      on tile boundaries. It is implemented by adding a syntax field
      "loopfilter_across_tiles_enabled" into the uncompressed frame header. 
      If it is set to 0, decoder and encoder will disables loop filtering for
      block edges that are also tile boundaries.
      
      Change-Id: Ib80bfd82d49c74f1ba46ae18ceedb30704ac8aa5
      7386eda0
  7. 13 Dec, 2016 1 commit
  8. 10 Nov, 2016 1 commit
    • Thomas Davies's avatar
      Add options setting number of tile groups or MTU. · af6df175
      Thomas Davies authored
      Default MTU size is 0, which implies a fixed number
      of tile groups. MTU matching overrides fixed tile
      group. MTU matching will succeed unless a single
      tile is bigger than the MTU.
      
      --mtu-size is in bytes, and includes headers but
      not transport/wrapper overheads
      
      Change-Id: I2b70bd41b175b54273b02d836f2a84011f617a7c
      af6df175
  9. 09 Nov, 2016 1 commit
  10. 28 Oct, 2016 1 commit
    • Urvang Joshi's avatar
      RANGE_CHECK: "==" || ">" is simply ">=". · cd8ab904
      Urvang Joshi authored
      Also:
      - For unsigned ints, don't check value >= 0 as that is always true.
      - Add "-Wlogical-op" warning flag which would have warned that "logical
        'or' of collectively exhaustive tests is always true" before this
        patch.
      
      Change-Id: Idf3bd312464397f2df19256fc69b22f345dc7753
      cd8ab904
  11. 25 Oct, 2016 1 commit
  12. 24 Oct, 2016 2 commits
  13. 19 Oct, 2016 1 commit
  14. 30 Sep, 2016 1 commit
  15. 09 Sep, 2016 1 commit
  16. 02 Sep, 2016 1 commit
  17. 01 Sep, 2016 2 commits
  18. 16 Aug, 2016 1 commit
    • Yaowu Xu's avatar
      Port commits related to clpf and qm experiments · 0818a7c8
      Yaowu Xu authored
      Manually cherry-picked following commits from AOMedia git repository:
      bb2727c2 Sort includess for "clpf.h"
      c297fd00 Add quantisation matrix range parameters.
      0527894f Add encoder option and signaling for quant matrix control.
      4106232b Turn off trellis coding for quantization matrices.
      4017fca3 Modify tests to allow quantization matrices.
      1c122c24 Add quant and dequant functions for new quant matrices.
      95a89994 Enable CLPF
      f72782bb Fix a build issue
      73bae509 Add quantisation matrices and selection functions
      33208d20 Added support for constrained low pass filter (CLPF)
      
      Change-Id: I60fc1ee1ac40e6b9d1d00affd97547ee5d5dd6be
      0818a7c8
  19. 12 Aug, 2016 1 commit
  20. 10 Aug, 2016 1 commit
    • James Zern's avatar
      remove SVC · cc73e1fc
      James Zern authored
      spatial/temporal scalability are not supported in VP10 currently.
      + remove the unused vp10/encoder/skin_detection.[hc]
      
      this also enables DatarateTestLarge for VP10 which passes with no
      experiments enabled. these were removed previously when only the SVC
      tests should have been:
      134710af Disable tests not applicable to VP10
      
      Change-Id: I9ee7a0dd5ad3d8cc1e8fd5f0a90260fa43da387c
      cc73e1fc
  21. 04 Aug, 2016 1 commit
  22. 02 Aug, 2016 1 commit
  23. 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
  24. 24 May, 2016 2 commits
    • 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
    • Zoe Liu's avatar
      Fix --test-decode=warn to test mismatch · a63147ae
      Zoe Liu authored
      This patch always compares the most recent show frames between
      the encoder and the decoder to test the mismatch.
      
      Change-Id: I68a91ad0996a598231450debfd616e24992419b5
      a63147ae
  25. 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
  26. 28 Mar, 2016 1 commit
    • Yunqing Wang's avatar
      Make set_reference control API work in VP9 and VP10 · 9aaa3c93
      Yunqing Wang authored
      Moved the API patch from NextGen to NextGenv2 and also added this
      API to VP10. An example was included. To try it, for example, run
      the following command:
      $ examples/vpx_cx_set_ref vp10 352 288 in.yuv out.ivf 4 30
      
      Change-Id: Ib56bc3d365e530cfc8d859a13ddbf4c007907b81
      9aaa3c93
  27. 25 Mar, 2016 1 commit
    • Yunqing Wang's avatar
      Recover tile coding performance · bdcc1405
      Yunqing Wang authored
      After porting tile coding from VP9 to VP10, some performance
      degradation was seen because of the difference between VP9 and
      Vp10 baseline. This patch disabled some features in VP10 while
      tile coding is turned on. Also, an encoder control API was added
      back for this use case.
      
      Change-Id: I8f736db8388408a8cc35320a2f80abb02906571c
      bdcc1405
  28. 24 Mar, 2016 1 commit
    • Geza Lore's avatar
      Port large scale tile coding features from nextgen. · 490ba1ad
      Geza Lore authored
      If configured with --enable-ext-tile, the codec uses an alternative
      tile coding syntax in the bitstream. Changes include::
       - The maximum number of tile rows and columns is extended to 1024
         each.
       - The minimum tile width/height is 64 pixels (1 superblock).
       - A tile copy mode is added where a tile directly reuse the coded
         data of a previous tile
       - The meaning of the tile-columns and tile-rows codec parameters are
         overloaded to mean tile-width and tile-height in units of 64
         pixels.
       - All tiles should now be independent, including rows within the
         same columns, so large scale parallel, or independent decoding is
         possible.
       - vpxdec also gained the options to decode only a particular tile,
         tile row, or tile column.
      
      Changes without --enable-ext-tile:
       - All tiles should now be independent, including rows within the
         same columns, so large scale parallel, or independent decoding is
         possible.
       - vpxenc default tile configuration changed to use 1 tile column.
      
      Change-Id: I0cd08ad550967ac18622dae5e98ad23d581cb33e
      490ba1ad
  29. 22 Mar, 2016 2 commits
    • Yaowu Xu's avatar
      vp10/ -> av1/ · cfea7dd7
      Yaowu Xu authored
      Change-Id: Ia055d03656ad1580447eced8687949583fdf4089
      cfea7dd7
    • Yaowu Xu's avatar
      Rename vpx to aom · bf4202ed
      Yaowu Xu authored
      Change-Id: Ibc7933fba85feeb30ef9b14b302d932aff19f54e
      bf4202ed
  30. 25 Feb, 2016 2 commits
  31. 17 Feb, 2016 2 commits
    • James Zern's avatar
      vp10,encoder: relocate setjmp · fdc977af
      James Zern authored
      move to encoder_encode() as vp10_get_compressed_data() allocates data and
      would require some modification to make its error return meaningful.
      
      Change-Id: Ia5267c35d16ccd42b6da6d2136402b13e28f9159
      fdc977af
    • James Zern's avatar
      vp10_cx_iface,encode: remove redundant cpi check · b5029a25
      James Zern authored
      this is allocated in init(), a NULL pointer on encode() should be
      treated as a failure.
      
      Change-Id: I09c206f088982716fd5acc39949ceb25576313fc
      b5029a25
  32. 28 Jan, 2016 1 commit
  33. 26 Jan, 2016 1 commit