)]}'
{
  "commit": "bcc98e0c3a88a3ad1807eca2bc179ef8d7abf091",
  "tree": "1e817ee77e324d0e0f9f640dbeab1992ca78f783",
  "parents": [
    "c19d2f07f2101173bffe84f6447fc953518f739f"
  ],
  "author": {
    "name": "Ihor Buhaiov",
    "email": "freedbrt@gmail.com",
    "time": "Fri Nov 13 10:46:27 2026 +0100"
  },
  "committer": {
    "name": "Marco Paniconi",
    "email": "marpan@google.com",
    "time": "Fri Nov 13 12:28:09 2026 -0800"
  },
  "message": "rtc: Reset the skip flag when IntraBC wins\n\nav1_nonrd_pick_intra_mode() does not set x-\u003etxfm_search_info.skip_txfm\nwhen IntraBC wins, so the block keeps the value an earlier block left.\nav1_encode_sb() returns early when the flag is set and codes no\nresidual in any plane. Plain intra blocks are safe because\nencode_b_nonrd() clears their skip flag, but IntraBC blocks count as\ninter blocks. The hash search matches luma only, so a skipped IntraBC\nblock can copy chroma of another color.\n\nThe first key frame starts with the flag at 0. A later key frame\nstarts with the flag of the last block of the inter frame before it,\nand if that block was skipped, every IntraBC block of the key frame\nis skipped. On a screen capture speeds 10 to 12 change, 7 to 9 do not.\n\nSet the flag to 0 when IntraBC wins, so the residual is coded like in\nother blocks of the frame. Taking the flag from the luma estimate and\nthe chroma model instead still skips most of the wrong color blocks.\n\nScreen captures 2560x1440, aomenc --rt --cpu-used\u003d11\n--tune-content\u003dscreen, 1 thread, q 20, key frame every 15 frames,\n60 frames:\n                    worst chroma 8x8   under 30 dB   key frame\n                    on key frames      per key frame bytes\n  capture A 4:2:0   26.90 -\u003e 35.81 dB  7 -\u003e 0        +0.57%\n  capture A 4:4:4   36.17 -\u003e 36.73 dB  0 -\u003e 0        +0.60%\n  capture B 4:2:0   35.86 -\u003e 35.86 dB  0 -\u003e 0        +0.62%\n  capture B 4:4:4   36.47 -\u003e 36.47 dB  0 -\u003e 0        +0.59%\nKey frame luma PSNR goes up 0.04 to 0.08 dB, total bytes +0.29% to\n+0.49%. Frames before the first changed key frame are bit exact.\nA 694x649 crop of capture B with an active map and key frames forced\nat 24 and 47: worst U 9.43 -\u003e 40.84 dB and V 13.77 -\u003e 41.49 dB on\n4:2:0, worst luma 30.50 -\u003e 37.03 dB on 4:4:4.\n\nEncode time, release, base and fix alternating, median (A/A noise in\nbrackets):\n  arm64 macOS, 21 runs (4:2:0) and 9 runs (4:4:4):\n    4:2:0  694x649 +0.06% (-0.05%), 2560x1440 +0.47% (+0.07%)\n    4:4:4  694x649 -0.15% (+0.03%), 2560x1440 +0.29% (-0.16%)\n  x86 WSL gcc 13.3, 2 screen captures, key frame every 15 frames,\n  7 runs:\n    4:2:0  1 thread +0.36% (+0.87%), 4 threads +0.28% (+0.42%)\n    4:4:4  1 thread +0.47% (+0.26%), 4 threads -0.49% (-0.82%)\n\nTest: EncodeAPI.IntraBCKeyFrameCodesChroma fails before and passes\nafter, default and CONFIG_REALTIME_ONLY builds. aomenc\n--test-decode\u003dfatal finds no mismatch on park_joy_90p 8 and 10 bit\n4:2:0 and 4:4:4 (unchanged) and screendata 1080p 8 bit (unchanged)\nand 10 bit 4:2:0 and 4:4:4 (key frame luma +0.24 to 0.46 dB, bytes\n+1.1%; 4:2:0 V -0.5 to -1.6 dB at 56 to 57 dB from 1 LSB drift)\non arm64 macOS. On x86 with gcc and clang, 6 screen and AOM clips\n(2 in 10 bit), 4:2:0 and 4:4:4, 1 and 4 threads, map on and off, a key\nframe every 15 frames: no recon or dav1d mismatch, gcc and clang give\nthe same streams, bytes +0% to +2.1%, no worst block gets worse.\n\nChange-Id: I8e26d485938021a8107453654d2490eeaf97f520\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b0c67fc4708d7dc00515362bfe39288b27fe6ac4",
      "old_mode": 33188,
      "old_path": "av1/encoder/nonrd_pickmode.c",
      "new_id": "0277d73da204c339d27eba5fa6c1a36190e94abb",
      "new_mode": 33188,
      "new_path": "av1/encoder/nonrd_pickmode.c"
    },
    {
      "type": "modify",
      "old_id": "7a9e280b870bb88248bf973fa7ae533f63347be6",
      "old_mode": 33188,
      "old_path": "test/encode_api_test.cc",
      "new_id": "b72872b91354beaf1129743a3083c0817adbb5f0",
      "new_mode": 33188,
      "new_path": "test/encode_api_test.cc"
    }
  ]
}
