)]}'
{
  "log": [
    {
      "commit": "e72db078c0669121fd170cbcd2b3b737efbac293",
      "tree": "4dfa842976e45a70cb127a0bff832eece61957d2",
      "parents": [
        "bbcf5f312b158365d09c5b3c5c625d12acea318e",
        "5861a9a98c641261c4807c976c750e4611b3a57d"
      ],
      "author": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Fri Oct 07 09:58:26 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 07 09:58:26 2011 -0700"
      },
      "message": "am 851a14eb: Merge \"Add initialize method to CameraHardwareInterface\"\n\n* commit \u0027851a14eb9443996f29617e84dd8b66281876ae8e\u0027:\n  Add initialize method to CameraHardwareInterface\n"
    },
    {
      "commit": "5861a9a98c641261c4807c976c750e4611b3a57d",
      "tree": "baba94df5819920a68548a58fd0e9fc28d74d62d",
      "parents": [
        "003124e20eb0744aab36ad1bde05e15ac122ad75"
      ],
      "author": {
        "name": "Tyler Luu",
        "email": "tluu@ti.com",
        "time": "Thu Oct 06 00:00:03 2011 -0500"
      },
      "committer": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Fri Oct 07 09:24:05 2011 -0700"
      },
      "message": "Add initialize method to CameraHardwareInterface\n\nAdd intialize() method to CameraHardwareInterface so we can\nreturn a proper error value to CameraService if open of camera\nhardware module fails.\n\nb/5405235\n\nChange-Id: I09c627034ddd22a5753c5163392c4fcff301e0b9\nSigned-off-by: Tyler Luu \u003ctluu@ti.com\u003e\nSigned-off-by: Iliyan Malchev \u003cmalchev@google.com\u003e\n"
    },
    {
      "commit": "3c48728a9881660e5e3353903b77ac614cab0e82",
      "tree": "282ce16d01a7e8f3cb146b3b489f1602c3c4f0e3",
      "parents": [
        "ccab9d2b7cb4ba58139a007f893a9121e1208f57",
        "6c904e26d4cd7a79f589e613fa7b2866a9fccb15"
      ],
      "author": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Fri Oct 07 05:46:43 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 07 05:46:43 2011 -0700"
      },
      "message": "am 17f25410: Merge \"Allow shutter/recording sound to be adjusted unless it\\\u0027s forced.\"\n\n* commit \u002717f254105b399c7a4216da2d477e7f9cbdbd7319\u0027:\n  Allow shutter/recording sound to be adjusted unless it\u0027s forced.\n"
    },
    {
      "commit": "ccab9d2b7cb4ba58139a007f893a9121e1208f57",
      "tree": "c9db48319613ac1a71f9ea8112a120ca4c47b585",
      "parents": [
        "5c29a244bbcbbfc2d17a40478b17e49df97eff83",
        "3e754efaddf3e221bcae6fe836d7553185d01944"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Fri Oct 07 05:46:42 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 07 05:46:42 2011 -0700"
      },
      "message": "am 3c02c12c: Merge \"Allow Camera.setDisplayOrientation to be called when preview is active.\"\n\n* commit \u00273c02c12c73fa8719e49a5da6534750196efe3eba\u0027:\n  Allow Camera.setDisplayOrientation to be called when preview is active.\n"
    },
    {
      "commit": "6c904e26d4cd7a79f589e613fa7b2866a9fccb15",
      "tree": "6af862be56e12cdec873fef7e99129a288a79c3d",
      "parents": [
        "3e754efaddf3e221bcae6fe836d7553185d01944",
        "90f4bc2a3d361252df898fa31a99f4120aeefb27"
      ],
      "author": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Fri Oct 07 03:20:26 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Oct 07 03:20:26 2011 -0700"
      },
      "message": "Merge \"Allow shutter/recording sound to be adjusted unless it\u0027s forced.\""
    },
    {
      "commit": "3e754efaddf3e221bcae6fe836d7553185d01944",
      "tree": "38012e5f87f1da55fca784ebb4dfb14ead3c40a8",
      "parents": [
        "e46c970c8f2fc26ff39cf8bebf984f46b17233ba",
        "b9f588677910cac6ffc0346092bfcfe1c6620b90"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Fri Oct 07 03:08:23 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Oct 07 03:08:23 2011 -0700"
      },
      "message": "Merge \"Allow Camera.setDisplayOrientation to be called when preview is active.\""
    },
    {
      "commit": "b9f588677910cac6ffc0346092bfcfe1c6620b90",
      "tree": "739803b1d5906d94945de8238e43ea61f4ea3ba8",
      "parents": [
        "d3523f89a867afa111bb332887bf006ec3ae93e6"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Fri Oct 07 13:13:54 2011 +0800"
      },
      "committer": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Fri Oct 07 18:01:09 2011 +0800"
      },
      "message": "Allow Camera.setDisplayOrientation to be called when preview is active.\n\nbug:5422679\n\nChange-Id: I4c936ab00428fc158b5947fe8f10b1028869bbdb\n"
    },
    {
      "commit": "90f4bc2a3d361252df898fa31a99f4120aeefb27",
      "tree": "ce19a06399c465a18e3bde2f38cf7d59f56fbb08",
      "parents": [
        "1b8ba61cb178bb6429bd214db9c615c350d0823a"
      ],
      "author": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Fri Oct 07 13:37:42 2011 +0800"
      },
      "committer": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Fri Oct 07 13:39:18 2011 +0800"
      },
      "message": "Allow shutter/recording sound to be adjusted unless it\u0027s forced.\n\nChange-Id: I7080d5f50a87f92c8e9395d4cf8f927a6760fa70\n"
    },
    {
      "commit": "933344c82c76c0acc36b209bb9ddf0454b2622de",
      "tree": "e85f84b0b657ba294d9897f99f23063ecee9d1f5",
      "parents": [
        "8cbd4639783e7a60c482699f2b36cd7d50e4f6f1",
        "ec35a1416472865dbebc22b10199ad718ed2cc95"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 05 18:04:52 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 05 18:04:52 2011 -0700"
      },
      "message": "am 3c892288: Merge \"Fix issue 5381089: problem with A2DP music volume\"\n\n* commit \u00273c892288837d165e0273ff1a0f1194c2347d24ac\u0027:\n  Fix issue 5381089: problem with A2DP music volume\n"
    },
    {
      "commit": "ec35a1416472865dbebc22b10199ad718ed2cc95",
      "tree": "dcd10e214322dae22492b8a49209fdfb4b33c30f",
      "parents": [
        "d20bf0676d6db8f12edcd2307f82409c076c7015"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 05 17:42:25 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Oct 05 17:42:25 2011 -0700"
      },
      "message": "Fix issue 5381089: problem with A2DP music volume\n\nThis problem only occurs when audio effects are present and\nthe music volume is applied by one effect engine.\nWhen connecting or disconnecting A2DP, audio effects are moved from\none mixer thread to another. When removed from the source thread,\nthe effect is stopped but it is not restarted when added to the\ndestination thread.\nThis regression was introduced by commit 21b5c47e.\n\nChange-Id: I4cc578d8d760ec65b185032b6fda98c739d331bc\n"
    },
    {
      "commit": "04d90d8ccb8812c6e6eeb620588ea184c3c9d3ff",
      "tree": "d08e14063c50da84f042121a73184fea0d6f0c60",
      "parents": [
        "7e069e101782b542449776c402bcb08e9a9307b1",
        "17799467c64629ef174d8f09cc89c4049624dcac"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 27 14:09:37 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Sep 27 14:09:37 2011 -0700"
      },
      "message": "am ab7ed38d: Merge \"Fix issue 5373658: memory leak in AudioFlinger.\"\n\n* commit \u0027ab7ed38d5fea82db64eb90bad9d4c646d61d15df\u0027:\n  Fix issue 5373658: memory leak in AudioFlinger.\n"
    },
    {
      "commit": "9d18ec574f5d847a86a21594ac39394ef5b108fc",
      "tree": "5c720b5e0835102eeff634fcf6d27f129751c3d1",
      "parents": [
        "797ab6072402b12721dc226a9ebde3546e7640e9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 27 12:07:15 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 27 12:07:15 2011 -0700"
      },
      "message": "Fix issue 5373658: memory leak in AudioFlinger.\n\nUnlink PowerManagerService binder interface death recipient\nin ThreadBase destructor.\n\nChange-Id: Iab06ae9a8a6737bb002b6416a157b0fb50c11ad5\n"
    },
    {
      "commit": "d567784127618309bc164c2911752b7abf80954e",
      "tree": "8cbf1a657501541509a2ccfe87ad51417e46aab0",
      "parents": [
        "620c01ddeedb8ffd7db0119305c2f1375da80b68",
        "ce7f4f6345395eb3e715beaf4a74621956070f47"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 23 14:44:38 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Sep 23 14:44:38 2011 -0700"
      },
      "message": "am 65837ced: Merge \"Fix issue 5355047: Automated effect tests fail.\"\n\n* commit \u002765837cede462b551742f900f2e2f5a1d5dd576a2\u0027:\n  Fix issue 5355047: Automated effect tests fail.\n"
    },
    {
      "commit": "6bffdb8b598a2399e57f6ca48660fb7bdb2490b5",
      "tree": "5112db2529cd94fe9632bf781c07103e49a10849",
      "parents": [
        "89aa8fe4cb00d2f24260005b008602232d678684"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 23 08:40:41 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 23 10:15:05 2011 -0700"
      },
      "message": "Fix issue 5355047: Automated effect tests fail.\n\nFixed several regressions in automated audio effect tests due\nto changes in effect framework and visualizer FFT output range.\n\n- Do not suspend Volume effect on session 0 when effects are\nenabled on specific sessions.\n- Adapt energy detection thresholds to new visualizer FFT range.\n- Leave more time for BassBoost and Virtualizer effects to ramp up\nbefore measuring the effect.\n- Removed second insert reverb left by mistake on the player session\nin preset reverb test.\n\nChange-Id: I7a1ad1372d783fa7900eb9dd1d3b47f54d8d766f\n"
    },
    {
      "commit": "a87a2b1c8590ed1712bc1e29d34110a31b2970b1",
      "tree": "06e90c6cbf21804a6e06e5187a1c625449d3af97",
      "parents": [
        "e6582c88fc0ee96f1dff3637d97f61719e230213",
        "3169d9fa0a4ee7b00c12eb7892703a2a8ded161d"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Sep 16 13:57:35 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Sep 16 13:57:35 2011 -0700"
      },
      "message": "am 9404e1fb: Merge \"AudioResampler: use relative instead of absolute labels\"\n\n* commit \u00279404e1fbd983c16667b9ec31941038c7af2df803\u0027:\n  AudioResampler: use relative instead of absolute labels\n"
    },
    {
      "commit": "eb8b914ad9d4331e1cdf4346731770ce69fd0e77",
      "tree": "cf0032240f144033db3c512063fbd7f8161e042f",
      "parents": [
        "5dc2812abddde309234edc786a541d251c4f820a"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Sep 16 13:14:16 2011 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Sep 16 13:14:16 2011 -0700"
      },
      "message": "AudioResampler: use relative instead of absolute labels\n\nThis change is needed to allow Android to compile with -fPIE\nBug: 5328392\n\nChange-Id: I84d947975776800a7b79c6ac75a881af461a631c\n"
    },
    {
      "commit": "ff2ccd20c782918dd603b3cf53c3bf38d664bbde",
      "tree": "99f7bfa880701cfe0ad4c87a76a55a7393a995f6",
      "parents": [
        "9a22e68daf4bbc14a5382c3f064b8c14172768ac",
        "3a1dccab5f3be394572445f418a2f17f005db25e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 13 12:59:45 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Sep 13 12:59:45 2011 -0700"
      },
      "message": "am 1fbe7a8e: Merge \"Issue 4345021: Audio routed to multiple devices...\"\n\n* commit \u00271fbe7a8e828fd0fe8339d075da08aad701ab6e98\u0027:\n  Issue 4345021: Audio routed to multiple devices...\n"
    },
    {
      "commit": "60cd0a0d488e604d27fc7dbb02b00348693dfde2",
      "tree": "483677bd2a83cde26bfbb49057a7cf3b3384aaf2",
      "parents": [
        "9215ea4cd8bc5f9c9770c5c34a009dc7c6068f86"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 13 11:40:21 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 13 12:44:22 2011 -0700"
      },
      "message": "Issue 4345021: Audio routed to multiple devices...\n\nThere is a possiblility that the condition on which RecordThread::checkForNewParameters_l()\nwaits after updating the command completion status is never signalled.\nThis happens if the thread executing ThreadBase::setParameters() has timed out waiting\nfor the status (for instance if the audio HAL takes too long to execute the setParameters()\ncommand. Then the RecordThread is stuck forever.\n\nThe fix consists in waiting for the condition with a timeout in RecordThread::checkForNewParameters_l().\n\nChange-Id: I7fc671bc2fc43ba4acb65a2beb33ee05742f091e\n"
    },
    {
      "commit": "ac220500953f75d64d611bbed5e47cffc6467cfa",
      "tree": "eb10a1eeb9053439e2893bca9ed7f5866577394f",
      "parents": [
        "c7f4fe3e6cb658a354d10246b5a890ae6e569b28",
        "a8e409f8f9b40737d0b03355894b5e141d0aff6b"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Thu Sep 01 04:17:12 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Sep 01 04:17:12 2011 -0700"
      },
      "message": "am 98bb251c: Add video snapshot camera parameter.\n\n* commit \u002798bb251c8b527600e7a4cca6cc33499710bbfbf1\u0027:\n  Add video snapshot camera parameter.\n"
    },
    {
      "commit": "a8e409f8f9b40737d0b03355894b5e141d0aff6b",
      "tree": "8799a5eecc61038ccf054d905ca3f4492ae18f30",
      "parents": [
        "77d2e08add3ba24fdc527809408028efe3e06b6b"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Tue Aug 30 21:33:10 2011 +0800"
      },
      "committer": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Thu Sep 01 13:37:14 2011 +0800"
      },
      "message": "Add video snapshot camera parameter.\n\nThe API is still hidden.\n\nbug:5187868\n\nChange-Id: I59e1b5774ca32be049723d1a0887faa90d8884bb\n"
    },
    {
      "commit": "fd07e4e40fa914a6d89b4aece3a04342d7a17701",
      "tree": "8db41d225d5a27d10abb60788130c384784c7e68",
      "parents": [
        "96c0b20f989a61c3b54cb41c83e73df4a8b5d590",
        "b76e90de3c64626fe07a68469d0a59a31c8efb6b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Aug 30 10:53:47 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Aug 30 10:53:47 2011 -0700"
      },
      "message": "am 0e35c78d: Merge \"226483: A2DP connected, but music out to speaker\"\n\n* commit \u00270e35c78d25a8df8b3bde566ad6c474f9df242ea4\u0027:\n  226483: A2DP connected, but music out to speaker\n"
    },
    {
      "commit": "b76e90de3c64626fe07a68469d0a59a31c8efb6b",
      "tree": "b8ced112fa7e83a34898679552a26744610ce0e1",
      "parents": [
        "1619f3d3428e9d502dc477d31e0681fe1cd12b89",
        "9f6530f53ae9eda43f4e7c1cb30d2379db00aa00"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Aug 30 10:51:54 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Aug 30 10:51:54 2011 -0700"
      },
      "message": "Merge \"226483: A2DP connected, but music out to speaker\""
    },
    {
      "commit": "9f6530f53ae9eda43f4e7c1cb30d2379db00aa00",
      "tree": "663430f29fec8c038ad2770e2640c9480c0e2251",
      "parents": [
        "d2824a9a392e02a09929a34f0a3dad41ac1faacf"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Aug 30 10:18:54 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Aug 30 10:19:38 2011 -0700"
      },
      "message": "226483: A2DP connected, but music out to speaker\n\nWhen the A2DP headset is connected, there is a possible\nrace condition when the audio tracks are moved from\nthe mixer thread attached to the speaker output to the thread\nattached to A2DP output.\nAs the request to clear the stream type to output mapping cache in\nthe client process is asynchronous, it is possible that the flag\nindicating to the client audio track to re-create the IAudioTrack\non the new thread is processed before the cache is invalidated.\nIn this case, the track will be attached to the old thread and\nmusic will continue playing over the device speaker instead of being\nredirected to A2DP headset.\n\nChange-Id: Ib2ce1eb5320eaff83287b93779061bf4e7a330df\n"
    },
    {
      "commit": "ca426b4bff9840b3dc3c523d893185debf487efd",
      "tree": "96325ec27b509b1ef422a93aae47ae82a9655852",
      "parents": [
        "1ae9d3b64102e317fbf32584a81e8be96db8ce64",
        "13e6dfbd77a6e2c2832cbfe6dc66f3db8716538b"
      ],
      "author": {
        "name": "Jason Simmons",
        "email": "jsimmons@google.com",
        "time": "Mon Aug 29 16:16:49 2011 -0700"
      },
      "committer": {
        "name": "Jason Simmons",
        "email": "jsimmons@google.com",
        "time": "Mon Aug 29 16:16:49 2011 -0700"
      },
      "message": "resolved conflicts for merge of 35c0bf31 to ics-aah\n\nChange-Id: If736c93821359a2f97a0670ad3be8ada5f398bd7\n"
    },
    {
      "commit": "bee5337da7659b3b7128622ba1f42618b11df5be",
      "tree": "523c43a148debb18c5d0f2c8a7b8bf1c62cf920f",
      "parents": [
        "d2824a9a392e02a09929a34f0a3dad41ac1faacf"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Aug 29 12:42:48 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Aug 29 14:50:38 2011 -0700"
      },
      "message": "Audioflinger: reverse logic of BT NREC indication\n\nThe interpretation of BT NREC by AudioFlinger to enable\nor disable AEC and NS was wrong: NREC to ON (default) means\nthe phone (Audio Gateway) must enable local AEC and NS.\n\nChange-Id: I88a264e7fc9831c43bbace4f6b585baec73f2006\n"
    },
    {
      "commit": "dcdbcc5cacf8a60edec0a8202ff6380816625eb4",
      "tree": "3e23ff52c9d1dbc402987ea708c7b3994ff518f1",
      "parents": [
        "71c19fd4078b026dbe1c528c40e670a09893eff2"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Mon Aug 29 10:26:47 2011 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Mon Aug 29 10:32:28 2011 -0700"
      },
      "message": "Add a missing NULL check.\n\nThe get_next_write_timestamp method introduced to the audio HAL is optional.\nHALs which do not implement it leave it set to NULL.  Callers (there is\ncurrently only one in the AudioMixer code) need to be certain to check for NULL\nbefore invoking it.\n\nChange-Id: I9e06d688311c388446bb53993291ebc0f98cff89\n"
    },
    {
      "commit": "535235cf879728dca680279c21b37d5b0be5b10f",
      "tree": "a5a46e3f5326dd1b11908934dd305b64c6fcb651",
      "parents": [
        "d2824a9a392e02a09929a34f0a3dad41ac1faacf"
      ],
      "author": {
        "name": "Mike J. Chen",
        "email": "mjchen@google.com",
        "time": "Mon Aug 15 13:28:26 2011 -0700"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Fri Aug 26 15:17:10 2011 -0700"
      },
      "message": "Media framework changes for Tungsten.\n\nSquashed merge from master-tungsten of the following changes:\n\ncommit 73d09e18c4557e583a1684d44d598a1a02fd0cf2\nAuthor: John Grossman \u003cjohngro@google.com\u003e\nDate:   Mon Jun 20 13:57:44 2011 -0700\n\n    Remove TungstenMisc and rename LinearTransform\n\n    Change-Id: Ie8aa3e24e09fdbf6ef8996c26deb9c5640e20d1b\n\ncommit 3114aabe76ad733b59929d87e49c68229f5ae2e8\nAuthor: John Grossman \u003cjohngro@google.com\u003e\nDate:   Fri Jun 3 10:47:16 2011 -0700\n\n    Name changes and spelling fixes.\n\n    + Replace the term TungstenTime with the Eugene-approved term CommonTime.\n    + Fix a spelling error in a comment I noticed.\n\n    Change-Id: I8c10d618206826d16055f78c7724e24443bb03fd\n\ncommit cbf2903ab6893b6e662514e2f6d670e268a419df\nAuthor: John Grossman \u003cjohngro@google.com\u003e\nDate:   Fri Apr 15 09:27:54 2011 -0700\n\n    Migrate Tungsten code from the HC-Tungsten to the Master-Tungsten branch.\n\n    Change-Id: I95372d913a0761d90168edb4016f5ece0ea74502\n\ncommit bc7c46aa629f9883e959ef23de8da297f9eb508b\nAuthor: Jason Simmons \u003cjsimmons@google.com\u003e\nDate:   Mon Jun 20 13:59:17 2011 -0700\n\n    Create a separate class for timed AudioTracks\n\ncommit 43be3231034ff8537fdd84422a7954780038671f\nAuthor: John Grossman \u003cjohngro@google.com\u003e\nDate:   Mon Jun 27 18:59:12 2011 -0700\n\n    Move libaah_rtp over from the vendor directory.\n\n    Also move factor PipeEvent out into utils.\n\n    Change-Id: Id3877c66efe22d771cf3ef4877107e431b828e37\n\ncommit 17526eb3148c9c3d4365b6d5b47e8dc13bca71b6\nAuthor: John Grossman \u003cjohngro@google.com\u003e\nDate:   Mon Jun 27 17:06:49 2011 -0700\n\n    Name changes for the TRTP Players s/tungsten/aah/g\n\n    Change-Id: I55e9ad13003f6aa6a36955b54426a7efbe31ac51\n\ncommit 423fc1bfc0fda799c421a650c83c4b9293b1a08c\nAuthor: Jason Simmons \u003cjsimmons@google.com\u003e\nDate:   Mon Jun 20 17:56:09 2011 -0700\n\n    More timed AudioFlinger changes requested by code review:\n    * change trimTimedBufferQueue to trimTimedBufferQueue_l\n    * create one timed audio buffer heap per client process instead of one per track\n    * grow the silence buffer on demand\n    * some error handling fixes in timed getNextBuffer\n    * calculate the next output PTS in all mixer and track hooks\n\n    Change-Id: Ifc51a08b55029b7c48902ab2f22933ad7bafe1ad\n\ncommit a148e2674b1d3cb73289b82b85c333f0a66824a9\nAuthor: John Grossman \u003cjohngro@google.com\u003e\nDate:   Mon Jun 20 17:02:24 2011 -0700\n\n    Move the A@H time service into frameworks/base\n\n    Change-Id: I5c570cde70e8931e205516cb33517585804ce841\n\ncommit dfa438fa49bdaeeb2ec5fd0d17b30d881608b6b1\nAuthor: John Grossman \u003cjohngro@google.com\u003e\nDate:   Mon Jun 20 11:55:36 2011 -0700\n\n    Fix the build after Mike\u0027s code moving.\n\n    Change-Id: Ia883643ded252168bcc5a70584ab6ce97bb05266\n\ncommit 04489474ec8e73efe1bf52918831f41659033162\nAuthor: John Grossman \u003cjohngro@google.com\u003e\nDate:   Fri Jun 17 14:19:50 2011 -0700\n\n    Refactor the local/common clock services.\n\n    This change is one of a set of 5 changes made to different repositories.  Look\n    for this comment in all of them.\n\n    Refactor the local/common clock services in tungsten to match android best\n    practice.  Notable changes include\n\n    + The kernel no longer knows anything about common time.  Common time has been\n      moved completely up into user land.  This has an impact on the accuracy of the\n      timesync debugging code, and the netfilter assisted approach to network based\n      timesync is going to have to be modified.\n    + The timesync driver used by A@H is now just local time driver.\n    + The kernel no longer needs access to the linear transform math code, and it\n      has been removed.\n    + A new HAL has been introduced to expose the concept of local time to the\n      system.\n    + A non-slewable stub implementation of the local time HAL based on\n      CLOCK_MONOTONIC has been added.\n    + The TungstenTime library has been eliminated.  Its functionality has been\n      distributed among the common time binder service, the local time hal and the\n      linear transform utility code.\n    + All clients of the old TungstenTime library have been changed to be clients of\n      the binder service, the hal and the utility code.\n    + The reset_tt utilities have been removed, they no longer have a purpose in the\n      system.\n    + more progress has been made in eliminating the word \"tungsten\" from the code.\n\n    Things left to do include\n    + Finish getting rid of tungsten from the time service.\n    + Move the time service into the framework; AudioFlinger\u0027s new timed mode\n      depends on it and the service cannot continue to live in vendor tungsten.\n\n    Change-Id: I999b6cfb4a9d267818a86d747c35eecfc6693101\n\ncommit d48194545eed1116a84d81e2fb53315d2b0701a7\nAuthor: Jason Simmons \u003cjsimmons@google.com\u003e\nDate:   Thu Jun 16 14:22:46 2011 -0700\n\n    Change the interface of the AudioMixer and AudioBufferProvider to accept a presentation timestamp\n\n    Change-Id: Ice2df5628d45a7f77100e7008103b35b3d3160a4\n\ncommit 02561419db82b01ffb28df38000716c612988427\nAuthor: John Grossman \u003cjohngro@google.com\u003e\nDate:   Tue May 10 14:00:21 2011 -0700\n\n    Put in a hack for controling master volume in the policy manager.\n    Fix initial master volume reporting.\n\n    Change-Id: Ia6caf2bbc6083c5f99fab852baa40fff10fc5fc7\n\ncommit 549cdc3ba115dc654cdade261fb055c72c6cdb79\nAuthor: John Grossman \u003cjohngro@google.com\u003e\nDate:   Wed May 4 11:46:17 2011 -0700\n\n    Make certain the logic for computing the output stream mixing point is hardened\n    against underflow and overflow when input and output sample rates don\u0027t match.\n\n    Change-Id: I5ebea07c9938107b435bec7413418622767e4e16\n\ncommit 8043d8ed63f51e76d452d22be7d453d4a7794530\nAuthor: Jason Simmons \u003cjsimmons@google.com\u003e\nDate:   Wed Apr 27 18:06:27 2011 -0700\n\n    Add the patch for timed audio support to the mono resampler\n\n    Change-Id: I526f34ae9d1e8e3b0ed2fb05af3d024d5c5fe711\n\ncommit 2be89486ef23f0b0b0cc2dc25a4c0ee691043f00\nAuthor: John Grossman \u003cjohngro@google.com\u003e\nDate:   Wed Apr 27 10:38:57 2011 -0700\n\n    Extend the AudioHWInterface to allow it to specify the initial master volume used by AudioFlinger.\n\n    Change-Id: I8823330801c927494cf7ca31a6b8f9264fbfbb26\n\ncommit ff89a4d5e37e6a05a2b03f79ab4e97833dd66393\nAuthor: John Grossman \u003cjohngro@google.com\u003e\nDate:   Wed Apr 27 09:07:14 2011 -0700\n\n    Fix an issue with inconsistent volume reporting.\n\n    Changed masterVolume() to return the same value as the last call\n    to setMasterVolume when the HW layer is implementing master\n    volume control.  The masterVolume/setMasterVolume API seems to be\n    an idea which was abandonded a long time ago; as of today the\n    system only ever sets it to 1.0 at startup and then never changes\n    it.  Until we can figure out how the concept of external\n    amplifier gain control fits into the Android audio framework,\n    Tungsten is exposing this API via a hack-tastic invoke back door\n    in the TungstenRXPlayer and needs the getter/setter results to be\n    consistent.\n\n    Change-Id: I2ac730fa8fc9ee28c88f1a8e6f2e493eb5b65544\n\ncommit 086511b2d19cceb976747ac23e12b73fc7c28bea\nAuthor: Jason Simmons \u003cjsimmons@google.com\u003e\nDate:   Mon Apr 25 16:07:19 2011 -0700\n\n    Add handling of timed audio tracks in the generic resampling mixer\n\n    Change-Id: Ic3be1d21b1117f1b233808be543c28a0dcec4792\n\nChange-Id: Id78bba8c002131d8b52b4170259a87fd94e63c73\nSigned-off-by: Mike J. Chen \u003cmjchen@google.com\u003e\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\nSigned-off-by: Jason Simmons \u003cjsimmons@google.com\u003e\n"
    },
    {
      "commit": "a1884f9e9ec3836683efd7eb333ee442e8bc9d56",
      "tree": "08eb0f2c471d07c21a6b6590cadced3b60d79a5a",
      "parents": [
        "2edd41583bb8c2b90c332980e0d1c34ae9ede34e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Aug 23 08:25:03 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Aug 23 08:25:03 2011 -0700"
      },
      "message": "AudioFlinger: add check for audio HAL init failure\n\nDo not call audio HAL functions on the primary HW interface\nif it could not be initialized properly.\n\nChange-Id: If54059c8fd188d6c1686f9e0439994fe9411478a\n"
    },
    {
      "commit": "a5cc7cce9b8aee73b08f6532710e186c02fdd1c0",
      "tree": "e23becde27c1878444b3569d55109b7306a36994",
      "parents": [
        "0270b188aa3929cc512ec6869caba1d6b60cc08c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Aug 02 17:41:11 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 12 17:43:35 2011 -0700"
      },
      "message": "Issue 5081351: isWiredHeadsetOn() permission.\n\nAudioManager.isWiredHeadsetOn() should not require permission MODIFY_AUDIO_SETTINGS.\nRemove permission checks on all getters in audio policy manager as permission enforcement\nis really usefull for setters.\nAlso deprecate AudioManager.isWiredHeadsetOn() which name and implementation are deceptive.\n\nChange-Id: I38f8df7c26c0d417bf0e2b74e4c11c2d143f2ecd\n"
    },
    {
      "commit": "0270b188aa3929cc512ec6869caba1d6b60cc08c",
      "tree": "dda5b931e1c380f8dd0c47b4e8b2178980d4cce6",
      "parents": [
        "db29e5238e28d59978755a2ff2e7e0f05393abdf"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Aug 12 14:14:39 2011 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Aug 12 14:54:56 2011 -0700"
      },
      "message": "Don\u0027t remove effects on session 0\n\nb/5159902\nChange-Id: Id6f29fb1c687069f7480dd81d4745a558f202226\n"
    },
    {
      "commit": "db7c079f284f6e91266f6653ae0ec198b1c5006e",
      "tree": "08c3569af421bc760cb7b81f611ee0959c4b7b9d",
      "parents": [
        "8adb83ba4837b3c9de1a4221a5ca4c371a62e38c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Aug 10 10:37:50 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Aug 11 14:33:45 2011 -0700"
      },
      "message": "Audio effects: track CPU and memory use separately\n\nBefore this change, CPU and memory usage for an audio effect were\nregistered and checked against the limit by audio policy manager\nupon effect instantiation. Even if an effect was not enabled\nit would prevent another effect to be created if the CPU load budget\nwas exceeded, which was too restrictive.\n\nThis change adds a method to register/unregister CPU load only when\nan effect is enabled or disabled.\nIt also adds a mechanism to place all effects on the global output mix\nin suspend state (disabled) when an effect is enabled on a specific session.\nThis will allow applications using session effects to have the priority\nover others using global effects.\n\nAlso fixes some issues with suspend/restore mechanism:\n- avoid taking actions when an effect is disconnected and was not enabled.\n- do not remove a session from the suspended sessions list when corresponding\neffect chain is destroyed.\n\nChange-Id: I5225278aba1ae13d0d0997bfe26a0c9fb46b17d3\n"
    },
    {
      "commit": "3a34befc6fb04a4945a849e8bda8b84e4bf973fe",
      "tree": "80dee67385fb78763b2c25f6dce9ed122bfd9aee",
      "parents": [
        "a1f10e8959cd4656aedb2613e855342102e59555"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Aug 02 13:33:41 2011 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Aug 09 10:21:10 2011 -0700"
      },
      "message": "Keep effects sessions active when the caller dies.\n\nDon\u0027t remove effects until the session they are in goes away or all\nAudioEffects have been explicitly released. This allows the control\npanel process to die without stopping the effects.\n\nChange-Id: I4496e5df080230ca1af149dec95c1309ab8ea888\n"
    },
    {
      "commit": "c3e6572e0ff535932b1f6ffb7bcf5acd891675fb",
      "tree": "e4d87846a30c25c0c2c06c2ab314f93bb945b49f",
      "parents": [
        "ea7c2fea6a031d37270cb5b22b432729626b266d",
        "b8ba0a979067a4efb0b3819bf17770793e41c15e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Aug 08 09:31:42 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 08 09:31:42 2011 -0700"
      },
      "message": "Merge \"AudioFlinger: protect input/output stream access\""
    },
    {
      "commit": "b8ba0a979067a4efb0b3819bf17770793e41c15e",
      "tree": "b38d6dc04987787c6bcf1d23b68ab2f6a870da93",
      "parents": [
        "8292f43746a359d31af631efcffccd142c0a50c3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Aug 07 16:32:26 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Aug 08 08:55:29 2011 -0700"
      },
      "message": "AudioFlinger: protect input/output stream access\n\nSome methods would not check that the output orinput stream of a thread\nwas still valid before calling functions on its interface.\nThis could cause a crash if those methods where called while the output or\ninput was being closed by another thread.\n\nMake sure that the output or input stream pointer is cleared before closing the\nstream.\nAlways check that the output or input pointer is not null before calling\nfunctions at the stream interface.\nGeneralize the use of initCheck() method to verify that the output or input\nstream is not null.\n\nChange-Id: I9d9ca6b744d011bcf3a7bbacb4a581ac1477bfa5\n"
    },
    {
      "commit": "59bd0da8373af0e5159b799495fda51e03120ea4",
      "tree": "0848d5a00a8227d57514a082caa989c39e12e056",
      "parents": [
        "ff3f6808a07a6280071ac1aef7032d6a20ef7393"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Aug 01 09:52:20 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Aug 03 11:47:45 2011 -0700"
      },
      "message": "AudioFlinger: disable AEC and NS with BT headsets\n\nDisable AEC and NS when the Bluetooth SCO headset in use indicates it\nimplements those pre processings.\n\nChange-Id: I93f3d10b0a27243d5dbff7182639576fc0c6d862\n"
    },
    {
      "commit": "59255e4fc7d8ff52874b85b1988dc0785140cf81",
      "tree": "8c6655d7fc94a6caa7a6b3dd10393b8d4f5564ab",
      "parents": [
        "8292f43746a359d31af631efcffccd142c0a50c3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 27 19:49:51 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Aug 02 20:03:35 2011 -0700"
      },
      "message": "Audio Effect Framework: add effect suspend/restore\n\nAdd the possibility for the effect framework to suspend\n(temporarily disable process) and restore audio effects.\nThis feature will be usefull to disable pre processing under certain\nconditions and better control coexistence of audio effects\non output mix and specific sources.\n\nChange-Id: I79b195982cc48748d5708308fb1647b9c3c34cc6\n"
    },
    {
      "commit": "57c86189bc07d9ccb0fd044e66df736d0bf19639",
      "tree": "850a15dd5d48eb35aa993ceb27f3551a25622803",
      "parents": [
        "40cdc56efa47580d89a93750cefecb8ccbaf9a72"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Sat Jul 30 05:00:37 2011 +0800"
      },
      "committer": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Tue Aug 02 15:48:41 2011 +0800"
      },
      "message": "Pass camera frame metadata from camera service to Java.\n\nbug:4460717\nChange-Id: I2fae6e1dfca6b8f3a5ee5716fc7817f5417bf657\n"
    },
    {
      "commit": "c3da3434cb57f47284ea06bb9065eaa2fe033efb",
      "tree": "4d42795a629910980240489569777d70282921ed",
      "parents": [
        "b7c5f8fa2ee707f010b60ff7bea07c2bf1e17e2d"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Jul 29 17:55:48 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Aug 01 14:06:20 2011 -0700"
      },
      "message": "connect/disconnect is now called from our EGL wrapper\n\nthe original connect/disconnect hooks are deprecated\nand replace by api_connect/api_disconnect. the original\nhooks are no no-ops.\napi_connect/api_disconnect is now only called from the\nandroid framework.\n\nBug: 5057915\nChange-Id: I8ca64cd1acd6cabf915bf54689ec2e5f6dfa495a\n"
    },
    {
      "commit": "0065ef783eca9b5e0abb230c422e05ac73d2eff7",
      "tree": "ca4e2535387f1175b6b9bbeb8e44b30161b5f9a4",
      "parents": [
        "6dbe883644940badc684957cfc381bfd115f205e",
        "ff09ef8f18eed29bce50c7817df2fd52d2b50cf6"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Thu Jul 28 17:23:35 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jul 28 17:23:35 2011 -0700"
      },
      "message": "Merge \"Add frame metadata parameter to camera data_callback.\""
    },
    {
      "commit": "ff09ef8f18eed29bce50c7817df2fd52d2b50cf6",
      "tree": "f02ccfe423ba130129a964b7e59e66ca2cae3469",
      "parents": [
        "a3924af33a8005a0aeb20b97fd06e0c523b0d1af"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Thu Jul 28 05:30:59 2011 +0800"
      },
      "committer": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Fri Jul 29 07:14:38 2011 +0800"
      },
      "message": "Add frame metadata parameter to camera data_callback.\n\nbug:4460717\nChange-Id: Ib47d7d7df20af8155a719f3dabefe030893bfebc\n"
    },
    {
      "commit": "6dbe883644940badc684957cfc381bfd115f205e",
      "tree": "54dcc4237e87c8782c697cd338a6bbbed78e2758",
      "parents": [
        "a3924af33a8005a0aeb20b97fd06e0c523b0d1af"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 28 13:59:02 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 28 13:59:02 2011 -0700"
      },
      "message": "Fix issue 5090721: audio record broken\n\nCommit 6dbdc40 introduced a deadlock when exiting the\nAudioFlinger RecordThread.\n\nChange-Id: I1f63e54c5aeff05da4e4d028b53f734c62c78677\n"
    },
    {
      "commit": "85fb61eb8b39d4d3fcebc796c3f7ade1d58567aa",
      "tree": "062e10a3423f078c6ee4956c00cee5a1d2c39c37",
      "parents": [
        "a7280a59259018d997896c043fd2db95f631f12e"
      ],
      "author": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Tue Jul 26 15:56:44 2011 -0700"
      },
      "committer": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Wed Jul 27 10:03:43 2011 -0700"
      },
      "message": "libcameraservice: call put_parameters on camera HAL\n\nChange-Id: I492d1034ade50f9e157141debaa9783a90a04a91\nSigned-off-by: Iliyan Malchev \u003cmalchev@google.com\u003e\n"
    },
    {
      "commit": "a7280a59259018d997896c043fd2db95f631f12e",
      "tree": "516378da6bd410e4fd2fe8cc4927be61b450b684",
      "parents": [
        "99b25ba8da5fdb7a524b53c5db290f7a64f1259c",
        "ec437d8d3db79459d7b19e1734e6fe309bd621e8"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 27 09:48:47 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 27 09:48:47 2011 -0700"
      },
      "message": "Merge \"AudioFlinger: fix crash when deleting pre process.\""
    },
    {
      "commit": "ec437d8d3db79459d7b19e1734e6fe309bd621e8",
      "tree": "e04cdae7f24f8a9827435b591b5f0f5cc8d2ae4b",
      "parents": [
        "288b66b60c9b3af3d84408885d0a4030c45eea9a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 26 20:54:46 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 26 20:54:46 2011 -0700"
      },
      "message": "AudioFlinger: fix crash when deleting pre process.\n\nIf a pre processing effect is detroyed while enabled and capture is active,\nthere was a possibility that the effect engine is released by the framework\nwhile still processed by the audio HAL.\n\nThe fix consists in not releasing the engine in EffectModule::removeHandle()\nbut just flag the effect as being detroyed to avoid further calls to functions\non the engine effect interface.\nThe effect interface is then removed from the audio HAL safely in\nEffectChain::removeEffect_l() while holding the EffectChain mutex.\n\nChange-Id: I71fab30d9145062af8644f545a1f1d4d3e7e7f02\n"
    },
    {
      "commit": "feb0db689c17dced50afaee54c659f1676e2d505",
      "tree": "a949f6cb66c3c5886cd0682fcb3781b0fd5db0a8",
      "parents": [
        "288b66b60c9b3af3d84408885d0a4030c45eea9a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 22 09:04:31 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 25 18:41:12 2011 -0700"
      },
      "message": "Fix issue 4604090: notification sound interrupted.\n\nThe problem is that the audio HAL fails to acquire the wake lock when playing the notification.\nThis is because of a change that removed the mediaserver process form the system group for honeycomb.\n\nThe fix consists in requesting the wake lock from PowerManagerService when AudioFlinger mixer\nwakes up.\n\nA consequence of this change is that audio HALs or pcm drivers do not have to hold wake locks\nanymore as in the past.\n\nChange-Id: I4fb3cc84816c9c408ab7fec75886baf801e1ecb5\n"
    },
    {
      "commit": "57dae99c9fcd6becd2b5ed0c53f277ba4d7dbcfc",
      "tree": "be3ce6819f6a374f914e2c0ec5a837abfe54da5f",
      "parents": [
        "6d240dc8c5e0bc1ba43a2f5e2f4fc3b5f4ae88db"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Jul 24 13:36:09 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 25 14:39:00 2011 -0700"
      },
      "message": "Added APIs for audio preprocessing\n\nAdded APIs to control pre processes applied on captured audio.\nThose APIs are still hidden until reviewed by API council.\n\nThree types of standard pre processes are supported:\n- Automatic Gain Control (AGC) by AutomaticGainControl class\n- Acoustic Echo Cancellation (AEC) by AcousticEchoCanceler class\n- Noise Suppression (NS) by NoiseSuppressor class\n\nA method is added to AudioEffect class to query audio pre processings\napplied by default by the platform on a given AudioRecord session ID.\n\nChange-Id: I0b9fceeb8c704dd06319c3b52b85c96fe871d51d\n"
    },
    {
      "commit": "1d2bff0e588afe183a1baaae731519b4e957bbdb",
      "tree": "a1b9fd05b9b51546c52e76539bce2cccbad05cdb",
      "parents": [
        "77882a8deb5167235ae591e49c9dcff9abb373c1"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Jul 24 17:49:51 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sun Jul 24 17:49:51 2011 -0700"
      },
      "message": "AudioFlinger: add dump of audio pre processing.\n\nDump of media.audio_flinger service was only listing effects on output threads.\nMoved the dump of effect chains from PlaybackThread to ThreadBase class so that\npre processings on RecordThread are also listed.\n\nChange-Id: If8bc74023c12b9c2371f1b300743b156ceca7b87\n"
    },
    {
      "commit": "edc15ad8fcde12dc4f642d80d077239b1532eeca",
      "tree": "8ca296accb3baf0a2956d6587c611c65914ab331",
      "parents": [
        "a1d92359056176b6f6646efc918e0587e3de2b6f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 21 19:35:01 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 21 21:00:46 2011 -0700"
      },
      "message": "Fix issue 4988574: 8 bit PCM audio playback broken.\n\nFixed regression in audio track control block frame size\ncalculation introduced by commit c310dcb.\n\nChange-Id: Ia731b946ae4e43316b98d80229e3b08a696e47d6\n"
    },
    {
      "commit": "0cd7889d37cc60300dceaa975dab041fd35e34fd",
      "tree": "0ba39dc6cb61ae91775f6f9c8b6bc2bf3561b018",
      "parents": [
        "afa9771b5abe7646077a8353f8bf710506803f7a",
        "7c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 20 17:45:37 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 20 17:45:37 2011 -0700"
      },
      "message": "Merge \"Audio framework: support for audio pre processing\""
    },
    {
      "commit": "2cd60e3069e93c11676019c8405d3941cd2ac5b7",
      "tree": "e32f72c949478de5c93885b2518dde05e6540162",
      "parents": [
        "9bc7af17974f448291a44912566ec7472a0d798b",
        "7574da5a501fc9289fee49fdaf1fdb9d47dae2b6"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Tue Jul 19 14:47:20 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 19 14:47:20 2011 -0700"
      },
      "message": "Merge \"Disconnect the native window in CameraService::Client::disconnect.\""
    },
    {
      "commit": "7574da5a501fc9289fee49fdaf1fdb9d47dae2b6",
      "tree": "091907efea3f17c12e2cb199679ba138991e8641",
      "parents": [
        "8ebe5be6b0b3caa7d9d6277a1216ed786bd1e66a"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Wed Jul 20 05:35:02 2011 +0800"
      },
      "committer": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Wed Jul 20 05:35:02 2011 +0800"
      },
      "message": "Disconnect the native window in CameraService::Client::disconnect.\n\nbug:5048372\nChange-Id: I6886907a672ddf5580b988ca5bc13e3dc26d4385\n"
    },
    {
      "commit": "9bc7af17974f448291a44912566ec7472a0d798b",
      "tree": "9df5ca7ddd582ba6d76478bb48982734ace645ad",
      "parents": [
        "2e460c5b7f48aaabff33698ba6b11b04906eefa8"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jul 18 16:15:08 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jul 19 13:05:12 2011 -0700"
      },
      "message": "use SurfaceTexture new scaling mode in SF\n\nSF now obeys SurfaceTexture\u0027s scaling mode instead\nof inferring it from the buffer\u0027s size\n\nChange-Id: I4d50e9851abedd7e64bfcfc8af9eefb9fb668529\n"
    },
    {
      "commit": "630e65cc858d7592446c5f9174e713e29d58588b",
      "tree": "980f69c76a8501ef9294d57365d4b9c28fb513dc",
      "parents": [
        "4a621e6d3438876eb1d9001719c688a2329ee675",
        "0ed3ec00d0242c9dc77532fe0cf0082645b6662c"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Mon Jul 18 15:19:20 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 18 15:19:20 2011 -0700"
      },
      "message": "Merge \"CameraService: (dis)connect from preview windows\""
    },
    {
      "commit": "7c7f10bd4fda9a084e5e7f0eb3a040dfcbf01745",
      "tree": "eb67cd14e679d97a9b866a0410d8e582f4639274",
      "parents": [
        "67a124dcac0578aed94aebf451675a5f4c8a1e4e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 17 21:29:58 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 18 09:42:57 2011 -0700"
      },
      "message": "Audio framework: support for audio pre processing\n\nAudio effect framework is extended to suport effects on\noutput and input audio path.\n\nAudioFlinger: Support for audio effects and effect chains is\nmoved from PlaybackThread class to ThreadBase class so that\nRecordThread can manage effects.\nEffects of type pre processing are allowed on record thread\nonly. When a pre processing is enabled, the effect interface handle is\npassed down to the input stream so that the audio HAL can call the\nprocess function. The record thread loop calls the effect chain process\nfunction that will only manage the effect state and commands and skip the\nprocess function.\n\nAudioRecord: The audio session is allocated before calling getInput() into\naudio policy serice so that the session is known before the input theead is\ncreated and pre processings can be created on the correct session.\n\nAudioPolicyService: default pre processing for a given input source are\nloaded from audio_effects.conf file.\nWhen an input is created, corresponding effects are created and enabled.\n\nChange-Id: Id17119e0979b4dcf189b5c7957fec30dc3478790\n"
    },
    {
      "commit": "e0b5bb23f0a26d248275d203885b820659da7320",
      "tree": "4d7cf07bb5fdd85a882f31f9e4eaae173efdbdde",
      "parents": [
        "4378ace44b9de477608a6c2fbf7134bc0345555f",
        "4d8d0c30abfa4b8d75866d42094cc797e05068fa"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 15 16:27:13 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 15 16:27:13 2011 -0700"
      },
      "message": "Merge \"Log CPU usage\""
    },
    {
      "commit": "4d8d0c30abfa4b8d75866d42094cc797e05068fa",
      "tree": "49d5a2a3b2aa864d2780101c03b6129a0cbbbb4c",
      "parents": [
        "5895e970ae119210773a5184c019178e2516b132"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 08 15:26:12 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 15 13:28:19 2011 -0700"
      },
      "message": "Log CPU usage\n\nChange-Id: Ie447e59be139153e526b7ad467c46c659d26816f\n"
    },
    {
      "commit": "0ed3ec00d0242c9dc77532fe0cf0082645b6662c",
      "tree": "26598624682ba4fa9b14e853d286517cba87fd0e",
      "parents": [
        "61c7ef5bde2c7ed94a078396aa65da67b47e5402"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Wed Jul 13 15:13:14 2011 -0700"
      },
      "committer": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Thu Jul 14 17:48:33 2011 -0700"
      },
      "message": "CameraService: (dis)connect from preview windows\n\nThis change makes CameraService connect and disconnect from preview\nwindows (Surfaces and SurfaceTextures) that get set.\n\nChange-Id: I726971688367d5ce0d9aa90c44168037bce33deb\n"
    },
    {
      "commit": "81eedd1746be590d5d506dfb9ff23619f9d9898f",
      "tree": "caeac020149ff784bea22015b30232543a35c791",
      "parents": [
        "9d35d0c4a1371d52c4ce4d34575967026d9135af"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Wed Jul 13 11:06:57 2011 -0400"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Wed Jul 13 19:45:44 2011 -0400"
      },
      "message": "Remove some #ifdef HAVE_ANDROID_OS that were needed for the simulator build\n\nChange-Id: I13d9f251f86c05ae5405f37adbf6b8e9660935ba\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "319d2e3f4e17a14c9af55ee0a7bcd180d1ce68a5",
      "tree": "2977cbd0292d1be3b4014130bb2be99e60cc0599",
      "parents": [
        "8deb152167af1dbf39d532737f105368ee8973f5"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jul 12 16:02:46 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jul 12 16:04:12 2011 -0700"
      },
      "message": "get rid of overlay HAL\n\nChange-Id: I461f633d172ab10e05326ef10544c67dea664c0e\n"
    },
    {
      "commit": "5e0067b486c3862316aa1f293cf9690c0cf54bda",
      "tree": "104ac8491b40d6e9d8353322792fb83ce76f4c82",
      "parents": [
        "52f556b976a9caceee183d8af2118ddbee02c70a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jul 11 22:12:16 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jul 11 22:12:16 2011 -0700"
      },
      "message": "Remove the simulator target from all makefiles.\nBug: 5010576\n\nChange-Id: I04d722f258951a3078fe07899f5bbe8aac02a8e8\n"
    },
    {
      "commit": "619d29fa1f5efab134441418d82a82a573b4de46",
      "tree": "173b48d845a616b1de063a7d449fc75fedbc3d3a",
      "parents": [
        "bca946c7a54343f1517347bc74d3fff4e6303d3b"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 08 18:52:57 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 08 19:54:07 2011 -0700"
      },
      "message": "Eliminate single-process mode.\nBug: 5010576\n\nChange-Id: Id450dc83efed4897d1e4ff451530fed14457aace\n"
    },
    {
      "commit": "6c21234e3d254fc58227cd2063500a0dcd173689",
      "tree": "bd889dcd6c3169089f63932ecbe1f890f30e8c48",
      "parents": [
        "9b186a44051d0ef7f4ca67150f204299b15a448e",
        "5159c7ec97b575c0486159f0543d2da90c3c3b68"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 08 14:06:24 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 08 14:06:24 2011 -0700"
      },
      "message": "Merge \"Fix build warning; LOG_TAG was misplaced\""
    },
    {
      "commit": "5159c7ec97b575c0486159f0543d2da90c3c3b68",
      "tree": "4a6ed1bf3c4a2e667fc8e6047e15677f02f98a1b",
      "parents": [
        "5895e970ae119210773a5184c019178e2516b132"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 08 09:32:50 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 08 09:32:50 2011 -0700"
      },
      "message": "Fix build warning; LOG_TAG was misplaced\n\nChange-Id: I4fb0590f626445188f9053367707878b2fa0fa30\n"
    },
    {
      "commit": "6d8b694d999e9be7d5dcc336535832a80fb6f61f",
      "tree": "4fcdbf4a7f7fa24a16d7bf27816922031870102f",
      "parents": [
        "5895e970ae119210773a5184c019178e2516b132"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 24 07:01:31 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 07 15:25:51 2011 -0700"
      },
      "message": "Moved and renamed effect API header files\n\nMoved specific effect header files to\nsystem/media/audio_effects/include/audio_effects\nand renamed to lower case (effect_xxx.h).\n\nChange-Id: Icfc2264bfd013cab0395d7e310ada636b9fe3621\n"
    },
    {
      "commit": "1e06f435434681f8750cc21763868fd025e8480e",
      "tree": "a064310008fa01610255ac7b8187e2b588675dee",
      "parents": [
        "34bac59216838c056ffc27fa8dc9c0bf583eaf82"
      ],
      "author": {
        "name": "Sundar Raman",
        "email": "sunds@ti.com",
        "time": "Fri Jun 17 09:05:09 2011 -0500"
      },
      "committer": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Mon Jun 27 13:48:50 2011 -0700"
      },
      "message": "CameraService: Decouple dequeue and lock\n\nDecouple lockBuffer from dequeueBuffer. Add lock_buffer to preview_stream_ops,\nso HALs will be fully in charge of managing buffers.\n\nChange-Id: I7b53487d618bdf08ba904c5a0f41af462a7ca773\nSigned-off-by: Iliyan Malchev \u003cmalchev@google.com\u003e\n"
    },
    {
      "commit": "4ca2c7c913f8bd4ada13aca56d36045d42d1e00f",
      "tree": "d65d0cadafa63bd9ab2aa9e8fbb6704b27a13fbc",
      "parents": [
        "c5a57efb706ec79032fc09c43b16d11ed0876604"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Wed Jun 01 17:22:24 2011 +0800"
      },
      "committer": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Mon Jun 27 15:44:57 2011 +0800"
      },
      "message": "Add framework support for camcorder zoom.\n\nThe purpose of ICameraRecordingProxy and ICameraRecordingProxyListener is to\nallow applications using the camera during recording.\n\nCamera service allows only one client at a time. Since camcorder application\nneeds to own the camera to do things like zoom, the media recorder cannot\naccess the camera directly during recording. So ICameraRecordingProxy is a proxy\nof ICamera, which allows the media recorder to start/stop the recording and\nrelease recording frames. ICameraRecordingProxyListener is an interface that\nallows the recorder to receive video frames during recording.\n\nICameraRecordingProxy\n  startRecording()\n  stopRecording()\n  releaseRecordingFrame()\n\nICameraRecordingProxyListener\n  dataCallbackTimestamp()\n\nThe camcorder app opens the camera and starts the preview. The app passes\nICamera and ICameraRecordingProxy to the media recorder by\nMediaRecorder::setCamera(). The recorder uses ICamera to setup the camera in\nMediaRecorder::start(). After setup, the recorder disconnects from camera\nservice. The recorder calls ICameraRecordingProxy::startRecording() and\npasses a ICameraRecordingProxyListener to the app. The app connects back to\ncamera service and starts the recording. The app owns the camera and can do\nthings like zoom. The media recorder receives the video frames from the\nlistener and releases them by ICameraRecordingProxy::releaseRecordingFrame.\nThe recorder calls ICameraRecordingProxy::stopRecording() to stop the\nrecording.\n\nThe call sequences are as follows:\n1. The app: Camera.unlock().\n2. The app: MediaRecorder.setCamera().\n3. Start recording\n   (1) The app: MediaRecorder.start().\n   (2) The recorder: ICamera.unlock() and ICamera.disconnect().\n   (3) The recorder: ICameraRecordingProxy.startRecording().\n   (4) The app: ICamera.reconnect().\n   (5) The app: ICamera.startRecording().\n4. During recording\n   (1) The recorder: receive frames from ICameraRecordingProxyListener.dataCallbackTimestamp()\n   (2) The recorder: release frames by ICameraRecordingProxy.releaseRecordingFrame().\n5. Stop recording\n   (1) The app: MediaRecorder.stop()\n   (2) The recorder: ICameraRecordingProxy.stopRecording().\n   (3) The app: ICamera.stopRecording().\n\nbug:2644213\n\nChange-Id: I15269397defc25cbbcae16abc071c8349c123122\n"
    },
    {
      "commit": "671a636931295d9c33ffca74551a804479d01241",
      "tree": "b7173f3a54e1eb6245d816c04b13c9be4b12ecc6",
      "parents": [
        "a6c4758fdac248b863567da99f0c13eb12448a95"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 16 21:30:45 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 17 14:19:55 2011 -0700"
      },
      "message": "Added audio_bytes_per_sample() helper function\n\nChange-Id: Ibfcd75c4c241a53d5f052c25ada091904991048a\n"
    },
    {
      "commit": "01bded1246cd770b54b8011527f5c29e1b5663e3",
      "tree": "1f5a10e4db7e61b4ad526f2356a8f4edd307a993",
      "parents": [
        "50b0f02dea21f31ec1fbe45b86893aa9233483b8",
        "a3355430a36bbfa7b2c0d90eb30834f1c5dac337"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Thu Jun 16 01:05:43 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jun 16 01:05:43 2011 -0700"
      },
      "message": "Merge \"Allow camera to be disabled via Device Policy Manager\""
    },
    {
      "commit": "7394a4f358fa9908a9f0a7c954b65c399f4268e6",
      "tree": "76bde6cdaf308c987975d57a5a0d0794613ad65d",
      "parents": [
        "afcedc9e6f17d8213d9bd8f6c36643dcc816d0ef"
      ],
      "author": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Mon Jun 13 18:16:26 2011 -0700"
      },
      "committer": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Mon Jun 13 18:16:26 2011 -0700"
      },
      "message": "audio: update for audio/audio_policy header names/locations\n\nChange-Id: I36c49352eee57559403cd1597f56a8485a360289\nSigned-off-by: Dima Zavin \u003cdima@android.com\u003e\n"
    },
    {
      "commit": "afcedc9e6f17d8213d9bd8f6c36643dcc816d0ef",
      "tree": "d36ad40b3c4ca6758c09a31d216252b9c0a23460",
      "parents": [
        "aaf95a50b2202acb14fa437d065afc611a9265ff"
      ],
      "author": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Fri Jun 10 16:05:23 2011 -0700"
      },
      "committer": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Sat Jun 11 11:02:38 2011 -0700"
      },
      "message": "CameraService: return stide when dequeueing a buffer\n\nChange-Id: I11c7f0b57f7d619cdc392b2d34c538ae898de7ac\nSigned-off-by: Iliyan Malchev \u003cmalchev@google.com\u003e\n"
    },
    {
      "commit": "26adde897188059057b3ffcfde1d60171fc6888c",
      "tree": "8ad4e488ac2efc5e0f5234f4b690c1818eb6e1e8",
      "parents": [
        "6e49bd393f263bd17a65eb5c1a0e649933c78504"
      ],
      "author": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Mon Jun 06 17:21:32 2011 -0700"
      },
      "committer": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Tue Jun 07 11:43:20 2011 -0700"
      },
      "message": "frameworks/base: updates for camera HAL memory management\n\n-- when the camera HAL allocates memory\n\t-- it requests is as N buffers by S bytes each\n\t-- it may specify a file descriptor to get mmapped; if -1, then we use ashmem\n-- when issuing data and data-timestamp callbacks, the camera HAL specifies a\n   buffer index\n-- range checking is performed on the buffer indices\n-- memory requested by a camera HAL is not incStrong\u0027ed, and needs to be\n   expliciftly released by the camera HAL (by calling the release method on the\n   camera_memory_t handle)\n\nChange-Id: I0f09603aa786c238590e7288388ab673787e6032\nSigned-off-by: Iliyan Malchev \u003cmalchev@google.com\u003e\n"
    },
    {
      "commit": "0512ab559d4670c2204078470d7ef5d376811c57",
      "tree": "088654e0dd81abeca06fa9a4d8bc70ee43da8c42",
      "parents": [
        "158b194da537c18a6ad1d7ef3cd63c87b2310269"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed May 04 17:58:57 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 03 16:12:37 2011 -0700"
      },
      "message": "Remove dead code related to gettid\n\nThe gettid system call is always available now.\n\nChange-Id: Ib78b41781eda182dc8605daf456bbea7ff7c2dc0\n"
    },
    {
      "commit": "0d255b2d9061ba31f13ada3fc0f7e51916407176",
      "tree": "4df26e48710542386bddab7a0d1cbfa5d6835ac0",
      "parents": [
        "65580f9adf6c4d98449ad0716488f9fe3869aa5a"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue May 24 15:53:33 2011 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Jun 01 10:55:29 2011 -0700"
      },
      "message": "Use channel mask instead of channel count for track creation\n\nRecord and playback objects (resp AudioRecord and AudioTrack)\nare created using a channel mask, but this information is lost\nin the mixer because only the channel count is known to\nAudioFlinger. A channel count can always be derived from a\nchannel mask.\n\nThe change consists in:\n- disambiguiting variable names for channel masks and counts\n- passing the mask information from the client to AudioFlinger\n and the mixer.\n- when using the DIRECT ouput, only verifying the format of\n the track is compatible with the output\u0027s for PCM.\n\nChange-Id: I50d87bfb7d7afcabdf5f12d4ab75ef3a54132c0e\n"
    },
    {
      "commit": "a3355430a36bbfa7b2c0d90eb30834f1c5dac337",
      "tree": "7273f455fc8d672547d5a0828ac6cd23df230116",
      "parents": [
        "2cf9c5073ca3342ee52673ad68763fadd2c2be79"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Fri May 20 14:54:25 2011 +0800"
      },
      "committer": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Mon May 30 20:05:38 2011 +0800"
      },
      "message": "Allow camera to be disabled via Device Policy Manager\n\nbug:4185309\n\nChange-Id: I8be89d892b8f540fd05913c93f97b92346a0a282\n"
    },
    {
      "commit": "65580f9adf6c4d98449ad0716488f9fe3869aa5a",
      "tree": "71432ddbf09fcc122be1ef5781bbc2d87f725ad8",
      "parents": [
        "e1315cf0b63b4c14a77046519e6b01f6f60d74b0"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 27 17:51:52 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 27 17:51:52 2011 -0700"
      },
      "message": "Removed interface to load audio effects libraries\n\nRemoved unused functions allowing dynamic loading of audio effects libraries\nfrom effects factory API.\n\nChange-Id: I06cc5a51dc10aca87c7a8687bbb874babd711eca\n"
    },
    {
      "commit": "e1315cf0b63b4c14a77046519e6b01f6f60d74b0",
      "tree": "c10fd288fd0d0d85c619e7e635a249765202fabc",
      "parents": [
        "a3e73df3b402f1ebdbef7c8a8e3111d852e7bd35"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 17 19:16:02 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 27 15:15:00 2011 -0700"
      },
      "message": "New effect library API\n\nMoved and renamed media/EffectApi.h to hardware/audio_effect.h\nModified the effect library API to expose a library info structure\ncontaining an interface functions table.\nAlso removed enums for audio channels, audio format and devices\nfrom effect API and use values from system/audio.h instead.\n\nModified effects factory to support new library interface format and\nload libraries and efffects listed in audio_effects.conf file.\nThe file audio_effects.conf is first loaded from /vendor/etc and\nthen from /system/etc/audio_effects.conf if not found.\n\nModified existing effect libraries to implement the new library interface.\n\nChange-Id: Ie52351e071b6d352fa2fbc06c3846686f8c45df9\n"
    },
    {
      "commit": "162f7d15ac5c8c23d1c3de171239f3a4e6e06b2a",
      "tree": "49cf782cd7ee56fce1f5def5482799e1800b8635",
      "parents": [
        "a4ec6711259414cccf6da6b9a0c60fc4817992f0",
        "249c6a61f21bc90e25e4b77f18c98af1ac363e69"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon May 23 09:06:03 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon May 23 09:06:03 2011 -0700"
      },
      "message": "Merge \"HAVE_ANDROID_OS AUDIOFLINGER_SECURITY_ENABLED dead\""
    },
    {
      "commit": "6708b9a3fb654f5623ba5a696288fdba310a5e1a",
      "tree": "46bf064d0c57fa017823e9825aff06700a3f4a4f",
      "parents": [
        "86e152e70a1aab83cba2c75c76d7c0e2d00b61dc",
        "b469b9490b3cd9e0f0466d9b9ab228f6c793b82e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 13 10:24:24 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 13 10:24:24 2011 -0700"
      },
      "message": "Merge \"Fix audio effect framework issues\""
    },
    {
      "commit": "b469b9490b3cd9e0f0466d9b9ab228f6c793b82e",
      "tree": "7491d71638aed90347fb1fe85cec01f28a16bbcf",
      "parents": [
        "43ec1dfc5dc3934680a52a026c5519ddc51bdbd3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon May 09 12:09:06 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 13 08:34:45 2011 -0700"
      },
      "message": "Fix audio effect framework issues\n\nFix two issues in audio effect framework reported by partners.\n\n1 - Fixed duplicated audio buffer sent to effect process function when\npausing a track.\nModified Effectchain::process_l() function to clear the effect chain\ninput buffer before calling the effect process functions when no track\nis active on the session. Previous code was clearing the buffer after\ncalling the process functions and  when transitioning from active\nto inactive, the last processed buffer was passed again once to effect\nprocess function before being cleared.\n\n2 - Fixed potential mutex cross deadlock when disconnecting an effect\nwhile playback is active. This is because EffectChain::process_l()\nwas calling PlaybackThread::hasAudioSession() thus creating an inversion\nin the mutex lock order (EffectChain mutex locked before ThreadBase mutex).\nThe fix consists in removing the call to hasAudioSession() from process_l()\nand requires each effect chain to keep count of the number of audio tracks\nattached to it (previously only the active tracks were accounted for).\n\nChange-Id: Iee4246694ea8c7a66c012120c629d72dd38f9c35\n"
    },
    {
      "commit": "64760240f931714858a59c1579f07264d7182ba2",
      "tree": "5fad3bbdc4f7a19cff980b719edb75577c7f9a4b",
      "parents": [
        "b84d042a1216694e1db6b1fc2b053d348cab5593"
      ],
      "author": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Wed May 11 14:15:23 2011 -0700"
      },
      "committer": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Thu May 12 14:09:57 2011 -0700"
      },
      "message": "update for new audio.h header location\n\nChange-Id: Ic4c62c4037800802427eb7d3c7f5eb8b25d18876\nSigned-off-by: Dima Zavin \u003cdima@android.com\u003e\n"
    },
    {
      "commit": "249c6a61f21bc90e25e4b77f18c98af1ac363e69",
      "tree": "643109c8eefbc8284272f3e1ead1cf76073b80ec",
      "parents": [
        "d2b0088df550e3ddfa44dbdfd1cd9a79ff80a2de"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 05 08:37:41 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 05 09:15:56 2011 -0700"
      },
      "message": "HAVE_ANDROID_OS AUDIOFLINGER_SECURITY_ENABLED dead\n\nRemove dead code from the days when Android ran in emulator.\n\nChange-Id: Ibadbbde0538239ad9b2811a3a2e8f8a6d3b6389c\n"
    },
    {
      "commit": "8ce2364512f7c32c824f5ec5719688830ba72427",
      "tree": "e9a4d9af9512132c16ae5fdbd888c8f1ceac50a5",
      "parents": [
        "8951a97b1f8462c37e740ea5082eea0445d2c501"
      ],
      "author": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Sun May 01 11:33:26 2011 -0700"
      },
      "committer": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Tue May 03 16:40:14 2011 -0700"
      },
      "message": "frameworks/base: android_native_buffer_t -\u003e ANativeWindowBuffer\n\nChange-Id: Idc2eabaa805bb6d308ebb315872623f28d428417\nSigned-off-by: Iliyan Malchev \u003cmalchev@google.com\u003e\n"
    },
    {
      "commit": "8951a97b1f8462c37e740ea5082eea0445d2c501",
      "tree": "8817cddc9d87a872846d4b576bdb96310fa2bd01",
      "parents": [
        "9e626526453f91999bdf3de4c2ec8e55c5d90511"
      ],
      "author": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Thu Apr 14 16:55:59 2011 -0700"
      },
      "committer": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Tue May 03 15:49:40 2011 -0700"
      },
      "message": "frameworks/base: switch CameraService to a HAL module\n\nThis patch changes CameraService to load a camera HAL module, instead of\nlinking directly against a library that implements the CameraHardwareInterface\nclass.\n\nCameraHardwareInterface no longer defines the API to the camera HAL.  Instead,\nthis is now in HAL header hardware/camera.h.  We keep CamerHardwareInterface as\na class local to CameraService, which wraps around the new HAL calls.  In the\nfuture, we may remove this class entirely and have CameraService call the HAL\nmethods directly.\n\nChange-Id: I5c61ac40078fc0b50bbac5881a556fe6c8837641\nSigned-off-by: Iliyan Malchev \u003cmalchev@google.com\u003e\n"
    },
    {
      "commit": "9e626526453f91999bdf3de4c2ec8e55c5d90511",
      "tree": "47ddef028c78388ea02fcfd3ae60419e97cffcc6",
      "parents": [
        "10d227074b5a67a2e738d72888ece4dd24537c66"
      ],
      "author": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Thu Apr 14 16:51:21 2011 -0700"
      },
      "committer": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Tue May 03 15:49:39 2011 -0700"
      },
      "message": "frameworks/base: include system/core header camera.h in Camera.h\n\nWe define struct CameraInfo in this camera/Camera.h, even though an identical\nstruct camera_info is defined in hardware/camera.h (but not in\nhardware/camera_defs.h).  We may not export struct definitions from the HAL\ninto headers which may find their way into the NDK.\n\nThis commit also renames FRAME_CALLBACK_FLAG_xxx to CAMERA_FRAME_CALLBACK_xxx.\n\nChange-Id: I3e2ddd01d61bf5371ff2fc1a397995e0f1ee11f8\nSigned-off-by: Iliyan Malchev \u003cmalchev@google.com\u003e\n"
    },
    {
      "commit": "5a61d2f277af3098fc10b2881babca16391362da",
      "tree": "b242a8b77bdf78a631cdc014051c7b5d79457215",
      "parents": [
        "799a70e7028a4d714436c3a744a775acfbd31aae"
      ],
      "author": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Tue Apr 19 19:04:32 2011 -0700"
      },
      "committer": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Wed Apr 27 16:20:22 2011 -0700"
      },
      "message": "audioflinger: don\u0027t do work in constructor, instead do it in onFirstRef\n\nChange-Id: I22d9e01821816c3beb52b014330386c7fd2f0411\nSigned-off-by: Dima Zavin \u003cdima@android.com\u003e\n"
    },
    {
      "commit": "799a70e7028a4d714436c3a744a775acfbd31aae",
      "tree": "86e61ba1b01137b9c5c687a589a5dd9cfcb699f6",
      "parents": [
        "fce7a473248381cc83a01855f92581077d3c9ee2"
      ],
      "author": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Mon Apr 18 16:57:27 2011 -0700"
      },
      "committer": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Wed Apr 27 16:20:22 2011 -0700"
      },
      "message": "audioflinger: enumerate all the possible audio interfaces\n\nKeep track of the primary interface that handles the master volume,\netc.\n\nChange-Id: Ib0701fccff8d8783a99035a241ab7c8ec75c00ac\nSigned-off-by: Dima Zavin \u003cdima@android.com\u003e\n"
    },
    {
      "commit": "fce7a473248381cc83a01855f92581077d3c9ee2",
      "tree": "e002e1edd8a11f2be56ce9538ab1b13aa289bc9e",
      "parents": [
        "db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903"
      ],
      "author": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Tue Apr 19 22:30:36 2011 -0700"
      },
      "committer": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Wed Apr 27 13:10:10 2011 -0700"
      },
      "message": "audio/media: convert to using the audio HAL and new audio defs\n\nChange-Id: Ibc637918637329e4f2b62f4ac7781102fbc269f5\nSigned-off-by: Dima Zavin \u003cdima@android.com\u003e\n"
    },
    {
      "commit": "6b80e0be94d3f92ec4aa2b7cace816780d3f338d",
      "tree": "cf5fc0a267ccd922c4139de394ea7d7a506416de",
      "parents": [
        "dab0bea38ab2c2d6b52907b7f5684834c4979251"
      ],
      "author": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Tue Apr 19 22:06:30 2011 -0700"
      },
      "committer": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Wed Apr 27 10:48:38 2011 -0700"
      },
      "message": "audioflinger: move legacy audio hw/policy out to libhardware_legacy\n\nChange-Id: I4adcec73d3c08bcbe15bb19e1ba2ff18b195af45\nSigned-off-by: Dima Zavin \u003cdima@android.com\u003e\n"
    },
    {
      "commit": "dab0bea38ab2c2d6b52907b7f5684834c4979251",
      "tree": "19d78d36cb01510a67345467f1c6bc81f6d7f03d",
      "parents": [
        "2e40530f7cbb024b60c491f42dadb2597d4de07e",
        "5bfdfd1e7b4514c6f6143b6b97ef37013f6e53a9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 26 12:44:53 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Apr 26 12:44:53 2011 -0700"
      },
      "message": "am 48dca4de: am 969357e3: am 223995dc: Fix issue 4335692: HDMI media volume\n\n* commit \u002748dca4de70890d324b5830a58bb9fa273164151a\u0027:\n  Fix issue 4335692: HDMI media volume\n"
    },
    {
      "commit": "5bfdfd1e7b4514c6f6143b6b97ef37013f6e53a9",
      "tree": "1f7617ef536b7c1259f480534e17853aff0d6fdc",
      "parents": [
        "7e0c6792de74ff647e3d3ec0eddab3bd57bb761c",
        "d9046e0a29fb794a7f6fddaa248b814e7b253c42"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 26 01:14:07 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Apr 26 01:14:07 2011 -0700"
      },
      "message": "am 969357e3: am 223995dc: Fix issue 4335692: HDMI media volume\n\n* commit \u0027969357e31c93e168e7a4cb3b41c33a6ec26f4a26\u0027:\n  Fix issue 4335692: HDMI media volume\n"
    },
    {
      "commit": "023eeac54c428d78b755fa3c856f20d17abb8a40",
      "tree": "41558b1eb0a74fec20fc4023b14cf44d318e3e7f",
      "parents": [
        "6c00983982d167bdb348c437f0480a480f38696c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 25 13:34:51 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Apr 25 13:34:51 2011 -0700"
      },
      "message": "Fix issue 4335692: HDMI media volume\n\nForced music stream volume to max when not muted and output device is HDMI.\n\nChange-Id: Ibd287cea8ae1d3f36fea6651a113bd5cf2dbad13\n"
    },
    {
      "commit": "5820e52f9bf3c40839d33457975b6c9629ab1c79",
      "tree": "b3ca36c6552981cbe8455a2b5b6b25fcedd5c8ea",
      "parents": [
        "b661326137b5329e714be57d4b9321c7410385c5",
        "4d0243980123378e9dd69022bf4ddca729d84126"
      ],
      "author": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@android.com",
        "time": "Mon Apr 11 17:32:37 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Apr 11 17:32:37 2011 -0700"
      },
      "message": "am 07c25b65: am 4430670f: am ca7ad44a: Merge \"audioflinger: Enable ARMv5TE optimized resampler\"\n\n* commit \u002707c25b651216daac884bd503c02b788418165b50\u0027:\n  audioflinger: Enable ARMv5TE optimized resampler\n"
    },
    {
      "commit": "4d0243980123378e9dd69022bf4ddca729d84126",
      "tree": "297e2b94a1675f8053588a445238acd6e8f99da4",
      "parents": [
        "17b32853e0bb44a7a34c436141ee26e1405243a9",
        "16bc76ae6b1ee053626695814742c807b42cbce6"
      ],
      "author": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@android.com",
        "time": "Mon Apr 11 17:27:12 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Apr 11 17:27:12 2011 -0700"
      },
      "message": "am 4430670f: am ca7ad44a: Merge \"audioflinger: Enable ARMv5TE optimized resampler\"\n\n* commit \u00274430670f48f75661293371dab8db55865f5f56e0\u0027:\n  audioflinger: Enable ARMv5TE optimized resampler\n"
    },
    {
      "commit": "0c0a1c0c37dbd2646a732da706d6777283c83e44",
      "tree": "cfd6eb43fd04ff7cc23e8930bc2355b599d2b8c3",
      "parents": [
        "ba0de09f9a221f14e812e2b6498b48cf782c7396"
      ],
      "author": {
        "name": "Jim Huang",
        "email": "jim.huang@linaro.org",
        "time": "Wed Apr 06 14:19:29 2011 +0800"
      },
      "committer": {
        "name": "Jim Huang",
        "email": "jserv@0xlab.org",
        "time": "Thu Apr 07 21:08:39 2011 +0800"
      },
      "message": "audioflinger: Enable ARMv5TE optimized resampler\n\nPreviously, the optimized asm option is only enabled when\n__ARM_ARCH_5E__ is defined, which is assigned in armv5te.mk\nrather than armv7-a series targets.  This patch checks the ARM CPU\nfeature about half-word multiply instructions to enable ARMv5TE\nresampler optimization routines properly.\n\nChange-Id: I4c5a5d8c932416f23bedb0b389db958349f21ea4\n"
    },
    {
      "commit": "c30268b9d118309a0514bcf280a03ee69f81403f",
      "tree": "792168ccd1a37180a9f248aa394de46291605e7b",
      "parents": [
        "9d91771564c264903363d7879d052f2427b78aa0",
        "4bcae82f9b07d1a39956c45a6f5bec0b696c4dd1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Apr 06 13:03:11 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 06 13:03:11 2011 -0700"
      },
      "message": "Merge \"Miscellaneous code cleanup in audio framework\""
    },
    {
      "commit": "9d91771564c264903363d7879d052f2427b78aa0",
      "tree": "5286c51dfdc6105fdd5dd6d822d8df1c12ef3736",
      "parents": [
        "46bc5b885f9cb39502bc082c97e0c73b99083042",
        "8b1027d3f873fc15c70f8645f1856936b69241a4"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Apr 06 12:22:29 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 06 12:22:29 2011 -0700"
      },
      "message": "Merge \"remove more unused references to ISurface\""
    },
    {
      "commit": "4bcae82f9b07d1a39956c45a6f5bec0b696c4dd1",
      "tree": "99532d06a61440bc66fa091e58ff23bc405a3ec0",
      "parents": [
        "7fb4b427d5fca79c09d69b212ddca41539c215a2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 04 10:50:50 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Apr 06 10:24:18 2011 -0700"
      },
      "message": "Miscellaneous code cleanup in audio framework\n\nChanges:\n - Move declaration of kClassPathName to top of file so it can be used\n   in more than one place, instead of \"android/media/AudioSystem\".\n - Make private methods static.\n - Add comment to stream_type, audio_mode, force_use types that they must match\n   values in AudioSystem.java.\n - Add comment about unused types mp3_sub_format and vorbis_sub_format.\n - Fix typos.\n - Use @ in javadoc comments.\n - Delete dead APIs setMode, getMode, setRouting, getRouting in AudioSystem.java\n   (they are all hidden, deprecated, and unused by rest of framework)\n - Delete unused private log method.\n - Fix pathname for android_media_AudioSystem.cpp.\n - Improve code formatting for space after \u003d\u003d and !\u003d.\n - Add logging of delta for changing audio policy manager ref count.\n\nChange-Id: I18037c7beb8ab76d1fda08c11e589f6e591d36e1\n"
    },
    {
      "commit": "8b1027d3f873fc15c70f8645f1856936b69241a4",
      "tree": "937508beb7e2632939b5ea349ca945da2380b2cc",
      "parents": [
        "abf471f9d25f7a3104c5723657e3c6c329f3f08c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 05 15:44:20 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 05 20:11:55 2011 -0700"
      },
      "message": "remove more unused references to ISurface\n\nChange-Id: I2201f1ca2bb8f203a081d94a0134f798778dfbef\n"
    },
    {
      "commit": "38ccae2c0324daa305f3fe77d25fdf5edec0b0e1",
      "tree": "c7aec92091f634a6994ed7e836a2a1ba4e22c035",
      "parents": [
        "7fb4b427d5fca79c09d69b212ddca41539c215a2"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 28 18:37:07 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 05 12:05:41 2011 -0700"
      },
      "message": "New fix for issue 4111672: control block flags\n\nThe first fix (commit 913af0b4) is problematic because it makes threads\nin mediaserver process block on the cblk mutex. This is not permitted\nas it can cause audio to skip or worse have a malicious application\nprevent all audio playback by keeping the mutex locked.\n\nThe fix consists in using atomic operations when modifying the control\nblock flags.\n\nAlso fixed audio_track_cblk_t::framesReady() so that it doesn\u0027t block\nwhen called from AudioFlinger (only applies when a loop is active).\n\nChange-Id: Ibf0abb562ced3e9f64118afdd5036854bb959428\n"
    },
    {
      "commit": "108dddf924d714c811dd565b8f4c7a0178cca2f2",
      "tree": "84d71d367dfb079a12738ca5f6c3edc4bd13aab1",
      "parents": [
        "b1d3d37c7990d22d0659e4c8c9aac56d4c09b6ea"
      ],
      "author": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Mon Mar 28 16:10:12 2011 -0700"
      },
      "committer": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Mon Mar 28 16:28:57 2011 -0700"
      },
      "message": "frameworks/base: some camera-interface cleanup\n\nMethods getNumberOfVideoBuffers() and getVideoBuffer() as well as struct\nimage_rect_struct are no longer used (instead, the necessary information is\npassed through ANativeWindow.)\n\nChange-Id: If4b11446fc9ccbde1f6b45bc70c0d0b8e54376eb\nSigned-off-by: Iliyan Malchev \u003cmalchev@google.com\u003e\n"
    }
  ],
  "next": "5f7fcf29a7475a20cf38bf72da67746135d504c3"
}
