)]}'
{
  "commit": "78eff720c86eb6d4e3d45a144df60b2ca464d2d4",
  "tree": "74d93ba7c4ae2d3904d40ef69f614d257c596547",
  "parents": [
    "302a965f4bf5d179ccc68b7d853e2806941de020"
  ],
  "author": {
    "name": "Nipun Kwatra",
    "email": "nkwatra@google.com",
    "time": "Wed Sep 15 15:08:49 2010 -0700"
  },
  "committer": {
    "name": "Nipun Kwatra",
    "email": "nkwatra@google.com",
    "time": "Fri Sep 17 09:50:27 2010 -0700"
  },
  "message": "Implemented frequent read returns for quick stop in time lapse.\n\nIf the frame capture interval is large, read will block for a long time.\nDue to the way the mediaRecorder framework works, a stop() call from\nmediaRecorder waits until the read returns, causing a long wait for\nstop() to return. To avoid this, we return a copy of the last read\nframe with the same time stamp if a frame is not available quickly.\nThis keeps the read() call from blocking too long. This method is\ntriggered when startQuickReadReturns() is called on\nCameraSourceTimeLapse.\n\nIn the still camera case, also using waitRelative on Condition\ninstaed of sleeping, so that we can wake it up.\nAlso for the idle check instead of sleeping, we now wait on a\ncondition variable, which is woken up when the last takePicture\ncallback gets called.\n\nChange-Id: Ia74386e175536aee0f44ae2f8b114c353d3d72f5\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e1cd0c891d2ff16934fc14fbaea2f75469bfd942",
      "old_mode": 33188,
      "old_path": "include/media/stagefright/CameraSourceTimeLapse.h",
      "new_id": "3b303f84771edb0dc4a9f5d0298b5d8c02bc6aaf",
      "new_mode": 33188,
      "new_path": "include/media/stagefright/CameraSourceTimeLapse.h"
    },
    {
      "type": "modify",
      "old_id": "fe5074b94f643732e303576a758b7d947a0d5fe5",
      "old_mode": 33188,
      "old_path": "media/libmediaplayerservice/StagefrightRecorder.cpp",
      "new_id": "bf0c6e17a59888436b477728763a6a2b66bccafe",
      "new_mode": 33188,
      "new_path": "media/libmediaplayerservice/StagefrightRecorder.cpp"
    },
    {
      "type": "modify",
      "old_id": "f1dc9e62cbe163d076a29f13f98edb41c3afe3eb",
      "old_mode": 33188,
      "old_path": "media/libmediaplayerservice/StagefrightRecorder.h",
      "new_id": "02d9a01660e0a7d9b6ba4606b943b07677ee6fbd",
      "new_mode": 33188,
      "new_path": "media/libmediaplayerservice/StagefrightRecorder.h"
    },
    {
      "type": "modify",
      "old_id": "12ac168768f5da540eaa05e0814bff03907b1de2",
      "old_mode": 33188,
      "old_path": "media/libstagefright/CameraSource.cpp",
      "new_id": "0c9eef4e32d858851777ff5fc734277f9fd2ceb9",
      "new_mode": 33188,
      "new_path": "media/libstagefright/CameraSource.cpp"
    },
    {
      "type": "modify",
      "old_id": "227e090942ef8b7aa1f62c8736b4c04ba1db74d7",
      "old_mode": 33188,
      "old_path": "media/libstagefright/CameraSourceTimeLapse.cpp",
      "new_id": "c1bc4330157d7857bf03dcc4ded82515216b6354",
      "new_mode": 33188,
      "new_path": "media/libstagefright/CameraSourceTimeLapse.cpp"
    }
  ]
}
