)]}'
{
  "log": [
    {
      "commit": "a0169a073d88efefbfb35fa0ea8e94f7b31d7469",
      "tree": "42240d72b6de6728a4bbe92f3ed8ddba338d5c02",
      "parents": [
        "e59c6a33e724579f4b8ac76586e6f667fa0b8572"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 06 18:32:01 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 06 18:32:01 2015 -0700"
      },
      "message": "audio: Do not delete PatchRecord before Peer is stopped\n\nPatchPanel::clearPatchConnections deletes PatchRecord before\nthe peer PatchTrack is stopped. This can cause an access to already\nfree\u0027ed memory leading to a crash in PatchTrack::getNextBuffer.\n\nFix is to delete PatchRecord and PatchTrack only after removing\nboth of them from active tracks list\n\nBug: 22304526.\nChange-Id: I7003756d3d2dd8912ce5e3b2fc31f5e82f455888\n"
    },
    {
      "commit": "054d9d3dea1390294650ac704acb4aa0a0731217",
      "tree": "4d67c48a2cf367d661f1e33a6670cda052a569a3",
      "parents": [
        "f62a067a5b21c840c915d36392679346ac0abfd7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 24 08:48:48 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Apr 28 19:05:19 2015 -0700"
      },
      "message": "PatchPanel: do not use setParameters() internally.\n\nDo not use setParameters() with AUDIO_PARAMETER_STREAM_ROUTING\nwhen communicating the input or output device selected to playback or\nrecord threads, even for HAL version less than 3.0.\nUse createAudioPatch()/releaseAudioPatch() instead.\nThis allows to send more information on the output or input device being\nselected.\n\nAlso fix a regression introduced in L where the output device selection\nwas not communicated to effects on record threads.\n\nChange-Id: I4780ada53241d56694b005c992171e173c3bf8f5\n"
    },
    {
      "commit": "3bcf8597189c592713675ec58326ecbef0ac4ae9",
      "tree": "5656987c2e9d6fe9c99bb632865318489432fe36",
      "parents": [
        "322b4d25387a04c9afebe998326d005bbdf17ede"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Apr 03 12:13:24 2015 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 08 12:38:08 2015 -0700"
      },
      "message": "audio flinger: improve device to device audio patches\n\nAllow creation of audio patches between input and output\ndevices managed by the same audio HW module.\n\nChange-Id: I4b83268a4d5c41f3d5905d7581202cf5193efd32\n"
    },
    {
      "commit": "63238efb0d674758902918e3cdaac322126484b7",
      "tree": "07fdf37a2bc73a886d8ea41f69e722ed914754af",
      "parents": [
        "d7e1d08c2ac21cdd2f3b7f83fec7094f6a98fc08"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 02 15:50:29 2015 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 03 08:50:40 2015 -0800"
      },
      "message": "Remove redundant semicolon from namespace closing\n\nChange-Id: I163f9d3d216c283ae1160ce4802e5247cf44fba7\n"
    },
    {
      "commit": "d8cd47792bac11a44096ef8233bb5268a6674bec",
      "tree": "a297a02667e5b2dbed97c6aa03afda3c33aaab1b",
      "parents": [
        "bd08223c450a7a2e8e8d79e6be148ed1ac64caa3"
      ],
      "author": {
        "name": "soon1.choi",
        "email": "soon1.choi@lge.com",
        "time": "Mon Jan 05 14:27:42 2015 +0900"
      },
      "committer": {
        "name": "Soon-won Choi",
        "email": "soon1.choi@lge.com",
        "time": "Mon Jan 05 07:57:42 2015 +0000"
      },
      "message": "fix memory leak in PatchPanel\n\nBefore the audio patch is created, audio patch with same handle is\nremoved from vector for patches. At this time, Patch allocated in the\nheap is not freed. This causes memory leaks in the mediaserver.\n\nChange-Id: Id0d28c36a7e7fbf473753bf4ead7518f28c1b998"
    },
    {
      "commit": "f8fd8d6daab5ced86ce950be68070d27c24d487f",
      "tree": "4ccbca767b6711112f9aacdaf72ca40fa7473e06",
      "parents": [
        "8270e1d13a101fa946848871b9903b31ff11981f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 09 17:00:14 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Sep 09 17:00:14 2014 -0700"
      },
      "message": "audioflinger: fix audio patch release\n\nFix error in PatchPanel:releaseAudioPatch() causing\nthe wrong patch handle to be passed to the audio HAL.\n\nBug: 17368621.\nChange-Id: I037fd2e6273508c830414b5900d07c0178b96dae\n"
    },
    {
      "commit": "874c4287a4e49c59ac88767751dce00fcd3edb73",
      "tree": "2a0e4adc0bd18f26c8488b74d7e3df9751d493df",
      "parents": [
        "0912a5738d6baf2df7cd62e877240e3807b4b21f"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 08 15:13:39 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Aug 08 17:07:31 2014 -0700"
      },
      "message": "audio policy: enable more than one sink per audio patch.\n\nAllow creation of audio patches with more than one sink.\nMore than one sink is enabled when:\n- Connecting an input device to output devices on the same audio HW module.\n- Connecting an output mix to output devices on the same audio HA module.\n\nAll other patches are limited to one sink.\n\nBug: 16879363.\nChange-Id: I95be6948ef29df64e51e5b8ace38c2db7f3e89f2\n"
    },
    {
      "commit": "cf2c0210c8afbe7d0661ccbbae3835b5ce73c0bf",
      "tree": "26824707249d553efaabe2003381b4e9159e199d",
      "parents": [
        "97117153a0d681be70bfa9dc9876541375355c47"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jul 25 16:20:43 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jul 28 12:06:00 2014 -0700"
      },
      "message": "AudioFlinger: update openInput() and openOutput()\n\nAdd parameters to openInput() and openOutput(): device address,\ninput source.\nAllow caller to specify a given I/O handle\nGroup parameters in a struct audio_config.\n\nBug: 12378680.\nChange-Id: I7e9af74c0d996561cc13cbee7d9012d2daf33025\n"
    },
    {
      "commit": "83b8808faad1e91690c64d7007348be8d9ebde73",
      "tree": "b541b1172f804e04bd19b29f7878a1becf6205d7",
      "parents": [
        "c15c265676da2226a18a5373812608b19d4719d7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 20 18:31:16 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 24 02:56:47 2014 +0000"
      },
      "message": "audio flinger: add patch connection between hw modules\n\nAdd support for audio device connections between different audio\nhw modules.\nThe patch is performed by creating a bridge between the playback\nthread connected to the sink device and the record thread connected\nto the source device using a pair of specialized PlaybackTrack and\nRecordTrack.\n- Added PatchTrack and PatchRecord classes.\n- Added TrackBase type to indicate more clearly the track behavior.\n- A TrackBase can allocate the buffer or reuse an existing one.\n- Factored some code in openOutput() and openInput() for internal use\nby PatchPanel.\n\nBug: 14815883.\n\nChange-Id: Ib9515fcda864610458a4bc81fa8f59096ff4d7db\n"
    },
    {
      "commit": "24478d47fc631ab33208f4dd9d034abb6839c992",
      "tree": "386cecb452110d9959ce43eef557d05c822fea83",
      "parents": [
        "62aaabb3905c61bb7acd6037414c206240a31c32"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jun 04 20:02:57 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Jun 04 20:02:57 2014 -0700"
      },
      "message": "AudioFlinger: fix PatchPanel debug log.\n\nBug: 14815883.\nChange-Id: I71cf2ef74a96d3cdb27f2beb1b76b8979c738335\n"
    },
    {
      "commit": "62aaabb3905c61bb7acd6037414c206240a31c32",
      "tree": "55b1f59fa16bc0cf762c88a96e5a5f9a5d82d08c",
      "parents": [
        "e1715a465a29db625da9d0ea365edf371e39e201"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jun 02 10:40:54 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Jun 02 10:40:54 2014 -0700"
      },
      "message": "audio policy: fix unitialized hw module in audio port\n\nThe hw module handle was not initialized when creating\nand audio port configuration from an input stream descriptor.\n\nBug 15376641.\n\nChange-Id: I6c784cded68a5c665fd22c3643765c63f70eb241\n"
    },
    {
      "commit": "e1715a465a29db625da9d0ea365edf371e39e201",
      "tree": "771fdda7b99935e05e7b3c36487abf523930dd34",
      "parents": [
        "1afeecb88bea660b2c10b2096be0fd02433303ce"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 20 11:30:42 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 30 17:22:58 2014 -0700"
      },
      "message": "audio policy: add audio port gain control\n\nImplement setAudioPortConfig() API to configure an\naudio port.\nCurrently limited to gain control.\n\nBug: 14815883.\n\nChange-Id: Ic1b268e5ba5c277e9f5b8fa63c81dd7c0b250024\n"
    },
    {
      "commit": "6a94d69dc4f32abb53c466a96f905bb199be6417",
      "tree": "eef3552877f202429801a0b20f2ae31aad7801e7",
      "parents": [
        "32f93b7bedc44b425ba99d69dec998334e759532"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 20 11:18:06 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu May 29 17:57:55 2014 -0700"
      },
      "message": "audio policy: implement routing control\n\nAdd implementation of audio routing control via AudioSystem APIs.\n\nThe following APIs are implemented:\n- listAudioPorts(): return a list of devices and output/input mixers ports\nthat can be used as sources or sinks for audio patches.\n- createAudioPatch()/releaseAudioPatch(): create/release a connection patch between\ntwo audio ports (e.g. to connect input from an HDMI device to a speaker output device).\nOnly one client application can own a patch from a given source.\nWhen an audio port (device or mix) is part of an application created patch, its routing cannot\nnot be changed by a policy decision.\n- listAudioPatches(): return a list of existing patches.\n\nEach audio port addition/removal and each audio patch creation/release increments a generation count.\nThis generation count is used to ensure consistency betwen calls to\nlistAudioPorts() and listAudioPatches().\n\nBug: 14815883.\n\nChange-Id: I022b638c2f5f0bb41543c7cfca7488fb45cfdd80\n"
    },
    {
      "commit": "951f455566775e5f01e67c5ee26863d7d19209d7",
      "tree": "39fc248f74f7585b7108c0cb00e2d36d22b3e1b7",
      "parents": [
        "1cda6afaf6207a41303e653a6ecd7909d73186eb"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue May 20 10:48:17 2014 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 28 14:29:47 2014 -0700"
      },
      "message": "DO NOT MERGE - audioflinger: first patch panel implementation.\n\nAdded a new PatchPanel subclass to AudioFlinger\nto handle audio ports and audio patches configuration\nand connection.\nThe first implementation does not add new functionnality.\nAudioPolicyManager uses patch panel interface to control\ndevice routing.\nAudioFlinger:\n- Added PatchPanel class. The first implementation does not\nadd new functionnality. PatchPanel handles routing commands\nfor audio HAL after 3.0 or converts to setParameters for audio\nHALs before 3.0.\n- Added config events to ThreadBase to control synchronized\naudio patch connection.\nAudioPolicyManager:\n- Use PatchPanel API to control device selection isntead of setParameters.\n- New base class AudioPort common to audio device descriptors\nand input output stream profiles. This class is RefBase and groups\nattributes common to audio ports.\n- Use same device selection flow for input as for outputs:\n getNewInputDevice -\u003e getDeviceForInptusiource -\u003e setInputDevice\n\nChange-Id: Idaa5a883b19a45816651c58cac697640dc717cd9\n"
    }
  ]
}
