)]}'
{
  "log": [
    {
      "commit": "500e510c7bd96a3d2959cdd858db4045b74a0e1a",
      "tree": "1bc7df57dc78a0db2d7c9fb3b0945ff5e681328e",
      "parents": [
        "0d681abd16873a265a10aee1e9ae8fa062309de3"
      ],
      "author": {
        "name": "Mike J. Chen",
        "email": "mjchen@google.com",
        "time": "Mon Aug 15 13:28:26 2011 -0700"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Fri Oct 28 10:14:48 2011 -0400"
      },
      "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: I6ec5d2bca9b8ebc0acd395a7dd92e1a48fcdfa9b\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": "cfe2ba6b01a258e39f9c215ffc7b750e0b68f708",
      "tree": "c4a213cfc30955cc61a8c9673e032caff41a0947",
      "parents": [
        "98afd841e8f0803a00d1970e4a28ea8999e9c498"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 13 15:04:17 2011 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 13 17:33:29 2011 -0700"
      },
      "message": "Issue 5298399: Lost speech after a crash in gTalk.\n\nFixed problem in AudioTrack::restoreTrack_l() causing a permanent\nfailure if the IAudioTrack interface to AudioFlinger could not be\nrestored at the first attempt.\n\nChange-Id: I039d4fe2dca8d3baf71f1a6c51119f27a67b6611\n"
    },
    {
      "commit": "cd07594333cbe8b2c86c6609cce01a74d6cc33f8",
      "tree": "70b1b94cb811f564e8fe0c6ec348469adaae5f3c",
      "parents": [
        "539a735a82fefb1944aa6135df73dfe9f541566c"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Aug 25 16:47:23 2011 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Thu Aug 25 17:33:49 2011 -0700"
      },
      "message": "Bug 4364249 Play position is 0 after flushing AudioTrack\n\nAudioTrack::stop() is not synchronous, so a stop() followed\n by flush(), which is synchronous, will not always report\n a playhead position of 0 after being called.\nThis CL adds a flag to mark a track as flushed, and report the\n correct playhead position in this state.\nBug 5217011 has been created to address the real issue in the\n future, where flush could be made synchronous, to properly\n address bug 4364249.\n\nChange-Id: Icf989d41a6bcd5985bb87764c287f3edb7e26d12\n"
    },
    {
      "commit": "d217a8c4632b3e3065f8c2a26b9ce4dc4c97171f",
      "tree": "36ea6300b9a3e5412d45ddaa5e5d6a38117c30c0",
      "parents": [
        "013b5a67d6f8e12a1b06e74863daec1bee4d99c1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 01 15:20:35 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jun 01 15:20:35 2011 -0700"
      },
      "message": "Revert \"Use AudioTrack::event_type not int in callback\"\n\nThis reverts commit 2225e4b7049fa3fb9d39a068b8268b63c952d7c1"
    },
    {
      "commit": "013b5a67d6f8e12a1b06e74863daec1bee4d99c1",
      "tree": "cb10033d696d75aa6b609f39c19e8b5640f9c2fc",
      "parents": [
        "8a72c54e74eb365971288a81687e5c2aa47963e7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed May 04 17:18:16 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 01 13:50:23 2011 -0700"
      },
      "message": "Use AudioTrack::event_type not int in callback\n\nChange-Id: Ifefc708d46874e04fd0d01cb6e2d43b987ee796c\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": "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": "1703cdfee717b1b312bf8979816a9e2f16a82e5d",
      "tree": "eb9d3cfe8ffebe45679de91af6f9ffd676ca5067",
      "parents": [
        "fbb1909036ba7de3d9fb8738daba60b357881153"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 07 14:52:59 2011 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Mar 08 16:33:15 2011 -0800"
      },
      "message": "Fix issue 3439872: video chat and bluetooth SCO\n\nThis change fixes the stability problems experienced when using\na bluetooth headset supporting both A2DP and SCO. Problems occur\nwhen starting the video chat at which time the A2DP output is being\nstopped to start SCO. At that time, active AudioTracks are invalidated\nby AudioFlinger so that a new AudioTrack binder interface can be\nrecreated by the client process on the new mixer thread with correct parameters.\nThe problem was that the process to restore the binder interface was not\nprotected against concurrent requests which caused 2 binder interfaces\nto be created sometimes. This could lead to permanent client deadlock\nif one of the client threads was waiting for a condition of the first\ncreated binder interface while the second one was created (as the AudioFlinger\nwould only signal conditions on the last one created).\nThis concurrent request situation is more likely to happen when a client\nuses the JAVA AudioTrack as the JNI implementation uses simultaneously the\nnative AudioTrack callback and write push mechanisms. By doing so, the code\nthat checks if the binder interface should be restored (in obtainBuffer()) is\nmuch more likely to be called concurrently from two different threads.\n\nThe fix consists in protecting the critical binder interface restore phase\nwith a flag in the AudioTrack control block. The first thread acting upon the binder\ninterface restore request will raise the flag and the second thread will just wait for\na condition to be signaled when the restore process is complete.\n\nAlso protected all accesses to the AudioTrack control block by a mutex to prevent\naccess while the track is being destroyed and restored. If a mutex cannot be held\n(e.g because we call a callback function), acquire a strong reference on the IAudioTrack\nto prevent its destruction while the cblk is being accessed.\n\nModified AudioTrack JNI to use GetByteArrayElements() instead of\nGetPrimitiveArrayCritical() when writing audio buffers. Entering a critical section would\ncause the JNI to abort if a mediaserver crash occurs during a write due to the AudioSystem\ncallback being called during the critical section when media server process restarts.\nAnyway with current JNI implementation, either versions do not copy data most of the times\nand the criticial version does not guaranty no data copy.\n\nThe same modifications have been made to AudioRecord.\n\nChange-Id: Idc5aa711a04c3eee180cdd03f44fe17f3c4dcb52\n"
    },
    {
      "commit": "f5aafb209d01ba2ab6cb55d1a12cfc653e2b4be0",
      "tree": "75b6429a6bb8b78943b770cad6924a7aaa94dc32",
      "parents": [
        "b9ff444a7eaf7ffd43970c0477110c6808bd4a7c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Nov 18 08:40:16 2010 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Nov 19 15:49:42 2010 -0800"
      },
      "message": "Fix issue 3157123.\n\nUse a Mutex wherever atomic operations were used in AudioTrack,\nAudioRecord, AudioFlinger and AudioEffect classes.\n\nChange-Id: I6f55b2cabdcd93d64ef19446735b8f33720f8dbc\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": "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": "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": "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": "34f1d8ecd23169a5f299937e3aaf1bd7937578a0",
      "tree": "04f5504f74df6dde00b495a95bf30766be12821a",
      "parents": [
        "c6c6237a67661c7b2d8822b7360cdf01e64d2c7c"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 04 08:27:26 2009 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Nov 04 23:47:21 2009 -0800"
      },
      "message": "Fix issue 2203561: Sholes: audio playing out of earpiece.\n\nCreate a new IAudioTrack interface to AudioFlinger when start() fails due to a broken pipe error.\nDo the same if start fails due to the same error after time out in obtainBuffer().\nDo not indicate that the AudioTrack is started to AudioPolicyManager if IAudioTrack start fails.\nThis avoids that an AudioTrack keeps a dead IAudioTrack after a media server crash.\n\nSame modifications for AudioRecord.\n\nAdd a flag to ToneGenerator indicating that the callback thread can call Java. Without it, when the media server crashes and restarts, the AudioSystem error callback will crash in JNI if the IAudiotrack is created from AudioTrack callback thread.\n"
    },
    {
      "commit": "c2f1f07084818942352c6bbfb36af9b6b330eb4e",
      "tree": "88ac93be41edadd8cbfe6448e1421d5165883f59",
      "parents": [
        "a64c8c79af1a15911c55306d83a797fa50969f77"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 17 12:17:14 2009 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 23 06:03:39 2009 -0700"
      },
      "message": "Fix issue 1795088       Improve audio routing code\n\nInitial commit for review.\nIntegrated comments after patch set 1 review.\nFixed lockup in AudioFlinger::ThreadBase::exit()\nFixed lockup when playing tone with AudioPlocyService startTone()\n"
    },
    {
      "commit": "349dba337e07e129f6ba49a132999f0b73fedbe3",
      "tree": "8bd3262593f56c5fce1d6bced18f9f26a8220934",
      "parents": [
        "82827d70378961f30077d3a35a06aab58c368d52",
        "573266210fb2b2e7d86fbd46d0dfe16763611d91"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 07 09:36:14 2009 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Jul 07 09:36:14 2009 -0700"
      },
      "message": "am 88e209dc: Fix issue 1743700: AudioTrack: setPlaybackRate can not set the playback rate to twice of the ouputSR\n\nMerge commit \u002788e209dcf8c2ebddda5c272f46d1bd5478bc639c\u0027\n\n* commit \u002788e209dcf8c2ebddda5c272f46d1bd5478bc639c\u0027:\n  Fix issue 1743700: AudioTrack: setPlaybackRate can not set the playback rate to twice of the ouputSR\n"
    },
    {
      "commit": "573266210fb2b2e7d86fbd46d0dfe16763611d91",
      "tree": "f7565b32ee2d59d5098dd165658c0aefa65f1fc4",
      "parents": [
        "76aa28371e93829927c66f1a48e39e18e01d704d"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 07 07:10:45 2009 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jul 07 07:10:45 2009 -0700"
      },
      "message": "Fix issue 1743700: AudioTrack: setPlaybackRate can not set the playback rate to twice of the ouputSR\n\nStore sample rate on 32 bits instead of 16 bits in audio_track_cblk_t.\nRemoved sampleRate() methods from AudioTrack and AudioRecord: replaced by getSampleRate().\nAudioTrack::setSampleRate() no returns a status.\n"
    },
    {
      "commit": "7562408b2261d38415453378b6188f74fda99d88",
      "tree": "6b2ac284c1b721385d695045357d9e1d60ece03a",
      "parents": [
        "615a9bfbd98b90e09d868c128db84836feb658e4"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue May 19 19:08:10 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 20 12:55:03 2009 -0700"
      },
      "message": "move libbinder\u0027s header files under includes/binder\n"
    },
    {
      "commit": "1dd70b9f04961a06fcb73a97fca10a53b3245d3c",
      "tree": "a2704fd75e6de04107a7d40bd3e56f6f7acfa51b",
      "parents": [
        "ce80c82f58378da72d8a36f520c781cc5cac18a1"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 21 07:56:33 2009 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 21 07:56:33 2009 -0700"
      },
      "message": "Fix issue 1745312: Various cleanups in media framework\n\nAudioTrack, AudioRecord:\n  - remove useless mAudioFlinger member of AudioTrack and AudioRecord.\n  - signal cblk.cv condition in stop() method to speed up stop completion.\n  - extend wait condition timeout in obtainBuffer() when waitCount is -1 to avoid waking up callback thread unnecessarily\n\nAudioFlinger:\n  - remove some warnings in AudioFlinger.cpp.\n  - remove function AudioFlinger::MixerThread::removetrack_l()  as its content is never executed.\n  - remove useless call to setMasterVolume in AudioFlinger::handleForcedSpeakerRoute().\n  - Offset VOICE_CALL stream volume to reflect actual volume that is never 0 in hardware (this fix has been made in the open source): 0.01 + v * 0.99.\n\nAudioSystem.java:\n  - correct typo in comment\n\nIAudioflinger, IAudioFlingerClient:\n  - make AudioFlinger binder interfaces used for callbacks ONEWAY.\n\nAudioHardwareInterface:\n  - correct routeStrings[] table in AudioHardwareInteface.cpp\n"
    },
    {
      "commit": "2c22aeb65e801f663a754d043062f85e49f77739",
      "tree": "56016c49e2ce13a911a21b25cac543695e45aadc",
      "parents": [
        "1179bc9b0e3d17c984e8f4ad38561c049dd102fa"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "",
        "time": "Tue Mar 24 18:11:07 2009 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 24 18:11:07 2009 -0700"
      },
      "message": "Automated import from //branches/donutburger/...@140663,140663\n"
    },
    {
      "commit": "89fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5",
      "tree": "28d26f7b71e943e25c7da6e8043d79b7b8d9cf7b",
      "parents": [
        "15f767b960b38059a74a42a33e16d8df2aec8bc1"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:31:44 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:31:44 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "15f767b960b38059a74a42a33e16d8df2aec8bc1",
      "tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
      "parents": [
        "ad04d9201452001dbaac4349f084cc9316190b89"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:45 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:45 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "7a2146d5807030b2629f347736be5301b61e8811",
      "tree": "50ca10276a614287673aeefe08f3d8c5eafdad33",
      "parents": [
        "5e07b5774c8b376776caa4f5b0a193767697e97e"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri Feb 13 12:57:50 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri Feb 13 12:57:50 2009 -0800"
      },
      "message": "auto import from //branches/cupcake/...@131421\n"
    },
    {
      "commit": "5e07b5774c8b376776caa4f5b0a193767697e97e",
      "tree": "3260f49c6f0c5b4699ac6b80b4dc505566af17e8",
      "parents": [
        "e5198b620a9a208ec59ea8457282404725f8ff6e"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Feb 10 15:44:00 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Feb 10 15:44:00 2009 -0800"
      },
      "message": "auto import from //branches/cupcake/...@130745\n"
    },
    {
      "commit": "e5198b620a9a208ec59ea8457282404725f8ff6e",
      "tree": "2ff913c152607cd9d58f0e6ba620461090be7541",
      "parents": [
        "54ffb8abf94365496a2dbf5d792b6977d6a8ef06"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Jan 20 14:03:58 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Jan 20 14:03:58 2009 -0800"
      },
      "message": "auto import from //branches/cupcake/...@127101\n"
    },
    {
      "commit": "7b5eb023f8d87cca6d830ae6c11c6aadbe02aca8",
      "tree": "d9838a098f868ee2fcffc20627a8c9a33cb23377",
      "parents": [
        "2729ea9262ca60d93047e984739887cfc89e82eb"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Dec 17 18:05:43 2008 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Dec 17 18:05:43 2008 -0800"
      },
      "message": "Code drop from //branches/cupcake/...@124589\n"
    },
    {
      "commit": "2729ea9262ca60d93047e984739887cfc89e82eb",
      "tree": "25962a3f1c5f70586af45c926c037e03c643857f",
      "parents": [],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "message": "Initial Contribution\n"
    }
  ]
}
