)]}'
{
  "commit": "1942eeb8860bd1350e66a250cd684fa7705fb68c",
  "tree": "ab96148bc9d87b63441e2c72929e8f68bfef569a",
  "parents": [
    "b095d9df3c7492e9ba031c4491a0a565f668c9e5"
  ],
  "author": {
    "name": "John Koleszar",
    "email": "jkoleszar@google.com",
    "time": "Thu Jan 06 13:07:39 2011 -0500"
  },
  "committer": {
    "name": "John Koleszar",
    "email": "jkoleszar@google.com",
    "time": "Thu Jan 06 13:07:42 2011 -0500"
  },
  "message": "fix last frame buffer copy logic regression\n\nCommit 0ce3901 introduced a change in the frame buffer copy logic where\nthe NEW frame could be copied to the ARF or GF buffer through the\ncopy_buffer_to_{arf,gf}\u003d\u003d1 flags, if the LAST frame was not being\nrefreshed. This is not correct. The intent of the\ncopy_buffer_to_{arf,gf}\u003d\u003d1 flag is to copy the LAST buffer. To copy the\nNEW buffer, the refresh_{alt_ref,golden}_frame flag should be used.\n\nThe original buffer copy logic is fairly convoluted. For example:\n\n    if (cm-\u003erefresh_last_frame)\n    {\n        vp8_swap_yv12_buffer(\u0026cm-\u003elast_frame, \u0026cm-\u003enew_frame);\n\n        cm-\u003eframe_to_show \u003d \u0026cm-\u003elast_frame;\n    }\n    else\n    {\n        cm-\u003eframe_to_show \u003d \u0026cm-\u003enew_frame;\n    }\n    ...\n    if (cm-\u003ecopy_buffer_to_arf)\n    {\n        if (cm-\u003ecopy_buffer_to_arf \u003d\u003d 1)\n        {\n            if (cm-\u003erefresh_last_frame)\n                vp8_yv12_copy_frame_ptr(\u0026cm-\u003enew_frame, \u0026cm-\u003ealt_ref_frame);\n            else\n                vp8_yv12_copy_frame_ptr(\u0026cm-\u003elast_frame, \u0026cm-\u003ealt_ref_frame);\n        }\n        else if (cm-\u003ecopy_buffer_to_arf \u003d\u003d 2)\n            vp8_yv12_copy_frame_ptr(\u0026cm-\u003egolden_frame, \u0026cm-\u003ealt_ref_frame);\n    }\n\nEffectively, if refresh_last_frame, then new and last are swapped, so\nwhen \"new\" is copied to ARF, it\u0027s equivalent to copying LAST to ARF. If\nnot refresh_last_frame, then LAST is copied to ARF. So LAST is copied to\nARF in both cases.\n\nCommit 0ce3901 removed the first buffer swap but kept the\nrefresh_last_frame?new:last behavior, changing the sense since the first\nswap wasn\u0027t done to the more readable refresh_last_frame?last:new, but\nthis logic is not correct when !refresh_last_frame.\n\nThis commit restores the correct behavior from v0.9.1 and prior. This\ncase is missing from the test vector set.\n\nChange-Id: I8369fc13a37ae882e31a8a104da808a08bc8428f\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "aa2709f5b3a7e4d54b25305eee105fe569a072df",
      "old_mode": 33188,
      "old_path": "vp8/decoder/onyxd_if.c",
      "new_id": "adc9f8ec8fd959e28f782544510ad093d3c00627",
      "new_mode": 33188,
      "new_path": "vp8/decoder/onyxd_if.c"
    }
  ]
}
