)]}'
{
  "log": [
    {
      "commit": "c39aa13da5600571affee13ea8ef3936cc39cbb5",
      "tree": "b0f6ea9ea6e28ddd2cc25d21396a66ffe5336f3f",
      "parents": [
        "1a082f3061c2a444ac6602f321aa334589167f07",
        "bfa2f13fd3f463dbceea4d3a18c3124e70df0a05"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Jan 26 14:05:18 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jan 26 14:05:18 2011 -0800"
      },
      "message": "am 2ba92c71: do not merge bug 3370834 Cherrypick from master\n\n* commit \u00272ba92c71b5684dce700cf848bf157153c156df1d\u0027:\n  do not merge bug 3370834 Cherrypick from master\n"
    },
    {
      "commit": "bfa2f13fd3f463dbceea4d3a18c3124e70df0a05",
      "tree": "23546faa4e073e21f7a1c4fa026cd81044cc49d0",
      "parents": [
        "b1d099197a9385f3afc9411da32a341546991d85"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Mon Nov 15 12:11:32 2010 -0800"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Wed Jan 26 11:20:01 2011 -0800"
      },
      "message": "do not merge bug 3370834 Cherrypick from master\n\nCherripick from master CL 79833, 79417, 78864, 80332, 87500\n\nAdd new audio mode and recording source for audio communications\n other than telelphony.\n\nThe audio mode MODE_IN_CALL signals the system the device a phone\n call is currently underway. There was no way for audio video\n chat or VoIP applications to signal a call is underway, but not\n using the telephony resources. This change introduces a new mode\n to address this. Changes in other parts of the system (java\n and native) are required to take this new mode into account.\nThe generic AudioPolicyManager is updated to not use its phone\n state variable directly, but to use two new convenience methods,\n isInCall() and isStateInCall(int) instead.\n\nAdd a recording source used to designate a recording stream for\nvoice communications such as VoIP.\n\nUpdate the platform-independent audio policy manager to pass the\n nature of the audio recording source to the audio policy client\n interface through the AudioPolicyClientInterface::setParameters()\n method.\n\nSIP calls should set the audio mode to MODE_IN_COMMUNICATION,\n Audio mode MODE_IN_CALL is reserved for telephony.\n\nSIP: Enable built-in echo canceler if available.\n1. Always initialize AudioRecord with VOICE_COMMUNICATION.\n2. If echo canceler is available, disable our echo suppressor.\n\nNote that this CL is intentionally not correcting the\n getAudioSourceMax() return value in MediaRecorder.java as the\n new source is hidden here.\n\nChange-Id: Ie68cd03c50553101aa2ad838fe9459b2cf151bc8\n"
    },
    {
      "commit": "958c063ed2b9e255e4b4ffc5c7d5f9939da95c36",
      "tree": "394bae7c9db45fd43e2eefe52318f6c53fc12ce3",
      "parents": [
        "05adea42e17b0af3b90e51945f800aa26a2d0240",
        "47f44fb9b85ac555e5b84b2f5ca8536a85659c3e"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Jan 25 10:11:09 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jan 25 10:11:09 2011 -0800"
      },
      "message": "am c929677e: Merge \"Increase the number of useful bits in the spectrum.\" into gingerbread\n\n* commit \u0027c929677e017759047d94599faa1b80ebe278fefb\u0027:\n  Increase the number of useful bits in the spectrum.\n"
    },
    {
      "commit": "209821c7b7ead3ac58743d0a6d21dd05a2e77708",
      "tree": "e9cc0ea746bad9d05425f459ad245f882ceab36c",
      "parents": [
        "b517e006b51c95db9c44bf5f104f562d431ae597"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Jan 18 16:44:28 2011 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jan 24 08:47:55 2011 -0800"
      },
      "message": "Increase the number of useful bits in the spectrum.\n\nChange-Id: I3efc2ac8db689285566df35cb6f594aab41141db\n"
    },
    {
      "commit": "cf3592c5bf1c66ba510934fff5eb57ee0b3fd761",
      "tree": "db789ee0027babcee8f5a9a4b090546275365b8f",
      "parents": [
        "3ed11317ce695a413d337c60fde222f30306f092",
        "95304d5488ba465f19cc788f1c7394218c2ea2d1"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Fri Jan 14 18:33:51 2011 -0800"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Fri Jan 14 18:33:51 2011 -0800"
      },
      "message": "merge 83fdc69e from gingerbread - do not merge\n\nChange-Id: Ib1e9e12244a44f75a93d66142e71915de6386680\n"
    },
    {
      "commit": "95304d5488ba465f19cc788f1c7394218c2ea2d1",
      "tree": "5f5269238a292e0e747cbfa2a01e6a2fb24615b8",
      "parents": [
        "e49051406baa71cb63d5754d33908ce3df201af1"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Thu Dec 02 17:42:08 2010 -0800"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Wed Jan 12 17:12:46 2011 -0800"
      },
      "message": "Squash commits of the following patches, cherry-picked from other branch - do not merge.\n\no Prepare for publishing MediaMetadataRetriever as public API\n  step one:\n  o replaced captureFrame with getFrameAtTime\n  o removed getMode\n\no Replace MediaMetadataRetriever.captureFrame() with MediaMetadataRetriever.getFrameAtTime()\n  as part of the preparation for publishing MediaMetadataRetriever as public Java API\n\no Remove captureFrame from MediaMetadataRetriever.java class\n  It has been replaced by getFrameAtTime() method\n\no Replace extractAlbumArt() with getEmbeddedPicture() in MediaMetadataRetriever.java\n\no Publish MediaMetadataRetriever.java as public API\n  o Removed setMode() methods and related mode constants\n  o Removed some of the unused the metadata keys\n  o Updated the javadoc\n  o part of a multi-project change.\n\nbug - 3309041\n\nChange-Id: I2efb6e8b8d52897186b016cb4efda6862f5584c4\n"
    },
    {
      "commit": "74de24045c00d641e79483b459d7d00d3d5bffe3",
      "tree": "f827b14ba8b9bc8314e938b8d35aae7ee46e4664",
      "parents": [
        "7d44e4da3bc3d56c6a9aed1f27f51cfd5b54108f",
        "0f01764099d7a65b8921725df3340140f9fc4cd5"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Dec 16 16:05:16 2010 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Dec 16 16:05:16 2010 -0800"
      },
      "message": "am 5a756fb0: Merge \"Fix issue 2712130: Sholes: problem when playing audio while recording over bluetooth SCO.\" into gingerbread\n\n* commit \u00275a756fb0f1f3f8cd7612284c889dfc69875577a8\u0027:\n  Fix issue 2712130: Sholes: problem when playing audio while recording over bluetooth SCO.\n"
    },
    {
      "commit": "0f01764099d7a65b8921725df3340140f9fc4cd5",
      "tree": "4804d04ee3b4e790731dcb6d90b3433d4945ac29",
      "parents": [
        "e8079d0f6afcb138a0e5882ccbaf93647ea77c5b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 15 19:09:42 2010 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Dec 15 19:09:42 2010 -0800"
      },
      "message": "Fix issue 2712130: Sholes: problem when playing audio while recording over bluetooth SCO.\n\nThe problem is that when an input stream is opened for record over bluetooth SCO, the kernel\nmono audio device should be opened in RW mode to allow further use of this same device by an output stream\nalso routed to bluetooth SCO.\nThis does not happen because of a bug in AudioSystem::isBluetoothScoDevice() that does not return true\nwhen the device is DEVICE_IN_BLUETOOTH_SCO_HEADSET (input device for blurtooth SCO).\n\nChange-Id: Ic78bf324b4a68e65721d763dc7682ce7a8f14f75\n"
    },
    {
      "commit": "ecd0a4f0b5bdd51bc35097b402202d6349f016ba",
      "tree": "4db64af200c0be90a7938d47df543e49ac70bb04",
      "parents": [
        "e81e8153c85fa0b0aebae686f6ba51ed2c3a2d11",
        "879e9cb6b4e8b09a5c7d4942ce36125193deadde"
      ],
      "author": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Tue Nov 30 11:45:54 2010 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Nov 30 11:45:54 2010 -0800"
      },
      "message": "am 683a7ff9: Merge \"Visualizer: Fix the conversion from 8-bit sample to 16-bit sample.\" into gingerbread\n\n* commit \u0027683a7ff922409d2aa6c944bc4e08de32029e80e5\u0027:\n  Visualizer: Fix the conversion from 8-bit sample to 16-bit sample.\n"
    },
    {
      "commit": "879e9cb6b4e8b09a5c7d4942ce36125193deadde",
      "tree": "5d62a0440aee987552a01ced8d3ad7d549749c0f",
      "parents": [
        "c2c8868e59bde7f48998e1d89a0d77217bc64767",
        "6b6a736ec71c692c165952fe653a7766075e94bb"
      ],
      "author": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Mon Nov 29 22:56:56 2010 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Nov 29 22:56:56 2010 -0800"
      },
      "message": "Merge \"Visualizer: Fix the conversion from 8-bit sample to 16-bit sample.\" into gingerbread"
    },
    {
      "commit": "3baff73198ce852fa60080bd32703028298b4d65",
      "tree": "91c41492bf470b1a3facc7da5b3dad6d97ffbd6c",
      "parents": [
        "4974d5eaf838d893c418b85bd47f6f114d9b5aaa",
        "85d9b4225d024bb0d602b48bd6d5219cbebd7b8e"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Nov 08 11:50:14 2010 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Nov 08 11:56:08 2010 -0800"
      },
      "message": "resolved conflicts for merge of 31dc911a to gingerbread-plus-aosp\n\nChange-Id: I2f51b2120b3c552566d91a7dc498a5e8b130205f\n"
    },
    {
      "commit": "85d9b4225d024bb0d602b48bd6d5219cbebd7b8e",
      "tree": "4d9ebf6a8b1ecfe51c312d7f2cfa7b2eda6fe5cf",
      "parents": [
        "aca1fe35480ae76dd6bae167ade40adc955e2d0d"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Nov 04 11:50:27 2010 -0700"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Fri Nov 05 17:03:17 2010 -0700"
      },
      "message": "Support post-decode video rotation.\n\nChange-Id: Ia371316e73a57e44610de86adce3eaa560afbf84\n"
    },
    {
      "commit": "6b6a736ec71c692c165952fe653a7766075e94bb",
      "tree": "2000c38c45f45551faa3a78de14f7f7f387b0f80",
      "parents": [
        "64c3bdea8cba454d4404baded584ea0f0611b3ee"
      ],
      "author": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Mon Nov 01 10:56:45 2010 +0800"
      },
      "committer": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Mon Nov 01 10:56:45 2010 +0800"
      },
      "message": "Visualizer: Fix the conversion from 8-bit sample to 16-bit sample.\n\nChange-Id: Ie6d77b0f61a37333e05cdcdb6ef29d6f6c345a9d\n"
    },
    {
      "commit": "06fa2bcce5dd80b406a23f980d8c9fac1524ebfd",
      "tree": "340fd639cd8c487e65c47e4d44ee66974d8a9b85",
      "parents": [
        "30550ba7a19372daa7424710ca1367bb7299e459",
        "56cfa2376ae87cba730ea7ce4a9e0ca4f0d07627"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Oct 15 18:25:14 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 15 18:25:14 2010 -0700"
      },
      "message": "am b04f356d: Merge \"Include the framework copy of the OpenMAX headers instead of referencing external/opencore.\" into gingerbread\n\nMerge commit \u0027b04f356d86eec74217fca8e3b85d801c4fcaa678\u0027 into gingerbread-plus-aosp\n\n* commit \u0027b04f356d86eec74217fca8e3b85d801c4fcaa678\u0027:\n  Include the framework copy of the OpenMAX headers instead of referencing external/opencore.\n"
    },
    {
      "commit": "56cfa2376ae87cba730ea7ce4a9e0ca4f0d07627",
      "tree": "c5909cd90e35e198a801abf6cff6d924a73b8011",
      "parents": [
        "b10d28f233bb881cc12260c320892e5feb198e9a"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Oct 15 13:31:29 2010 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Oct 15 13:31:29 2010 -0700"
      },
      "message": "Include the framework copy of the OpenMAX headers instead of referencing external/opencore.\n\nChange-Id: I762f59acf5e1f770e4d7c2d89af362bfffebefa6\nrelated-to-bug: 3101573\n"
    },
    {
      "commit": "8cde59da2dd8540466aff5e94e9a6e5f74df1f10",
      "tree": "633d6ce67a785ba813c1f9c79917ec6c40e56fee",
      "parents": [
        "0b5181ddfdde400f9cac6db239cf97ced3b67e22",
        "2959a5a5b4d151e14da3abe0289c15693409eb84"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Oct 13 15:50:27 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 13 15:50:27 2010 -0700"
      },
      "message": "am 90d59d18: Merge \"Metadata.cpp and Metadata.java had drifted out of sync. This change remedies that.\" into gingerbread\n\nMerge commit \u002790d59d180bd963f00161e6bfaabfda432960cab6\u0027 into gingerbread-plus-aosp\n\n* commit \u002790d59d180bd963f00161e6bfaabfda432960cab6\u0027:\n  Metadata.cpp and Metadata.java had drifted out of sync. This change remedies that.\n"
    },
    {
      "commit": "2959a5a5b4d151e14da3abe0289c15693409eb84",
      "tree": "bcdb8b57d72e5d1f8ca30cf79aafde419c610cc9",
      "parents": [
        "a82c3c631a9c0bb721e35d03714715ffe3b0b0c3"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Oct 13 15:12:08 2010 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Oct 13 15:12:08 2010 -0700"
      },
      "message": "Metadata.cpp and Metadata.java had drifted out of sync. This change remedies that.\n\nChange-Id: I48175666857ab0fb1519777bdb6f7f0b6b5cc599\nrelated-to-bug: 3073955\n"
    },
    {
      "commit": "e4edd632d48720b44f7878273f46d192d5703150",
      "tree": "4dc92f8f6371da457d7c20e59194e73cf66d3659",
      "parents": [
        "43024e1f4953d9b8891b7b72f10e76f11812e772",
        "5cb77e080ced5362b5f047e107327b3cb6ece6c9"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Oct 13 09:19:28 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 13 09:19:28 2010 -0700"
      },
      "message": "am 312644cd: Merge \"Support for writing to MPEG2 transport stream files.\" into gingerbread\n\nMerge commit \u0027312644cdbb39522fe9cac028b15b907ce0e8e0f7\u0027 into gingerbread-plus-aosp\n\n* commit \u0027312644cdbb39522fe9cac028b15b907ce0e8e0f7\u0027:\n  Support for writing to MPEG2 transport stream files.\n"
    },
    {
      "commit": "59b7dc39ea8332d3418a599e51447d7edb612ac4",
      "tree": "30d77dd5cca3f58b3902df86e7df1dab42abc0f2",
      "parents": [
        "2bc940b4f961e588459c83862b2c6bea314a4027"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Oct 12 14:17:45 2010 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Oct 12 16:05:23 2010 -0700"
      },
      "message": "Support for writing to MPEG2 transport stream files.\n\nChange-Id: If3b7a807bc224a4b1cb2236537c3ebdc5aee0d97\n"
    },
    {
      "commit": "74684081846ee6e68325fa5aba5c45b7447fd368",
      "tree": "4f2710d354acd31694fd8bbbaa07fade7f254cc6",
      "parents": [
        "4b43c1f169ab29b2d4dd058573668f7f4ffb8ca1",
        "bea16187c176837d35e7294f1f14ac195c5d5cad"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Oct 08 08:30:03 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 08 08:30:03 2010 -0700"
      },
      "message": "am b37fcbfd: Merge \"Added getter for session Id to AudioSink\" into gingerbread\n\nMerge commit \u0027b37fcbfd7f9d65b90b43e0242903030c5a6517b5\u0027 into gingerbread-plus-aosp\n\n* commit \u0027b37fcbfd7f9d65b90b43e0242903030c5a6517b5\u0027:\n  Added getter for session Id to AudioSink\n"
    },
    {
      "commit": "8c563ed9ca8a863a66965330b5d14bb4b4ab59d4",
      "tree": "b2d2e571aa8618456b27e1cb67a717ca80340e3e",
      "parents": [
        "2a4d22d79e927f2245537921e10fc5fda1c47a29"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 07 18:23:03 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Oct 07 18:23:03 2010 -0700"
      },
      "message": "Added getter for session Id to AudioSink\n\nAdded a method to expose the audio session id at AudioSink interface\nso that the AudioPlayer in stagefright can retrieve it.\n\nAlso:\n- Fixed audio effect send level not being initialized in mediaplayer.\n- Fixed compilation error when LOGV is enabled in mediaplayer JNI\n\nChange-Id: I4bb55454fd63d646e0e677692d737c4843fb05fb\n"
    },
    {
      "commit": "b3788b6d0f5a003d3d3e621ad605e2f3f4cb11e8",
      "tree": "9a482922a4ad3cbceb79b2646a505e2f03fe5d7c",
      "parents": [
        "1720ba0dd73f807cd9b6d90ffbfa581e18b6de08",
        "44d9848d6656777a18019223e0d35f2fcc67719a"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 30 17:47:07 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Sep 30 17:47:07 2010 -0700"
      },
      "message": "am 220ab887: Merge \"Issue 3032913: improve AudioTrack recovery time\" into gingerbread\n\nMerge commit \u0027220ab8877b234e6807b7f6d9028ba55d23220301\u0027 into gingerbread-plus-aosp\n\n* commit \u0027220ab8877b234e6807b7f6d9028ba55d23220301\u0027:\n  Issue 3032913: improve AudioTrack recovery time\n"
    },
    {
      "commit": "44d9848d6656777a18019223e0d35f2fcc67719a",
      "tree": "fe71003d3400dcbdfe078f8d8fad1b1fde960b2c",
      "parents": [
        "922855214d0e8ae4159794d7f751f780b3243552"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 30 16:12:31 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Sep 30 17:21:23 2010 -0700"
      },
      "message": "Issue 3032913: improve AudioTrack recovery time\n\nThis issue showed that when an AudioTrack underruns during a too long period\nof time and is therefore disabled by audioflinger mixer, it takes an additional\ndelay of up to 3 seconds to recover.\nThis fix adds a simple mechanism to recover immediately when the client application\nis ready to write data again in the AudioTrack buffer\n\nAlso throttle warnings on record overflows\n\nChange-Id: I8b2c71578dd134b9e60a15ee4d91b70f3799cb3d\n"
    },
    {
      "commit": "da4b9bdd4682fb3a20964908cb18d02c943b7f35",
      "tree": "4061ce1b067a277da67a141a5d2e9cb98e68041c",
      "parents": [
        "2207a10949a7f3fe7ebf5a52974c45221d8acc46",
        "0fa449cc475580d995e9d56756c3da5507d2b6f6"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Sep 27 08:45:07 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Sep 27 08:45:07 2010 -0700"
      },
      "message": "am 9627847d: Merge \"Fix error in AudioEffect command status reporting.\" into gingerbread\n\nMerge commit \u00279627847d588cd969f60dcc79d165209184a90069\u0027 into gingerbread-plus-aosp\n\n* commit \u00279627847d588cd969f60dcc79d165209184a90069\u0027:\n  Fix error in AudioEffect command status reporting.\n"
    },
    {
      "commit": "0fa449cc475580d995e9d56756c3da5507d2b6f6",
      "tree": "1e344eefa5847ad1e8ea3fc508e0d63ba5334c13",
      "parents": [
        "76e2c7be04aeff55f3e6a473ff1cd6d9ec2d620c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 24 11:52:04 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Sep 24 15:24:54 2010 -0700"
      },
      "message": "Fix error in AudioEffect command status reporting.\n\nAudioEffect::command() should not interpret the status\nreturned in pReplyData unless the command is ENABLE or\nDISABLE.\n\nAlso fixed:\n- bug in Visualizer::getWAveForm() status reporting.\n- wrong initialization value for capture buffer in visualizer engine.\n\nChange-Id: I60fb0011f9dba96ee74661dec1e8ef441edcaf35\n"
    },
    {
      "commit": "6901625dcb847871e23f04b9a282dc5d313a1d57",
      "tree": "f38ba0c376ffef125ceb126c8223b5ba20153986",
      "parents": [
        "ab1b9612fc5ad9d98ff76b3eb18d9f48a295f13e",
        "1c1503cf47c0a37a30e7acac2c5d29140fc61a5f"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Sep 17 15:42:21 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Sep 17 15:42:21 2010 -0700"
      },
      "message": "am f30fae63: Merge \"Add a check to track a problem the monkey script has been triggering.\" into gingerbread\n\nMerge commit \u0027f30fae63389a2216faf55636b95a08f35b5c3620\u0027 into gingerbread-plus-aosp\n\n* commit \u0027f30fae63389a2216faf55636b95a08f35b5c3620\u0027:\n  Add a check to track a problem the monkey script has been triggering.\n"
    },
    {
      "commit": "1c1503cf47c0a37a30e7acac2c5d29140fc61a5f",
      "tree": "8ebe9e796b7773e7707155b70a51025e30b109d6",
      "parents": [
        "00998fbb52dfa78ac3a4b3706d64fc612926bfbc"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Sep 17 15:04:01 2010 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Sep 17 15:04:01 2010 -0700"
      },
      "message": "Add a check to track a problem the monkey script has been triggering.\n\nChange-Id: If3896946d993cbab2442e17740f18efd7e753a3b\n"
    },
    {
      "commit": "eebcf36cf2db2563af8ef479e01747321aa959e8",
      "tree": "dd2134fbd52e09dfce2874cc59505d97fdac150a",
      "parents": [
        "d81ef83a493a27887b795fdf9ece391155779914",
        "5edae619a6ad7337a3d14b53f7665ff17ec3ee84"
      ],
      "author": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Mon Aug 30 22:06:39 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Aug 30 22:06:39 2010 -0700"
      },
      "message": "am 12006013: fixedfft: Only includes cpu-features.h when __arm__ is defined.\n\nMerge commit \u002712006013cc2cd0a076855ed068f5f782b24631c3\u0027 into gingerbread-plus-aosp\n\n* commit \u002712006013cc2cd0a076855ed068f5f782b24631c3\u0027:\n  fixedfft: Only includes cpu-features.h when __arm__ is defined.\n"
    },
    {
      "commit": "5edae619a6ad7337a3d14b53f7665ff17ec3ee84",
      "tree": "8b798b2d81f41ef82b9c1eb701b0243b48e8e822",
      "parents": [
        "5d5f5dfcc16756fe80a7c46cff0949fce9d54fe9"
      ],
      "author": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Tue Aug 31 12:56:01 2010 +0800"
      },
      "committer": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Tue Aug 31 12:56:01 2010 +0800"
      },
      "message": "fixedfft: Only includes cpu-features.h when __arm__ is defined.\n\nChange-Id: Ifb6c03b38eff3c94a507ceb5043fcc48b364c25c\n"
    },
    {
      "commit": "dd8b35d2f7911bb1e12010f143c5b8c1b621f2ed",
      "tree": "e77993106962eabf522259f9a23a0a421b1a5118",
      "parents": [
        "b00a1e3f7e415c72b6ff6d2073b5b78c0d39e0ee",
        "625981ec8417528cbea67c86dcbe32a9e79a79be"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Aug 25 10:39:21 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Aug 25 10:39:21 2010 -0700"
      },
      "message": "am 67b50606: Merge \"Fix the simulator build.\" into gingerbread\n\nMerge commit \u002767b506065e9fe3c56e3d1b47eedfa01170d574f9\u0027 into gingerbread-plus-aosp\n\n* commit \u002767b506065e9fe3c56e3d1b47eedfa01170d574f9\u0027:\n  Fix the simulator build.\n"
    },
    {
      "commit": "625981ec8417528cbea67c86dcbe32a9e79a79be",
      "tree": "1e76d0c94d1a34ebdfe57a6c2921b5a42c28481b",
      "parents": [
        "fce49325d807c278229a594c1cc866e21da0e155"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Aug 25 10:00:53 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Aug 25 10:00:53 2010 -0700"
      },
      "message": "Fix the simulator build.\n\nFixes the sim build broken by commit 58d3bd08107f44cba79938dd8430e69c0fda4202.\n\nChange-Id: I5a63623363d558783dc5254fdd322080cc2f3525\n"
    },
    {
      "commit": "7be0434ce8d4139e9ca4b1f374153de0c75ac049",
      "tree": "c9d9ff1108ae6f6f6197140add461abbe6d47df7",
      "parents": [
        "36d8ab8fdf183a2a025e93ba78aaed92c55d6586",
        "482482401095d5fc98f89b4a3ce43d41c00fffd7"
      ],
      "author": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Sun Aug 22 18:38:29 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sun Aug 22 18:38:29 2010 -0700"
      },
      "message": "am b80e610b: Merge \"Visualizer: replace the FFT implementation with a faster one.\" into gingerbread\n\nMerge commit \u0027b80e610b070c2cec98a228a8aec450dc24a5f90a\u0027 into gingerbread-plus-aosp\n\n* commit \u0027b80e610b070c2cec98a228a8aec450dc24a5f90a\u0027:\n  Visualizer: replace the FFT implementation with a faster one.\n"
    },
    {
      "commit": "dbd2b7e4ebfe7a586b1db4459cf6aa032a7f8719",
      "tree": "bc9a06e98f9142ff531a62892b0685f75040f685",
      "parents": [
        "e259531ce59ab1f31de5a23124b22536f6a5a767"
      ],
      "author": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Thu Aug 19 15:34:10 2010 +0800"
      },
      "committer": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Thu Aug 19 16:05:32 2010 +0800"
      },
      "message": "Visualizer: replace the FFT implementation with a faster one.\n\nThis implementation uses fixed points instead of floating points. It\nis slightly inaccurate compared to the old one but still perfect for\nvisualization purpose. It runs 40% faster on passion, 5 times faster\non sholes, and of course 14 times faster on sapphire.\n\nChange-Id: I1e868417bcffda091becf106a7b941d02813faec\n"
    },
    {
      "commit": "4a3935898893f955403021fe41cf2bfa3a32dde2",
      "tree": "c5d7fc3e8a6d2962fcc977f1daea834f23b24588",
      "parents": [
        "e246a940426d418b99cf62c547c7a2093811f2fb",
        "f1a97e53a58f47afa17a9b0d3a5cc9abf7e5ed19"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Tue Aug 17 15:24:11 2010 -0700"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Tue Aug 17 15:24:11 2010 -0700"
      },
      "message": "resolved conflicts for merge of 0b7bd95d to gingerbread-plus-aosp\n\nChange-Id: I55c1689c7d0737c943efec28d8164d6a5360621c\n"
    },
    {
      "commit": "f1a97e53a58f47afa17a9b0d3a5cc9abf7e5ed19",
      "tree": "3df09313917fb6d83fd44dc02260db9793efa755",
      "parents": [
        "01cff464978aa0f749f42650180b45ea56cb17de"
      ],
      "author": {
        "name": "Rene Bolldorf",
        "email": "xsecute@googlemail.com",
        "time": "Tue Aug 17 23:32:58 2010 +0200"
      },
      "committer": {
        "name": "Rene Bolldorf",
        "email": "xsecute@googlemail.com",
        "time": "Tue Aug 17 23:45:14 2010 +0200"
      },
      "message": "Fix compilation errors in libmedia, libstagefright.\n(invalid conversion from \u0027const char*\u0027 to \u0027char*\u0027)\n\nChange-Id: Idef85606b7cff629b2778ed8134c79c892af54c2\n"
    },
    {
      "commit": "25d83125cee222993673d3ba261ae1186bcad8c2",
      "tree": "ff9cb1abe9343695635b261a2c24906baba9794f",
      "parents": [
        "eaf0e0786c4c21d6c63d8f1f4515cb2a5311493b"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Wed Aug 11 17:12:39 2010 -0700"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Wed Aug 11 17:18:30 2010 -0700"
      },
      "message": "Fix all fd leaks in authoring engine\n\nChange-Id: I17798543f9dd41cc8bef6f6086e66932f9f97be8\n"
    },
    {
      "commit": "8569f0d3bf4c6787707e348a7cf73b9c4199cb32",
      "tree": "6e2ce2c28fe5fba3b8cafd9375244bc6f658632d",
      "parents": [
        "8bf59e735760af0b6a85747fd90bf8cf1e5388d7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 29 23:43:43 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Aug 09 05:48:20 2010 -0700"
      },
      "message": "Fixed several audio effects problems.\n\n- Fixed constant inversions in AudioEffect.java\n- Do not return error when enabling an already enabled effect\n- Update cached effect state in native AudioEffect class when effect is enabled/disabled by command() method\n- Remove click when restarting effect during disable sequence\n- Fixed problem in master mute management when volume control is delegated to effect.\n\nChange-Id: I6df4ce9fcc54fdc7345df858f639d20d802d6712\n"
    },
    {
      "commit": "39ddf8e0f18766f7ba1e3246b774aa6ebd93eea8",
      "tree": "87f5d0d68c1779f113843e939c41440ff6b00389",
      "parents": [
        "610959a52fe22a88e50d158f5f5f492fee4f1921"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Aug 04 10:14:30 2010 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Aug 04 11:49:24 2010 -0700"
      },
      "message": "Support for Gtalk video, includes AMR/H.263 assembler and packetization support, extensions to MediaRecorder to stream via RTP over a pair of UDP sockets as well as various fixes to the RTP implementation.\n\nChange-Id: I95b8dd487061add9bade15749e563b01cd99d9a6\n"
    },
    {
      "commit": "3b26844e60f8487388e7e62709faf0dada86e7e1",
      "tree": "2a6ed3d8b121bfb1dd5bd443ae46e268dfbfd438",
      "parents": [
        "a5740924c0a71871f2697139effd43b137750597"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Aug 03 07:49:49 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Aug 04 05:38:56 2010 -0700"
      },
      "message": "Fix issue 2876124.\n\nAllow calls to MediaPlayer::notify() in idle state to signal errors from JNI.\n\nChange-Id: I1515fe69766f0a926b76e15c4971317da2acd6a0\n"
    },
    {
      "commit": "9da2070b6d6d20550de7da61478c325f0928d020",
      "tree": "f1548891fab33ca03923f70cf25a2ffeab50be82",
      "parents": [
        "3be9523784cc4038f601e510faee595117cdacb3",
        "efe6039f71e9bac2138003b3287e94a7ab7e5c55"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Fri Jul 30 12:08:31 2010 -0700"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Fri Jul 30 12:08:31 2010 -0700"
      },
      "message": "resolved conflicts for merge of 27eecb70 to gingerbread\n\nChange-Id: If064f2f4950fc1a4ff38e6927fe2120af76b26f1\n"
    },
    {
      "commit": "68335fdd6e9c1d622384612605d6952503cb7fd0",
      "tree": "94e9982f93be7339bde4d8b9336f9968f5509efd",
      "parents": [
        "e32283b15bbd60179424bdc740a4e4932da4c61e"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Thu Jul 29 17:35:37 2010 -0700"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Thu Jul 29 17:41:35 2010 -0700"
      },
      "message": "fix inaccurate copyrights\n\nChange-Id: I33b0f68f2da34ca4728211d83159cf32a127f6dd\n"
    },
    {
      "commit": "01cff464978aa0f749f42650180b45ea56cb17de",
      "tree": "a31c8e61281d0bbcbec93d0ab05368f73ab85994",
      "parents": [
        "ccaa41429d2afc47f0fb828a0146a1b1936188fe"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Thu Jul 29 17:35:37 2010 -0700"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Thu Jul 29 17:35:37 2010 -0700"
      },
      "message": "fix inaccurate copyrights\n\nChange-Id: I33b0f68f2da34ca4728211d83159cf32a127f6dd\n"
    },
    {
      "commit": "25f4395b932fa9859a6e91ba77c5d20d009da64a",
      "tree": "01098a211d6c782708b840c28ebd396a6eb72a7b",
      "parents": [
        "23e1de74359f4bb1763aef0adfebe073122b032c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 28 05:40:18 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 28 05:49:21 2010 -0700"
      },
      "message": "Audio effects: modified command() parameter types.\n\nThe type of the cmd, cmdSize and *pReplySize parameters of the effect control interface command()\nfunction have been modified from int to uint32_t. This is more consistent with their role.\n\nChange-Id: I84d289fc262d6753747910f06f485597dfee6591\n"
    },
    {
      "commit": "2beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1",
      "tree": "ce966d62f6fbb94178763ec53760f6961ffffd58",
      "parents": [
        "3108231d90e8aa324923fd8864ca2477948c5d25"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 16 07:43:46 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 21 06:28:01 2010 -0700"
      },
      "message": "Added support for auxiliary audio effects to AudioTrack and MediaPlayer.\n\nAdded methods to AudioTrack and MediaPlayer java classes to enable use of\nauxiliary audio effects. The effect can be attached and detached by specifying its\nID and the send level controlled.\n\nChange-Id: Ie74ff54a453096a742688476f612ce355543b6f3\n"
    },
    {
      "commit": "de070137f11d346fba77605bd76a44c040a618fc",
      "tree": "ba741240b391a66899514061ccda38254e539013",
      "parents": [
        "f997cabca292d70d078ae828e21c28e6df62995f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 13 04:45:46 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 20 10:31:57 2010 -0700"
      },
      "message": "Audio policy manager changes for audio effects\n\nAdded methods for audio effects management by audio policy manager.\n- control of total CPU load and memory used by effect engines\n- selection of output stream for global effects\n- added audio session id in parameter list for startOutput() and stopOutput().\nthis is not used in default audio policy manager implementation.\n\nModifications of audio effect framework in AudioFlinger to allow moving and reconfiguring\neffect engines from one output mixer thread to another when audio tracks in the same session\nare moved or when requested by audio policy manager.\nAlso fixed mutex deadlock problem with effect chains locks.\n\nChange-Id: Ida43484b06e9b890d6b9e53c13958d042720ebdb\n"
    },
    {
      "commit": "42a050ff9636b79e4b91297cc41028ffd62240d5",
      "tree": "b21b32fc96b50f197579ee43ec8bee95d1c0bcf4",
      "parents": [
        "6c5c25fae5aa68a52c6fa75649dd559a9ca98932"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Jul 09 12:11:49 2010 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Fri Jul 09 12:11:49 2010 -0700"
      },
      "message": "Fix swap of sessionId and output in audio effect API.\n\nChange-Id: Idc93415efef92087507401e50cfb235a6f1f7ed7\n"
    },
    {
      "commit": "6c5c25fae5aa68a52c6fa75649dd559a9ca98932",
      "tree": "825ab3a8deb612c3eb8daae783670d1273c64521",
      "parents": [
        "8cafde196d36ab207f35fed89b9c1b9d468abb58",
        "da7581b7b61b84f15e8d671c86fd117c322b009e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 07 16:23:30 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 07 16:23:30 2010 -0700"
      },
      "message": "Merge \"Added Visualizer effect.\" into gingerbread"
    },
    {
      "commit": "da7581b7b61b84f15e8d671c86fd117c322b009e",
      "tree": "61fb39ca1eaa0a5b8a71d70683f32d238a8e74e7",
      "parents": [
        "215381ea729086b8359b7f59bdc2bd7cf55a0c45"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 02 08:12:41 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jul 07 11:00:28 2010 -0700"
      },
      "message": "Added Visualizer effect.\n\nThe visualizer enables application to retrieve part of the currently playing audio for visualization purpose.\nIt is not an audio recording interface and only returns partial and low quality audio content as a waveform or\na frequency representation (FFT).\n\nRemoved temporary hack made in MediaPlayer for animated wall papers based on audio visualization (snoop() method.\n\nThis commit also includes a change in AudioEffect class:\n - the enable()/disable() methods have been replaced bya more standard setEnabled() method.\n - some fixes in javadoc\n\nChange-Id: Id092a1340e9e38dae68646ade7be054e3a36980e\n"
    },
    {
      "commit": "3eaa4e92dbebb5b27cb89f329f31fac6fb6fe1f0",
      "tree": "add045741d098b9832bda550cfd9474a758b3db5",
      "parents": [
        "1c8ed2e906576fd8d7fa03f577bdec518cbe13d7"
      ],
      "author": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Tue Jun 22 20:50:55 2010 +0800"
      },
      "committer": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Thu Jul 01 10:57:15 2010 +0800"
      },
      "message": "Add multiple camera support for in MediaProfiles.\n\nChange-Id: Ie89568a0f5f5fd08ede77e33f9a559215d6bed9a\n"
    },
    {
      "commit": "37047fceba836f341d0108beed0991b0f8dfc543",
      "tree": "6b60725c1d6af1ca91a46961bbecff9b996d07c2",
      "parents": [
        "93d6b102a13afa23bfa80d74c399d93d542e6ad6"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Fri Jun 25 17:06:47 2010 -0700"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Mon Jun 28 15:32:26 2010 -0700"
      },
      "message": "Separate MediaRecorderClient with MediaPlayerClient\n\n- An alternative would be to define a common base class that\n  both MediaRecorderClient and MediaPlayerClient can derive.\n  But since the common code, onTransact() and notify() uses\n  some Binder code, having a common base class may not gain\n  us too much in terms of code reuse.\n\nChange-Id: Ibc06720278ad173fceacff3d267b7060856c6316\n"
    },
    {
      "commit": "ffe9c25ce85e1af55d58ec025adc6367d70db7e8",
      "tree": "664f0a33a690b4d020417a9ecc81b32f696d0f0e",
      "parents": [
        "2439a8d6d99864ba0c2d94f428e6c9ee258cdd45"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jun 23 17:38:20 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 25 11:59:35 2010 -0700"
      },
      "message": "Various fixes and improvements in audio effects implementation\n\nEffect API:\n- Use different definitions for audio device, channels, formats... in AudioSystem and EffectApi:\n  Removed media/AudioCommon.h file created for initial version of EffectApi\n- Indicate audio session and output ID to effect library when calling EffectCreate(). Session ID can be useful to optimize\nthe implementation of effect chains in the same audio session. Output ID can be used for effects implemented in audio hardware.\n- Renamed EffectQueryNext() function to EffectQueryEffect() and changed operating mode:\n  now an index is passed for the queried effect instead of implicitly querying the next one.\n- Added CPU load and memory usage indication in effects descriptor\n- Added flags and commands to indicate changes in audio mode (ring tone, in call...) to effect engine\n- Added flag to indicate hardware accelerated effect implementation.\n- Renamed EffectFactoryApi.h to EffectsFactoryApi.h for consistency with EffectsFactory.c/h\n\nEffect libraries:\n- Reflected changes in Effect API\n- Several fixes in reverb implementation\n- Added build option TEST_EFFECT_LIBRARIES in makefile to prepare integration of actual effect library.\n- Replaced pointer by integer identifier for library handle returned by effects factory\n\nAudio effect framework:\n- Added support for audio session -1 in preparation of output stage effects configuration.\n- Reflected changes in Effect API\n- Removed volume ramp up/down when effect is inserted/removed: this has to be taken care of by effect engines.\n- Added some overflow verification on indexes used for deferred parameter updates via shared memory\n- Added hardcoded CPU and memory limit check when creating a new effect instance\n\nChange-Id: I43fee5182ee201384ea3479af6d0acb95092901d\n"
    },
    {
      "commit": "1629399bb578fc176613ccaf134d1be6e3047638",
      "tree": "7542a324f41776cc25f3d9e166ddb73dbb340b37",
      "parents": [
        "dadd0d1e7d5fbb88fd3420438c590a0bb4c18af5"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Jun 23 11:31:17 2010 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Jun 23 11:33:43 2010 -0700"
      },
      "message": "Properly assign LOG_TAGs in OMXMaster.cpp and MediaScanner.cpp\n\nChange-Id: I863651619f84b2b66e9a926ce1fef8ce6a53a42d\nrelated-to-bug: 2639116\n"
    },
    {
      "commit": "dadd0d1e7d5fbb88fd3420438c590a0bb4c18af5",
      "tree": "44ad049a0b4cc00150f502e296dfb82d257f6913",
      "parents": [
        "41b2d090b23889c56bf0a889a8c9c2fb934015e8",
        "a514bdb58b5de4986679f72b7204b4764f7a2778"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 22 18:29:57 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jun 22 18:29:57 2010 -0700"
      },
      "message": "Merge \"Added support for audio sessions in MediaPlayer and AudioTrack.\" into gingerbread"
    },
    {
      "commit": "a514bdb58b5de4986679f72b7204b4764f7a2778",
      "tree": "84b1ebf0c2b500bfb4995e373f8fee5b63b6c9fd",
      "parents": [
        "58ae9c530247668f8af36e30d228c716c226b3d4"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jun 21 09:27:30 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 22 17:14:04 2010 -0700"
      },
      "message": "Added support for audio sessions in MediaPlayer and AudioTrack.\n\nAudio sessions are used to associate audio effects to particular instances (or groups) of MediaPlayers or AudioTracks.\n\nChange-Id: Ib94eec43241cfcb416590f435ddce7ab39a07640\n"
    },
    {
      "commit": "15304d601cbf83be6519ca53e1a26b97d50d0192",
      "tree": "41885f15dd2e97b841b10e094e8de84ac190c754",
      "parents": [
        "c7fa90a661dd9f6107af6a1d9e6dcaa1cb9a34e3"
      ],
      "author": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Tue Jun 22 08:01:13 2010 +0800"
      },
      "committer": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Wed Jun 23 08:01:04 2010 +0800"
      },
      "message": "media: add AudioRecord::getMinFrameCount().\n\nChange-Id: I952071ab10aa49aa96b727d157b68470d69fff3d\n"
    },
    {
      "commit": "33005a932c60a0780fe9b7307d5988df3d9f6c26",
      "tree": "2519156995c4fabaae1dfdaa091e70b973a41547",
      "parents": [
        "1616fa4a567bae928dfd28ebf1ec45cd701f27f1"
      ],
      "author": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Wed Jun 16 06:33:13 2010 +0800"
      },
      "committer": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Mon Jun 21 09:51:18 2010 +0800"
      },
      "message": "media: add AudioTrack::getMinFrameCount().\n\nChange-Id: If15162583d1d16d89f59be0793106afe77417f35\n"
    },
    {
      "commit": "801a1186eb1d2ce195b15222701865932e08f3dc",
      "tree": "1a08ae38cebaddbe6992807f124e6d44c47aeea2",
      "parents": [
        "e71d10e7ad55ccbcb0756c007caef1c959090384"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jun 09 00:17:29 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 11 06:26:31 2010 -0700"
      },
      "message": "Issue 2667802: [Audio Effect Framework] AudioEffect base class and JNI.\n\nAdded AudioEffect C++ class. AudioEffect is the base class for effect specific implementations,\nOpenSL ES effect interfaces and audio effect JNI.\n\nAdded the AudioEffect JNI and AudioEffect JAVA class. AudioEffect is the base class\nto implement more specific JAVA classes to control audio effects from JAVA applications.\n\nChange-Id: If300a1b708f2e6605891261e67bfb4f8330a4624\n"
    },
    {
      "commit": "be916aa1267e2e6b1c148f51d11bcbbc79cb864c",
      "tree": "7e2be6182cde7d023ae9afec28463d69d231d7bc",
      "parents": [
        "c282e3eee921453fc9188705b4879d6289b71f9c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 01 23:49:17 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 03 03:21:53 2010 -0700"
      },
      "message": "Issue 2667801: [Audio Effect Framework] AudioFlinger, AudioMixer AudioTrack modifications.\n\nFirst drop of audio framework modifications for audio effects support.\n\n- AudioTrack/AudioRecord:\nAdded support for auxiliary effects in AudioTrack\nAdded support for audio sessions\nFixed left right channel inversion in setVolume()\n\n- IAudioFlinger:\nAdded interface methods for effect enumeraiton and instantiation\nAdded support for audio sessions.\n\n- IAudioTrack:\nAdded method to attach auxiliary effect.\n\n- AudioFlinger\nCreated new classes to control effect engines in effect library and manage effect connections to tracks or\noutput mix:\n  EffectModule: wrapper object controlling the effect engine implementation in the effect library. There\n\tis one EffectModule per instance of an effect in a given audio session\n  EffectChain: group of effects associated to one audio session. There is one EffectChain per audio session.\n\tEffectChain for session 0 is for output mix effects, other chains are attached to audio tracks\n\twith same session ID. Each chain contains a variable number of EffectModules\n  EffectHandle: implements the IEffect interface. There is one EffectHandle object for each application\n\tcontrolling (or using) an effect module. THe EffectModule maintians a list of EffectHandles.\n\nAdded support for effect modules and effect chains creation in PlaybackThread.\nmodified mixer thread loop to allow track volume control by effect modules and call effect processing.\n\n-AudioMixer\nEach track now specifies its output buffer used by mixer for accumulation\nModified mixer process functions to process tracks by groups of tracks with same buffer\nModified track process functions to support accumulation to auxiliary channel\n\nChange-Id: I26d5f7c9e070a89bdd383e1a659f8b7ca150379c\n"
    },
    {
      "commit": "d71a1be83ff31cdb6599c351f9832cefc8d447ba",
      "tree": "e4bd66e6f5f7386067622eafa8c8cea56c6f4797",
      "parents": [
        "9bca89d50d0c51d8e3f3e74d610b7d9a2dc98ed3"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 21 07:47:50 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon May 24 23:33:42 2010 -0700"
      },
      "message": "Fix issue 2667797: [Audio Effect Framework] new base class and binder interfaces for effect control.\n\nAdded IEffect and IEffectClient binder interfaces to exchange effect module control\nand status information between application and media server processes.\n\nChange-Id: I10e8e894898e52ed9956a765d0ef7075eb2593af\n"
    },
    {
      "commit": "d1b449aad6c087a69f5ec66b7facb2845b73f1cb",
      "tree": "b16f7d28fdac76c90d66be56161116fe09822992",
      "parents": [
        "ae77ffa16bda593fb3751e41d45327d867f3c8e1"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 14 03:26:45 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon May 17 02:23:47 2010 -0700"
      },
      "message": "Fix issue 2553359: Pandora does not work well with Passion deskdock / Cardock.\n\nThe problem is due to a too big difference between the buffer size used at the hardware interface and at the A2DP interface.\nWhen no resampling occurs we don\u0027t notice problems but the timing is very tight. As soon as resampling is activated, the AudioTrack underruns.\nThis is because the AudioTrack buffers are not resized when moving the AudioTrack from hardware to A2DP output.\nThe AudioTrack buffers are calculated based on a hardware output buffer size of 3072 bytes. Which is much less than the A2DP output buffer size (10240).\n\nThe solution consists in creating new tracks with new buffers in AudioFlinger when the A2DP output is opened\ninstead of just transfering active tracks from hardware output mixer thread to the new A2DP output mixer thread.\nTo avoid synchronization issues between mixer threads and client processes, this is done by invalidating tracks\nby setting a flag in their control block and having AudioTrack release the handle on this track (IAudioTrack)\nand create a new IAudioTrack when this flag is detected next time obtainBuffer() or start() is executed.\n\nAudioFlinger modifications:\n- invalidate the tracks when setStreamOutput() is called\n- make sure that notifications of output opening/closing and change of stream type to output mapping are sent synchronously to client process.\nThis is necessary so that AudioSystem has the new stream to output mapping when the AudioTrack detects the invalidate flag in the client process.\nPreviously their were sent when the corresponding thread loop was executed.\n\nAudioTrack modifications:\n- move frame count calculation and verification from set() to createTrack() so that is is updated every time a new IAudioTrack is created.\n- detect track invalidate flag in obtainBuffer() and start() and create a new IAudioTrack.\n\nAudioTrackShared modifications\n- group all flags (out, flowControlFlag, forceReady...) into a single bit filed to save space.\n\nChange-Id: I9ac26b6192230627d35084e1449640caaf7d56ee\n"
    },
    {
      "commit": "2e5299988b5f5f9165a76938a66d37e46dd48d6b",
      "tree": "d7212db7df16d22aaf7d5f1ce43f5706ff58ec30",
      "parents": [
        "47acf12ffef0a5db470406b7db788adcc6240786"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Apr 12 16:22:15 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Apr 12 16:29:36 2010 -0700"
      },
      "message": "don\u0027t hardcode \"mSurface\" throughout our source code\n\nthis is used in a few places to get access to the android.view.Surface\nnative surface. use a macro instead. Also rename the field to mNativeSurface.\n\nChange-Id: I1c6dea14abd6b8b1392c7f97b304115999355094\n"
    },
    {
      "commit": "a17a1347ffe281fc70633ba8dc98f6cf49ac06ff",
      "tree": "bbecb38baa1d87f4319624522d34ece1a3df96ec",
      "parents": [
        "71662fe8f5cc0dda0837596e9d44200d302697e8"
      ],
      "author": {
        "name": "Dave Sparks",
        "email": "davidsparks@android.com",
        "time": "Thu Apr 01 18:00:58 2010 -0700"
      },
      "committer": {
        "name": "Dave Sparks",
        "email": "davidsparks@android.com",
        "time": "Thu Apr 01 18:08:22 2010 -0700"
      },
      "message": "Use local lock for most MediaMetadataRetriever methods. Bug 2560834.\n\nMediaMetadataRetriever uses a single static lock for all operations.\nThis effectively serializes all metadata retrieval operations in a\nsingle process. This patch uses the object level lock for all normal\noperations and only uses the static lock to serialize calls to\nrelease.\n\nChange-Id: I81c9f234c2f0007a26d18e1398c709b41a4dbbd7\n"
    },
    {
      "commit": "54b1a0550411c2fd2084d82d28934d505c37349a",
      "tree": "f7f3959667145710bfac8c7645405ae0079addb4",
      "parents": [
        "589843b5969aa64a8f9a57fc8176c80b0ddce3c6"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Mar 19 16:14:13 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Mar 19 16:16:43 2010 -0700"
      },
      "message": "libutils Condition are now PRIVATE by default\n\nCondition must be initialized with SHARED for the old behavior, where\nthey can be used accross processes.\n\nUpdated the two places android that require SHARED conditions.\n\nPRIVATE conditions (and mutexes) use more efficient syscalls.\n\nChange-Id: I9a281a4b88206e92ac559c66554e886b9c62db3a\n"
    },
    {
      "commit": "d3f93c572e55dc902d01f8eeda1d107a8b9128e2",
      "tree": "d18704a2f9806b9ce36ed67bbb7119efd7b871a4",
      "parents": [
        "72d747da6672c68bc82e05912bf57d4e2bac2c3c",
        "be55a2d66f03e80524a346500ffa9fd046410b28"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Mar 17 09:16:27 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 17 09:16:27 2010 -0700"
      },
      "message": "Merge \"Fix issue 2416481: Support Voice Dialer over BT SCO.\""
    },
    {
      "commit": "be55a2d66f03e80524a346500ffa9fd046410b28",
      "tree": "37b529b55b3b1a18e2b0413e1433e446f919df5b",
      "parents": [
        "746973186764292a84d11856ac315fa4b62957ad"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Mar 11 14:47:00 2010 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Mar 16 17:32:18 2010 -0700"
      },
      "message": "Fix issue 2416481: Support Voice Dialer over BT SCO.\n\n- AudioPolicyManager: allow platform specific choice for opening a direct output.\n Also fixed problems in direct output management.\n- AudioFliinger: use shorter standby delay and track inactivity grace period for direct output\nthread to free hardware resources as soon as possible.\n- AudioSystem: do not use cached output selection in getOutput() when a direct output\ncan be selected.\n\nChange-Id: If44b50d29237b8402ffd7a5ba1dc43c56f903e9b\n"
    },
    {
      "commit": "3e42b4491529975f771f8d71f931e24e120a7856",
      "tree": "9a37efbc1808b2b9ff7dd1081aa3308c287d0e2d",
      "parents": [
        "746973186764292a84d11856ac315fa4b62957ad"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Mar 15 21:17:08 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Mar 15 21:17:40 2010 -0700"
      },
      "message": "Fix regression in directory scanning\n\nPrevious range-checking fix removed an inequality check. This change\nrestores it.\n\nOffending change was I5eb310ced58c3c64a7af2d11b80326efe5adbcab\n\nChange-Id: Ic952c3ba5a4f7e5ab2148ec623b6f083cb7495fb\n"
    },
    {
      "commit": "8a6e24135608d1ec6629f381acd20d88369cd940",
      "tree": "382290a88d0e5bdbb189a1bdfb523c8a87aa1f60",
      "parents": [
        "4023493a827bc9751d8e40795516d0d536a53348",
        "b5c3107262fdf82aef4bd5ee8b8c60dd3e4725fe"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Mar 11 14:56:54 2010 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 11 14:56:54 2010 -0800"
      },
      "message": "Merge \"Revert \"Do autodetection even if no locale was specified, and use the\"\""
    },
    {
      "commit": "b5c3107262fdf82aef4bd5ee8b8c60dd3e4725fe",
      "tree": "a758da52b033855a0a05598d6e213935b5fa2dbb",
      "parents": [
        "64fb06f698b39759a7a2ebacd0a175949b7506a5"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Mar 11 13:37:46 2010 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Mar 11 13:37:46 2010 -0800"
      },
      "message": "Revert \"Do autodetection even if no locale was specified, and use the\"\n\nThis reverts commit b45b0845a6db32848ad08ac1037ef67a68ec2d39.\n"
    },
    {
      "commit": "4023493a827bc9751d8e40795516d0d536a53348",
      "tree": "468f39da8a380f6d7c01ea3a6fa0d5c91ffa47c4",
      "parents": [
        "6fc13ab8d00819b7420d1b0a500896264e820409"
      ],
      "author": {
        "name": "Nicolas Catania",
        "email": "niko@google.com",
        "time": "Wed Mar 10 10:41:04 2010 -0800"
      },
      "committer": {
        "name": "Nicolas Catania",
        "email": "niko@google.com",
        "time": "Thu Mar 11 10:07:14 2010 -0800"
      },
      "message": "Allow invoke in all the player states except idle and error.\n\nPreviously invoke would work only after prepare but not\nwhen the player is in play or pause state (for instance).\nThis new change just check that the player has been initialized\nand is not in the error state.\n\nBug:2488931\nChange-Id: I9b9f3679593a3b7697c1a84d993fdcd7e1693a90\n"
    },
    {
      "commit": "64fb06f698b39759a7a2ebacd0a175949b7506a5",
      "tree": "e84270c1d12f3e28a3e26a96deff7ef41ace48b9",
      "parents": [
        "8d20cd5d15bf008abf43cbd00eadf90cd3e4b84e"
      ],
      "author": {
        "name": "Nicolas Catania",
        "email": "niko@google.com",
        "time": "Thu Mar 11 08:16:26 2010 -0800"
      },
      "committer": {
        "name": "Nicolas Catania",
        "email": "niko@google.com",
        "time": "Thu Mar 11 08:16:26 2010 -0800"
      },
      "message": "Revert \"Allow invoke in all the player states except idle and error.\"\n\nThis reverts commit 88f3b81d065d4bec6f69a25eda99158e254f55b1.\n"
    },
    {
      "commit": "63bacaf543d4faee6dadda08e51556c878b078f5",
      "tree": "3fdfd205e80311af4aa62ded551f0273e1e54f96",
      "parents": [
        "5983dd43811e433d9a6680439ad4df62eef80d6f"
      ],
      "author": {
        "name": "Nicolas Catania",
        "email": "niko@google.com",
        "time": "Wed Mar 10 10:41:04 2010 -0800"
      },
      "committer": {
        "name": "Nicolas Catania",
        "email": "niko@google.com",
        "time": "Wed Mar 10 16:17:30 2010 -0800"
      },
      "message": "Allow invoke in all the player states except idle and error.\n\nPreviously invoke would work only after prepare but not\nwhen the player is in play or pause state (for instance).\nThis new change just check that the player has been initialized\nand is not in the error state.\n\nBug:2488931\n\nChange-Id: I7a69d1b6e3eec1e5dbdf7378ff2085329062595a\n"
    },
    {
      "commit": "83ff1438d2d1d5dbf39ca5e6f2e4fa1799e7ba80",
      "tree": "4f1398095d0a69f4aa46cf533137c51ada1599fa",
      "parents": [
        "b699c595d78e8cd7f60c2c5102d40db07b18926b"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Wed Mar 10 10:53:16 2010 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Wed Mar 10 10:55:09 2010 -0800"
      },
      "message": "MEDIA_PLAYER_STATE_ERROR is not a bitmask\n(b/2502881)\n\nChange-Id: I08e427eb2c36f5d70e40f9aeb8638fa8262de989\n"
    },
    {
      "commit": "88335b1a749fe0157547907a2ce6c9632f4d2592",
      "tree": "f607469abe6fdcd125f9c2399675598a4a483e39",
      "parents": [
        "c0170bc6c6c81f5dfa86a132bf29ee48c01329d9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Mar 02 18:38:06 2010 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Mar 05 11:54:23 2010 -0800"
      },
      "message": "Fix issue 2428563: Camera rendered inoperable by voice call interruption.\n\nThe problem is that AudioRecord never exits read() when a timeout occurs while trying\nto get new PCM data from audio hardware input buffer: it just keeps waiting and retrying until stop() is called.\nIn the same time, opencore AndroidAudioInput::audin_thread_func() loop cannot be exited when stuck\nin AudioRecord::read() because the iExitAudioThread flag can only be sampled when AudioRecord::read()\nreturns. We remain stuck with the audio input thread running.\n\nThe fix consists in modifying AudioRecord behavior in case of timeout when getting new PCM samples.\nWe now wait only one timeout period and try to restart audio record, in case the problem is due to a media_server\nprocess crash. If this fails, we exit read() with a number of bytes read equals to 0 so that\nAndroidAudioInput::audin_thread_func() loop can exit.\n\nAlso modified Audioflinger::RecordThread() loop so that we attempt to recover from HAL read errors.\nIn case of read error, the input stream is forced to standby so that next read attempt does a\nreconfiguration and restart of the audio input device.\n"
    },
    {
      "commit": "05bca2fde53bfe3063d2a0a877f2b6bfdd6052cf",
      "tree": "7f99a6ebacbc1f76b561b95a04808636486b48ba",
      "parents": [
        "949c5037a6e019ff575bd481d286908c2eaa1e34"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Feb 26 02:47:27 2010 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Mar 02 08:20:13 2010 -0800"
      },
      "message": "Issue 2071329: audio track is shorter than video track for video capture on sholes\n\nAdd API to retrieve number of frames dropped by audio input kernel driver.\n\nSubmitted on behalf of Masaki Sato \u003cmasaki.sato@motorola.com\u003e\n"
    },
    {
      "commit": "e3d91046072908f5613a21652b6da9b44043f1d5",
      "tree": "7df2c4f76748807e0559accaddccc8e767d848b9",
      "parents": [
        "698f476590bc9e38d4d1d4155da9efdbedd357c4",
        "e284bac7757ad732d0812eb6133125434ba66d5b"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Fri Feb 26 18:56:22 2010 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 26 18:56:22 2010 -0800"
      },
      "message": "Merge \"Don\u0027t allow MediaRecorder.setParameter() to be invoked in the following states: error, prepared or recording\""
    },
    {
      "commit": "698f476590bc9e38d4d1d4155da9efdbedd357c4",
      "tree": "75bf577eb1f9cdc93b57b12befca37b01f44e032",
      "parents": [
        "789c27a161f8ab7dba0835e015317ff4843c5cd2"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Feb 26 13:16:23 2010 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Feb 26 13:16:23 2010 -0800"
      },
      "message": "When we\u0027re in the \u0027playback complete\u0027 state, don\u0027t consider pausing\nan error. This makes \u0027playback complete\u0027 essentially equivalent to\nbeing paused at the end, and treats it the same as being paused at\nany other position.\n"
    },
    {
      "commit": "e284bac7757ad732d0812eb6133125434ba66d5b",
      "tree": "ca8bfc576bd53f6b9bfe006a8aaed0a67d5d2b63",
      "parents": [
        "b8b283bd53594ce4bb6da47b3abff12a0a070f04"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Thu Feb 25 18:41:46 2010 -0800"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Thu Feb 25 18:41:46 2010 -0800"
      },
      "message": "Don\u0027t allow MediaRecorder.setParameter() to be invoked in the following states:\nerror, prepared or recording\n\nbug - 2362412\n"
    },
    {
      "commit": "f5a8385649204213dc19e1a64f4693931e048d85",
      "tree": "9ffc92fdc9642fb888c8f874259c3f44047167c5",
      "parents": [
        "df49e8926e85088bc7d1dc7905362437c9806b69"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Tue Feb 23 17:21:44 2010 -0800"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Wed Feb 24 18:10:12 2010 -0800"
      },
      "message": "Image encoding settings java API through xml configuration file\n\n- I decided to completely remove jpeg decoding related stuff from this change\n  I think that setting is better off if it is specified by the system properties.\n  We don\u0027t have to include MediaProfiles.h header in skia files\n"
    },
    {
      "commit": "df49e8926e85088bc7d1dc7905362437c9806b69",
      "tree": "be9ebdaa43f50e02295a6cf71e1d3b3e43fdead0",
      "parents": [
        "4b2f2c06ea5be0d95da53a3307ab4c1dd940f8dd",
        "eb839f5f05b7d0c4558bf845816fd3fe6201e15e"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Feb 22 11:19:51 2010 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Feb 22 11:19:51 2010 -0800"
      },
      "message": "am 8978547f: am f5fe3949: Fix issue 2459650.\n\nMerge commit \u00278978547f254b6b6ba2e322794aa044803f3edc2a\u0027\n\n* commit \u00278978547f254b6b6ba2e322794aa044803f3edc2a\u0027:\n  Fix issue 2459650.\n"
    },
    {
      "commit": "7c7fa1b51bec497cd7f46c1bdb5bb0adfaa181b2",
      "tree": "804c653cc7dc33feaaf6a4be68f1ca30ae2b6bca",
      "parents": [
        "cac7c56783201754c799c94549b4d96c3f081e59"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Feb 22 01:37:19 2010 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Feb 22 01:37:19 2010 -0800"
      },
      "message": "Fix issue 2459650.\n\nThis change fixes a problem where an unwanted tone is generated by audio policy manager when a MT call is answered.\nThis is because of a policy that replaces high visibility system sounds (ringtones, alarms...) by a beep when in call.\nThere is a transitory phase while the call is being answered where the phone state is changed to IN_CALL but the\nringtone is still playing. The audio policy manager then mutes the end of the ringtone and starts playing a beep\nin replacement because the ringtone is categorized as high visibility.\n\nThe fix consists in changing the ringtone stream type from high visibility to low visibility. This is not a problem as\nthe only actual use case where a ringtone would be generated while in call is if another call is received.\nBut in this case, the phone system does not generate a ringtone but a call waiting tone instead.\nIt is therefore not required to handle a ringtone as a high visibiltiy tone that must be somehow signaled to the user\nwhile in call.\n"
    },
    {
      "commit": "eb03f13fd3b5a4b1060cd55881934ff9c918fe8c",
      "tree": "d99c5ddc4313f326d5dffde3ee56710a24450360",
      "parents": [
        "349a733b58c3b4c656c4ddfa8cbbb06c008d3bc5"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Feb 18 09:25:49 2010 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Feb 18 09:26:47 2010 -0800"
      },
      "message": "Range check in MediaScanner::processDirectory\n\nMake sure we don\u0027t have an empty string before checking if it\u0027s a\ndirectory since this string is tainted.\n\nChange-Id: I5eb310ced58c3c64a7af2d11b80326efe5adbcab\n"
    },
    {
      "commit": "4e92c7efc68b5d7635a32dbd283ab8558ad9bdd6",
      "tree": "6a214e4fd02b792810f73e881d6312685ee1d722",
      "parents": [
        "328901bdc7c00ab361c5ef16d0d69c94a0458e95"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Feb 12 12:35:58 2010 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Feb 12 12:44:10 2010 -0800"
      },
      "message": "New API on java\u0027s MediaPlayer to suspend/resume a session.\n\nrelated-to-bug: 2231576\n"
    },
    {
      "commit": "3cf613507f1e2f7bd932d921a6e222e426fd3be4",
      "tree": "20c9dd57e2227046ab1d6fc1185f4136c6dac12e",
      "parents": [
        "988e3f0b2c74095deae580157c57935a98573052"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Feb 09 17:46:37 2010 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Feb 11 13:16:22 2010 -0800"
      },
      "message": "split libsurfaceflinger_client and libcamera_client out of libui\n"
    },
    {
      "commit": "77f8531a739c46cffe7f7fd1e035de542deccf48",
      "tree": "697c56b8eda89d63e7a8043c56d65dbd557eb781",
      "parents": [
        "316f8352846a1470b0ffd1b94ac1ec535922a9f6"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Wed Feb 10 09:56:05 2010 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Wed Feb 10 10:36:02 2010 -0800"
      },
      "message": "Do autodetection even if no locale was specified, and use the\ndetected encoding if it is unambiguous.\n"
    },
    {
      "commit": "1d7491b19516505e0754c66a3c8cd61811c9b6a6",
      "tree": "f5377efbec2f7f4980f35650506835e837573e22",
      "parents": [
        "036a38099c9d339d77dc4a1a148db2907a618c2e"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Tue Jan 19 17:45:38 2010 -0800"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Mon Feb 01 22:38:37 2010 -0800"
      },
      "message": "Initial check-in for xml-based encoder capabilities retrieval\n- Changed the Java API as suggested\n- Treat /etc/media_profiles.xml as the default xml configurtion file\n"
    },
    {
      "commit": "867d2f6ce668968e463eb86b856d21525f12fd67",
      "tree": "cc65f1c037d980841d0f075e2625ac37ac338f28",
      "parents": [
        "bbe1ed453aa0407237127fb45a30ba8ffd9e0941"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jan 25 19:00:00 2010 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Jan 29 14:51:06 2010 -0800"
      },
      "message": "Simplify the MemoryDealer implementation\n\nAt some point the implementation became complicated because of\nSurfaceFlinger\u0027s special needs, since we are now relying on gralloc\nwe can go back to much simpler MemoryDealer.\n\nRemoved HeapInterface and AllocatorInterface, since those don\u0027t need\nto be paramterized anymore. Merged SimpleMemory and Allocation.\nMade SimplisticAllocator non virtual.\n\nRemoved MemoryDealer flags (READ_ONLY, PAGE_ALIGNED)\n\nRemoved a lot of unneeded code.\n"
    },
    {
      "commit": "2db8455d8f4468a637109d31f319ce02d9d743ec",
      "tree": "7f3418b24ec0779af3ab25202eb5063e860610d5",
      "parents": [
        "8566a635aa4bf6d2e908f0bc64d4fb8917025b58"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Jan 28 11:19:57 2010 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Jan 28 11:52:43 2010 -0800"
      },
      "message": "API Extension: Support for optionally specifying a map of extra request headers when specifying the uri of media data to be played.\n\nrelated-to-bug: 2393577\n\nOriginal change by Andrei Popescu \u003candreip@google.com\u003e\n"
    },
    {
      "commit": "342e9cf388cceb807def720e40e8b0a217f4bcaa",
      "tree": "2d443e1de1a10b628016a5ceffb4b5a1cb031dd7",
      "parents": [
        "2dce41ad26cb3e9e15c9e456a84bcf5309548ca0"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jan 19 17:37:09 2010 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jan 26 18:40:39 2010 -0800"
      },
      "message": "Fix issue 2285561: New AudioFlinger and audio driver API needed for A/V sync\n\nAdded getRenderPosition() API to IAudioFlinger to retreive number of audio frames\nwritten by AudioFlinger to audio HAL and by DSP to DAC.\n\nAdded getRenderPosition() API to AudioHardwareInterface to retreive number of audio frames\nwritten by DSP to DAC.\n\nExposed AudioTrack::getPosition() to AudioSink() to make it available to media player.\n\nRemoved excessive log in AudioHardwareGeneric.\n"
    },
    {
      "commit": "b72a396826da8bd934b9531bbd40f86d7509e71c",
      "tree": "7eab39ce31d2609e7c0281e1f0541a8425d6e5e2",
      "parents": [
        "6c009eb5ff5f999b1d9bc6978d3213f9f797903f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 25 08:49:09 2010 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 25 14:00:10 2010 -0800"
      },
      "message": "Fix issue 2378022: AudioService should direct volume control to STREAM_VOICE_CALL stream when STREAM_VOICE_CALL stream is active.\n\nModified AudioService.getActiveStreamType() so that STREAM_VOICE_CALL is selected when a track using this stream\ntype is playing.\n\nChanded isMusicActive() for a more generic isStreamActive(stream) method in AudioSystem, IAudioFlinger and AudioFlinger.\n"
    },
    {
      "commit": "0ef583f785528ef2785e6149d5964004cd1016b0",
      "tree": "cd224c7d6843806a26c0d3ce8539dd6c16ed2fcb",
      "parents": [
        "a826028dc33a83538a2ac6bd13ca46a52de7a9be"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 25 10:27:15 2010 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jan 25 10:27:15 2010 -0800"
      },
      "message": "Fix issue 2363154: Speech synthesis fails to start over A2DP after media server process crash.\n\nThe problem is that after a media_server crash, the value of the A2DP output handle can change.\nAs this value is cached in AudioSystem for all client processes there can be a mismatch between the cached\nand actual value after a media_server restart.\n\nThe fix consists in clearing the cached output handles and output to stream map values cached\nin AudioSystem in AudioFlingerClient::binderDied() which is called when the media_server crashes.\n"
    },
    {
      "commit": "570a3cb7582daa030cb38eedc5eb6a06f86ecc7f",
      "tree": "0c59c44899b4a3fbbe921171028fd193829affc7",
      "parents": [
        "dfaddcc81f27bb9de47edec469a4a5fb2309bd6a"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Jan 20 15:05:46 2010 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Jan 20 15:05:46 2010 -0800"
      },
      "message": "Fix no-copy-overhead OMXCodec implementation to actually work.\n"
    },
    {
      "commit": "5cb4241cbeb409f2322bd527349c080a2cf454df",
      "tree": "94673f710182f56540173bf0cbd5525bf408a440",
      "parents": [
        "0dd4f499b391fc2888b0e83d126208c7a3ec8960",
        "7eaa9c9385535b651064e02d05a8ffa4b2359281"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Jan 19 11:43:12 2010 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 19 11:43:12 2010 -0800"
      },
      "message": "Merge \"Avoid unnecessary buffer copying if at all possible, detect if running in the mediaserver process.\""
    },
    {
      "commit": "7eaa9c9385535b651064e02d05a8ffa4b2359281",
      "tree": "da5f6ba264cd97c4fa08cdcc0666ca2b5cc7175f",
      "parents": [
        "a2ce85733c8e42c30927eefe3ff4e4bd36515041"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Jan 15 15:28:19 2010 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Jan 19 10:57:57 2010 -0800"
      },
      "message": "Avoid unnecessary buffer copying if at all possible, detect if running in the mediaserver process.\n"
    },
    {
      "commit": "dd172fce75b2a1c3cb3a5d3b3bbb5020b1ae8675",
      "tree": "538c2d1505e11dbb55aa0839c3181d96e812868c",
      "parents": [
        "97419ed670a12f48a7609673da8ee5dc0376f075"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Fri Jan 15 18:13:58 2010 -0800"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Fri Jan 15 18:28:16 2010 -0800"
      },
      "message": "Media server death nodification\n"
    },
    {
      "commit": "67e5a4f6f6879d512a859e5dba92e9beec7a2f91",
      "tree": "db31b16d1b6e0ec2074c76058da7a86c1ea2a9c6",
      "parents": [
        "23d7a43fb32482e2573b7f203fd9dd5a8349b329"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Jan 08 10:57:34 2010 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Jan 08 11:54:36 2010 -0800"
      },
      "message": "Reorganize some of the stagefright implementation related to metadata.\n"
    },
    {
      "commit": "134ee6a324c35f39e3576172e4eae4c6de6eb9dc",
      "tree": "c402e0b47b926a0ed1bfee9fa2ef16822a19dd45",
      "parents": [
        "8ae1d0bdcef22f2bdd8d283e0e615f3ba6c3f4cd"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Dec 16 09:30:55 2009 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Dec 17 09:28:15 2009 -0800"
      },
      "message": "Squashed commit of the following:\n\ncommit 144b1c40e9cf08a584c50e1bef7ba3f287e81a4f\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Wed Dec 16 09:28:23 2009 -0800\n\n    This H264 file shows a certain problem even better.\n\ncommit 3245f1f3b7471975aeeb824a756c987abd610f55\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Wed Dec 16 09:20:08 2009 -0800\n\n    Using only the QA testfiles now.\n\ncommit 074817eb3816c5dd70858a3594e3b92d799d873b\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Tue Dec 15 16:17:39 2009 -0800\n\n    Yay, roles are back again now that the API is in place.\n\ncommit 6d847e4932cc38301ae27cb7283b7f1553a95457\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Tue Dec 15 13:01:20 2009 -0800\n\n    Added commandline option for specifying the random seed for reproducable tests.\n\ncommit 62ab37b26336eaa67e49791c41c996acb6acee3f\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Mon Dec 14 10:53:27 2009 -0800\n\n    When issuing a seek it is important that only the first MediaSource::read call has the seek option.\n\ncommit e77c46644b2fb6862bafa3569f7d304252074f1e\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Mon Dec 7 16:39:07 2009 -0800\n\n    Make sure the tests are actually built, sp\u003cOMXCodec\u003e becomes sp\u003cMediaSource\u003e\n\ncommit 6df56915bd55a9445b3c6f953d3cc251d81579b8\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Thu Dec 3 14:25:36 2009 -0800\n\n    Temporarily disable support for querying the roles of OMX components.\n\ncommit 31bb26930df9e3658dea684cedb4b0f1a06a4a88\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Tue Dec 1 13:36:52 2009 -0800\n\n    Disregard EOS events, slightly change the way the EOS flag on output buffers is handled.\n\ncommit 4c382fbc9aebee8197d5988d04378062809e7c48\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Tue Dec 1 09:37:24 2009 -0800\n\n    New random seek test for the codec tests. Fixed \"sticky\" end-of-output-buffers flag behaviour in OMXCodec.\n\ncommit c762eac3e44309592b61a168d66e091cf609fa03\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Tue Nov 3 14:13:43 2009 -0800\n\n    Fix a typo.\n\ncommit 50540a59b65c7d476b0193c7494cd75895e6ca6d\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Tue Nov 3 09:48:35 2009 -0800\n\n    Some more fine tuning of the unit tests, make MPEG4Extractor less verbose.\n\ncommit 1157a7e52a0636706caa235abe16d2ff8a0b8140\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Wed Oct 28 12:01:01 2009 -0700\n\n    Changes to the IOMX::listNodes API, this now returns the component\u0027s roles as well, unit tests now test all components in all supported roles by default.\n\ncommit 30fbf2d8c6cb927689f7ba75eb550a81e9df488a\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Mon Oct 26 09:45:26 2009 -0700\n\n    Initial check-in of unit tests for OMX components.\n"
    },
    {
      "commit": "a410d5a7150d6b14f98197e570c78ea7b6a65091",
      "tree": "3fcb722bdfba1d0bd214d8dfa831e9f3d71cc6e5",
      "parents": [
        "bf697e37550d9e8376089b0b5e498613bede798c",
        "148b266afe2ac92b5616c24e8d5160e6f9242f69"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Dec 07 11:03:17 2009 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Dec 07 11:03:17 2009 -0800"
      },
      "message": "am 6d42d806: Merge change I9cc489a2 into eclair\n\nMerge commit \u00276d42d80653f2c41f3e72a878a1d9a6f9693b89f7\u0027 into eclair-mr2\n\n* commit \u00276d42d80653f2c41f3e72a878a1d9a6f9693b89f7\u0027:\n  Fix issue 2304669: VoiceIME: starting and canceling voice IME yields persistent \"error 8\" state on future attempts and breaks voice search.\n"
    },
    {
      "commit": "148b266afe2ac92b5616c24e8d5160e6f9242f69",
      "tree": "6a39d1291d8abe0fe7ca25b0ac6d58f92acf2163",
      "parents": [
        "f311c557729099d002f4aae37c402a8287912369"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Sat Dec 05 05:20:01 2009 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Dec 07 05:37:47 2009 -0800"
      },
      "message": "Fix issue 2304669: VoiceIME: starting and canceling voice IME yields persistent \"error 8\" state on future attempts and breaks voice search.\n\nFixed AudioFlinger::openInput() broken in change ddb78e7753be03937ad57ce7c3c842c52bdad65e\nso that an invalid IO handle (0) is returned in case of failure.\nApplied the same correction to openOutput().\nModified RecordThread start procedure so that a failure occuring during the first read from audio input stream is detected and causes\nthe record start to fail.\nModified RecordThread stop procedure to make sure that audio input stream fd is closed before we exit the stop function.\n\nFixed AudioRecord JAVA and JNI implementation to take status of native AudioRecord::start() into account\nand not change mRecordingState to RECORDSTATE_RECORDING if start fails.\n"
    },
    {
      "commit": "adf7d77752b3dbd47badc8819aa2674860d6ccba",
      "tree": "5430de0a699b0d321fe546edb0ed865244317db7",
      "parents": [
        "15478f3287c62a780d19b9059023331721bd4f4f",
        "981594f5c3697c3330bdbd4bb5a743fb9f01e6ab"
      ],
      "author": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Dec 03 20:03:59 2009 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Dec 03 20:03:59 2009 -0800"
      },
      "message": "Merge change I6c84d731 into eclair-mr2\n\n* changes:\n  Media/ToneGenerator: Change tone format for TONE_CDMA_ANSWER\n"
    },
    {
      "commit": "97494da9d418b599fa1b9930487b90c978357634",
      "tree": "761c80dc646ec8a3ad2f46ecaf3f51b71203bfff",
      "parents": [
        "572e6a5cea656c1df50f69df9730f2dc351308de"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Dec 03 15:45:53 2009 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Dec 03 15:45:53 2009 -0800"
      },
      "message": "I accidentally broke this code while refactoring MediaScanner. This is the fix.\n"
    }
  ],
  "next": "413f523afe96aff02d2b0a7459127b8f67b2b43c"
}
