)]}'
{
  "commit": "73edeb03ea1730d3a602a888fc9beb2141d951d4",
  "tree": "aba54022795b04f5773c3cbc6c50b88fed11012d",
  "parents": [
    "e9d106bd4571010c2224b2fcfdb69e50aa888494"
  ],
  "author": {
    "name": "Dmitry Kovalev",
    "email": "dkovalev@google.com",
    "time": "Wed Aug 20 17:02:10 2014 -0700"
  },
  "committer": {
    "name": "Dmitry Kovalev",
    "email": "dkovalev@google.com",
    "time": "Thu Aug 28 13:51:37 2014 -0700"
  },
  "message": "Removing alg_priv from vpx_codec_priv struct.\n\nIn order to understand memory layout consider the declaration of the\nfollowing structs. The first one is a part of our API:\n\nstruct vpx_codec_ctx {\n  // ...\n  struct vpx_codec_priv *priv;\n};\n\nThe second one is defined in vpx_codec_internal.h:\n\nstruct vpx_codec_priv {\n  // ...\n};\n\nThe following struct is defined 4 times for encoder/decoder VP8/VP9:\n\nstruct vpx_codec_alg_priv {\n  struct vpx_codec_priv base;\n  // ... \n};\n\nPrivate data allocation for the given ctx:\n\nstruct vpx_codec_ctx *ctx \u003d \u003cget\u003e\nstruct vpx_codec_alg_priv *alg_priv \u003d \u003callocate\u003e\nctx-\u003epriv \u003d (struct vpx_codec_priv *)alg_priv;\n\nThe cast works because vpx_codec_alg_priv has a\nvpx_codec_priv instance as a first member \u0027base\u0027.\n\nChange-Id: I10d1afc8c9a7dfda50baade8c7b0296678bdb0d0\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "1654cd8210f2a07e0a15c585b2404f67bd9f7851",
      "old_mode": 33188,
      "old_path": "vp8/vp8_cx_iface.c",
      "new_id": "5be645c71c7fed82c43b55b94b06392bbc7d5c2b",
      "new_mode": 33188,
      "new_path": "vp8/vp8_cx_iface.c"
    },
    {
      "type": "modify",
      "old_id": "05f32ba206002e9f54a395ee87b4dbaab620074e",
      "old_mode": 33188,
      "old_path": "vp8/vp8_dx_iface.c",
      "new_id": "282032055d3ef0d88c20aeca4ada85638eebcf0a",
      "new_mode": 33188,
      "new_path": "vp8/vp8_dx_iface.c"
    },
    {
      "type": "modify",
      "old_id": "0cd1195bc7181043686ddc38d26778e0c07880eb",
      "old_mode": 33188,
      "old_path": "vp9/vp9_cx_iface.c",
      "new_id": "3dbf0017d320b066796983101363b7ff2ae805e6",
      "new_mode": 33188,
      "new_path": "vp9/vp9_cx_iface.c"
    },
    {
      "type": "modify",
      "old_id": "05d61c8a06d99687f64f889bb50198bcaa930079",
      "old_mode": 33188,
      "old_path": "vp9/vp9_dx_iface.c",
      "new_id": "7909f5392606efa4784dc28af6696c18f1d9646c",
      "new_mode": 33188,
      "new_path": "vp9/vp9_dx_iface.c"
    },
    {
      "type": "modify",
      "old_id": "d7c5800606eadf3097544421f6d1828d73535c7e",
      "old_mode": 33188,
      "old_path": "vpx/internal/vpx_codec_internal.h",
      "new_id": "02f20791a4ab138e8b80d530d82778e646da158e",
      "new_mode": 33188,
      "new_path": "vpx/internal/vpx_codec_internal.h"
    },
    {
      "type": "modify",
      "old_id": "d175eae649f75acb94fa72aefa8e1f8ce10a0c66",
      "old_mode": 33188,
      "old_path": "vpx/src/vpx_codec.c",
      "new_id": "5a495ce814b814fe3fef105fb76894e754fda420",
      "new_mode": 33188,
      "new_path": "vpx/src/vpx_codec.c"
    },
    {
      "type": "modify",
      "old_id": "fdcc9c1b1b07cd0ac72d2ebf78da898948913096",
      "old_mode": 33188,
      "old_path": "vpx/src/vpx_decoder.c",
      "new_id": "802d8edd8a437a3e424941adb3273485ff00b23d",
      "new_mode": 33188,
      "new_path": "vpx/src/vpx_decoder.c"
    },
    {
      "type": "modify",
      "old_id": "736a8daa2c5d28da792bb3676be1b189ae81a85b",
      "old_mode": 33188,
      "old_path": "vpx/src/vpx_encoder.c",
      "new_id": "1903b5575c4b67a709d3ffff246d77590a534630",
      "new_mode": 33188,
      "new_path": "vpx/src/vpx_encoder.c"
    }
  ]
}
