1. 07 Dec, 2017 1 commit
  2. 04 Dec, 2017 3 commits
  3. 01 Dec, 2017 1 commit
  4. 29 Nov, 2017 2 commits
  5. 20 Nov, 2017 1 commit
  6. 17 Nov, 2017 1 commit
    • Urvang Joshi's avatar
      intrapred: Remove two local flags. · 49404055
      Urvang Joshi authored
      These used to be a combination of some config flags. But as those config
      flags are now removed, they were always 1 now.
      
      This simplifies the code a bit.
      
      Change-Id: Ifd3a94b6b786c95c3efc6d646dcf1489cdda7f92
      49404055
  7. 16 Nov, 2017 1 commit
    • Yue Chen's avatar
      Improve filter_intra throughput · 11bac017
      Yue Chen authored
      The prediction can be done in 2x2 or 4x4 processing unit, within
      which there is no dependency and the computation can be fully
      parallelized.
      Also turn < 8x8 filter_intra on, and disable it in > 32x32 txbs.
      
      Change-Id: I4f8a3104019cbb35e88f342d97516f81b19152b0
      11bac017
  8. 14 Nov, 2017 1 commit
  9. 10 Nov, 2017 1 commit
    • Urvang Joshi's avatar
      Remove smooth_hv experiment flag. · b7301cd6
      Urvang Joshi authored
      This experiment has been cleared by Tapas.
      
      Also, fix a couple of hash signatures in the test while we are at it.
      
      Change-Id: I1658bcb07913cf8bd47cfffadd729e16d5c55fc3
      b7301cd6
  10. 09 Nov, 2017 1 commit
  11. 07 Nov, 2017 1 commit
    • Joe Young's avatar
      Enable ext-intra-mod by default · 2edfc37b
      Joe Young authored
      Provisionally adopted on 2017-10-31
      
      (Also an asan warning fix + few non-functional changes)
      
      Change-Id: I2ff4f34f8b20d2eeb567f2e5b1e57b296a97be82
      2edfc37b
  12. 06 Nov, 2017 1 commit
    • Yue Chen's avatar
      Use lower-precision filters in filter_intra · 00bc4aac
      Yue Chen authored
      Filter coeffcients c0, c1, c2 are scaled by 8, and can be
      represented by 4 bits unsigned integer (c2 is always <=0)
      
      Change-Id: I93643bab6734214cef0b0175d6980ebabe9dfe10
      00bc4aac
  13. 03 Nov, 2017 2 commits
    • Rupert Swarbrick's avatar
      Correct has_bottom_left calculation for mixed vertical partitions · 8315daf7
      Rupert Swarbrick authored
      This patch regenerates the orders tables and generates both the normal
      ones and also those for vertical partitions. I've added a long comment
      above the definition of orders[] that explains how they work (there's
      no change, but it took me a while to understand, so it's probably a
      good thing to document). I've also slightly changed when we use the
      orders_vert tables: they are now used for both PARTITION_VERT_A and
      PARTITION_VERT_B.
      
      The patch also removes the #if around the partition argument to
      has_top_right and adds it to has_bottom_left. (I could have put it
      inside an #if, but I shouldn't imagine there's any measurable
      performance cost and the code is cleaner this way).
      
      The tables were regenerated with a Haskell script which I've included
      at the bottom of the commit message (so the next person doesn't have
      to write it from scratch yet again). The output looks reasonably
      clean, but clang-format does change it somewhat so you need to run
      that afterwards. The tables are also output in a different order, so
      you'll need to clean that up by hand too.
      
      -- orders.hs: Print tables to stdout by calling printOrders
      
      import Data.Foldable
      import Data.List (findIndex)
      import Data.Maybe
      import System.Environment
      import Text.Printf
      import Text.Read
      
      data Block = Block { lbw :: Int, lbh :: Int, vert :: Bool }
      
      minLogBlockSize :: Bool -> Int
      minLogBlockSize v = if v then 3 else 2
      
      maxLogBlockSize = 7 :: Int
      
      -- This code generates the inverse of what we want: a mapping from visit order
      -- to raster order. That is, element i of the list will be the raster index of
      -- the block that we visit at step i.
      vrSplit :: Block -> Int -> Int -> Int -> [Int]
      vrSplit b stride lsz off
        -- PARTITION_NONE
        | lbw b >= lsz && lbh b >= lsz = [off]
        -- Some form of horizontal partition
        | lbw b < lsz && lbh b >= lsz =
            [off,off + 1..off + 2^(lsz - lbw b) - 1]
        -- Some form of vertical partition
        | lbw b >= lsz && lbh b < lsz =
            [off,off + stride..off + (2^(lsz - lbh b) - 1)*stride]
        -- PARTITION_VERT_*
        | vert b && lbh b + 1 == lsz && lbw b + 1 == lsz =
            [off, off + stride, off + 1, off + stride + 1]
        -- PARTITION_SPLIT
        | otherwise =
          concatMap (vrSplit b stride (lsz - 1))
          [off, off + 2^(lsz - lbw b - 1), off + 2^(lsz - lbh b - 1) * stride,
           off + 2^(lsz - lbw b - 1) + 2^(lsz - lbh b - 1) * stride]
      
      vrOrders :: Block -> [Int]
      vrOrders b = vrSplit b (2 ^ (maxLogBlockSize - lbw b)) maxLogBlockSize 0
      
      -- A simple function to invert the bijection generated by vrOrders (it's very
      -- naive, but the list isn't exactly long)
      invertList :: [Int] -> [Int]
      invertList is = map (\ i -> fromJust $ findIndex ((==) i) is) [0..length is - 1]
      
      genOrders :: Block -> [Int]
      genOrders = invertList . vrOrders
      
      -- Code to print everything out in the style used in the AOM codebase
      forButLast_ :: Applicative f => [a] -> (a -> f b) -> f ()
      forButLast_ [] f = pure ()
      forButLast_ (a : as) f = fbl a as f
        where fbl a [] f = pure ()
              fbl a (a' : as) f = f a *> fbl a' as f
      
      numDigits :: Int -> Int
      numDigits n =
        if n == 0 then 1
        else ceiling $ logBase 10 $ fromIntegral $ 1 + n
      
      printRow :: Int -> Int -> [Int] -> Bool -> IO ()
      printRow indent fw as islast = do
        { if null as then return ()
          else do
            { printf "%*s" indent ""
            ; forButLast_ as (\ a -> printf "%d,%*s" a (postDent a) "")
            ; printf "%d%s" (last as) (if islast then "\n" else ",\n") } }
        where postDent a = 1 + fw - numDigits a
      
      printInts :: Int -> Int -> Int -> [Int] -> IO ()
      printInts width indent fw [] = return ()
      printInts width indent fw as =
        let (row, rest) = splitAt eltsPerLine as in
          printRow indent fw row (null rest) >> printInts width indent fw rest
        where eltsPerLine = quot (width - indent + 1) (fw + 2)
      
      printBlockOrders :: Block -> IO ()
      printBlockOrders b = do
        { printf "static const uint16_t orders_%s%dx%d[%d] = {\n"
          (if vert b then "vert_" else "")
          ((2 :: Int) ^ lbw b) ((2 :: Int) ^ lbh b) numElts
        ; printInts 79 2 intWidth (genOrders b)
        ; printf "};\n" }
        where lsz = maxLogBlockSize
              numElts = (2 :: Int) ^ (lsz - lbw b + lsz - lbh b)
              intWidth = max 1 $ ceiling $ logBase 10 $ fromIntegral (numElts - 1)
      
      blocksForWidth :: Bool -> Int -> [Block]
      blocksForWidth v lbw = map (\ lbh -> Block lbw lbh v) [minLbh..maxLbh]
        where maxLogAspectRatio = if v then 0 else 2
              minLbh = max (minLogBlockSize v) (lbw - maxLogAspectRatio)
              maxLbh = min maxLogBlockSize (lbw + maxLogAspectRatio)
      
      blocksForV :: Bool -> [Block]
      blocksForV v = concatMap (blocksForWidth v) [minLbw..maxLbw]
        where minLbw = (minLogBlockSize v)
              maxLbw = maxLogBlockSize
      
      blocks :: [Block]
      blocks = blocksForV False ++ blocksForV True
      
      printOrders :: IO ()
      printOrders = traverse_ printBlockOrders blocks
      
      -- Ends orders.hs
      
      BUG=aomedia:914
      
      Change-Id: I6c53e80caa0d203cdc11f88471b6c117c633baa6
      8315daf7
    • Yue Chen's avatar
      Remove 4-tap filter intra · e2692c5c
      Yue Chen authored
      We reverted to using 3-tap filters. So 4-tap filters related code
      will not be used any more.
      
      Change-Id: I7f65cf227d2eb3e9785474e3b33d0bdbf489b1f1
      e2692c5c
  14. 30 Oct, 2017 1 commit
  15. 27 Oct, 2017 1 commit
    • Joe Young's avatar
      Ext-intra modification/tuning · 3ca43bf0
      Joe Young authored
      For ext-intra direcation intra modes:
      
      1. Use neighbor block modes to modify edge filtering strength
         Coding gain (lowres/midres/hdres):
           (8 keyframes)
           PSNR: -0.19 -0.22 -0.10
           SSIM: -0.29 -0.27 -0.13
      
      2. Use context-based cdf to code angle_delta syntax
           (8 keyframes)
           PSNR: -0.20 -0.24 -0.27
           SSIM: -0.29 -0.33 -0.37
      
      3. Filter corner sample:
           (8 keyframes)
           PSNR: -0.01 -0.02 -0.05
           SSIM: -0.03 -0.04 -0.05
      
      Combined Bd-rate improvement for 8 keyframes
           PSNR: -0.40 -0.47 -0.40
           SSIM: -0.57 -0.60 -0.51
      
      Change-Id: Id47ac17b6bf91cd810b70cacfc5b457341f417f3
      3ca43bf0
  16. 25 Oct, 2017 1 commit
    • Yue Chen's avatar
      Optimizations for filter_intra · 57b8ff68
      Yue Chen authored
      Reduce number of modes from 10 to 6, and disable fi modes in UV.
      To reduce complexity, apply filter directly without subtracting
      the estimated means.
      
      Change-Id: Iaf78d92d31e4a7cc30ea7863b57a9611c5f503e6
      57b8ff68
  17. 24 Oct, 2017 2 commits
  18. 23 Oct, 2017 1 commit
  19. 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
  20. 17 Oct, 2017 1 commit
  21. 16 Oct, 2017 1 commit
    • Hui Su's avatar
      Remove the intra-interp experiment · 259d4422
      Hui Su authored
      This experiment uses switchable interpolation filter for intra
      prediction. Current gain is too small to be useful for AV1.
      May explore more for AV2 in the future.
      
      Change-Id: I24ae8c75dc71adf6271eabdb68a81b68a0869fa2
      259d4422
  22. 11 Oct, 2017 1 commit
  23. 04 Oct, 2017 1 commit
    • Jonathan Matthews's avatar
      intra_interp - fix dr_prediction_z1 and _z3 · 80dd4b94
      Jonathan Matthews authored
      The low bd versions should have the same functionality as the
      high bd versions.  This patch removes the incorrect optimisation,
      in order to rapidly fix the functionality.
      
      BUG=aomedia:859
      
      Change-Id: I4f23115b15ab9e2ea5a54ff0c6a9e1dc1a6d4d13
      80dd4b94
  24. 02 Oct, 2017 1 commit
  25. 01 Oct, 2017 1 commit
  26. 30 Sep, 2017 1 commit
    • Rupert Swarbrick's avatar
      Add a new layout for HORZ/VERT_A/B partitions · 3dd33911
      Rupert Swarbrick authored
      This hides behind --enable-ext_partition_types_ab. When that flag is
      set, the mixed partitions change from
      
         +-+-+---+          +-+-+---+
         |   |   |          | | |   |
         |---+   |    to    | | |   |
         |   |   |          | | |   |
         +-+-+---+          +-+-+---+
      
      (that's PARTITION_VERT_A; other partitions change similarly).
      
      Since 128x32 and 32x128 block support hasn't yet been merged, this
      patch also temporarily disables these partitions for 128x128 blocks.
      
      Change-Id: Ic479c0fc129f590b8ad56d72dc98ba79ae1bd1cf
      3dd33911
  27. 29 Sep, 2017 2 commits
  28. 28 Sep, 2017 1 commit
  29. 27 Sep, 2017 1 commit
    • David Barker's avatar
      ext-partition: Don't read not-yet-decoded values · 761b1ac8
      David Barker authored
      When deciding whether the top-right or bottom-left blocks are
      available, we currently always act as if we're using 128x128
      superblocks. This means that, when using 64x64 superblocks,
      we sometimes conclude that blocks are available when they haven't
      been decoded yet!
      
      This typically happens at, for example, mi_row=15, mi_col=16
      (for bottom left), where we're at a 64x64 boundary but not
      a 128x128 boundary.
      
      This patch fixes the issue by checking based on the signalled
      superblock size.
      
      Note: Most of this patch is just threading 'cm' through the
      intra prediction process, so that we have access to cm->sb_size
      in has_top_right() and has_bottom_left()
      
      Change-Id: I126964c510aafffc870e7cd8b3e64a46abb14b3a
      761b1ac8
  30. 21 Sep, 2017 1 commit
  31. 20 Sep, 2017 1 commit
    • Joe Young's avatar
      [intra-edge] Vectorize upsampling · ad0196b8
      Joe Young authored
      Add sse4_1 functions for Intra-edge experiment:
        av1_upsample_intra_edge_sse4_1()
        av1_upsample_intra_edge_high_sse4_1()
      
      Approx cycle reduction at qp 20, 1 kf:
        Enc:  0.5% to 0.3%
        Dec:  0.4% to 0.2%
      
      Change-Id: I97f0eee09b78218b418b484d80c338cec037f1b9
      ad0196b8
  32. 19 Sep, 2017 1 commit
  33. 16 Sep, 2017 1 commit
    • Joe Young's avatar
      [intra-edge] Vectorize edge filtering functions · 89d321f7
      Joe Young authored
      Add sse4_1 functions for Intra-edge experiment:
        av1_filter_intra_edge_sse4_1()
        av1_filter_intra_edge_high_sse4_1()
      
      Approx cycle reduction at qp 20, 1 kf:
        Enc (lbd) 1.4% to 0.3%
        Dec (lbd) 0.4% to 0.1%
        Enc (hbd) 1.1% to 0.2%
        Dec (hbd) 0.6% to 0.1%
      
      No change to bitstream
      
      Change-Id: I176b2d125424d7d226114c807915c33dde5c3720
      89d321f7
  34. 21 Aug, 2017 1 commit