)]}'
{
  "log": [
    {
      "commit": "9c4a699e5aacc1995a27ca3bf1643c8b2378616c",
      "tree": "d4f8c20a8abc3d37be9ad7a696d181f8a17dd8a3",
      "parents": [
        "2f8a508422e4e072c8915fcf8285294e3ad8ab01",
        "cd091f7afdf72e88139856aa383b53b2125bb4a2"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Fri Aug 28 03:58:10 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Aug 28 03:58:10 2026"
      },
      "message": "Merge \"man: correctness pass across all pages\" into main"
    },
    {
      "commit": "2f8a508422e4e072c8915fcf8285294e3ad8ab01",
      "tree": "3523c0a02b602364eb4fe482bf74bc919f9260f2",
      "parents": [
        "e65ac75ac2f7b884f829ddf63fa6a246ecbc10e1",
        "890925968ebb2e34ee88f6100f93391faa245985"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Fri Aug 28 03:58:05 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Aug 28 03:58:05 2026"
      },
      "message": "Merge \"sharpyuv: speed up the sharp RGB-\u003eYUV conversion loop\" into main"
    },
    {
      "commit": "890925968ebb2e34ee88f6100f93391faa245985",
      "tree": "5949a8260c8f37b54fbfd170131ef6f4bc161876",
      "parents": [
        "86f5da9af1ce199b3fd722218bd370e7748b8b1c"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 20 13:45:16 2026"
      },
      "committer": {
        "name": "Pascal Massimino",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 27 20:28:30 2026"
      },
      "message": "sharpyuv: speed up the sharp RGB-\u003eYUV conversion loop\n\n* ToLinearSrgb(): shift \u003d\u003d 0 (the common 8-bit RGB case) fell through\n  to FixedPointInterpolation() with a zero fractional part instead of\n  the direct table lookup\n  \u003d\u003e same result, wasted table read and multiply\n  \u003d\u003e ~25% faster on SharpYuvConvert() (1507x2048 to 4096x4096, arm64\n     clang -O3)\n\nBit-exact.\n\nChange-Id: Id4ad5b357d91da3844f0cf3bfa1d056b7f028a97\n"
    },
    {
      "commit": "cd091f7afdf72e88139856aa383b53b2125bb4a2",
      "tree": "17b16287a80c2dc79c88291486b6e8f10d93c417",
      "parents": [
        "86f5da9af1ce199b3fd722218bd370e7748b8b1c"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Sat Aug 22 06:01:21 2026"
      },
      "committer": {
        "name": "Pascal Massimino",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 27 20:28:18 2026"
      },
      "message": "man: correctness pass across all pages\n\nValidated against the examples/*.c code\n\n* cwebp.1:\n  * added missing -d (dump PGM) and PNM input format\n  * -map actually goes to 7\n  * add -f default (60)\n  * -pass wrongly claimed a \"40dB target\" is used when -size/-psnr are missing\n  * -segments claimed no effect for methods 3+ unless -low_memory \u003d\u003e wrong\n* dwebp.1:\n  * add missing BMP/TIFF output format\n  * add -alpha, -incremental, and -help alias.\n* gif2webp.1:\n   * -near_lossless claimed to auto-trigger lossless mode (unlike cwebp)\n   * -sharp_yuv is lossy-only\n* img2webp.1:\n   * missing PNM input format\n   * -sharp_yuv and -d missing notes/defaults.\n* vwebp.1: cosmetics\n* webpinfo.1: -H/-longhelp documented as separate detailed help, but it actually -h\n* webpmux.1: synopsis typo (DURATION OPTIONS -\u003e DURATION_OPTIONS)\n\n+ spelling/grammar/cosmetics fixes\n\nChange-Id: I5d8f0617fc4ec75517dbe0faae36ebf1122a648f\n"
    },
    {
      "commit": "e65ac75ac2f7b884f829ddf63fa6a246ecbc10e1",
      "tree": "eee367bdfb9c543d5513bcc30465155e33d547f6",
      "parents": [
        "86f5da9af1ce199b3fd722218bd370e7748b8b1c"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 20 11:37:53 2026"
      },
      "committer": {
        "name": "Pascal Massimino",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 27 20:28:01 2026"
      },
      "message": "extras: use int64_t accumulation in risk scoring\n\nDoEstimateRisk(): don\u0027t sum per-pixel scores into \u0027double\u0027, use\n\u0027int64_t\u0027\n\n* ~10% faster on a 1507x2048 photo (arm64 clang -O3)\n* bit-exact compared to previous code (tested on real images and 200k\n  random-input ones)\n\nChange-Id: Idc15954c77a6d964fe8a67ad3dc8d6c3408c8f8c\n"
    },
    {
      "commit": "86f5da9af1ce199b3fd722218bd370e7748b8b1c",
      "tree": "be7fa06866916e12f4e70b70ed5e5eb77edccf6d",
      "parents": [
        "f59172c8ac084c2656ab0dea2134593798de5122",
        "80bda3fdb882bc4131b223124c0411ac8b366386"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Thu Aug 27 20:27:36 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 27 20:27:36 2026"
      },
      "message": "Merge \"token_enc: record Cat5/Cat6 stats in the right slot\" into main"
    },
    {
      "commit": "f59172c8ac084c2656ab0dea2134593798de5122",
      "tree": "c2825789d6fedb56bacfd9a5ecad00adcad8ff34",
      "parents": [
        "491169af08f8660426899400f3b62fe0e52b3b73",
        "2733543bbcb45fb1136c117ba1ba768699e518e2"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Thu Aug 27 20:26:44 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 27 20:26:44 2026"
      },
      "message": "Merge \"alpha_enc: remove a dead accumulation into stats-\u003ecoded_size\" into main"
    },
    {
      "commit": "491169af08f8660426899400f3b62fe0e52b3b73",
      "tree": "8e3fcb776b250a7956081d522a5e8b7ee11df31d",
      "parents": [
        "73730abaee3595cf29a5e584f925b3da9bd525ba",
        "a6da270f4a07fc5c1fb61bc88cb1da2968e48e28"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Thu Aug 27 20:24:56 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 27 20:24:56 2026"
      },
      "message": "Merge changes Ib0652978,I06b3175a,I9dfb5579,I3d56c769 into main\n\n* changes:\n  vp8l_dec: say why the simple-code symbols are not range-checked\n  vp8l_dec: don\u0027t truncate the scratch-row size\n  alpha_dec: don\u0027t plug the I/O hooks on the alpha \u0027io\u0027\n  dec: nits\n"
    },
    {
      "commit": "73730abaee3595cf29a5e584f925b3da9bd525ba",
      "tree": "88fb5cd5072e25a8e4cec255c6d43622082ebc42",
      "parents": [
        "523e30432fdbf77b9566a9fc65394a97cbebc11c"
      ],
      "author": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Mon Aug 24 14:20:21 2026"
      },
      "committer": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Tue Aug 25 07:48:23 2026"
      },
      "message": "Tighter Huffman mapping trigger\n\nBug: 550179426\n\nChange-Id: I248e093488cd44f6a13052b4461c7e067810a93a\n"
    },
    {
      "commit": "523e30432fdbf77b9566a9fc65394a97cbebc11c",
      "tree": "3b007986f0ec2195b927e02c4f4d8ad72e2c30d5",
      "parents": [
        "178d2bc03b73aa15fc1186c1fd1c383e092a26a8",
        "5419234c7e31660e8bc0964afd276b92cf647f9b"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Wed Aug 19 19:04:19 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 19 19:04:19 2026"
      },
      "message": "Merge changes Idd2e8355,I7c29ff4d,I26c4711a into main\n\n* changes:\n  frame_enc: size the bit-writers with the actual quantizer\n  enc: fix lossy progress reporting\n  frame_enc: don\u0027t mistake a zero partition-0 size for a user abort\n"
    },
    {
      "commit": "a6da270f4a07fc5c1fb61bc88cb1da2968e48e28",
      "tree": "244b79bc21ae13bb5d1a966f774f50df79a9eb8a",
      "parents": [
        "efaaa24d4c9612e618a18503f5dd93081eb0bc41"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 13 10:11:53 2026"
      },
      "committer": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Tue Aug 18 06:56:48 2026"
      },
      "message": "vp8l_dec: say why the simple-code symbols are not range-checked\n\nReadHuffmanCode(): an 8-bit simple-code symbol can be \u003e\u003d \u0027alphabet_size\u0027 (40\nfor the distance code), which reads like a missing bound check.\n* code_lengths[] is max_alphabet_size long (\u003e\u003d 280), so it stays in range.\n  200k bit-flipped streams: 893 such writes, ASan clean.\n* VP8LBuildHuffmanTable() then only reads the first \u0027alphabet_size\u0027 entries.\n\nChange-Id: Ib065297827dce524a1671a5fd4fc5dbe96590a84\n"
    },
    {
      "commit": "178d2bc03b73aa15fc1186c1fd1c383e092a26a8",
      "tree": "49beea9944cadad764ef2325270dbb5d09c9e552",
      "parents": [
        "35d6fe0a011638c579c44c81951f53cbe853c5e0"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 13 09:59:44 2026"
      },
      "committer": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Tue Aug 18 06:56:48 2026"
      },
      "message": "picture_enc: remove dead dimension checks\n\nWebPPictureAllocYUVA(): WebPValidatePicture() 15 lines above already rejects\na non-positive width or height, and uv_* are (w + 1) / 2 and (h + 1) / 2.\n\u003d\u003e dead, and sitting *after* the arithmetic they look like they guard.\n\nChange-Id: Ib05f56cced5dac363c6ba036bbdec3c3bf9adbac\n"
    },
    {
      "commit": "efaaa24d4c9612e618a18503f5dd93081eb0bc41",
      "tree": "f1562184973991c4e19719d43de02bcc9722ab9a",
      "parents": [
        "8f62fc58abc19372b43d6e0da7b60e6e9a127689"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 13 10:09:06 2026"
      },
      "committer": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Tue Aug 18 06:56:48 2026"
      },
      "message": "vp8l_dec: don\u0027t truncate the scratch-row size\n\nAllocateInternalBuffers32b(): \u0027cache_top_pixels\u0027 is (uint16_t)final_width,\nwhile \u0027cache_pixels\u0027 just below uses (uint64_t)final_width. A no-op only\nbecause WEBP_MAX_DIMENSION is 16383, on a row VP8LInverseTransform() writes.\n\u003d\u003e drop the cast.\n\nChange-Id: I06b3175a88a595acae842a751e4d9eb52f76d8d3\n"
    },
    {
      "commit": "35d6fe0a011638c579c44c81951f53cbe853c5e0",
      "tree": "ae8309dad4d1f52e5867000851def3a96cfdddad",
      "parents": [
        "970f8fcda0a8ac0eaa67970fd9ce16a403c9a95b"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 13 09:58:27 2026"
      },
      "committer": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Tue Aug 18 06:56:48 2026"
      },
      "message": "iterator_enc: say why left_nz[3], [5] and [7] are skipped\n\nVP8IteratorBytesToNz() only propagates five of the eight left contexts. The\nthree others are the bottom-right block of Y, U and V, whose bits (15, 19,\n23) were just set from top_nz[]. cf. NzToBytes().\n\nChange-Id: I618084c6ad3d9f9e1a333c32444541cc72949ac2\n"
    },
    {
      "commit": "8f62fc58abc19372b43d6e0da7b60e6e9a127689",
      "tree": "1e199a67deff394e861b98b2993119ca3ffed9e0",
      "parents": [
        "502158d7db7dc075e76536bcee7079d68b58379b"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 13 10:06:43 2026"
      },
      "committer": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Tue Aug 18 06:56:48 2026"
      },
      "message": "alpha_dec: don\u0027t plug the I/O hooks on the alpha \u0027io\u0027\n\nALPHInit(): WebPInitCustomIo(NULL, io) installs three hooks that cast\nio-\u003eopaque to a WebPDecParams*, then sets opaque to NULL, which the next line\noverwrites with an ALPHDecoder*.\n* only frame_dec.c calls them, and this \u0027io\u0027 only reaches the VP8L decoder.\n\u003d\u003e the call buys nothing and leaves a type confusion one call away.\nVP8InitIo() above already zeroes the three pointers.\n\nChange-Id: I9dfb5579289539aec2042ac15fc0deb97a8c42cc\n"
    },
    {
      "commit": "502158d7db7dc075e76536bcee7079d68b58379b",
      "tree": "82fd2696d57aaabe7c9f221707d27eeeab81d65a",
      "parents": [
        "178d2bc03b73aa15fc1186c1fd1c383e092a26a8"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 13 10:04:59 2026"
      },
      "committer": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Tue Aug 18 06:56:48 2026"
      },
      "message": "dec: nits\n\n* ReadTransform(): \u0027ysize\u0027 is an \u0027int const*\u0027 never written through. Pass it\n  by value; only \u0027xsize\u0027 is modified, by COLOR_INDEXING_TRANSFORM.\n* vp8_dec.c: \"both width and height to be zero\" describes \u0027w \u003d\u003d 0 \u0026\u0026 h \u003d\u003d 0\u0027,\n  not the \u0027w \u003d\u003d 0 || h \u003d\u003d 0\u0027 it sits on.\n* ParseVP8Header(): assert() the TAG_SIZE the two memcmp()s need, since they\n  run before the CHUNK_HEADER_SIZE check. The sole caller provides it.\n\nChange-Id: I3d56c769700f158bb8a593b1caee2334325b9653\n"
    },
    {
      "commit": "5419234c7e31660e8bc0964afd276b92cf647f9b",
      "tree": "a6352bdcbc34c5352c6a07ec01fdacb0fde6259d",
      "parents": [
        "525a9d6b665a9f9df5e47b5b3839a61668dc7bc7"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 13 08:21:19 2026"
      },
      "committer": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Tue Aug 18 06:55:58 2026"
      },
      "message": "frame_enc: size the bit-writers with the actual quantizer\n\nInitBitWriters(): \u0027kAverageBytesPerMB[]\u0027 is indexed with \u0027enc-\u003ebase_quant\u0027,\nwhich VP8SetSegmentParams() only sets later.\n\n\u003d\u003e index was always 0\n\u003d\u003e partitions always reserved at largest rate (50 bytes/MB), whatever the\n   quality\n\nBit-writers are now initialized where first needed:\n\n* after StatLoop(), for VP8EncLoop()\n* right before VP8EmitTokens(), for the token loop which doesn\u0027t touch them\n  any earlier\n\nBytes reserved per partition, 640x480 picture:\n\n           q10     q50     q95\n  before  60000   60000   60000\n  after    6000   19200   60000\n\nRenamed accordingly. Bitstream is unchanged.\n\nChange-Id: Idd2e83558b5c44603eb999ef2f3ae84c7fce7bef\n"
    },
    {
      "commit": "970f8fcda0a8ac0eaa67970fd9ce16a403c9a95b",
      "tree": "44a705a4e60a0925698af8547d49209ac7d89bcd",
      "parents": [
        "9aed391fcd9b6259e378bafbd403fb4ffdf96426"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 13 09:57:07 2026"
      },
      "committer": {
        "name": "Pascal Massimino",
        "email": "pascal.massimino@gmail.com",
        "time": "Mon Aug 17 22:18:10 2026"
      },
      "message": "config_enc: upper bound for alpha_compression and alpha_filtering\n\nWebPValidateConfig() only checks these two for negative values.\n* alpha_compression \u003e 1 was caught later, by EncodeAlpha(), mid-encode.\n* alpha_filtering \u003e 2 was never caught: CompressAlphaJob()\u0027s ternary maps\n  anything \u003e\u003d 2 to WEBP_FILTER_BEST.\n\u003d\u003e check the ranges from encode.h:120-123 instead.\n\nChange-Id: I4d353b4d33c3291f2248ed1b2d1c70734762c220\n"
    },
    {
      "commit": "80bda3fdb882bc4131b223124c0411ac8b366386",
      "tree": "4a08136ecb89c939687739b77de0a0e5d1bf0366",
      "parents": [
        "4fe551df7ecf3b30ff515397e2a1c4f54b8ee80c"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 13 07:50:58 2026"
      },
      "committer": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Mon Aug 17 21:57:55 2026"
      },
      "message": "token_enc: record Cat5/Cat6 stats in the right slot\n\nThe second category bit is coded with proba #10 (cf. GetLargeValue()),\n  ... but was recorded into stats slot #9.\n\n\u003d\u003e stats[][][][10] stayed 0, and proba #10 was never adapted\n\u003d\u003e slot #9 was polluted with foreign events, bweuark.\n\u003d\u003e only for method \u003e\u003d 3 (when token buffer is used)\n\nSee vp8_dec.c:446, where the decision \u0027bit1\u0027 switches slots #9 / #10\n\nI played my own guitar:\n -0.1% size overall, up to -0.66% on high-contrast stuff. PSNR ~unchanged.\n\nChange-Id: I79feea54f10ba8c123f0524fa5e5ac846a37f1f7\n"
    },
    {
      "commit": "2733543bbcb45fb1136c117ba1ba768699e518e2",
      "tree": "929075833d76c96c0b6bb3b1dd22834497113fe2",
      "parents": [
        "4fe551df7ecf3b30ff515397e2a1c4f54b8ee80c"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 13 08:23:27 2026"
      },
      "committer": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Mon Aug 17 21:57:55 2026"
      },
      "message": "alpha_enc: remove a dead accumulation into stats-\u003ecoded_size\n\nStoreStats() *assigns* \u0027stats-\u003ecoded_size \u003d enc-\u003ecoded_size\u0027 later (which is the whole file size, alpha chunk included).\n\n* accumulation done here was always overwritten\n* accumulation came from the alpha worker thread, on a struct owned by the caller.\n\nBut alpha size is already reported on its own (as stats-\u003ealpha_data_size).\nSo no need for that here.\n\nChange-Id: I25e23bc759362d89aa7f6315e2728c74951bbcc3\n"
    },
    {
      "commit": "525a9d6b665a9f9df5e47b5b3839a61668dc7bc7",
      "tree": "f2535bd8ed113e4c554df0c9c77710b491834c50",
      "parents": [
        "291be6480a4d9f0a44c84b50b337007b43c28255"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 13 08:19:05 2026"
      },
      "committer": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Mon Aug 17 21:57:55 2026"
      },
      "message": "enc: fix lossy progress reporting\n\nTwo independent problems for \u0027progress_hook\u0027:\n\n* VP8EncLoop() dropped StatLoop()\u0027s return value\n  \u003d\u003e abort during the stats loop was ignored\n  \u003d\u003e WebPEncode() returned 1 with error_code \u003d VP8_ENC_ERROR_USER_ABORT\n* final 100% report sat under StoreStats()\u0027s WEBP_DISABLE_STATS guard\n  \u003d\u003e regular builds stopped at 97%, lossless already reached 100%\n\nBitstream unchanged.\n\nChange-Id: I7c29ff4d8414b5f2393b4c6de4e545a99b9c5435\n"
    },
    {
      "commit": "291be6480a4d9f0a44c84b50b337007b43c28255",
      "tree": "18d943d51429748ba2872a14b83dabdbb133b44f",
      "parents": [
        "4fe551df7ecf3b30ff515397e2a1c4f54b8ee80c"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 13 08:17:34 2026"
      },
      "committer": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Mon Aug 17 21:57:55 2026"
      },
      "message": "frame_enc: don\u0027t mistake a zero partition-0 size for a user abort\n\nOneStatPass(): the returned partition #0 size *could* be 0 and thus\nmistaken for an \u0027user abort\u0027 signal.\n\n\u003d\u003e separate size info (*size_p0) from return value.\n\u003d\u003e Makes \u0027-segments 1\u0027 more efficient.\n\u003d\u003e only entropy-coding changed, decoded output identical.\n\nRepro example:\n\nfor s in 1 2 4; do printf -- \"-segments %d: \" $s\n  /tmp/wt-main/b/cwebp -short -print_psnr -q 75 -m 2 -segments $s \\\n    examples/test_ref.ppm -o /dev/null\ndone\n\nmain                          patched\n-segments 1:  2452 37.3508    -segments 1:  2280 37.3508\n-segments 2:  2186 36.6790    -segments 2:  2186 36.6790 \u003c- identical\n-segments 4:  2150 36.6482    -segments 4:  2150 36.6482 \u003c- identical\n\nAll size gains on examples/test_ref.ppm (128×128), -q 75:\n\n┌─────┬────────────────┬────────┬─────┬─────────────────────┐\n│ -m  │  -segments 1   │        │     │ default -segments 4 │\n├─────┼────────────────┼────────┼─────┼─────────────────────┤\n│     │ main → patched │ delta  │     │ delta               │\n├─────┼────────────────┼────────┼─────┼─────────────────────┤\n│ 0   │ 3282 → 2720    │ −17.1% │     │ 0.00%               │\n├─────┼────────────────┼────────┼─────┼─────────────────────┤\n│ 1   │ 3266 → 2690    │ −17.6% │     │ 0.00%               │\n├─────┼────────────────┼────────┼─────┼─────────────────────┤\n│ 2   │ 2452 → 2280    │ −7.0%  │     │ 0.00%               │\n├─────┼────────────────┼────────┼─────┼─────────────────────┤\n│ 3   │ 2190 → 2190    │ 0.00%  │     │ 0.00%               │\n├─────┼────────────────┼────────┼─────┼─────────────────────┤\n│ 4   │ 2206 → 2206    │ 0.00%  │     │ 0.00%               │\n├─────┼────────────────┼────────┼─────┼─────────────────────┤\n│ 5   │ 2110 → 2110    │ 0.00%  │     │ 0.00%               │\n├─────┼────────────────┼────────┼─────┼─────────────────────┤\n│ 6   │ 2016 → 2016    │ 0.00%  │     │ 0.00%               │\n└─────┴────────────────┴────────┴─────┴─────────────────────┘\n\nPSNR is identical in every single row (e.g. -m 0: 37.3432 → 37.3432).\n\nAcross quality, -segments 1 (methods 3-6 unchanged):\n\n-m         q25       q50       q75       q90       q95      q100\n0        -8.3%    -12.4%    -17.1%     -9.4%    -13.4%    -27.8%\n1        -8.8%    -12.9%    -17.6%     -9.9%    -13.9%    -28.3%\n2        -5.0%     -5.8%     -7.0%    -10.2%    -14.2%    -28.3%\n\nChange-Id: I26c4711acb8e80705532b77c73fe5d152daf108e\n"
    },
    {
      "commit": "9aed391fcd9b6259e378bafbd403fb4ffdf96426",
      "tree": "673b466798547061874c6a8bb5d316492f73a72d",
      "parents": [
        "3790de21fb9212d3baf7899bb3499ddfdde3bf9c"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 13 09:55:59 2026"
      },
      "committer": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Mon Aug 17 21:57:51 2026"
      },
      "message": "alpha_enc: report the alpha-too-big failure\n\nCompressAlphaJob(): the \u0027alpha_size !\u003d (uint32_t)alpha_size\u0027 check returns 0\nwithout setting any error.\n\u003d\u003e WebPEncode() failed with \u0027Error code: 0 (OK)\u0027, now FILE_TOO_BIG.\ncf. syntax_enc.c:356 for the same 4G limit. Unreachable anyway.\n\nChange-Id: I00fa446c8eff4c0cbed62e4faedf1d5b15ed661f\n"
    },
    {
      "commit": "3790de21fb9212d3baf7899bb3499ddfdde3bf9c",
      "tree": "b2a829fc689df14ce605292eca39aebdd52d6384",
      "parents": [
        "4fe551df7ecf3b30ff515397e2a1c4f54b8ee80c"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 13 09:54:42 2026"
      },
      "committer": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Mon Aug 17 21:57:51 2026"
      },
      "message": "alpha_enc: init the config before allocating the picture\n\nEncodeLossless(): a WebPConfigInit() failure leaks the picture allocated 6\nlines above.\n\u003d\u003e move it up next to WebPPictureInit(), both being ABI checks only.\nNot reachable today.\n\nChange-Id: I60bf0ea381b8fc22e83c869000b480e8abab0628\n"
    },
    {
      "commit": "4fe551df7ecf3b30ff515397e2a1c4f54b8ee80c",
      "tree": "18d66f5585a9bb72305b1e0f47518b50fd5d1138",
      "parents": [
        "f6dd1d9c7e46d0ab355de6df436777f76efff1de",
        "68e2bdc2814dc6587061828433bd81793a4a528a"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Fri Aug 14 22:18:57 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Aug 14 22:18:57 2026"
      },
      "message": "Merge changes Ic8bff4c6,Ia63cb06c into main\n\n* changes:\n  histogram_enc: nits\n  histogram_enc: don\u0027t copy literal[] twice\n"
    },
    {
      "commit": "68e2bdc2814dc6587061828433bd81793a4a528a",
      "tree": "4dcdc14ac9c8cc9f64b1f5e882dc049d4aaa462d",
      "parents": [
        "be5af857600fab35b8675d87092e1eef7ce683ee"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 13 09:52:59 2026"
      },
      "committer": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 13 10:49:16 2026"
      },
      "message": "histogram_enc: nits\n\n* GetHistogramSize(): the trailing array is uint32_t[], not int[].\n* drop the dead \u0027best_idx1 / best_idx2\u0027 initializers (\u0027\u003d 1\u0027 looked like a\n  typo for -1).\n* note why bin_info[].first fits an int16_t.\n* assert() two caller-guaranteed bounds: \u003c\u003d MAX_HISTO_GREEDY histograms in\n  HistogramCombineGreedy() (quadratic queue), and i \u003e 0 in HistogramRemap().\n\nChange-Id: Ic8bff4c606276783018c0c3304cc3429548f7607\n"
    },
    {
      "commit": "be5af857600fab35b8675d87092e1eef7ce683ee",
      "tree": "d0bca180b764f416be395b0c30c52dfa4c90dbf1",
      "parents": [
        "0be8ddd1186ea33e19d775c9a1deae7efd5ef4ad"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 13 09:49:06 2026"
      },
      "committer": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 13 10:33:11 2026"
      },
      "message": "histogram_enc: don\u0027t copy literal[] twice\n\nHistogramCopy(): \u0027histo_size\u0027 covers the trailing literal[] array, which the\nmemcpy() two lines below then copies again.\n\u003d\u003e use sizeof(*dst), and no assumption left on where literal[] sits.\n13MB of redundant copy on a 1600x1600 lossless encode, below timing noise.\n\nChange-Id: Ia63cb06cf4972b72e9bc67abe304b9dd5e951939\n"
    },
    {
      "commit": "f6dd1d9c7e46d0ab355de6df436777f76efff1de",
      "tree": "9bc470eba0d3030cffb21571a2aa016817cbbe5f",
      "parents": [
        "0be8ddd1186ea33e19d775c9a1deae7efd5ef4ad"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 13 08:22:26 2026"
      },
      "committer": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Thu Aug 13 08:31:37 2026"
      },
      "message": "picture_rescale: report an allocation failure as such\n\nWebPPictureRescale(): a failed WebPSafeMalloc() was reported as VP8_ENC_ERROR_BAD_DIMENSION.\n\u003d\u003e Should be VP8_ENC_ERROR_OUT_OF_MEMORY.\n\nChange-Id: I60aeccc948abb0e39ccac3bfc7f8dff44c47dca9\n"
    },
    {
      "commit": "0be8ddd1186ea33e19d775c9a1deae7efd5ef4ad",
      "tree": "b5c333d63aa043335dcddcefd7ca0c55761f81d6",
      "parents": [
        "ab6f888c4d4bd5073deb3451a5d0b24fe7a83bd7",
        "c77ded026f7def935c5010d216eb1fc24772754f"
      ],
      "author": {
        "name": "Urvang Joshi",
        "email": "urvang@chromium.org",
        "time": "Wed Aug 12 20:39:34 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 12 20:39:34 2026"
      },
      "message": "Merge \"mux.h: document lifetime of getter-returned chunk references\" into main"
    },
    {
      "commit": "ab6f888c4d4bd5073deb3451a5d0b24fe7a83bd7",
      "tree": "d152e33401c1eba2a73a2dcf606bfdf5ed0923d7",
      "parents": [
        "cc4c58f923f9947c5ddbdfcafac6731de960f8d7",
        "d069071c055bc7d1e69ffa4f22466a2d635c0053"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Wed Aug 12 18:54:21 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 12 18:54:21 2026"
      },
      "message": "Merge \"frame_dec: halve the size of the YUV cache\" into main"
    },
    {
      "commit": "cc4c58f923f9947c5ddbdfcafac6731de960f8d7",
      "tree": "03c9c4e2fa6077f0e79123dba8ba3d6df466278f",
      "parents": [
        "901e5cffe0ed6ddd628205c1d121f76811873512",
        "fae4f3fba335e34d668bd4c2a47b8ca28ab37eda"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Wed Aug 12 18:54:08 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 12 18:54:08 2026"
      },
      "message": "Merge \"dec: report the real reason for the alpha header failures\" into main"
    },
    {
      "commit": "901e5cffe0ed6ddd628205c1d121f76811873512",
      "tree": "939f46e13612656450cf7a509c13bf1e47aaa520",
      "parents": [
        "ba8358578ecbc4c75f0723163275de00dec0c704",
        "f2e5c78d82fe62aed17962366a132479015e0f1d"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Wed Aug 12 18:53:55 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 12 18:53:55 2026"
      },
      "message": "Merge \"dec: report the real reason for the decoding failures\" into main"
    },
    {
      "commit": "c77ded026f7def935c5010d216eb1fc24772754f",
      "tree": "2f99dee93c1c95d465f2c63a4598f36fa74a21a9",
      "parents": [
        "ba8358578ecbc4c75f0723163275de00dec0c704"
      ],
      "author": {
        "name": "Sidhartha kumar",
        "email": "Siddharthkautilya@gmail.com",
        "time": "Wed Aug 12 17:54:42 2026"
      },
      "committer": {
        "name": "Sidhartha kumar",
        "email": "Siddharthkautilya@gmail.com",
        "time": "Wed Aug 12 17:54:42 2026"
      },
      "message": "mux.h: document lifetime of getter-returned chunk references\n\nWebPMuxGetChunk() and WebPAnimEncoderGetChunk() return a reference to\nstorage owned by the object. Neither block stated when that reference\nbecomes invalid.\n\nDocument that the reference is only valid until the next call that\nmodifies the object, and that it must not be passed back to the\ncorresponding setter for either value of \u0027copy_data\u0027. WebPMuxSetChunk()\ndeletes existing chunks with the same fourcc before storing the new\ndata, so such a call would read released storage.\n\nWebPAnimEncoderSetChunk() and WebPAnimEncoderGetChunk() forward directly\nto the mux entry points and share the same behavior.\n\nChange-Id: Ifdc7989fc0e89824a78636b12a7c2a0eb51d047c\n"
    },
    {
      "commit": "ba8358578ecbc4c75f0723163275de00dec0c704",
      "tree": "7fd296388f1ab1c99a116d37be6c43927bdfd2e5",
      "parents": [
        "716df483a79602c2407363e48053a8a0caa4b13b",
        "80c44b88134bb7a904403b026fc9b08d3ae3333a"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Tue Aug 11 21:55:15 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 11 21:55:15 2026"
      },
      "message": "Merge \"backward_references_enc: avoid forming counts_ini[-1]\" into main"
    },
    {
      "commit": "d069071c055bc7d1e69ffa4f22466a2d635c0053",
      "tree": "3da40fda9d1cb9e6b50179db082c627839aca29d",
      "parents": [
        "716df483a79602c2407363e48053a8a0caa4b13b"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Tue Aug 11 21:40:35 2026"
      },
      "committer": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Tue Aug 11 21:50:32 2026"
      },
      "message": "frame_dec: halve the size of the YUV cache\n\n* the YUV cache is \u0027cache_height\u0027 rows of \u0027cache_y_stride\u0027 bytes\n* cache_height already carries the 3/2 factor for the U/V planes\n* but cache_size used top_size as the row unit, which is 32 bytes per\n  macroblock (VP8TopSamples \u003d y+u+v) instead of 16\n\u003d\u003e U/V counted twice: 1.3MB wasted at max width.\n\nUse cache_y_stride for both the size and the layout.\n\nPoisoning the unused tail shows nothing ever reads or writes it, over\n170k decode configurations.\n\nChange-Id: I91bfb502e393b4d65c358059cf3198d7be6b0cb9\n"
    },
    {
      "commit": "f2e5c78d82fe62aed17962366a132479015e0f1d",
      "tree": "94d9c33c96b9a6c9bad56dd500f453beee951992",
      "parents": [
        "7be49a48a8f540515a319010115a4a68db023b81"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Tue Aug 11 16:43:09 2026"
      },
      "committer": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Tue Aug 11 20:46:21 2026"
      },
      "message": "dec: report the real reason for the decoding failures\n\n* OOM in the setup() hook was reported as VP8_STATUS_INVALID_PARAM\n* OOM in the alpha dithering or the lossless alpha stream as\n  VP8_STATUS_BITSTREAM_ERROR\n* AllocateMemory()\u0027s size overflow and the worker Sync() left dec-\u003estatus\n  untouched \u003d\u003e DecodeInto() reported them as a success.\n\n\u003d\u003e Add WebPDecParams::status for the hooks to report through\n* forward the vp8l status in ALPHDecode() (except SUSPENDED: the ALPH chunk is whole by then)\n+ set the two missing errors.\n\n\u003d\u003e Failing every allocation in turn (MALLOC_FAIL_AT) changes only these 6 statuses\n\nChange-Id: Iee8f72ceabe65da182d218aa77b776d1d4289c9c\n"
    },
    {
      "commit": "80c44b88134bb7a904403b026fc9b08d3ae3333a",
      "tree": "baadacb3bfd8d63b40e301d65e95b55b29f25d3e",
      "parents": [
        "7be49a48a8f540515a319010115a4a68db023b81"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Tue Aug 11 07:32:50 2026"
      },
      "committer": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Tue Aug 11 20:35:14 2026"
      },
      "message": "backward_references_enc: avoid forming counts_ini[-1]\n\ncounts_ini + pix_count - 2 points before the array when pix_count is 1.\nBut only counts[1] is read back from it \u003d\u003e UB without consequence.\n-fbounds-safety would trap on it one day.\n\n\u003d\u003e index counts_ini[] directly instead of walking a pointer.\n\nNo behaviour change: bitstreams are bit-identical over 18k encodes.\n\nChange-Id: Ic3be8ce398adbdf475dc94f96cfe7e6f18982750\n"
    },
    {
      "commit": "fae4f3fba335e34d668bd4c2a47b8ca28ab37eda",
      "tree": "4ed4f86f9a0e48d83b9ca6513e5128686d5997ed",
      "parents": [
        "7be49a48a8f540515a319010115a4a68db023b81"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Tue Aug 11 18:27:37 2026"
      },
      "committer": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Tue Aug 11 20:17:44 2026"
      },
      "message": "dec: report the real reason for the alpha header failures\n\nALPHInit() returned a boolean and VP8LDecodeAlphaHeader() deleted the\nvp8l decoder before the caller could read its status\n\n* every failure was reported as VP8_STATUS_OUT_OF_MEMORY\n* a single bit flipped in the ALPH header being enough to trigger it.\n\n\u003d\u003e Return a VP8StatusCode from both.\n\u003d\u003e VP8LBuildHuffmanTable() and the table allocation in ReadHuffmanCodeLengths()\n   then have to tell an OOM from an invalid tree\n   (otherwise the forwarded status is always BITSTREAM_ERROR)\n\n* Failing every allocation in turn (MALLOC_FAIL_AT) still reports OUT_OF_MEMORY everywhere\n\nChange-Id: Ib1389538ac7e8fd4d13decc585abcf5bbfdfa36d\n"
    },
    {
      "commit": "716df483a79602c2407363e48053a8a0caa4b13b",
      "tree": "108c04d10de7e899a75beb2882a1828904ecd8d8",
      "parents": [
        "71adc616a1c75c4ea5eeecff2e06ffcf8c79b0eb",
        "e1031747cd2c8b4141ac82d575b3ba1f92d7f8a9"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Tue Aug 11 20:16:56 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 11 20:16:56 2026"
      },
      "message": "Merge \"predictor_enc: set correct error code when allocations fail\" into main"
    },
    {
      "commit": "e1031747cd2c8b4141ac82d575b3ba1f92d7f8a9",
      "tree": "5afca103c9474690c29509e838b0842845ce8515",
      "parents": [
        "7be49a48a8f540515a319010115a4a68db023b81"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Tue Aug 11 07:30:40 2026"
      },
      "committer": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Tue Aug 11 19:23:58 2026"
      },
      "message": "predictor_enc: set correct error code when allocations fail\n\n* EncodeStreamHook() derives its return value from picture-\u003eerror_code,\n-\u003e a failure that doesn\u0027t set .error_code is reported as a success.\n\u003d\u003e on OOM, WebPEncode() returned 1 and emitted a truncated file.\n\nChange-Id: I4e811bb4c00f251a271604da788073b8df96cb3f\n"
    },
    {
      "commit": "71adc616a1c75c4ea5eeecff2e06ffcf8c79b0eb",
      "tree": "4948841c9b06337f7ec4ce2e1face98ba3f9cd7d",
      "parents": [
        "fd3144246e2b255d4cba54338588b1f07e57b10f"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Thu Aug 06 02:18:39 2026"
      },
      "committer": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Tue Aug 11 19:01:18 2026"
      },
      "message": "RescalePlane: use ptrdiff_t to calculate src offset\n\nThis fixes an integer overflow when performing a large scale operation,\ne.g., 32768x65600 -\u003e 1x3000:\n\n```\nsrc/enc/picture_rescale_enc.c:184:64: runtime error: signed integer\n  overflow: 65557 * 32768 cannot be represented in type \u0027int\u0027\n```\n\nThis also fixes an invalid heap read due to the overflow.\n\nBug: 501324956\nChange-Id: Ie723f8a1ed5d59a49b7e3b8ee85dd43283736e32\n"
    },
    {
      "commit": "fd3144246e2b255d4cba54338588b1f07e57b10f",
      "tree": "17ea59300b63e5f4087c3881efeadd05126b65cd",
      "parents": [
        "7be49a48a8f540515a319010115a4a68db023b81"
      ],
      "author": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Tue Aug 11 06:40:31 2026"
      },
      "committer": {
        "name": "skal",
        "email": "pascal.massimino@gmail.com",
        "time": "Tue Aug 11 06:52:59 2026"
      },
      "message": "vp8l_dec: factorize clearing of dec-\u003epixels and derived pointers\n\nFactorize repeated code to a single ClearInternalBuffers() helper.\n\nNo behaviour change: dec-\u003epixels is NULL at both\nAllocateInternalBuffers*().\n\u003d\u003e the added WebPSafeFree() is a no-op there.\n\nAddresses https://crrev.com/c/8223604/comment/928b7cd7_a47f4cdd/\n\nChange-Id: I1e0e78a192b0b8aeea27e054a975d99968b5eb6c\n"
    },
    {
      "commit": "7be49a48a8f540515a319010115a4a68db023b81",
      "tree": "57c80e3ce1e3b954fc9f3336b99cd7add242bd1b",
      "parents": [
        "61a65c8806769fb860f623b3a9e7b57bcaad2445",
        "d2c066f2469f33cfde804f8b5ac86640c95a81bd"
      ],
      "author": {
        "name": "Yannis Guyon",
        "email": "yguyon@google.com",
        "time": "Tue Aug 11 06:29:50 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 11 06:29:50 2026"
      },
      "message": "Merge \"Null out derived sub-slice pointers in VP8LClear\" into main"
    },
    {
      "commit": "61a65c8806769fb860f623b3a9e7b57bcaad2445",
      "tree": "60cd2d65dd4fa06ca6d61e7540b17d8b9c1ee9d6",
      "parents": [
        "94d3c4a7b85aa34ca68963e3b3f00298f47c0bbb",
        "2031332ed97e0e122a3c33209981e0a3d7a30003"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Mon Aug 10 19:33:22 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Aug 10 19:33:22 2026"
      },
      "message": "Merge \"picture: avoid overflow validating crop rectangles\" into main"
    },
    {
      "commit": "d2c066f2469f33cfde804f8b5ac86640c95a81bd",
      "tree": "b6bad2d66e16b0b2ff8bfbdbc91fbd4e1bb92630",
      "parents": [
        "94d3c4a7b85aa34ca68963e3b3f00298f47c0bbb"
      ],
      "author": {
        "name": "Yannis Guyon",
        "email": "yguyon@google.com",
        "time": "Mon Aug 10 09:35:50 2026"
      },
      "committer": {
        "name": "Yannis Guyon",
        "email": "yguyon@google.com",
        "time": "Mon Aug 10 09:35:50 2026"
      },
      "message": "Null out derived sub-slice pointers in VP8LClear\n\nChange-Id: I6ad4924467d9870bc56ac2cf0991549bce7d8f1e\n"
    },
    {
      "commit": "94d3c4a7b85aa34ca68963e3b3f00298f47c0bbb",
      "tree": "35701975444b99feae98c9bf922791c17e74701f",
      "parents": [
        "9e6b233498a113edf8bda283ca638703f835445b",
        "220e3d311aad7da6060c3a7380e04a0cdd113a30"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Fri Aug 07 16:51:55 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Aug 07 16:51:55 2026"
      },
      "message": "Merge \"rescaler_sse2: quiet spurious int sanitizer warnings\" into main"
    },
    {
      "commit": "2031332ed97e0e122a3c33209981e0a3d7a30003",
      "tree": "b50a5136fe17c860c406defe37fa141762e5abb6",
      "parents": [
        "9e6b233498a113edf8bda283ca638703f835445b"
      ],
      "author": {
        "name": "Darren Carreras",
        "email": "carrerasdarren@gmail.com",
        "time": "Wed Jul 29 21:05:45 2026"
      },
      "committer": {
        "name": "Darren Carreras",
        "email": "carrerasdarren@gmail.com",
        "time": "Thu Aug 06 19:44:27 2026"
      },
      "message": "picture: avoid overflow validating crop rectangles\n\nValidate crop bounds with subtraction after checking positive\ndimensions. This prevents large left or top coordinates from wrapping\nduring addition and being accepted as in-bounds.\n\nChange-Id: I2589591095fe8c66e9d1768c7bb91174630da3be\n"
    },
    {
      "commit": "220e3d311aad7da6060c3a7380e04a0cdd113a30",
      "tree": "2457da47643e953606c13ecb34fa8ee2879dc35f",
      "parents": [
        "506cf14d5fe7f5d908b25ea01e72270052cc82dc"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Thu Aug 06 02:24:45 2026"
      },
      "committer": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Thu Aug 06 02:28:00 2026"
      },
      "message": "rescaler_sse2: quiet spurious int sanitizer warnings\n\n`_mm_set_epi32()` takes `int` parameters; add missing casts when using\nunsigned source variables.\n\nFixes warnings of the form:\n\n```\nsrc/dsp/rescaler_sse2.c:122:44: runtime error: implicit conversion from\n  type \u0027unsigned long long\u0027 of value 2147483648 (64-bit, unsigned) to\n  type \u0027int\u0027 changed the value to -2147483648 (32-bit, signed)\nsrc/dsp/rescaler_sse2.c:122:56: runtime error: implicit conversion from\n  type \u0027unsigned long long\u0027 of value 2147483648 (64-bit, unsigned) to\n  type \u0027int\u0027 changed the value to -2147483648 (32-bit, signed)\nsrc/dsp/rescaler_sse2.c:296:45: runtime error: implicit conversion from\n  type \u0027uint32_t\u0027 (aka \u0027unsigned int\u0027) of value 2290648000 (32-bit,\n  unsigned) to type \u0027int\u0027 changed the value to -2004319296 (32-bit,\n  signed)\nsrc/dsp/rescaler_sse2.c:296:56: runtime error: implicit conversion from\n  type \u0027uint32_t\u0027 (aka \u0027unsigned int\u0027) of value 2290648000 (32-bit,\n  unsigned) to type \u0027int\u0027 changed the value to -2004319296 (32-bit,\n  signed)\n```\n\nChange-Id: I064538c89eee7ee0ac1effc27328e0a62b49b55a\n"
    },
    {
      "commit": "9e6b233498a113edf8bda283ca638703f835445b",
      "tree": "2802d3bc930edffc584188c0e3b2366fe6e1272e",
      "parents": [
        "506cf14d5fe7f5d908b25ea01e72270052cc82dc"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Wed Aug 05 20:04:36 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 05 20:04:36 2026"
      },
      "message": "Revert \"cwebp: clarify defaults for -string and -nostrong\"\n\nThis reverts commit 506cf14d5fe7f5d908b25ea01e72270052cc82dc.\n\nReason for revert: strong loopfilter is the default\n\nOriginal change\u0027s description:\n\u003e cwebp: clarify defaults for -string and -nostrong\n\u003e\n\u003e Bug: 520591768\n\u003e Change-Id: I2d88ce7e185b652824854730e141904df3540337\n\nBug: 520591768\nChange-Id: I958a475820da2995518c6d3e26deea0de10fac97\n"
    },
    {
      "commit": "506cf14d5fe7f5d908b25ea01e72270052cc82dc",
      "tree": "7b2252d56f6ea2b378a4078ee770cebf370bcde5",
      "parents": [
        "733c91e461c18cf1127c9ed0a80dccbcfed599d3"
      ],
      "author": {
        "name": "Maryla",
        "email": "maryla@google.com",
        "time": "Mon Aug 03 13:45:22 2026"
      },
      "committer": {
        "name": "Maryla Ustarroz-Calonge",
        "email": "maryla@google.com",
        "time": "Tue Aug 04 16:29:44 2026"
      },
      "message": "cwebp: clarify defaults for -string and -nostrong\n\nBug: 520591768\nChange-Id: I2d88ce7e185b652824854730e141904df3540337\n"
    },
    {
      "commit": "733c91e461c18cf1127c9ed0a80dccbcfed599d3",
      "tree": "2802d3bc930edffc584188c0e3b2366fe6e1272e",
      "parents": [
        "3757b8afeb54e305eaef18502812a9a88b7ed662",
        "8b97a5f3b054c3853b8aeed97b21e83658772448"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Thu Jul 02 22:17:53 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jul 02 22:17:53 2026"
      },
      "message": "Merge changes I775506a3,I9152b144 into main\n\n* changes:\n  Add VSX (PPC64) CPU detection\n  Add VSX (PPC64) build support\n"
    },
    {
      "commit": "3757b8afeb54e305eaef18502812a9a88b7ed662",
      "tree": "d3ffa553b28bc474af915b071a627d6f235f67bf",
      "parents": [
        "add5156cb23d8c2742ced4198be578b570f50c88"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Thu Jun 18 02:16:47 2026"
      },
      "committer": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Thu Jun 18 02:19:07 2026"
      },
      "message": "configure.ac: add missing \\ in avx2 test\n\nFixes a warning of the form:\n\n```\nconfigure: line 15023: -a: command not found\n```\n\nBug: 525074821\nFixed: 525074821\nChange-Id: I46b989afb092fa5b423cfbe16527e71fd75c56e0\n"
    },
    {
      "commit": "add5156cb23d8c2742ced4198be578b570f50c88",
      "tree": "01c72a44afdc337d61ab19e4c78cef19cf3d8fb3",
      "parents": [
        "0d6a810f88f929fa102509bbbb4dd1f70d4b11f1",
        "a30c7858d275a45e6423c76a25270cd51f5051f4"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Wed Jun 17 17:24:58 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jun 17 17:24:58 2026"
      },
      "message": "Merge \"xcframeworkbuild.sh: Retain sharpyuv file case\" into main"
    },
    {
      "commit": "a30c7858d275a45e6423c76a25270cd51f5051f4",
      "tree": "a63c0bfc7c9b4a7afc293d426e9e95406db78abf",
      "parents": [
        "b43b2caa710c0c997c066cb32c7fea1391fad70a"
      ],
      "author": {
        "name": "Keith Smiley",
        "email": "keithbsmiley@gmail.com",
        "time": "Tue Jun 16 01:08:31 2026"
      },
      "committer": {
        "name": "Keith Smiley",
        "email": "keithbsmiley@gmail.com",
        "time": "Tue Jun 16 20:12:04 2026"
      },
      "message": "xcframeworkbuild.sh: Retain sharpyuv file case\n\nIn this repo the header paths for sharpyuv are in the lowercase name.\nPreviously the xcframeworkbuild.sh script renamed this path to SharpYuv.\nSince macOS is case insensitive by default, these imports worked but now\nwhen interoping with Swift the compiler produces this warning:\n\n```\n.../SharpYuv.xcframework/ios-arm64_x86_64-simulator/Headers/SharpYuv/sharpyuv_csp.h:15:10: warning: non-portable path to file \u0027\"SharpYuv/sharpyuv.h\"\u0027; specified path differs in case from file name on disk\n15 | #include \"sharpyuv/sharpyuv.h\"\n   |          `- warning: non-portable path to file \u0027\"SharpYuv/sharpyuv.h\"\u0027; specified path differs in case from file name on disk\n```\n\nWe now retain the same paths as what is used in the repo, including for\nthe framework name.\n\nChange-Id: Ibb2b12971888c6a87554fdcffb095e0ce39d346d\n"
    },
    {
      "commit": "0d6a810f88f929fa102509bbbb4dd1f70d4b11f1",
      "tree": "8596bee134b8615ae1e3bb4a7159a67d7fa0cab9",
      "parents": [
        "b43b2caa710c0c997c066cb32c7fea1391fad70a",
        "13d660097229575d32ed5bb0be142e02f4e0463a"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Tue Jun 16 18:18:36 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jun 16 18:18:36 2026"
      },
      "message": "Merge \"Fix dsp constant comment typo (85267 -\u003e 85627)\" into main"
    },
    {
      "commit": "13d660097229575d32ed5bb0be142e02f4e0463a",
      "tree": "9d60998b78f126a559730a5d673fba9054dfc288",
      "parents": [
        "6178b1db7e5564da10c1ad41ea3a52706fd9dcd1"
      ],
      "author": {
        "name": "Nigel Tao",
        "email": "nigeltao@google.com",
        "time": "Tue Jun 16 02:43:38 2026"
      },
      "committer": {
        "name": "Nigel Tao",
        "email": "nigeltao@google.com",
        "time": "Tue Jun 16 02:43:38 2026"
      },
      "message": "Fix dsp constant comment typo (85267 -\u003e 85627)\n\nChange-Id: I7b473e3bb518c445762ff5606064c77e35a3fb3f\n"
    },
    {
      "commit": "8b97a5f3b054c3853b8aeed97b21e83658772448",
      "tree": "691b0328cb726ea4bb2eebb59295b24d2b4cf722",
      "parents": [
        "b2e17fc9f1047ee90d6d8e10fe608fcfad58a4a7"
      ],
      "author": {
        "name": "Trung Lê",
        "email": "8@tle.id.au",
        "time": "Thu Jun 04 13:15:01 2026"
      },
      "committer": {
        "name": "Trung Lê",
        "email": "8@tle.id.au",
        "time": "Thu Jun 04 13:15:01 2026"
      },
      "message": "Add VSX (PPC64) CPU detection\n\nAdd a kVSX feature flag and ppcCPUInfo(). VSX is the POWER8 (ISA 2.07)\nbaseline, so compile-time presence implies runtime availability and the\nfeature is reported unconditionally.\n\nChange-Id: I775506a3044fcb0d6473162166c33be80e96da8f\n"
    },
    {
      "commit": "b2e17fc9f1047ee90d6d8e10fe608fcfad58a4a7",
      "tree": "9a2b60a9c343e368a160e2462e1db55c41a7f9bf",
      "parents": [
        "4df272360e52cdba2314951915baa8b34a7ad72f"
      ],
      "author": {
        "name": "Trung Lê",
        "email": "8@tle.id.au",
        "time": "Thu Jun 04 13:06:55 2026"
      },
      "committer": {
        "name": "Trung Lê",
        "email": "8@tle.id.au",
        "time": "Thu Jun 04 13:06:55 2026"
      },
      "message": "Add VSX (PPC64) build support\n\nDetect -mvsx in both the CMake and autotools builds, following the\nNEON/SSE compiler-probe model. WEBP_USE_VSX is gated on\n__VSX__ \u0026\u0026 __powerpc64__, with WEBP_HAVE_VSX defined by the build\nsystems (or implied when building without a config header). No VSX\nsources are added yet; _vsx.c files will be picked up by these rules in\nfollow-up changes.\n\nChange-Id: I9152b1446877c8be4e1e961b631e777c7ce39694\n"
    },
    {
      "commit": "b43b2caa710c0c997c066cb32c7fea1391fad70a",
      "tree": "3657c37b75d659dc69aa2f13da5c68f5270fddb8",
      "parents": [
        "4df272360e52cdba2314951915baa8b34a7ad72f"
      ],
      "author": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Wed Jun 03 21:34:21 2026"
      },
      "committer": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Wed Jun 03 21:34:21 2026"
      },
      "message": "Fix overflow for dwebp testing flag\n\nBUG: 519266545\nChange-Id: I174fa3888281f4800b6a80fe28276dd833851fa3\n"
    },
    {
      "commit": "4df272360e52cdba2314951915baa8b34a7ad72f",
      "tree": "6a25eeb9372ac87d1e2238fa1d628384df4ec9ad",
      "parents": [
        "5b7f53ba30f82b76c8b4929bf9517cdb0b2fe487",
        "459c0d2458a4e8e637ab68986e3b68a52ec80fa9"
      ],
      "author": {
        "name": "Maryla Ustarroz-Calonge",
        "email": "maryla@google.com",
        "time": "Wed May 27 07:59:54 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed May 27 07:59:54 2026"
      },
      "message": "Merge \"Fix signed integer overflow in SharpYuv RGBToYUVComponent.\" into main"
    },
    {
      "commit": "5b7f53ba30f82b76c8b4929bf9517cdb0b2fe487",
      "tree": "8b7ecc6ab7221b0f162dbb2faf8d5147da5df17e",
      "parents": [
        "6178b1db7e5564da10c1ad41ea3a52706fd9dcd1"
      ],
      "author": {
        "name": "Nigel Tao",
        "email": "nigeltao@google.com",
        "time": "Tue May 26 05:41:45 2026"
      },
      "committer": {
        "name": "Nigel Tao",
        "email": "nigeltao@google.com",
        "time": "Tue May 26 05:45:13 2026"
      },
      "message": "Fix kVP8NewRange comment typo\n\nA separate comment in src/utils/bit_reader_utils.h says of the range\nfield (and note it says \"minus 1\", not \"plus 1\"):\n\nrange_t range;  // current range minus 1. In [127, 254] interval.\n\nChange-Id: I6a35c7a18bf0a3ff5b350afcb4792a58d0b2614e\n"
    },
    {
      "commit": "459c0d2458a4e8e637ab68986e3b68a52ec80fa9",
      "tree": "71a61aca5b8af2a8947162b52bc527cfc3d1f234",
      "parents": [
        "6178b1db7e5564da10c1ad41ea3a52706fd9dcd1"
      ],
      "author": {
        "name": "Maryla",
        "email": "maryla@google.com",
        "time": "Fri May 22 09:45:40 2026"
      },
      "committer": {
        "name": "Maryla Ustarroz-Calonge",
        "email": "maryla@google.com",
        "time": "Fri May 22 14:29:01 2026"
      },
      "message": "Fix signed integer overflow in SharpYuv RGBToYUVComponent.\n\nChange-Id: I21508faa7bc7cc392f23bfb8aa4ca47963feee2c\nBug: 515199461, 515389025\n"
    },
    {
      "commit": "6178b1db7e5564da10c1ad41ea3a52706fd9dcd1",
      "tree": "ce6f86d51e3d89206df2b10b9229e388db869754",
      "parents": [
        "baff2c8980970f58e2aa88622c6575bdee2f876a",
        "2d5f499bcf905f30eb5e2b60290c29944a353929"
      ],
      "author": {
        "name": "Maryla Ustarroz-Calonge",
        "email": "maryla@google.com",
        "time": "Tue May 19 09:56:40 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 19 09:56:40 2026"
      },
      "message": "Merge \"Fix OOB caused by pixels exceeding the advertised bit depth\" into main"
    },
    {
      "commit": "2d5f499bcf905f30eb5e2b60290c29944a353929",
      "tree": "7b27b18a2910fb75188dc5e70d91f7d343ffd00f",
      "parents": [
        "fcae1490caf33105d4dde8de9319fcdf20830f29"
      ],
      "author": {
        "name": "Maryla",
        "email": "maryla@google.com",
        "time": "Thu May 07 13:15:50 2026"
      },
      "committer": {
        "name": "Maryla",
        "email": "maryla@google.com",
        "time": "Mon May 18 11:30:15 2026"
      },
      "message": "Fix OOB caused by pixels exceeding the advertised bit depth\n\nBug: 508312479\nChange-Id: Ia26041fd4a1ab687ef927a96ea9a28ee46d43748\n"
    },
    {
      "commit": "baff2c8980970f58e2aa88622c6575bdee2f876a",
      "tree": "20c81d13fc36ebb3785ce88a67870f62566ed269",
      "parents": [
        "ed0fa1cb07b7ea473286df4908fff5f82aee8406",
        "b51704f9b9fedf41bd70c3294d359a2a91681e9f"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Mon May 11 23:00:13 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon May 11 23:00:13 2026"
      },
      "message": "Merge \"dsp/cpu.c: allow use of AVX2 on Emscripten\" into main"
    },
    {
      "commit": "ed0fa1cb07b7ea473286df4908fff5f82aee8406",
      "tree": "c927dc8167978f68b15adb993448d683c58e7301",
      "parents": [
        "fcae1490caf33105d4dde8de9319fcdf20830f29",
        "453a18c42f396dd803345443fb5f70a0b8291d65"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Sat May 09 02:46:57 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat May 09 02:46:57 2026"
      },
      "message": "Merge \"cmake/cpu.cmake: fix SSE2 check on Emscripten\" into main"
    },
    {
      "commit": "fcae1490caf33105d4dde8de9319fcdf20830f29",
      "tree": "20544314cd2aabdfa672aaa485dcc190a961bbb0",
      "parents": [
        "c601ec96f9f78b616668f445c628da6428be5dc0"
      ],
      "author": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Thu May 07 11:45:09 2026"
      },
      "committer": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Thu May 07 11:45:09 2026"
      },
      "message": "Unroll loop in color map transform\n\nChange-Id: Idcfa92061f10472cfcf63e59df9585a76f830272\n"
    },
    {
      "commit": "c601ec96f9f78b616668f445c628da6428be5dc0",
      "tree": "362cdf4c7830949a3f8b5ebc8d285fc40b7441e1",
      "parents": [
        "24f73316aa6beee994a165917f3e3e0a17df56d6"
      ],
      "author": {
        "name": "Maryla",
        "email": "maryla@google.com",
        "time": "Thu Apr 30 09:25:43 2026"
      },
      "committer": {
        "name": "Maryla Ustarroz-Calonge",
        "email": "maryla@google.com",
        "time": "Mon May 04 08:50:02 2026"
      },
      "message": "Check that abs(rgb_step) and abs(rgb_stride) are large enough.\n\nThey should be able to contain one pixel/row respectively.\nThis is more about preventing obvious user errors than security.\nNegative step/stride values are allowed as we also allow it in other places,\nand it makes it possible to flip the image vertically and/or horizontally while converting.\n\nAlso add checks that stride*height does not overflow size_t.\n\nChange-Id: I157c1f45d099ac0dadb92e6451cf1dbc89b47696\nBug: 501461395\n"
    },
    {
      "commit": "24f73316aa6beee994a165917f3e3e0a17df56d6",
      "tree": "2e41a8145ae19c2733655ebac16014879a6ec4c5",
      "parents": [
        "42d89635a3e8559dc9d70c66e6b1690ba0d2cdb4",
        "409ccf4e108f86ceb311a01870e70d1ffd8de682"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Tue Apr 28 02:30:58 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 28 02:30:58 2026"
      },
      "message": "Merge \"demux.c: remove redundant check\" into main"
    },
    {
      "commit": "409ccf4e108f86ceb311a01870e70d1ffd8de682",
      "tree": "c60ef4e564aa300f42499ef5cc51add8e747d053",
      "parents": [
        "5003e5609eedc5680b8d838a962cbb9a6e9709ce"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Thu Apr 23 21:51:07 2026"
      },
      "committer": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Sat Apr 25 20:09:32 2026"
      },
      "message": "demux.c: remove redundant check\n\nThe conditional\n\n```\nif (chunk_size_padded \u003c ANMF_CHUNK_SIZE) return PARSE_ERROR;\n```\n\nin `ParseVP8XChunks()` added in `0c9546f7 Expand the muxer fuzzer`\nduplicates a check in `NewFrame()` (`actual_size \u003c min_size`). To avoid\na harmless unsigned int overflow move the `anmf_payload_size` variable\ncloser to its first use.\n\nChange-Id: I8c6398f32fcecc48b66f77653da9f38f50369907\n"
    },
    {
      "commit": "42d89635a3e8559dc9d70c66e6b1690ba0d2cdb4",
      "tree": "93a0545b6eca10d1090d0d22a414b063b7095097",
      "parents": [
        "5003e5609eedc5680b8d838a962cbb9a6e9709ce"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Thu Apr 23 20:57:46 2026"
      },
      "committer": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Sat Apr 25 20:07:30 2026"
      },
      "message": "decode.h: add note about negative stride\n\nThe `WebPDecode*Into()` functions accept a negative stride, but it\nimposes a requirement on the start point of the output buffer to avoid\nan out of bounds access.\n\nBug: 505414472\nChange-Id: Ia9bbe4bcb6f65d84504cb99a865ed8d29f2930c2\n"
    },
    {
      "commit": "b51704f9b9fedf41bd70c3294d359a2a91681e9f",
      "tree": "1636ebb241f8676955f40467dfd7ea5b5a4bb3da",
      "parents": [
        "5003e5609eedc5680b8d838a962cbb9a6e9709ce"
      ],
      "author": {
        "name": "Kleis Auke Wolthuizen",
        "email": "github@kleisauke.nl",
        "time": "Fri Apr 24 13:34:15 2026"
      },
      "committer": {
        "name": "Kleis Auke Wolthuizen",
        "email": "github@kleisauke.nl",
        "time": "Fri Apr 24 13:34:15 2026"
      },
      "message": "dsp/cpu.c: allow use of AVX2 on Emscripten\n\nSee: https://github.com/emscripten-core/emscripten/issues/21684\nChange-Id: I2112813c043742738db02e34ff5df0655bc839d0\n"
    },
    {
      "commit": "453a18c42f396dd803345443fb5f70a0b8291d65",
      "tree": "b34ae0de3abbefeafba391ac3b0495e239608756",
      "parents": [
        "5003e5609eedc5680b8d838a962cbb9a6e9709ce"
      ],
      "author": {
        "name": "Kleis Auke Wolthuizen",
        "email": "github@kleisauke.nl",
        "time": "Fri Apr 24 13:30:17 2026"
      },
      "committer": {
        "name": "Kleis Auke Wolthuizen",
        "email": "github@kleisauke.nl",
        "time": "Fri Apr 24 13:30:17 2026"
      },
      "message": "cmake/cpu.cmake: fix SSE2 check on Emscripten\n\nThis broke after the AVX2 optimizations were introduced.\n\nChange-Id: Ia63a0c60b3ef925a84e339cee4257dba3cf8f40d\n"
    },
    {
      "commit": "5003e5609eedc5680b8d838a962cbb9a6e9709ce",
      "tree": "5437b9f4d232c3810a37173488cc3aaf415c9c6c",
      "parents": [
        "5156fbf66438e1cb627effd2ebbd175fd9efb2dd",
        "e38e463dab2278aa15e43a7f36750ffe2300aef0"
      ],
      "author": {
        "name": "Maryla Ustarroz-Calonge",
        "email": "maryla@google.com",
        "time": "Thu Apr 16 13:07:48 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 16 13:07:48 2026"
      },
      "message": "Merge \"Check output strides for SharpYuvConvert.\" into main"
    },
    {
      "commit": "5156fbf66438e1cb627effd2ebbd175fd9efb2dd",
      "tree": "36b9602e39477210fd0966d02368c9abf86995f7",
      "parents": [
        "9a151dc6476294a71af7bdcc5ce2b607805207b5"
      ],
      "author": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Thu Apr 16 10:44:10 2026"
      },
      "committer": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Thu Apr 16 10:44:10 2026"
      },
      "message": "Improve Select_SSE2\n\nUse the same SSE2 code as PredictorAdd11_SSE2 below\n\nChange-Id: I826d021af46a788c9d43e5aecf3c2d03488a1bcd\n"
    },
    {
      "commit": "e38e463dab2278aa15e43a7f36750ffe2300aef0",
      "tree": "d40e666aace6b46b7fdce4debfa004c42627937c",
      "parents": [
        "9a151dc6476294a71af7bdcc5ce2b607805207b5"
      ],
      "author": {
        "name": "Maryla",
        "email": "maryla@google.com",
        "time": "Thu Apr 16 08:03:21 2026"
      },
      "committer": {
        "name": "Maryla",
        "email": "maryla@google.com",
        "time": "Thu Apr 16 08:09:20 2026"
      },
      "message": "Check output strides for SharpYuvConvert.\n\nForbid negative strides and strides that are smaller than one row.\n\nBug: b/501461395\nChange-Id: I0d3a6aaa83f02d4e520a813309274c0559db64fa\n"
    },
    {
      "commit": "9a151dc6476294a71af7bdcc5ce2b607805207b5",
      "tree": "9216581484a1a381b4da72921542fc58b11a9893",
      "parents": [
        "16b9c3618a415474c4e89969a5f545be67aacd96"
      ],
      "author": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Wed Apr 15 13:00:38 2026"
      },
      "committer": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Wed Apr 15 13:00:38 2026"
      },
      "message": "Reorganize alpha decoding to process alpha blocks entirely.\n\nper pixel this removes:\n-  if ((col \u0026 mask) \u003d\u003d 0)\n- ++col\n- if/while (col \u003e\u003d width)\n\nChange-Id: I2c803226ed50159a1a27b54dd07b1e9dfb25d117\n"
    },
    {
      "commit": "16b9c3618a415474c4e89969a5f545be67aacd96",
      "tree": "954916e49235aa951c5778c10dac57926efebd18",
      "parents": [
        "5339483509d998936c3f184ec5a95e8c1bb4a5d9"
      ],
      "author": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Mon Apr 13 20:25:30 2026"
      },
      "committer": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Mon Apr 13 20:25:30 2026"
      },
      "message": "Remove one VP8LIsEndOfStream call\n\nThis is only needed before src is modified.\n\nChange-Id: I5c908fe2b1fc3f880ad4ccb4408ae33f7ae5e9ee\n"
    },
    {
      "commit": "5339483509d998936c3f184ec5a95e8c1bb4a5d9",
      "tree": "bfea49a799af45f068031f08a31febb12a96f5be",
      "parents": [
        "42280f480d5b921a39c6eb286719d0bca30cb61c"
      ],
      "author": {
        "name": "Kleis Auke Wolthuizen",
        "email": "github@kleisauke.nl",
        "time": "Sun Apr 12 13:45:08 2026"
      },
      "committer": {
        "name": "Kleis Auke Wolthuizen",
        "email": "github@kleisauke.nl",
        "time": "Mon Apr 13 09:03:49 2026"
      },
      "message": "dsp/cpu.c: avoid use of legacy EMSCRIPTEN definition\n\nRemoved since Emscripten 5.0.4, see commit:\nhttps://github.com/emscripten-core/emscripten/commit/39f17c3960c32c13503f8e39cc2bdd88e7eb6a86\n\nChange-Id: I7fe092cf50575b29cd4ab80b2473b32ec9a4faa6\n"
    },
    {
      "commit": "42280f480d5b921a39c6eb286719d0bca30cb61c",
      "tree": "a757584208f88afc41bc6cdcba4f25d13b33eff2",
      "parents": [
        "080044c7f2754684b37b9abc5d862d3f9757f893"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Sat Apr 11 23:02:09 2026"
      },
      "committer": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Sat Apr 11 23:50:23 2026"
      },
      "message": "example/Makefile.am: fix build w/--disable-libwebpdemux\n\nAfter:\n b8814a57 Add a fuzzer for ReadAnimatedImage\n\nOnly build libanim_util when `anim_diff` and `anim_dump` are enabled.\n\nFixes:\n make[1]: *** No rule to make target \u0027../src/demux/libwebpdemux.la\u0027,\n needed by \u0027libanim_util.la\u0027.\n\nBug: 501661482\nFixed: 501661482\nChange-Id: I9e2d3a53fe836e7014711fedce4248330794f866\n"
    },
    {
      "commit": "080044c7f2754684b37b9abc5d862d3f9757f893",
      "tree": "12c890ebe14697d3d86e9c0eee22bc51145eb3e8",
      "parents": [
        "c95ed44524df91c85b419252c0711dceaaffd6d3"
      ],
      "author": {
        "name": "Yannis Guyon",
        "email": "yguyon@google.com",
        "time": "Thu Apr 09 08:58:49 2026"
      },
      "committer": {
        "name": "Yannis Guyon",
        "email": "yguyon@google.com",
        "time": "Thu Apr 09 09:54:52 2026"
      },
      "message": "Replace [[fallthrough]] with WEBP_FALLTHROUGH\n\nC and C++ version values based on\nhttps://en.cppreference.com/w/c/23.html and\nhttps://en.cppreference.com/w/cpp/preprocessor/replace.\n\nChange-Id: I1059fa9e17f25f05d452f8dd003ca7d421742bf7\n"
    },
    {
      "commit": "c95ed44524df91c85b419252c0711dceaaffd6d3",
      "tree": "dcc162cb14293f4e2be3a35880085e96827c3790",
      "parents": [
        "6a9eb4428260e5827e737a26823626b70239b209"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Tue Apr 07 20:06:13 2026"
      },
      "committer": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Tue Apr 07 20:15:27 2026"
      },
      "message": "mux,anim: ensure all images are in ANMF chunks\n\nIn an animated file, all image chunks must be contained in ANMF chunks.\nThis fixes an assertion failure:\n\n```\nsrc/mux/muxedit.c:448 in WebPMuxError\n  GetAdjustedCanvasSize(const WebPMux *const, int *const, int *const):\n  wpi-\u003eheader !\u003d NULL\n```\n\nThe demux library already has this check.\n\nBug: 498966755\nChange-Id: I1f04088a60326b47d26d7690277192118ed8374f\n"
    },
    {
      "commit": "6a9eb4428260e5827e737a26823626b70239b209",
      "tree": "31ff61ab7ab6ffe631d1a3ef2a8ce5ed8ecdc074",
      "parents": [
        "7ab12ced1ea53d3d60ec0ff5c5554729ff88d696"
      ],
      "author": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Tue Apr 07 07:42:11 2026"
      },
      "committer": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Tue Apr 07 07:42:44 2026"
      },
      "message": "Fix potential overflow in FramesAreSimilar\n\nBug: 496807858\n\nChange-Id: Idc9af6f86a171322dd09e197dafbef59d5e4aa53\n"
    },
    {
      "commit": "7ab12ced1ea53d3d60ec0ff5c5554729ff88d696",
      "tree": "a467d8c0745455bea7c57efb2f7b63c0984eddb7",
      "parents": [
        "f51e813bf419e9886bf77f2df188c542d20c63ae",
        "3307a349edfacd0296a849bc36a1c8105c3e62d4"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Fri Apr 03 16:18:44 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 03 16:18:44 2026"
      },
      "message": "Merge changes I45ce1744,I350d9144 into main\n\n* changes:\n  anim_encode,KeyFramePenalty: add missing cast\n  ALPHInit: move assignment closer to first use\n"
    },
    {
      "commit": "f51e813bf419e9886bf77f2df188c542d20c63ae",
      "tree": "c2b899b58409195c0317394417c3d00b0d8c9d7e",
      "parents": [
        "0c9546f7efc61eac7f79ae115c3f99c91c21c443"
      ],
      "author": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Fri Apr 03 12:04:12 2026"
      },
      "committer": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Fri Apr 03 13:19:24 2026"
      },
      "message": "Fix some potential integer overflows.\n\nBug: 483655390, 496629074, 496629076\nChange-Id: Idba72361915f1ecf37532a306636011001c27755\n"
    },
    {
      "commit": "3307a349edfacd0296a849bc36a1c8105c3e62d4",
      "tree": "ea3c977246f5d6bf6b5198d8586f16a0b1695661",
      "parents": [
        "c696aadf69fcfa240e713888b8057034df6e945f"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Thu Apr 02 19:29:44 2026"
      },
      "committer": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Thu Apr 02 21:49:25 2026"
      },
      "message": "anim_encode,KeyFramePenalty: add missing cast\n\n`sub_frame.bitstream.size` is a `size_t`. This function intends to\ncalculate a signed penalty value from 2 instances of the variable. Both\nneed to be cast to `int64_t` to avoid the calculation being promoted to\nunsigned when `size_t` is 64 bits.\n\nFixes a (harmless) unsigned overflow warning:\n\n```\nsrc/mux/anim_encode.c:1341:60: runtime error: unsigned integer overflow:\n  106 - 108 cannot be represented in type \u0027size_t\u0027 (aka \u0027unsigned long\u0027)\n```\n\nBug: 498967191\nChange-Id: I45ce174437e5a9bfa856c4d6665f5a60869078b8\n"
    },
    {
      "commit": "c696aadf69fcfa240e713888b8057034df6e945f",
      "tree": "1f012e6ce89100a68a43951f67982013e2b10d39",
      "parents": [
        "0c9546f7efc61eac7f79ae115c3f99c91c21c443"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Thu Apr 02 17:20:09 2026"
      },
      "committer": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Thu Apr 02 21:49:09 2026"
      },
      "message": "ALPHInit: move assignment closer to first use\n\nThis fixes a spurious unsigned integer overflow with invalid content:\n\n```\nsrc/dec/alpha_dec.c:61:44: runtime error: unsigned integer overflow: 0 -\n  1 cannot be represented in type \u0027size_t\u0027 (aka \u0027unsigned long\u0027)\n```\n\nBug: 498965803, 498966235, 498966511, 498967090\nChange-Id: I350d9144d0c1e4e35286e9e1ca68a574ff6f86a1\n"
    },
    {
      "commit": "0c9546f7efc61eac7f79ae115c3f99c91c21c443",
      "tree": "7f6c4ce60e72d3a2b6f382a1c2f756a89fdc4fa2",
      "parents": [
        "b8814a57f0e010969b0d9352d86fa30b855d3fa0"
      ],
      "author": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Wed Apr 01 09:11:04 2026"
      },
      "committer": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Wed Apr 01 11:25:56 2026"
      },
      "message": "Expand the muxer fuzzer.\n\nAnd fix a few bugs it already found.\n\nBug: 497882857\n\nChange-Id: I4af63d7e7fece0686dac931d54a5e855353aaa3a\n"
    },
    {
      "commit": "b8814a57f0e010969b0d9352d86fa30b855d3fa0",
      "tree": "15b293c06953d789e0c53d9c242de130863ea7b4",
      "parents": [
        "a7441f563041b4e5db1baf0deabb3e5c4203efd6"
      ],
      "author": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Fri Mar 27 13:49:51 2026"
      },
      "committer": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Mon Mar 30 08:52:48 2026"
      },
      "message": "Add a fuzzer for ReadAnimatedImage\n\nBug: 496629074\nChange-Id: Ie984f0eab67e8e6eda44abeedf9c13aa213dd340\n"
    },
    {
      "commit": "a7441f563041b4e5db1baf0deabb3e5c4203efd6",
      "tree": "9db333475cff25484786a6d6a618aeb58393ae98",
      "parents": [
        "08bc1239bd9a35fbaee0b9e02288161a81012c76",
        "d9bf5734bb3975600f50e62361cae39901627fc6"
      ],
      "author": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Sat Mar 28 12:09:20 2026"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Mar 28 12:09:20 2026"
      },
      "message": "Merge \"Fix some harmless potential overflows.\" into main"
    },
    {
      "commit": "d9bf5734bb3975600f50e62361cae39901627fc6",
      "tree": "ec240242eb24310153ce56b72df59798cecff055",
      "parents": [
        "5755839a4772de6123628bb0c61996d7c42a0454"
      ],
      "author": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Fri Mar 27 21:09:00 2026"
      },
      "committer": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Fri Mar 27 21:09:00 2026"
      },
      "message": "Fix some harmless potential overflows.\n\nChange-Id: Iebf78971f43b795d90e05316540ce00ba79443dc\n"
    },
    {
      "commit": "08bc1239bd9a35fbaee0b9e02288161a81012c76",
      "tree": "6732fa26a3aef75dc26cce8e079a375815520c39",
      "parents": [
        "5755839a4772de6123628bb0c61996d7c42a0454"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Fri Mar 27 16:22:57 2026"
      },
      "committer": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Fri Mar 27 16:24:33 2026"
      },
      "message": "README.md: update bug tracker link\n\nUse a direct link to the creation page to avoid WebP bugs being filed\nunder the top-level WebM component when the \u0027Create Issue\u0027 button is\nused.\n\nChange-Id: Ibe5990e5a1c7cb6bcf159850fb3bceadbbfc16f1\n"
    },
    {
      "commit": "5755839a4772de6123628bb0c61996d7c42a0454",
      "tree": "8dfad339324b5c816da84557a86f04df1ad46e28",
      "parents": [
        "d25c11493a69cb81452db4f0d4d762a9a2da685e"
      ],
      "author": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Tue Mar 24 09:38:24 2026"
      },
      "committer": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Tue Mar 24 09:38:24 2026"
      },
      "message": "Limit the amount of RAM allocated for Huffman trees\n\nThis will help excessive memory allocation for images not encoded\nby libwebp.\n\nBUG: 494764367\nChange-Id: I95fc345df541d8b134e455c8c33a496f46746655\n"
    },
    {
      "commit": "d25c11493a69cb81452db4f0d4d762a9a2da685e",
      "tree": "e0301cba6018e929f990987ca5d4db0e8852034e",
      "parents": [
        "561325651c9087015f665dd953574824a3dd9b92"
      ],
      "author": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Mon Mar 16 14:33:09 2026"
      },
      "committer": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Mon Mar 16 14:33:09 2026"
      },
      "message": "Remove unreachable condition\n\nChange-Id: I9149d1574f72e6ecb532300712660abb29d0d027\n"
    },
    {
      "commit": "561325651c9087015f665dd953574824a3dd9b92",
      "tree": "7787bb4bcd9c511b144e90cc8d058dea39282b29",
      "parents": [
        "f342dfc1756785df8803d25478bf664c0de629de"
      ],
      "author": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Sun Mar 15 19:20:50 2026"
      },
      "committer": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Sun Mar 15 19:20:50 2026"
      },
      "message": "Fix PNM decoder in case of missing tags\n\nChange-Id: I6a760ff02d94f6af969d483e3f3e2731ad7eb41e\n"
    },
    {
      "commit": "f342dfc1756785df8803d25478bf664c0de629de",
      "tree": "a99e60c2fc9ba9759e3a37fb117285f6cf3042c9",
      "parents": [
        "d29e00aa708243ff9945989a0e4e3c8cf6dbf152"
      ],
      "author": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Mon Feb 09 09:32:39 2026"
      },
      "committer": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Mon Feb 09 09:32:39 2026"
      },
      "message": "Reduce the number of pixels in crunch mode for the fuzzer\n\nBUG: oss-fuzz:482603188\nChange-Id: Iab8c2eb9d00efa06fa148642c86b6a4f99a5a791\n"
    },
    {
      "commit": "d29e00aa708243ff9945989a0e4e3c8cf6dbf152",
      "tree": "4240243aecfa29292f31ed9e16742dc357e3d1fd",
      "parents": [
        "45102247a82396fabac5241c64305b13ed711335"
      ],
      "author": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Thu Feb 05 00:44:48 2026"
      },
      "committer": {
        "name": "James Zern",
        "email": "jzern@google.com",
        "time": "Thu Feb 05 21:07:59 2026"
      },
      "message": "anim_decode: fix overflow in ZeroFillFrameRect\n\nThis function was missed in 1c364400 (prevent 32b overflow for very\nlarge canvas_width / height) when related functions were updated.\n\nBug: 481737032\nChange-Id: If55cc0490e5ed4f3fc3da07d9b4a5cd921a107ee\n"
    },
    {
      "commit": "45102247a82396fabac5241c64305b13ed711335",
      "tree": "e2111e4b0141bc7004c739a0412f893158a0fd05",
      "parents": [
        "d52b9ee34d6bb8fb7a190fe359d8560cfc2afc91"
      ],
      "author": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Tue Dec 23 16:09:14 2025"
      },
      "committer": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Wed Dec 24 14:10:53 2025"
      },
      "message": "Use proper image dependency targets now that CMake \u003e\u003d 3.16\n\nThis removes some include_directories that can create confusion on\nOSX.\n\nBUG: 470992419\n\nChange-Id: I213c8b0482be6bce845852773557f92821e897d3\n"
    },
    {
      "commit": "d52b9ee34d6bb8fb7a190fe359d8560cfc2afc91",
      "tree": "541d02c5ff980973589ee9ae636163e9593ac9f9",
      "parents": [
        "9b78419750c9c0aab8b23d5fc22dd0c729334553"
      ],
      "author": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Tue Dec 23 11:33:21 2025"
      },
      "committer": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Tue Dec 23 15:54:48 2025"
      },
      "message": "Be consistent with the includes in non-src folders.\n\nBUG: 470992419\n\nChange-Id: I55618205da7dcfe17d96a7c3ee69d924a63d1acf\n"
    },
    {
      "commit": "9b78419750c9c0aab8b23d5fc22dd0c729334553",
      "tree": "0ec4046c16f83d3a699686b026c73ee57185da2a",
      "parents": [
        "d078f7d2013628431b4e98cbba5fc394f6e1d0d3"
      ],
      "author": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Fri Dec 19 22:02:19 2025"
      },
      "committer": {
        "name": "Vincent Rabaud",
        "email": "vrabaud@google.com",
        "time": "Tue Dec 23 09:59:13 2025"
      },
      "message": "Fix potential memory leak for big rescaling\n\nThat only happens when the rescaling buffer from WebPRescalerInit\ndoes not fit in a size_t, so on 32-bit or less.\n\nChange-Id: I18a79106d0c47f7ddf130099dde0fec6f2a2301d\n"
    }
  ],
  "next": "d078f7d2013628431b4e98cbba5fc394f6e1d0d3"
}
