)]}'
{
  "commit": "19b7816a525e25c688f41a9472e2d7aff02bf3d4",
  "tree": "3654dd7115346fae8e6859b8d52aa25f1d139d6b",
  "parents": [
    "3c781ede8b5cd3b86b3d353799963031f556d239"
  ],
  "author": {
    "name": "Laurenz Stampfl",
    "email": "47084093+LaurenzV@users.noreply.github.com",
    "time": "Tue Mar 03 09:26:09 2026 +0100"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Mar 03 08:26:09 2026 +0000"
  },
  "message": "vello_cpu: Fix off-by-one error in gaussian blur decimation filter (#1488)\n\nLet\u0027s take `upscale_x`In the very first iteration, `x` will be set to\n`src_width - 1`. Therefore, p2 will point to `src_width - 2`. But right\nnow, p1 would point to `src_width` and p0 to `src_width + 1`. Therefore,\n`src_width - 1` is actually never sampled. I think this should be the\nright fix.\n\nThe same applies to the `upscale_y` function.\n\nSee also the `issue_filter_canvas_boundaries` test case, the bottom edge\nnow looks symmetrical to the top edge. The right still looks different\nto the left one, so I\u0027m still leaving the TODO comment there.\n\n---------\n\nCo-authored-by: Laurenz Stampfl \u003claurenz@canva.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "06e9b12388db6e0803ecb529ec3b736ef5bec336",
      "old_mode": 33188,
      "old_path": "sparse_strips/vello_cpu/src/filter/gaussian_blur.rs",
      "new_id": "89424dd2099d24625810c920e00c9860ba893a17",
      "new_mode": 33188,
      "new_path": "sparse_strips/vello_cpu/src/filter/gaussian_blur.rs"
    },
    {
      "type": "modify",
      "old_id": "073430e2baffc00c96d6bad1984805c1f01a7fd7",
      "old_mode": 33188,
      "old_path": "sparse_strips/vello_sparse_tests/snapshots/filter_extreme_blur.png",
      "new_id": "6f12437d597c9f75f947f4d1e3e1a6546a5ee7dd",
      "new_mode": 33188,
      "new_path": "sparse_strips/vello_sparse_tests/snapshots/filter_extreme_blur.png"
    },
    {
      "type": "modify",
      "old_id": "9794accf0aa6a3bc8aeef4533bf4f8673e134956",
      "old_mode": 33188,
      "old_path": "sparse_strips/vello_sparse_tests/snapshots/filter_gaussian_blur_edge_mode_wrap.png",
      "new_id": "072691693fc8819f4581bcdc3ede30c4bc4f95b5",
      "new_mode": 33188,
      "new_path": "sparse_strips/vello_sparse_tests/snapshots/filter_gaussian_blur_edge_mode_wrap.png"
    },
    {
      "type": "modify",
      "old_id": "685787a8691e75bc18107e14c1020a7d4653d1b2",
      "old_mode": 33188,
      "old_path": "sparse_strips/vello_sparse_tests/snapshots/filter_nested_layers.png",
      "new_id": "143b7fb5f4355f9bcb0d0b0069020b0dbf769da1",
      "new_mode": 33188,
      "new_path": "sparse_strips/vello_sparse_tests/snapshots/filter_nested_layers.png"
    },
    {
      "type": "modify",
      "old_id": "2d9a88281fc092d0eb9bbe83798104ccda4a00f9",
      "old_mode": 33188,
      "old_path": "sparse_strips/vello_sparse_tests/snapshots/filter_set_effect.png",
      "new_id": "22901e3b8b4fe123da1cffccadf98f1f3d28a2eb",
      "new_mode": 33188,
      "new_path": "sparse_strips/vello_sparse_tests/snapshots/filter_set_effect.png"
    },
    {
      "type": "modify",
      "old_id": "3730406737a8000dc8ee3b5a08ad0ce80d275691",
      "old_mode": 33188,
      "old_path": "sparse_strips/vello_sparse_tests/snapshots/filter_transformed_blur.png",
      "new_id": "8cc991b47fe9ed55ff2501cafc1f6c80a0948f4a",
      "new_mode": 33188,
      "new_path": "sparse_strips/vello_sparse_tests/snapshots/filter_transformed_blur.png"
    },
    {
      "type": "modify",
      "old_id": "acf0cb04b4749762c1ae6bf57eb16de2db4f7074",
      "old_mode": 33188,
      "old_path": "sparse_strips/vello_sparse_tests/snapshots/issue_filter_canvas_boundaries.png",
      "new_id": "871a996ecb7125769fc85d9f731ac8efe219a7e3",
      "new_mode": 33188,
      "new_path": "sparse_strips/vello_sparse_tests/snapshots/issue_filter_canvas_boundaries.png"
    }
  ]
}
