)]}'
{
  "commit": "337454c2c41b0878a6ce24c53c03eb26592a624f",
  "tree": "2e8beebba577a079a31f3f2114237b7415a225a7",
  "parents": [
    "9f2b2beb14ade7b4592cbc79621fcb2e00ebdeb5"
  ],
  "author": {
    "name": "Ihor Buhaiov",
    "email": "freedbrt@gmail.com",
    "time": "Tue Oct 13 11:11:35 2026 +0200"
  },
  "committer": {
    "name": "Ihor Buhaiov",
    "email": "freedbrt@gmail.com",
    "time": "Wed Oct 14 21:13:32 2026 +0200"
  },
  "message": "rtc: Fix the map returned by AV1E_GET_ACTIVEMAP\n\nav1_get_active_map() kept the VP9 layout. It walked mi_rows \u003e\u003e 2 by\nmi_cols \u003e\u003e 2 blocks but read enc_seg.map at mi (2 * r, 2 * c), which is\nthe VP9 8x8 mi grid. In AV1 a 16x16 block is 4x4 mi, so each block was\nread from the wrong place. The loop bounds also round down, so when the\nframe ends halfway through a 16x16 block (mi_cols or mi_rows % 4 \u003d\u003d 2)\nthe last column or row was never read and kept its memset value.\n\nenc_seg.map is also the wrong source. av1_apply_active_map() only copies\nthe map into it at encode time, so a get right after a set returns old\ncontent (all active before the first frame). With aq 3, cyclic refresh\nwrites the coded segment ids back into it, so after a frame it no longer\nmatches the map that was set.\n\nRead cpi-\u003eactive_map.map instead, with the same indexing as\nav1_set_active_map(). The getter now returns the map the application\nset, not the segment map of the last frame. Every mi of a 16x16 block\nholds the same value there, so the top left mi is enough. When the map\nis off, for example after a key frame, all blocks still read as active.\n\nAdd GetActiveMapTest. It sets an asymmetric map on a 200x136 frame, so\nthe last column and row are partial, mirrors it on odd frames, and\nchecks the get after each set and after each inter frame.\n\nRepro before this change: 208x144 or 200x136, speed 9, aq 0 or 3, the\nleft 6 of 13 block columns inactive plus a few blocks on the last row\nand column. Every get returned 23 to 61 of 117 blocks wrong, in both a\ndefault and a CONFIG_REALTIME_ONLY build.\n\nChange-Id: Ic1ed075396e506d62cb697e980770560bbce3624\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5a606d304aaa8ea22754b0cf80830b93bbd026d5",
      "old_mode": 33188,
      "old_path": "av1/encoder/encoder.c",
      "new_id": "2702a2abc6b6c4bade44261ff9b36c2950a9bf6c",
      "new_mode": 33188,
      "new_path": "av1/encoder/encoder.c"
    },
    {
      "type": "modify",
      "old_id": "be3d8d26fde76df2c2e2dfa0c80d52b4419cfb52",
      "old_mode": 33188,
      "old_path": "test/active_map_test.cc",
      "new_id": "b3beb7a2779bd3e9a26896c9f46ee282c3b4ce2f",
      "new_mode": 33188,
      "new_path": "test/active_map_test.cc"
    }
  ]
}
