)]}'
{
  "commit": "22c1ad9f706ee00c3cdd0bb71ec4b7818de2f6c3",
  "tree": "c0d8bc5508d98098b2eb04689f31b91ac64e11a2",
  "parents": [
    "35f5bfc2a1ca84bbb182da29c76b176d239098fe"
  ],
  "author": {
    "name": "Joe Drago",
    "email": "jdrago@netflix.com",
    "time": "Thu Sep 26 12:46:50 2019 -0700"
  },
  "committer": {
    "name": "Joe Drago",
    "email": "jdrago@netflix.com",
    "time": "Thu Sep 26 12:46:50 2019 -0700"
  },
  "message": "Keyframe info and Nth image support\n\nAdded:\n- stss box parsing for keyframe information\n- avifBool avifDecoderIsKeyframe(avifDecoder * decoder, uint32_t frameIndex);\n- uint32_t avifDecoderNearestKeyframe(avifDecoder * decoder, uint32_t frameIndex);\n- avifResult avifDecoderNthImage(avifDecoder * decoder, uint32_t frameIndex);\n- aviffuzz prints keyframe information as it repeatedly decodes\n\nChanged:\n- internally renamed codec function \"decode\" to \"open\", as that\u0027s all it does\n- dav1d codec\u0027s open function no longer does an initial unnecessary feed\n- avifCodecDecodeInput now stores an array of avifSample which know if they\u0027re keyframes\n- moved codec flushing code into avifDecoderFlush() so it is available to avifDecoderNthImage\n- ptsInTimescales is now calculated independently of frame decode order\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9979fdcc30e4cdb7f5f756f84ba3dce708e3e61b",
      "old_mode": 33188,
      "old_path": "CHANGELOG.md",
      "new_id": "e3308bd1f8bf7e55c06610d19f0ffa13f0dbc5ab",
      "new_mode": 33188,
      "new_path": "CHANGELOG.md"
    },
    {
      "type": "modify",
      "old_id": "1e0edd18adffc5b1ef9bcfebc73e8e2a13fbca3b",
      "old_mode": 33188,
      "old_path": "include/avif/avif.h",
      "new_id": "6e4abc5ea48ef1f2da78ae085f4d3e773024525a",
      "new_mode": 33188,
      "new_path": "include/avif/avif.h"
    },
    {
      "type": "modify",
      "old_id": "0de718141254f0ff437977848afa512dd53fe3a2",
      "old_mode": 33188,
      "old_path": "include/avif/internal.h",
      "new_id": "518595310ab1c35eea760ab5c1676f2bd97eb91b",
      "new_mode": 33188,
      "new_path": "include/avif/internal.h"
    },
    {
      "type": "modify",
      "old_id": "fd4c9eab944bfafd2862822a60d3c84f758e88a9",
      "old_mode": 33188,
      "old_path": "src/codec_aom.c",
      "new_id": "eb6a8fd49225698420bec0979afec59a8378eab8",
      "new_mode": 33188,
      "new_path": "src/codec_aom.c"
    },
    {
      "type": "modify",
      "old_id": "b48c10fc6bcd777f09431228e9b88f0c58e8c7c5",
      "old_mode": 33188,
      "old_path": "src/codec_dav1d.c",
      "new_id": "5d164d79f4c40b769dd397d5c6bc95141933ed81",
      "new_mode": 33188,
      "new_path": "src/codec_dav1d.c"
    },
    {
      "type": "modify",
      "old_id": "06e87eae4393bf6e89f4371b965b6415575729a8",
      "old_mode": 33188,
      "old_path": "src/read.c",
      "new_id": "ca1a1deab92f8bec3489cc7bac232fd6aaee99ec",
      "new_mode": 33188,
      "new_path": "src/read.c"
    },
    {
      "type": "modify",
      "old_id": "01c536543c93f82b55aaf6f2ba57429cc000afc7",
      "old_mode": 33188,
      "old_path": "tests/aviffuzz.c",
      "new_id": "770468273f9e54849f0d1b8b95d5f34c5c2610a1",
      "new_mode": 33188,
      "new_path": "tests/aviffuzz.c"
    }
  ]
}
