1. 02 Nov, 2017 2 commits
    • Debargha Mukherjee's avatar
      Add an expt to remove allow high precision mv flag · b214775d
      Debargha Mukherjee authored
      Change-Id: I3873acafcd9539da96f67328cdb8faf7798be90f
      b214775d
    • Rupert Swarbrick's avatar
      Refactor border treatment in loop restoration · 5b401364
      Rupert Swarbrick authored
      Previously we were calling aom_extend_frame_borders to generate
      extended pixels for use in loop-restoration. This generates quite a
      large border, when we only need 3 pixels.
      
      In addition, we were also calling extend_frame, which does the same
      thing but with a smaller border, once (in the decoder) or multiple
      times (in the encoder) per plane.
      
      This patch tidies all of this up so that we only call extend_frame
      once per plane, with the largest border size we need (3px).
      
      It also adds two new #defines. RESTORATION_BORDER is the 3 pixel
      border needed to do filtering for a processing
      unit. RESTORATION_CTX_VERT is the number of rows saved for each stripe
      when doing striped loop restoration.
      
      Change-Id: I2c3ffcc19808f79db195f76d857e2f23da5d8a84
      5b401364
  2. 01 Nov, 2017 2 commits
    • Yaowu Xu's avatar
      Correct token allocation size for tiles · e39b3b8b
      Yaowu Xu authored
      With --enable-ext-partition, it is possible to have superblock size at
      both 64x64 and 128x128. But MAX_SB_SIZE_LOG2 is defined to be 7, i.e.
      128x128 size. In get_token_alloc(), the token count for a tile or a
      frame is always computed based on "tokens/superblock * number of
      superblocks", so it should use the actual superblock size, instead of
      128x128.
      
      The segfault in #988 is a result when every tile is defined at one
      single superblock of 64x64, the token size computation for each tile
      was assuming it is 128x128, resulting 4x overestimate of the token
      count for every tile. This caused the pointer for many tiles to go
      beyond the allocated token arrary, which is correctly allocated at
      frame level.
      
      BUG=aomedia:988
      
      Change-Id: I2da21f181446ad7117ce3269f01a43950c379028
      e39b3b8b
    • Yue Chen's avatar
      Remove CONFIG_INTERINTRA · 670b660d
      Yue Chen authored
      Change-Id: Icbedc16b01adf9b48f0f357ec89143462865d54e
      670b660d
  3. 31 Oct, 2017 1 commit
  4. 30 Oct, 2017 5 commits
    • Jingning Han's avatar
      Reset current_video_frame in key frame · d8a15a66
      Jingning Han authored
      Reset the frame index tracking to 0 when key frame is inserted in
      the frame sequence.
      
      Change-Id: Ib80313004fc000e7127a9797af5afe9029c0cb45
      d8a15a66
    • Debargha Mukherjee's avatar
      Remove compound-segment/wedge config flags · 371968cd
      Debargha Mukherjee authored
      Change-Id: I39cfbb135add0553cadf64481b13786831fbdddd
      371968cd
    • Urvang Joshi's avatar
      Remove an obsolete comment · 78c229b4
      Urvang Joshi authored
      Change-Id: I9b1351263286041d718a1b54735c17aeb5f8a0a7
      78c229b4
    • Sebastien Alaiwan's avatar
      Remove experimental flag of GLOBAL_MOTION · 48795807
      Sebastien Alaiwan authored
      This experiment has been adopted, we can simplify the code
      by dropping the associated preprocessor conditionals.
      
      Change-Id: I9c9d6ef5317798cbf237307a9754fe7e03bdda47
      48795807
    • Rupert Swarbrick's avatar
      Stop backward adaptation if EXT_TILE + cm->large_scale_tile · 84b05ac1
      Rupert Swarbrick authored
      Backwards adaptation doesn't really make sense in this context,
      because ext-tile means the decoder might not decode every tile in the
      frame, in which case it can't work out how to adapt probabilities.
      
      It turns out that the tests in the tree were passing when
      SIMPLE_BWD_ADAPT was disabled because (presumably) all of them
      happened to decode every tile, so backward adaptation worked as you'd
      expect. With SIMPLE_BWD_ADAPT, there's some code in get_tile_buffers
      to figure out which is the largest tile. This wasn't mirrored in
      get_ls_tile_buffers, which caused the encoder and decoder to get out
      of sync because they ended up with different CDFs. You also can't
      easily fix things in get_ls_tile_buffers because that code is careful
      not to calculate the size of tiles it doesn't need.
      
      BUG=aomedia:917
      
      Change-Id: Ia926692f86ca1466252108e09da3de590d45f048
      84b05ac1
  5. 27 Oct, 2017 1 commit
  6. 26 Oct, 2017 3 commits
  7. 25 Oct, 2017 2 commits
    • Cheng Chen's avatar
      JNT_COMP: 2. assign proper weigths in rdopt · efc55fd9
      Cheng Chen authored
      Change-Id: I255be6e0193dd6b91424ce53ed41aeaaeb1c01a7
      efc55fd9
    • Rupert Swarbrick's avatar
      Simplify the search in pickrst.c · 1a96c3f5
      Rupert Swarbrick authored
      The end results should be essentially the same, except hopefully a
      little better because the previous code got the costing slightly
      wrong if there were multiple tiles.
      
      The code was doing something quite complicated to search for the best
      restoration types; this patch makes it much simpler. Basically,
      av1_pick_filter_restoration loops over the planes in the image. For
      each plane, it loops over the possible restoration types, calling
      search_rest_type for each one.
      
      search_rest_type iterates over the restoration units in the image,
      resetting the current context on tile boundaries and calling
      search_<rest_type> for each restoration unit.
      
      The search_norestore function just computes the SSE error with no
      restoration. The search_wiener and search_sgrproj functions compute
      the best set of coefficients and then the resulting SSE error with
      those coefficients (ignoring the bit cost, so the result can be
      re-used for switchable restoration).
      
      In all cases but search_norestore, the search function has to decide
      what restoration type is best for each restoration unit. For example,
      search_wiener could choose to enable or disable Wiener filtering on
      this unit.
      
      Eventually, search_rest_type calculates the RDCOST after summing bit
      rates and SSE errors over the restoration units. This cost gets
      returned to av1_pick_filter_restoration which can then choose the best
      frame-level restoration type.
      
      Change-Id: I9bc17eb47cc46413adae749a43a440825c41bba6
      1a96c3f5
  8. 24 Oct, 2017 2 commits
    • Hui Su's avatar
      Remove experimental flag of chroma_sub8x8 · 9fa96234
      Hui Su authored
      Change-Id: I32c5015bedef07f58413c679b4aaf30651a357b9
      9fa96234
    • Rupert Swarbrick's avatar
      Expose av1_loop_restoration_filter_unit in restoration.h · dd6f09ab
      Rupert Swarbrick authored
      This patch also does a certain amount of rejigging for loop
      restoration coefficients, grouping the information for a given
      restoration unit into a structure called RestorationUnitInfo. The end
      result is to completely dispense with the RestorationInternal
      structure.
      
      The copy_tile functions in restoration.c, together with those
      functions that operate on a single stripe, have been changed so that
      they take pointers to the top-left corner of the area on which they
      should work, together with a width and height.
      
      The same isn't true of av1_loop_restoration_filter_unit, which still
      takes pointers to the top-left of the tile. This is because you
      actually need the absolute position in the tile in order to do striped
      loop restoration properly.
      
      Change-Id: I768c182cd15c9b2d6cfabb5ffca697cd2a3ff9e1
      dd6f09ab
  9. 21 Oct, 2017 1 commit
  10. 20 Oct, 2017 1 commit
    • Debargha Mukherjee's avatar
      Remove CONFIG_CB4X4 config flags · 6ea917ec
      Debargha Mukherjee authored
      Since CB4X4 is adopted and without it the codec does not work,
      it is better to remove it and simplify the code.
      
      Change-Id: I51019312846928069727967e3b2bbb60f0fba80d
      6ea917ec
  11. 19 Oct, 2017 2 commits
    • Rupert Swarbrick's avatar
      Remove partial_frame support from loop restoration · 146a060a
      Rupert Swarbrick authored
      This flag comes from the loop filter's speed features and (I think)
      tells the encoder to make decisions about the filter by looking at a
      narrow strip in the middle of the frame.
      
      That's reasonable enough, but doesn't make any sense for loop
      restoration, where we were calling av1_loop_restoration_frame from
      pickrst.c in order to calculate what restoration parameters to use for
      a given restoration unit (which might not be in the narrow strip in
      the middle!)
      
      As it turns out, the LPF_PICK_FROM_SUBIMAGE method is never actually
      signalled in the reference encoder, which is presumably why we haven't
      spotted this before.
      
      Change-Id: I745e2eab873c0b33920caca40e338af9d078d25e
      146a060a
    • Rupert Swarbrick's avatar
      Remove RestorationInternal from AV1_COMMON · f88bc049
      Rupert Swarbrick authored
      The bits needed by striped loop restoration are now in
      RestorationInfo (which also gets rid of a rather ugly extra
      index).
      
      The scratch buffer that's used for self-guided restoration has been
      moved up to its own variable (rst_tmpbuf).
      
      All the rest of the fields are now safely hidden inside restoration.c
      
      This patch also does a big cleanup of the initialisation code in
      loop_restoration_rows: it doesn't need to be as repetitive now that
      the fields of YV12_BUFFER_CONFIG can be accessed by plane index.
      
      Change-Id: Iba7edc0f94041fa053cdeb3d6cf35d84a05dbfaf
      f88bc049
  12. 17 Oct, 2017 1 commit
  13. 16 Oct, 2017 2 commits
  14. 14 Oct, 2017 2 commits
  15. 13 Oct, 2017 2 commits
  16. 10 Oct, 2017 3 commits
    • Cheng Chen's avatar
      Loop filtering after each superblock · 5ad5b289
      Cheng Chen authored
      The patch is to enable loop filtering for intra block copy.
      
      Apply loop filtering right after each superblock is encoded.
      Use a constant filter level for now. In future updates, the filter
      level should be optimized by LPF_SB and better guess value.
      
      Change-Id: I0a5797b5ba5384c00044a8ec4a495dc75aa0f3fe
      5ad5b289
    • Urvang Joshi's avatar
      horzonly-frame-superres: Apply to superres only. · 69fde2eb
      Urvang Joshi authored
      Plain resize is now unaffected by this flag. That is, plain resizing is
      performed for both width and height always.
      
      Change-Id: I652204d68ca5266f0a1a413927828038aa5dfdf6
      69fde2eb
    • Urvang Joshi's avatar
      Make horzonly-frame-superres a config flag. · 3d8bcb2a
      Urvang Joshi authored
      This allows it to be enabled/disabled during configure/cmake and also
      allows us to specify dependencies.
      
      If 0: superres scaling happens for both width and height.
      If 1: superres scaling happens ONLY for width.
      
      Change-Id: Id00c2a9c9886b638e06c6b92de453b85bee1d8fa
      3d8bcb2a
  17. 09 Oct, 2017 1 commit
    • Zoe Liu's avatar
      Add encoder/decoder support to frame_sign_bias · 17af2748
      Zoe Liu authored
      Frame sign bias value will not be signaled in frame header. Instead,
      the sign bias of reference frames are derived from their corresponding
      frame offsets at both encoder and decoder.
      
      The tool of 'frame_sign_bias' is dependent of 'frame_marker'. Compared
      against baseline, the enabling of both tools obtains a small coding gain
      of -0.08 ~ -0.11% in BDRate over Google lowres/midres tests.
      
      Change-Id: I8d85dc427ced0b2152712ccf61be4be6068075b9
      17af2748
  18. 07 Oct, 2017 2 commits
    • Urvang Joshi's avatar
      Add a macro SCALE_HORIZONTAL_ONLY. · e58b564d
      Urvang Joshi authored
      When enabled, scaling through resize and superres will occur only in the
      frame's width; the height will not be scaled.
      
      Macro is off by default.
      
      Change-Id: I501b2b0b2766aa4a86da5937b57c4d5aee4e34c4
      e58b564d
    • Urvang Joshi's avatar
      FRAME_SUPERRES: Rework to use scale factor of 8/D · de71d142
      Urvang Joshi authored
      Earlier, the superres scale was in the form of:
      N/16, where N ranged from 8 to 16.
      
      We change this to the form:
      8/D, where D ranges from 8 to 16.
      
      This helps on the decoder side, by making it possible to work on 8x8
      blocks at a time.
      
      Change-Id: I6c72d4b3e8d1c830e61d4bb8d7f6337a100c3064
      de71d142
  19. 04 Oct, 2017 2 commits
    • Dominic Symes's avatar
      MAX_TILE: Allow list of tile widths/heights · 26ad0b22
      Dominic Symes authored
      The aomenc API is modified to allow --tile_width and --tile_height to take a list of sizes.
      For example, --tile_width=2,3 will give tiles of widths 2,3,2,3,... until the image width
      is exhausted. --tile_width=2 will still work to gives tiles of width 2.
      
      Change-Id: I2afa14d404557aa8b7341b20f7477590e03e0bdb
      26ad0b22
    • Cheng Chen's avatar
      LOOPFILTER_LEVEL: add flexibility for EXT_DELTA_Q · 880166ab
      Cheng Chen authored
      When experiment LOOPFILTER_LEVEL is on, there're four base filter levels
      for each frame. This patch enables one to use one delta or four deltas
      to update corresponding filter levels for each superblock in
      EXT_DELTA_Q.
      
      1 bit per frame is sent through bitstream to select one or four deltas.
      Now, we hard code to use one delta.
      
      Change-Id: I9c61a035064fa81878b0575ad21664e2b22a6a45
      880166ab
  20. 03 Oct, 2017 2 commits
    • David Barker's avatar
      Fix global-motion + error-resilient-mode · d7c8bd51
      David Barker authored
      Patch https://aomedia-review.googlesource.com/c/21783
      changed things so that error-resilient frames use the default
      global motion parameters as a reference, rather than taking
      the reference from the previous frame.
      
      This was implemented by clearing out cm->prev_frame->global_motion
      when we have an error-resilient frame. Unfortunately, this causes
      an issue: if we have an error resilient frame which isn't stored
      into any reference slots, followed by a non-error-resilient frame,
      then both frames refer to the same prev_frame. The second frame
      then delta-codes against cm->prev_frame->global_motion, but
      this was reset to the default values by the intervening
      error-resilient frame!
      
      In order to allow the above case to work as intended, expand the
      default warp parameter set to a full WarpedMotionParams struct,
      and use that as the reference for error-resilient frames.
      
      This also allows us to remove set_default_warp_params, as we
      can now just copy directly from default_warp_params.
      
      Change-Id: I9645615db2700c1d3810e6e42f4f1da626fcd5e3
      d7c8bd51
    • David Barker's avatar
      Deduplicate use_reference_buffer/frame_id_numbers_present_flag · 5e70a114
      David Barker authored
      These two flags serve essentially the same purpose, so we can
      simplify down to just having one flag. Since the
      frame_id_numbers_present_flag is older and listed in the
      reference-buffer design doc, this is the one we'll keep.
      
      Note that, previously, frame_id_numbers_present_flag was only
      sent when CONFIG_OBU was enabled - otherwise it was always set
      to 1. On the other hand, use_reference_buffer was always signalled
      so that allowed us to disable frame ids even without CONFIG_OBU.
      
      In order to keep the ability to disable frame IDs without
      CONFIG_OBU, we send a "real" sequence header (ie, with the same
      data as in CONFIG_OBU) in-line within the uncompressed header.
      This is sent every keyframe and every intra-only frame, just
      as the use_reference_buffer flag was before this patch.
      
      BUG=aomedia:853
      
      Change-Id: I4bb6c7a222aeddfb6d3737a39d10782d32ee2eee
      5e70a114
  21. 02 Oct, 2017 1 commit