)]}'
{
  "log": [
    {
      "commit": "8d420edd32ee8020e5902ae64a9642b666d94312",
      "tree": "cb7aa23654aa6e13149306fe1373f82e0207c52b",
      "parents": [
        "0e1608f270a37db756258dd9d9234d6da54bd297"
      ],
      "author": {
        "name": "Ethan Chen",
        "email": "intervigil@gmail.com",
        "time": "Thu Nov 14 00:40:54 2013 -0800"
      },
      "committer": {
        "name": "Arne Coucheron",
        "email": "arco68@gmail.com",
        "time": "Mon Nov 18 19:37:59 2013 +0100"
      },
      "message": "frameworks/av: Add ifdefs for QCOM_HARDWARE features\n\nChange-Id: Iebe0da91f0b761bba8eb8c0e181c47bbd0d0703d\n"
    },
    {
      "commit": "601e9b5afda42a19bfebf71f4bf3e4a30b01bb75",
      "tree": "66269969ea00e1050d90a020a99f38f08e226666",
      "parents": [
        "d82e50ad4f698e029f8d5085affbf383508bf0e3"
      ],
      "author": {
        "name": "Alok Kediya",
        "email": "kediya@codeaurora.org",
        "time": "Fri Sep 27 11:55:10 2013 +0530"
      },
      "committer": {
        "name": "Arne Coucheron",
        "email": "arco68@gmail.com",
        "time": "Mon Nov 18 19:36:16 2013 +0100"
      },
      "message": "frameworks/av: Squashed commit of media features from CAF\n\n * Completely synced with kk_2.7_rb1.9 branch, as of:\n\n       libmedia: Add QC enhancements to MediaProfiles.\n\n * Following patch reverted for now, because it doesn\u0027t compile:\n\n       frameworks/av: Enable subsystem re-start for LPA/Tunnel\n\n---\nMediaProfiles: Add support for camcorder video resolutions.\n\nAdded video resolutions to support camcorder recording.\n(cherry picked from commit I2291de43ae2be7338c673f2f0417ec5c1581391e)\n\nChange-Id: I309fa41cfa36ee0551a8a7c53072089858a2c66a\n(cherry picked from commit 805cb98f40acfb242206b7db71c50bc56ea77d2a)\n(cherry picked from commit 68c1f41295f4be54ed13af20ebd1041890d2f3ca)\n(cherry picked from commit 5a74f7e0e0fbec707333a1f7481d85961aff3908)\n\nframeworks/av: Add support for FM feature\n\nAdd FM handle key and volume key to AudioParamater\nclass which is used to initimate Audio HAL to\nthat FM device is connected and apply correct\nvolume to FM stream\n\nChange-Id: If5fa14faf7946ab27eb42b89546dc2274b24f754\n(cherry picked from commit 165f20759433d0137a292b457aa783f801f13277)\n(cherry picked from commit c98b484de0877e159f00b3b01d622b6539f0b2bc)\n(cherry picked from commit f752d489bb85a94b81d38c72333409b4384d860a)\n\nlibstagefright:add enhancements for extended format support\n\nExtended-extractor to support extended container format.\n - Introduce an Extended Extractor to facilitate plugging-in\n   of parsers extensions.\n\nExtended-codec to configure codec specific configurations.\n - configures omx component with extensions to augment\n   container/codec format-suppor\n\nExtended-utility to add utility methods and shell extensions.\n - Utility methods for supporting following features\n  - High Frame Rate (HFR) recording\n  - Support for B frame encoding\n\nChange-Id: I77a40af701916f1803fa9c6af3c43a312a8d2c98\n(cherry picked from commit ab6a474cd9acc7bc54c54a7c235f6eab032349ca)\n(cherry picked from commit fe07c231dbecd255aedbf7aac597260831eb98cf)\n(cherry picked from commit df7b013ceeeb4697f448a2d150ae75b86c325013)\n\nlibstagefright:enable extended codec/format support\n\nConfigure omx component with extended extensions and\nregister exended-extractor to augment container/codec\nsupport.\n\nChange-Id: I0bfa4bd6c4dfed93a96e1af431018de54d6fb57b\n(cherry picked from commit 318c38f40b53e1987473b29a359e586615bf3c02)\n(cherry picked from commit 4a0e6d65c200604a9618e2fc90326031153e6f08)\n(cherry picked from commit f9b65059fabc1c24ae5107b54f96a017e8fc7376)\n\nlibstagefright: For interlace, set decoder in arbitrary mode\n\nIn arbitrary mode, frame parsers sends individual fields\nto core. Once both the field is decoded, output done (FBD)\nis sent back to client.\nDefault frame by frame mode will send both the fields in\na single buffer to core, which might decode only one field\nor will throw up error.\n\nCRs-Fixed: 531034\nChange-Id: I31844093b6a93d3a62577fc8d799353d30573c17\n(cherry picked from commit cb45f5a702992242538fab6d9e2c36b7b8e55c7f)\n(cherry picked from commit 214938ef4f9997233a33a24e9e9e9751a1fa1882)\n(cherry picked from commit 646e3bdce1c8241fb46802e7eba3c4f8a528517d)\n\naudio: add support for MSM audio formats\n\n- Add support for EVRC, QCELP, AMRWB+, and WMA formats\n- Refernece change If110058284c8b3e18c2f242f560fc7748f62081c form jb-mr2\n\nChange-Id: Ie20f2d61f79d2ba41d552718187b7098141e7b8c\n(cherry picked from commit bca561e38853351c0bae15c5d201dbca7f5a027e)\n(cherry picked from commit a11972f505000be397ee3a377ec42bf9e5fef420)\n(cherry picked from commit 7465e6129b291c66dc7741325a90e3725e40e941)\n\nlibstagefright: fix metadata key sizes\n\n - some wma metadata keys should be treated as 32 bit keys instead\n   of 64 bits.\n - fixes wma lossless from failing\n\nChange-Id: Ic6af8392aea6a1bd8810dac59e1d1c27c21c4059\n(cherry picked from commit 1fae0bcb8ef9244e1f28d21c36e388ab365e3c0f)\n(cherry picked from commit 97be73e3004a838227060f026f38c7231dd7e2f7)\n(cherry picked from commit 4d24c91e49c89eadb7b48e47e38a9b7b6df8f1cf)\n\nframeworks/av: Add support for LPA and Tunnel Playback\n\n-Add DirectTrack and DirectTrackClient\n-DirectTrack enables client to create a direct\n output\n-DirectTrackClient allows notifications to be sent to the\n client from DirectTrack.\n-DirectTrack is being used for Low Power Audio\n playback and Tunnel Audio playback\nChange-Id: I265ae1fa32c6fdd8be0382cc2b28605bc756a2f3\n(cherry picked from commit b255c1963bb3af6f547b68d646737a7c92739555)\n(cherry picked from commit 7cb21f77ae28f58da1cb8ba8f684b2968dcd4122)\n(cherry picked from commit d4fa9e74c1ee1c2f7f7262c245da0b94dc0ac05b)\n\nframeworks/av: port fixes in LPA and Tunnel mode playback\n\nNo History was maintained during porting. Updating the Description\nand CR\u0027s of all the fixes.\nReference point: AU_LINUX_ANDROID_JB_MR1.04.02.02.049.366\nLPA Mode:\nLPAPlayer synchronization fixes.\nFixes for seek, pause/resume, EOS handling\nFixes for synchronization b/w the decoder thread, TimedEventQueue and player thread.\nConvert mono to stereo for LPA clips - CRs-Fixed: 421639\nAdd support to change clip duration to enable LPA\nSet correct device while creating effects - CRs-Fixed: 496866\nFix the LPA-AudioEffects dead lock issue - CRs-Fixed: 477511\nfix volume not updated in pause state of direct track - CRs-Fixed: 490592\nTunnel Mode:\nUse tunnel player only for music stream\nExceptions in using Tunnel mode decode - CRs-Fixed: 432080\nEnable Tunnel Decode for select formats - CRs-Fixed:437651\nUse software decoder for ADTS content. - CRs-fixed: 431096\nSkip tunnel mode for playback through AudioCache - CRs-Fixed: 437539\nFix stability crash on tunnel playback. - CRs-Fixed: 498386\nsupport multiple tunnel instances - CRs-Fixed: 483603\nFix ANR repeated next with tunnel clips on BT/AOA - CRs-Fixed: 482966\nUpdate condition to ignore a seek request - CRs-Fixed: 461908\nReturn seek position until seek has been processed - CRs-Fixed: 454825\nTunnelPlayer performance tweaks for audio video playback - CRs-Fixed: 444041\nStability fixes for Tunnel Player (part 2) - CRs-Fixed: 449122\nAdjustment for TunnelPlayer buffer size - CRs-Fixed: 447274, 442365\nRemove unnecessary code from TunnelPlayer - CRs-Fixed: 442365\nupdate condition to send SEEK_COMPLETE - CRs-Fixed: 441411\nStop extractor source after start in TunnelPlayer - CRs-Fixed: 440239\nHandling of EOS, and triggering EOS was wrong in TunnelPlayer.\nEOS should not be posted till seek is complete\nDisable tunnel mode playback for streaming use cases to avoid jittery playback\nCRs-Fixed: 433346 432233 429868\nAPIs for returning correct timestamps were implemented\nCheck whether sink is open before flushing or closing it.\nCheck for mIsAudioRouted is good to know if we are closing it\nSeekbar freezes after seek and pause\nCheck pause status before writing\n\nChange-Id: Iea150f8d75aa9aa6d14da078695e920a3742dd81\n(cherry picked from commit f7c9bafa439c5d52d945b966ba08cb16dfc34818)\n(cherry picked from commit 68dee8112bbac7e0a70003175ed71b4e6a0376f4)\n(cherry picked from commit 19c7fd3e330be551d477e8388b536294b1166a22)\n\nframeworks/av: port fixes in LPA and Tunnel mode playback draft -2\n\n -LPAPlayer: Update condition to ignore seek CRs-Fixed: 453067\n -libstagefright: TunnelPlayer: update condition to send SEEK_COMPLETE\n  CRs-Fixed: 441411\n -libstagefright: Fix ANR with rigorous rewind of 3gp LPA clips\n  CRs-Fixed: 491077 490992\n -frameworks/av: Add  metadata mode changes to LPAPlayer\n  CRs-Fixed: 458904 491077 490992\n\nChange-Id: Ia89d7d6ac63b1267422a9138df9f98ef59b0ccb7\n(cherry picked from commit 72f3bd4cddd3d93812692bffbfc19e2534477938)\n(cherry picked from commit db6330d01d91d466d18c7714bd024a10fb009f57)\n(cherry picked from commit 416e9ef0eed0ffa7b6e2c9d5a107d1ed2a94a624)\n\nframeworks/av: port fixes in LPA effects\n\n -audio: fix for deadlock issue during LPA playback.\n -frameworks/av: Fix the LPA-AudioEffects dead lock issue CRs-Fixed: 477511\n -audioflinger: Fix pops in LPA while effects are applied CRs-Fixed: 526799\n -audioflinger: Fix delay in enabling effect for LPA CRs-Fixed: 525510\n\nChange-Id: I92118b5cba17f5337608007052e7dc891d2d6b5b\n(cherry picked from commit b24a38903f3fc2fd2bf7cc8fb71d50e1ff38162d)\n(cherry picked from commit e8a1d6f80e64822d83f04f4f0704890644048189)\n(cherry picked from commit 571f36890abe9f6b8bfe7341776cb5b3975bf952)\n\nframeworks/av: Use the correct macro for AV enhancement\n\n- Use correct macro for AV enhancement\n- Add HW aac encoder entry in codec list\n\nChange-Id: I2933ee92ff15875144acec17d3dd8ef61d6b37f9\n(cherry picked from commit 5bb728d3bb84f2f24ddfbaa99fa133c87ff66298)\n(cherry picked from commit dbc1e5bde1564e80052086a7ee301173515c8d64)\n(cherry picked from commit 941f87a69f87dbeab0068f3e9a98c97981ff2700)\n\nlibstagefright: Add support for H/W AAC decoder\n\n- Currently, only software AAC decoding is supported.\n- Add support for H/W AAC decoding by including it in the\n  list of available decoders and use it for decoding only\n  if the property \u0027media.aaccodectype\u0027 is set to 0.\n\nChange-Id: I35caba6fb694d17b51a0a9983a5fc5f28cb375ec\nCRs-Fixed: 449145\n(cherry picked from commit a87c3159a34da86e62c029a06e8e39bef66ae2db)\n(cherry picked from commit 6a47c5cb0fe741f31b36bee7e74bd953a3ad3bcc)\n(cherry picked from commit 8f6bacb4427d3c84af00b06a8ceb1bb324550acc)\n\nframeworks/av: Compile AudioParameter as shared library\n\n- AudioParameter as shared lib is needed by BT,\n  support in WFD source, SRS TruMedia\n\nChange-Id: I30ee584ba7f45f5cafbdf07c45aa7429a84b1b49\n(cherry picked from commit 30b89b3bfdafa2f3b877644400efbaefd6572f1e)\n(cherry picked from commit 84c3b42f25a28d14426dba29276aae8c5ab795ce)\n(cherry picked from commit 53c42631eeb1e13b786d9f4f616f38fe59690e4e)\n\nframeworks/av: Define MSM Audio parameters\n\n- Define MSM audio paramters for FM, VOIP,\n  fluence, SSR, and etc.\n\nChange-Id: Iec6f146a0dde3095e3380da439a883b1bbb7d462\n(cherry picked from commit 8e943f5bd88bda87f1aa9230487a69372ad49cf7)\n(cherry picked from commit 85f4743d12c13aab39ac712a9005632f427c1c43)\n(cherry picked from commit 333ba54561c59049f695b07479afe1d5ed734d31)\n\nframeworsk/av: SSR bring-up\n\n- Initial bring up for Surround Sound recording\n- 5.1 channel AAC recording and LPCM 5.1 channel\n  recording supported\n\nChange-Id: I0d237dc91b74ce6e6550243c9e48cf358734634b\n(cherry picked from commit 9f5c9b8eb2f34a0431621b0b54b1b0ea4914224a)\n(cherry picked from commit d551917f9e65a0468bd838d4ffbf21006426b4c5)\n(cherry picked from commit 236c0861d24eab95f2f6e8941394b38cdd2e15c8)\n\nlibmediaplayerservice: Add support for DashPlayer\n\nAdd support for DashPlayer in MedaPlayerFactor\n\nChange-Id: I3e1fd871340117cb11975f6819d4bf0e6630607a\n(cherry picked from commit f0dcae2a6bf22c8c5846b235f3ae900b8b824f79)\n(cherry picked from commit d73fd11ce138f661770e809b959a17dac975b284)\n(cherry picked from commit 8d3b0b273ddd2ff08707d33b647d8ee6db3c7598)\n\nframeworks/av: Enable subsystem re-start for LPA/Tunnel\n\n-Audio Daemon in Audio HAL intimates AudioFlinger\n of ADSP status (online/offline) using set_paramaters.\n-AudioFlinger send set_parameters to its clients\n which is DirectTrack used for LPA/Tunnel playback.\n-In case of ADSP crash during LPA/Tunnel playback,\n clean up of DirectTrack is initiated.\n\nChange-Id: I87f720f305765e00e12032eed3e018aeff952390\n(cherry picked from commit 02861e0f092c46640576bb8c700418ed82c266c3)\n(cherry picked from commit 5abe97aa9e103420813b87e7abb2b676ffe8d097)\n(cherry picked from commit 9a27f1e6c449585095e518f0d2f44e621ef18f52)\n\nframeworks/av: Add support for Quality Of Experience (QOE) events in MediaPlayer\n\n- Add MEDIA_QOE event type\n- Allow MEDIA_QOE event to be passed to Application after reset\n  is completed, similar to MEDIA_ERROR\n\nChange-Id: I71e3d9e1f5f934c5844d80c65c653b2702a22ca1\n(cherry picked from commit a3320b6e617d1143bf2135abfaaff28365513de4)\n(cherry picked from commit 3ca9bdff130c204678def4578fc7a06fd8b3a03a)\n(cherry picked from commit d13bd4be1a5418cb806029ba65854c13608cbb0c)\n\nframeworks/av: fix for testAACEncoder CTS testcase\n\n- testAACEncoders CTS testcase is failing for\n  Hardware aac encoder use case\n- hardware encoder has bitrate limitation\n  due to which  CTS testcase is failing\n- Removed hardware AAC encoder component from MediaCodec list\n- Updated the macro for av enhancements in OMXCodec\n\nChange-Id: I3140898f466a600a4488306701aa16e194df8cc6\n(cherry picked from commit a084948269982c868916833546c4b56acdeb1de9)\n(cherry picked from commit b5cff08f65b0811efec6b739c98b3aa42d1dd3f7)\n(cherry picked from commit 96b425ed8125a7f535572276c2efd09ec81a6a59)\n\naudio : init rc to avoid effect\u0027s fault state\n\nEffect command doesn\u0027t necessarily fill cmd return code into \u0026cmdStatus,\nso we should initialize cmdStatus to avoid uninitialized value propagates\nto upper stack caller.\n\nChange-Id: I2a2985e3010f0d7b8aedf9244a6faabdf05740ac\nCRs-Fixed: 517766\n\nConflicts:\n\tservices/audioflinger/Effects.cpp\n(cherry picked from commit 708dd6e07fc363c76ee9d26a4bc6bb6d7cd3815e)\n(cherry picked from commit 0f864db4f4c30c0f31a6998301dd4ec0098a5b24)\n(cherry picked from commit 70047618259f68ce74349ed33edffd0ab5a467cc)\n\naudio: Add pause support for hardware omx component\n\n-ADSP doesn\u0027t enter sleep state after wma playback is paused\nand power suspended.\n-No support for NT session pause in case of hardware component.\nNT session need to be paused to put ADSP into power collapse.\n-Add support of pause in stagefright to ensure device enters\nsuspend mode. Also add intermediate states to avoid concurrency\nissues between read and pause.\n\nChange-Id: Ia0d77a3a0a344b8caad4f4d395641fd6a82f80b9\nCRs-Fixed: 496256\n(cherry picked from commit 369536f28349e7d1e3033c9d6205c692e32d0751)\n(cherry picked from commit 1dcd1d7eba1d82c14961b05dab4e854ed2a979b3)\n(cherry picked from commit 0a1b5cbced55d0718d96eccab9e2fe06aa68b199)\n\naudio: Fix for race conditions in direct audio track\n\n-Issue: Mediaserver crash is observed in direct track functions.\n-Rootcause: Between write and flush functions, write and destructor\neffectpool buffers are accessed without any synchronization that\nmight lead to operations on null buffers and cause crash.\n-Fix: Use mEffectLock to synchronize access of effectpool buffers.\n\nChange-Id: I5982e31fd6d292a9fe28dfee4cf75ebfe0ade5e6\nCRs-Fixed: 515107\n(cherry picked from commit b14c28f0d3b51ee989640aa46f3addcfabccb6be)\n(cherry picked from commit 782f8512023facb1b655fb636bdcbd19af21b493)\n(cherry picked from commit 1601287d6a06e11d782a821791bf1f5a9dcbd188)\n\naudio: Correct the condition that checks for wma version\n\n-Few wma clips fail to play when tried to play from music app.\n-In overrideComponentName(), a wrong condition is added due to which\ncomponent name is always returned null. Due to this all wma clips use\nwma component irrespective of the version. This causes playback\nfailure for other version clips.\n-Correct this condition to ensure that all wma clips play fine.\n\nChange-Id: I3a724755fb254bedfc0d3a6dba46c019bc3535bb\nCRs-Fixed: 548188\n(cherry picked from commit a716cf363b4c7e89fba11547732bbdd9ceff185b)\n(cherry picked from commit b7e09e104afb3eda1f2ce95f5ac25fca6483fa28)\n(cherry picked from commit bb37a77adbfc6eabbb2c15ea9c7fcae113b6fa9d)\n\naudio: Fix to prevent deadlock in AudioEffects\n\n-Write is blocked waiting for effect chain lock and this causes\ndecoder thread to wait indefintely.\n-Sometimes it is observed that effectschain is locked before\nmLPAEffectChain is initialized and but unlocking is skipped if\nmLPAEffectChain is initialized in between.Due to this LPA\nsilence and framework reboot issues are observed as\napplyEffectsOn() cannot acquire lock to progress further.\n-Use flag to check if all effects have been locked and unlock\naccordingly to prevent the deadlock scenario.\nCRs-Fixed: 524759\n\nChange-Id: I8ea0b1fc97de157b8254688b5471fd21bc9b565d\n(cherry picked from commit 64dda9be5640f02c923cb7d5a08036ebb49ce86f)\n(cherry picked from commit 9056fa50895243fbb1672eb117d60004757e7deb)\n(cherry picked from commit b43e3b9859ddd90f512c80b637186f2a6e54a835)\n\naudio: check for divide by zero possibilities\n\nWhen output stream is not available to audioflinger\ndue to any reason, sampleRate and frameCount have\nzero values when trying to create new Audiotrack.\nThis might result in divide by 0 situation.\n\nChange-Id: If7fbcb6eb4cfcdba6d6bb3b4f758e46e4a57e37b\n(cherry picked from commit d1576c1648a78354535fc9cd7130412f300864e5)\n(cherry picked from commit 15b951bfcb2180f728669ab23ef0d6791fd790c2)\n(cherry picked from commit c980dbea39f984a3c28e2694174e87b311e77308)\n\naudio: Fix crash in flinger during monkey runs\n\nThe trackrefptr in DirectTrack descriptor can be invalid and\nthis can result in a crash is stability runs. Add check for\nvalidity of the trackrefptr before accessing it\n\nChange-Id: I4c7fbff022f381f9d2cdbf0fc04ade8defbb2195\n(cherry picked from commit 66917496a28241bf38f117cb05b5810021a185a0)\n(cherry picked from commit e1c916bb324f4f6f7923b8e4b2a9c436a65534ff)\n(cherry picked from commit dc983d3efd2a5ec3435246d4d2a2e1b4265b5f22)\n\naudio: Use High Quality resampler\n\nUse very high quality resampler to upsample to 48KHz sample\nrate.\nCRs-fixed: 416730\n\nChange-Id: I30420cbaa8f6d34e2bce408494cc08cb00b175a3\n(cherry picked from commit 2904e01dd4a3921b7bc0bec71f63f4757204408b)\n(cherry picked from commit 0302cfba74b948e5fb3b2adbcb9330b5dcc36595)\n(cherry picked from commit 955a6569ab9d28fbfd6e1e234f06016fcbe5fb6b)\n\nlibstagefright: Add interlaced video support\n\n- Adds call to set output buffer size on the native window\n\nChange-Id: I4754e1f1d4d0bba375f719240499ef58c9e87ca2\n(cherry picked from commit 63452051ea03bc48af85bd58767fd2a9b0ae13b6)\n(cherry picked from commit 856b08a0c452a5d1e0b02487bcbebc44e55fd3e7)\n(cherry picked from commit 8f445b519a7c3d107f4180ead01c9722b12b0adf)\n\nExtendedCodec: Enable timestamp reordering for MPEG4 codec type clips\n\nMPEG4 codec type video clips can contain B frames. This change will\nenable timestamp reordering for all MPEG4 codec type clips\n\nCRs-Fixed: 539036\n\nChange-Id: I7682a3781e6aa1b8e73418e4e73ee266c6338770\n(cherry picked from commit 8d52ec137be60676c310bda168e8ce18d22dc534)\n(cherry picked from commit 3b47eeb2cb5d595f2e755dcaa9e564eac8cbf33d)\n(cherry picked from commit 9b47486f507fe834e4c5ab51524be8aa91df875b)\n\nlibstagefright: Use proper ctts offset\n\nCalculate ctts offset as difference between composition\ntime and decoding time, and avoid adding kMaxCttsOffsetTimeUs\nas it increases the sample timestamp by the same amount\nwhich leads to av sync loss.\n\nCRs-Fixed: 524739\nChange-Id: I75a1bb594536623e3a445af2ee1ceb0cf0926a6e\n(cherry picked from commit 863cb2bae6015b32c9ad12f074394c9a54c7bc47)\n(cherry picked from commit 8e0e1a4330babf3c38152d48db1f2edf4db7a659)\n(cherry picked from commit 87b09615f9473e369883142009d4035e37a2a806)\n\nlibvideoeditor: use vWidth and vHeight for buffer allocation\n\nChange-Id: I2ab01b8ef79a3ad9b1eb737b2e9f1211a6e668c2\n - video editor detects crop information from decoder, crop\n   width and height will override metadata width and height.\n - decoder is capable of sending crop information where\n   crop width and height are smaller than actual resolution.\n - use actual metadata width and height for calculating\n   buffer size.\nCRs-Fixed: 452511\n(cherry picked from commit 93432b8b1c29b2dd62fad923ffa622b002311fa8)\n(cherry picked from commit de34cceeb13eead49daf4a47f28bf49286917101)\n(cherry picked from commit 865f7b2e0f034b0aea09ef5b13f401c776585bf2)\n\nlibstagefright: post video events dynamically - calculate amount of time to delay video event after renderusing the formula: delay \u003d (us between frames)-(us taken by event)-(lateness)\n\nChange-Id: I136ee19520200b26058099f88c8979d1e4e34e23\n(cherry picked from commit 61ef39e403f708b014ca434eec35056815558deb)\n(cherry picked from commit eb7422fb58a6f95f385574c4d845754db8da6b1f)\n(cherry picked from commit 427260792cfa7a53fb27808ac24600a3ebfa7ca2)\n\nlibstagefright: Reset the decoder while performing seek\n\n-Observed noise when seeking to beginning of file for the recorded\nAMR clip.\n-While performing seek, the AMR decoder states are not being reset.\nIn AMR decoder, the current frame output is predicted using the states\nfrom previous frame. If these states are not cleared, it might cause\nnoise when seek is performed.\n-Fixed by resetting the decoder when seek is issued and port flush\ncompletion is notified to the decoder.\n\nCRs-Fixed: 500851\nChange-Id: Ia8480b88521abc09c8b01d6052df4730a0359518\n(cherry picked from commit df2b77618d69ac10f1c41ffd5eedb92dd43e161d)\n(cherry picked from commit 654f3ad1192bd210b27dbfe29f3cf75a4a3774d8)\n(cherry picked from commit 6374b1a4bbf6e853d7214eee6c7177251d246c58)\n\nlibstagefright: notify updated stride to NativeWindow for DRC  -Notify updated stride after resolution switch to NativeWindow  to re-interpret the buffer layout  -CRs-fixed: 534910\n\nChange-Id: I4c1427a4826c8d29f93064c34eb3e2eaeef434d7\n(cherry picked from commit f93a1ed7561a3a29b73466054e8c43dcbb4c9a1e)\n(cherry picked from commit fc948d949de674c4d978b9ca87dea039f4aa86bd)\n(cherry picked from commit e5954f19fc67414620ce582a361dd09f5444a01c)\n\nlibstagefright: Fix crash in media server mpeg2 playback. -There is a check in dequeueAccessUnitMPEGAudio function inESQueue that  time stamp returned by fetchTimeStamp is alwaysgreater than 0 -In the current scenario, valid time stamp set on the firstframe is  getting replaced in the sub sequent code by -1. -Fix is to reset the flag after first frame is identified CRs-Fixed: 512218\n\nChange-Id: I1be136fb8c8c3a88f46b88f42a1f200582fd1086\n(cherry picked from commit 275b8f8d4047346fea7450b97a004c4e43e9a72b)\n(cherry picked from commit 2a2bc3622413ac1d0304cffaec9603de77d5228d)\n(cherry picked from commit 7836a4a64b3afb56689bc7384cb3dcdaa5a454c0)\n\nframeworks/av: Fix for failure in CTS MediaRecorderTest cases\n\n -Issue: MediaRecorder CTS test cases are failing.\n\n -Root Cause: Running the CTS test \"testRecorderRandomAction\" at beginning\n  sets the huge file size and stargeFrightRecorder set the 64 bit file\n  offset.\n  In MPEG4 writer estimateMoovBoxSize depends on a static const\n  variable which uses this file offset info.\n  As the variable to calculate estimateMoovBoxSize is static const it\n  remains same for next media recording session even if file size is small.\n\n -Fix: Don\u0027t use static const variable which is used to calculate\n  estimateMoovBoxSize as its value may change depending on file offsets.\n\nChange-Id: I6bd859fcd7951a4e78abc50bc99dab38e8284877\n(cherry picked from commit 0542e6f3af9e17559542764856f430ceaa255cac)\n(cherry picked from commit 48fda261ceba7ed1c38c09e3282e9f9147bc03a0)\n(cherry picked from commit 70af301150f7a5829f490b44da5caa596da76fa6)\n\naudioflinger: Fix monkey crash in audioflinger set parameter.\n\n-Track ref ptr is initialized to direct track pointer only in create\n Direct Track although the descriptor is created in open Output\n-If there is a set parameter coming in during this time it could\n result in a crash as track ref ptr is not initialized.\n-Initialize track ref ptr to NULL when descriptor is created.\n\nChange-Id: Iee887baee45a9e7b381f6e2ea2ab523a23689f6b\n(cherry picked from commit 10d4ae79b727f7191484f3adda13f9bba9d62c09)\n(cherry picked from commit 7d130a825ad58e44b04cce4a4e3f4e4919337a7b)\n(cherry picked from commit 0b72bac19b8f8988e385b06ede234ca80e2e2e07)\n\naudio: Adding support for SRS effects\n\n-Add support for SRS Trumedia post processing effects\n\nChange-Id: I41b8983e1a59f5a84e10a21418d7731e6d8ec430\n(cherry picked from commit 5b7c47861ce5e4afee2a3ce8e956e0cfec10cf29)\n(cherry picked from commit e0ff892f774310e921f9926748ed9a3fe9784af3)\n(cherry picked from commit 6d92096966d3dd16f5d08556e3b1273041d1cf58)\n\naudio: Do not apply effect on multichannel content\n\n-Do not apply effect on multichannel content.\n-Effects are applied only for mono or stereo.\nCRs-Fixed: 484078\n\nChange-Id: I623d40f926d5dd80e74f9aa2f98448158518047e\n(cherry picked from commit b11bb5ec8184b0880a37b13033b22e255dbfccac)\n(cherry picked from commit af7c6323538ad5b0e5a9f3efd2458cd44744c397)\n(cherry picked from commit b984891aaade017a7fc9aad0c0d9f9398653cf71)\n\naudioflinger:Set correct device while creating effects\n\n -Issue: Effectmodule is created with stale output device\n  -Rootcause: While creating effects the output device set is\n   output device of mixer thread, which is stale and\n   not updated, so effects use the wrong/old device as\n   the output device and leads to issue such as difference\n   in volume level after setting correct device etc.\n  -Fix: Cache the latest device value for direct track\n   in a flinger member variable when setparameter of\n   flinger is called with new device and\n   audioflinger::openoutput is called.\n   Use this cached value while creating effects\n\nCRs-Fixed: 496866\n\nChange-Id: I66f08b968c75e8a3b812aad7d91b20fd4557ba24\n(cherry picked from commit 20d090b0a481722eede1ca01d38fddcd0977c633)\n(cherry picked from commit b39d113f2bac7ca1df8ef144d81bdb28c32975d0)\n(cherry picked from commit baf45ef7b6c12a1916d56ce37965de3d366b9f84)\n\nframeworks/av: Initial bringup of voip and vocoders\n\n-Add support for voip and vocoders.\n\nChange-Id: Ibe6dfa100e564e057deebe1613cafd282ee2344e\n(cherry picked from commit 96043bb0b5e93099bbbdd2a64c2b6039911c0ac3)\n(cherry picked from commit 1682b8eb630c22b7ef0aa7a29746c6ce06118d95)\n(cherry picked from commit bf72f4c502777df4703c345d1269057c57d11615)\n\nstagefright: Enable HFR feature during recording video.\n\n- Enable HFR related calls to set HFR mode in stagefright and\n  libmediaplayerservice.\nCRs-fixed: 557371\n\nChange-Id: I8cf0856b608c5a76a4ac0ad128f05eab43ca4d49\n(cherry picked from commit 94a175141e61b8fa20b687ea054a05d15b7746b5)\n(cherry picked from commit c57bfc012bd9004ea1ab79d617d55418412bbaaf)\n(cherry picked from commit b19127db20c99a23f26adafe105928bca38c4749)\n\nlibstagefright: In thumbnail mode set EOS on first frame\n\n- Hardware decoder will only expect I frames, OMXCodec will\nset EOS on first ETB to stop more frames from being pulled\n- Skip EOS check on FTB so that the first frame will\nbehandled\n- Required for thumbnail generation for some interlaced\nvideos\n\nChange-Id: I896dec4c58f688a76c29a5d72fb8b61cb04bbfcc\n(cherry picked from commit a124c3b722b251f148141b503ba9614cf33af43a)\n(cherry picked from commit 44ee9348a2743bf39c2e517612b7e75d7be797ad)\n(cherry picked from commit cb113596724882fcd2ce2ee52d1e447698d79865)\n\naudio: Fix a/v sync issue for playback over BT\n\n-Audio and video are out of sync when a video is played/streamed\nwith a BT headset connected to the target.\n-AudioTrack does not consider the BT latency.\n-Latency of the BT stream added to the existing latency.\n\n-query for tunnel mode latency\n-During tunnel playback, we need to offset latency for audio plaback\n on BT devices by querying BT HAL.\n\nChange-Id: I01a132687aec09cd2897039622daa35cff7ec409\n(cherry picked from commit 9096501e28ecb56dc3a5a4d36d474b99804315cd)\n(cherry picked from commit 29cb9299834d73a916b7a68617a32fb615c95d95)\n(cherry picked from commit ca1f9dd47ca4299797e68029f3c260a5f291d3bd)\n\naudio: AudioTrack constructor initialization\n\n- Initialized few  member variables to null\n\nChange-Id: I36fe9fd2f9e4c2b1967b8d9562ffcad635c6f686\n(cherry picked from commit 673fd8919e310f3b2ecea082cfb9c2b08d00ad44)\n(cherry picked from commit 75a64de910334e8cb12cfa0079910269e3f4e0e3)\n\naudio: enable tunnel mode based on flags\n\n- Enable tunnel mode playback based on flags defined\n  in target board config file instead of checking\n  target name.\n\nChange-Id: I78c39b2653e7bae6a6eae8de36fbcacbeb1e6686\n\nConflicts:\n\tmedia/libstagefright/Android.mk\n(cherry picked from commit 55a727f33978d374ffbdf612dd4a8560c3bffe3f)\n(cherry picked from commit bb7234c9bb0505f3d6df998f84b9a062b206e097)\n\nlibstagefright: adjust AV sync late margin based on property\n\n- Current AV late margin is 40 ms\n- Read system property media.sf.set.late.margin and if\nnew AV sync late margin is set then use the same\n- Max AV sync late margin allowed is 250 ms\n- Min AV sync late margin is default 40 ms\n\nChange-Id: Ie99a4b85264d4a07c983a3f116c18bee3b0acfc7\n(cherry picked from commit 0931561dafecce2a0b9148822e77c5f526f31934)\n(cherry picked from commit a7fbe5b8ff05c52c902f4f550b812169c8ed456b)\n\nCamcoder: Add missing timelapse recording resolutions to map variable.\n\nVGA and WVGA resolutions were missing in a map variable.\nBecause of this parsing media profiles xml for these\nprofiles was crashing.\n\nChange-Id: I5494436f8a3cde9c8a5f0d26b066ca5b37dbd585\nCRs-fixed: 564722\n(cherry picked from commit 4ac681161652d6dcf6b3313853769b19905010f2)\n(cherry picked from commit 668759a8ba976b18932773ad002b7964b9cc071c)\n\nlibstagefright: For interlace, set decoder in arbitrary mode\n\nIn arbitrary mode, frame parsers sends individual fields\nto core. Once both the field is decoded, output done (FBD)\nis sent back to client.\nDefault frame by frame mode will send both the fields in\na single buffer to core, which might decode only one field\nor will throw up error.\n\nChange-Id: Ia35d754e685f28f0df9f2c6ef2180b8a3dae1f28\nCRs-Fixed: 531034\n(cherry picked from commit 0428493caa128cfcb7b3df9082427cb6872a029e)\n(cherry picked from commit f0ca79d0509d278a4a322121dc113e173c33534c)\n\nframework\\av: libstagefright: Update NOTICE file.\n\n- Update NOTICE file with the correct information.\n\nChange-Id: I04384d4cc12d05db768a41c4580f39050e99441f\nCRs-Fixed: 534648\n(cherry picked from commit 7edaaf1230953115325b4b2701160d0edd8d63f9)\n\nframeworks/av: rendering statistics for Stagefright.\n\n- this adds extra fps statisticis\n- report via dumpsys\n- prints statistics before reset at the end of playback ontologcat\n- add resume latency, from play_l to render\n- add seek latency, from seek_l to render\n- enabled using persist.debug.sf.statistics 1\n- print all statistics when seek or resume is issued.\n\nChange-Id: I90e215bf3139c38731b9db2b07f6d6f5a916b11e\n(cherry picked from commit ecc5a30e06abcf87c941068b44023227e0eb8266)\n\nlibmedia: Add QC enhancements to MediaProfiles.\n\nAdd entries for:\n- 4K resolution support for camcorder\n- Timelapse for some resolution\n\nChange-Id: I2bbeec06ac457eb9a6fb92e3aa8fc5ead3372809\n(cherry picked from commit 90b4f7c00008b7d1afe4bcc503680e807a935db9)\n\nRevert \"frameworks/av: Enable subsystem re-start for LPA/Tunnel\"\n\nThis reverts commit 9fd40491ae10c99b35c5592e96cc9246b2a8c4ae.\n\nChange-Id: Ia7faba22db4134c36875fec90f98cf23e019288b\n"
    },
    {
      "commit": "598de6c701e989385eeffa7c5dfd61f0459a2631",
      "tree": "090b30e255f0aed57a73ca6c9252e19da162fd97",
      "parents": [
        "014e7fa2e90827d911c37bb0ce4d2e10e14d0bb3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Oct 16 17:02:13 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Oct 16 17:20:11 2013 -0700"
      },
      "message": "Fix race condition in AudioTrack::pause followed by start\n\nBug: 11148722\nChange-Id: Iec88f00c8510363d4418e4b8d5b34feb06ecf04d\n"
    },
    {
      "commit": "5a6cd224d07c05b496b6aca050ce5ecf96f125af",
      "tree": "c5d2fe55f0080c9660d283d040616d9a9fb6decc",
      "parents": [
        "a3b97ad288e6808c54c6275eaac1bd53108d8f11"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Sep 20 09:20:45 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Sep 20 12:22:29 2013 -0700"
      },
      "message": "Fix slow AudioTrack and AudioRecord destruction\n\nThere were two causes for the slowness:\n\nWhen thread was paused, it used nanosleep and sleep.  These usually\nrun to completion (except for POSIX signal, which we avoid because it\nis low-level).  Instead, replace the nanosleep and sleep by condition\ntimed wait, as that can be made to return early by a condition signal.\nAnother advantage of condition timed wait is that a condition wait was\nalready being used at top of thread loop, so it is a simpler change.\n\nThe AudioRecord destructor was missing a proxy interrupt that was correct\nin AudioTrack.  This proxy interrupt is needed in case another thread\nis blocked in proxy obtainBuffer.\n\nDoes not address the 1 second polling for NS_WHENEVER.\n\nBug: 10822765\nChange-Id: Id665994551e87e4d7da9c7b015f424fd7a0b5560\n"
    },
    {
      "commit": "53cec22821072719ee02c856e9ac2dda2496c570",
      "tree": "1ac72eaf3ba6059680f8c3d7e39ae58a9e03adc8",
      "parents": [
        "ce70374bf105f8a6160bf5dd70affea012b2a464"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 29 09:01:02 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 29 09:19:07 2013 -0700"
      },
      "message": "Add IAudioTrack::getTimestamp()\n\nwith dummy implementation in AudioFlinger::TrackHandle, and\nimplement AudioTrack::getTimestamp() using IAudioTrack.\n\nAlso document invariant that mAudioTrack and control block are always\nnon-0 after successful initialization.\n\nChange-Id: I9861d1454cff7decf795d5d5898ac7999a9f3b7e\n"
    },
    {
      "commit": "ce70374bf105f8a6160bf5dd70affea012b2a464",
      "tree": "60d2673b83bff3622e7e299974104e572656b5a6",
      "parents": [
        "e07f53720bcf543bcfe90c228a49c2a85a3fdb4c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 19 16:33:58 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 28 17:24:58 2013 -0700"
      },
      "message": "New AudioTrack C++ API for audio timestamps\n\nThis new API is intended to replace latency(), especially for A/V sync.\nThe application will receive periodic timestamp notifications.  The period\nis unspecified, but will likely be more frequent after a pause or stop,\nset position, underrun, display on/off change, route change, or when audio\nframework notices drift.  It will be up to the higher level application\n(e.g.  Stagefright) to reconstruct a clock that updates more frequently.\n\nThe current latency() method doesn\u0027t indicate when latency changes\ndue to screen on/off state, route changes, etc.\n\nIncludes squahsed change-Id: I2082f8752040be0c234b1a6f1be2e269abf2ce7c\n Dummy implementation of AudioTrack:getTimestamp()\n Rename AudioTrack::Timestamp to AudioTimestamp.\n Renaming and pulling up to a higher level allows more modules to use it.\n\nChange-Id: Ibf7f6a207c3f8d8697f25ede2cd5200697fadb86\n(cherry picked from commit dd69eb893867634fd169c03204a6ad7c74b351e7)\n"
    },
    {
      "commit": "f31abb4ee82050030b3e5a0793bb2b8e30f40d31",
      "tree": "bc17b9e9d4a4dc1108c032cad4a714471180478c",
      "parents": [
        "2f583c0ac819a7bbd1228d7b8c3857c7e6a98a91",
        "02de89293b74ab1e9a77ce2367c5c499ab038968"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 07 17:19:36 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Aug 07 17:19:37 2013 +0000"
      },
      "message": "Merge \"Cleanup comments for the new control block implementation\""
    },
    {
      "commit": "9b26847ed122a601ba857e0ef22ee2c818641120",
      "tree": "8100bc87e1c56a08005f55ea4f1d3943c6eb1e48",
      "parents": [
        "ce7842c295638ee1432041186700a71d4bf1c176",
        "6ca126d5c83386941c5cb9600099e5510e4430d6"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 05 21:50:15 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 05 21:50:15 2013 +0000"
      },
      "message": "Merge \"Make AudioRecord and AudioTrack comments more similar\""
    },
    {
      "commit": "02de89293b74ab1e9a77ce2367c5c499ab038968",
      "tree": "9be5c99a98cd411009764c53d3e943e90cb6a3b9",
      "parents": [
        "f36dbfe3d517e9311be0a4d0fd6658380690e84c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 12:30:12 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 16:10:38 2013 -0700"
      },
      "message": "Cleanup comments for the new control block implementation\n\nThere was some obsolete and incomplete text left over\nafter the new control block code was submitted.\nThis cleans up all those comments to be accurate again.\n\nChange-Id: Ic52f5869cb723cde25d709514d6deea6aa6f20aa\n"
    },
    {
      "commit": "743732236ab84e94168378cdb293964861b1ed00",
      "tree": "b437f01649d5358e8cd65a1873c5cd71c78aa9de",
      "parents": [
        "f36dbfe3d517e9311be0a4d0fd6658380690e84c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 15:51:35 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 15:56:04 2013 -0700"
      },
      "message": "Remove default parameters for AudioTrack\n\nThe defaults aren\u0027t needed; all users must know these values.\n\nChange-Id: I0c1c97cb80bfea8e69a7cfa53ec85a91a8d48bb5\n"
    },
    {
      "commit": "6ca126d5c83386941c5cb9600099e5510e4430d6",
      "tree": "6298fbfc9a0d509fa90ab50cb21894d9fa380868",
      "parents": [
        "f36dbfe3d517e9311be0a4d0fd6658380690e84c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 31 12:25:00 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Aug 02 15:31:44 2013 -0700"
      },
      "message": "Make AudioRecord and AudioTrack comments more similar\n\nChange-Id: I122a7cf7bfc162090cb27f37c325db7a23985bc7\n"
    },
    {
      "commit": "d054c32443a493513ab63529b0c8b1aca290278c",
      "tree": "fc68ba259ded1dd4960bee2938a9bcc7c599c9a3",
      "parents": [
        "96f60d8f04432a1ed503b3e24d5736d28c63c9a2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 12 12:59:20 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 30 09:50:48 2013 -0700"
      },
      "message": "Move control block mName to createTrack() output\n\nThis is part of a series of CLs to clean up the shared memory\ncontrol block, by removing any fields that don\u0027t have to be there.\n\nChange-Id: I6e51003a1293b6800258c31b22cff2eba42162e7\n"
    },
    {
      "commit": "b1a270d1e926fb9a01b4265a7675ed0c2c8f4868",
      "tree": "091d06b02bc126ff1bb2dd1fabc9be829582ae69",
      "parents": [
        "bfb1b832079bbb9426f72f3863199a54aefd02da"
      ],
      "author": {
        "name": "Richard Fitzgerald",
        "email": "rf@opensource.wolfsonmicro.com",
        "time": "Tue May 14 12:12:21 2013 +0100"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jul 25 14:08:09 2013 -0700"
      },
      "message": "libmedia: offloaded playback support\n\n- start() returns a status so that upper layers can\nrecreate a non offloaded track in case of error.\n\n- Added states to handle offloaded tracks specific:\n  - waiting for stream end (drain) notification by\naudio flinger\n  - allow pause while waiting for stream end notification\n\n- getPosition() queries the render position directly from\naudio HAL.\n\n- disable APIs not applicable to offloaded tracks\n\n- Modified track restoring behavior for invalidated\noffloaded tracks: just send the callback and wait for\nupper layers to create a new track.\n\n- Added wait for stream end management in audio track client\nproxy. Similar to obtainBuffer and should be factored in.\n\nChange-Id: I0fc48117946364cb255afd653195498891f622bd\nSigned-off-by: Eric Laurent \u003celaurent@google.com\u003e\n"
    },
    {
      "commit": "fb1fdc9d6603aa228362e7349451f6455c9849c2",
      "tree": "1caac6c881db81bcfedb596b292ce62ecbaf6a2c",
      "parents": [
        "551ababe67ce31778000d52958e53e1c56e1a294"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 10 17:03:19 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 10 17:08:15 2013 -0700"
      },
      "message": "Add comments\n\nChange-Id: Ifbf3a46a4183c8abc0feee1c588953ab10303cc1\n"
    },
    {
      "commit": "ad3af3305f024bcbbd55c894a4995e449498e1ba",
      "tree": "2e242d4c49cce9faefc28665c6ee63a2a5da170c",
      "parents": [
        "7919fa2c33b1fa7f5e49b2188d671bfe519c231e"
      ],
      "author": {
        "name": "Richard Fitzgerald",
        "email": "rf@opensource.wolfsonmicro.com",
        "time": "Mon Mar 25 16:54:37 2013 +0000"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 27 17:16:24 2013 -0700"
      },
      "message": "Public API changes for audio offload support.\n\nNOTE: this does _not_ include all private member variables added\nto classes as part of offload support. Only public/protected functions\nand stubs functions/variables needed to make the changes buildable.\n\n- isOffloadSupported() added to audio policy service\n    A stub implementation is required to build, this always returns false\n- setParameters() added to IAudioTrack\n    A stub implementation is required to build, this always returns\n    INVALID_OPERATION\n\n- CBlk flag for stream end\n\n- Change AudioSystem::getRenderPosition() to take an audio_output_t\n    so caller can specify which output to query\n\n- Add AudioSystem::isOffloadSupported()\n    This is fully implemented down to the AudioFlinger function\n    AudioPolicyServer::isOffloadSupported() which is just a stub\n    that always returns false.\n\n- Add EVENT_STREAM_END to AudioTrack interface.\n    STREAM_END is used to signal when the hardware has actually finished\n    playing all the data it was sent.\n\n- Add event type enumeration to media player interface AudioSink callbacks\n    so that the same callback can be used to handle multiple types of\n    event. For offloaded tracks we also have to handle STREAM_END and\n    TEAR_DOWN events\n\n- Pass audio_offload_info_t to various functions used for opening outputs,\n    tracks and audio players. This passes additional information about the\n    compressed stream down to the HAL when using offload.\n    For publicly-available APIs this is an optional parameter (for some of\n    the internal and low-level APIs around the HAL interface it is mandatory)\n\n- Add getParameters() and setParameters() API to AudioTrack\n    Currently dummy implementations.\n\n- Change AudioPlayer contructor so that it takes a set of bitflags defining what\n    options are required. This replaces the original bool which only specified\n    whether to use deep buffering.\n\n- Changes to StageFright class definition related to handling tearing-down of\n    an offloaded track when we need to switch back to software decode\n\n- Define new StageFright utility functions used for offloaded tracks\n    Currently dummy implementations.\n\n- AudioFlinger changes to use extended audio_config_t.\n    Fills in audio_offload_info_t member if this info is passed in when\n    opening an output.\n\n- libvideoeditor changes required to add the new event type parameter\n    to AudioSink callback functions\n\n- libmediaplayerservice changes required to add the new event type parameter\n    to AudioSink callback functions\n\nChange-Id: I3ab41138aa1083d81fe83b886a9b1021ec7320f1\nSigned-off-by: Richard Fitzgerald \u003crf@opensource.wolfsonmicro.com\u003e\nSigned-off-by: Eric Laurent \u003celaurent@google.com\u003e\n"
    },
    {
      "commit": "9f80dd223d83d9bb9077fb6baee056cee4eaf7e5",
      "tree": "79f19f80ebb7978e9bab16e1d9b835849c735592",
      "parents": [
        "9fef8d453b15a91a2b748faac2bfaff713bcf1e1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 18 15:57:32 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 12 14:33:10 2013 -0700"
      },
      "message": "New control block for AudioTrack and AudioRecord\n\nMain differences between old and new control block:\n - removes the mutex, which was a potential source of priority inversion\n - circular indices into shared buffer, which is now always a power-of-2 size\n\nChange-Id: I4e9b7fa99858b488ac98a441fa70e31dbba1b865\n"
    },
    {
      "commit": "2799d743ee2ae5a25fe869a7f9c052acc029559f",
      "tree": "5cab5ff06f7cae0025b93fdcd549cfb2ec72b755",
      "parents": [
        "7c684c622110af460025eff85082030947278430"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 30 14:33:29 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 03 11:28:36 2013 -0700"
      },
      "message": "Use sp\u003cAudioTrack\u003e instead of raw AudioTrack *\n\nThis change prepares for the new implementation of AudioTrack client, which\nwill require clients to use only sp\u003cAudioTrack\u003e, not raw AudioTrack *.\nA raw delete will cause a race condition during AudioTrack destruction.\n\nAudioTrack was made a RefBase by commit b68a91a70bc8d0d18e7404e14443d4e4020b3635\non 2011/11/15, when it was needed by OpenSL ES (for the callback protector).\nAt that time, the only other client that was also converted from\nAudioTrack * to sp\u003cAudioTrack\u003e was android.media.AudioTrack JNI in\nproject frameworks/base (file android_media_AudioTrack.cpp).\n\nDetails:\n * Use .clear() instead of delete followed by \u003d NULL.\n * ALOG %p need .get().\n * sp\u003c\u003e don\u0027t need to be listed in constructor initializer, if initially 0.\n * Use \u003d\u003d 0 for sp\u003c\u003e vs \u003d\u003d NULL for raw pointers.\n * Use if (sp !\u003d 0) instead of if (raw).\n\nChange-Id: Ic7cad25795d6e862e112abdc227b6d33afdfce17\n"
    },
    {
      "commit": "61aa989a5768b9b0571ca14edaf15886509a0ec8",
      "tree": "e272f0ac691569a8c5a54ecb5910f277afe369ca",
      "parents": [
        "b0864b6a20dc2e72bd6d08ad3c06f0fa5cef92e0",
        "1641f328d4de3b2b61481607dc482ccaefe808a9"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 03 14:54:07 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri May 03 14:54:07 2013 -0700"
      },
      "message": "am 1641f328: am 4170f515: Merge \"Remove timing jitter during startup of audio\" into jb-mr2-dev\n\n* commit \u00271641f328d4de3b2b61481607dc482ccaefe808a9\u0027:\n  Remove timing jitter during startup of audio\n"
    },
    {
      "commit": "a07f17ca46db04c9d5d9e7d6b2878db59ca2b9ea",
      "tree": "5f35039b1b7ed7518280e9a436536600a5aac5c9",
      "parents": [
        "5e43772296d7c5b8faf4b0ce4efe68778729bc74"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 23 12:39:37 2013 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Apr 23 14:18:18 2013 -0700"
      },
      "message": "Remove timing jitter during startup of audio\n\nThis fixes a regression introduced recently, that increased timing jitter\nduring the startup of the FastMixer and AudioTrack callback threads.\n\nThe regression was to make requestPriority() asynchronous as a way to\navoid an apparent priority inversion in system_server.  This means that\nthe target thread could run briefly with the initial priority, before\nthe new priority takes effect.\n\nThis change removes the startup jitter for FastMixer, by making the\nrequestPriority() synchronous again for that case.  It doesn\u0027t matter\nthat this restores the priority inversion involving normal mixer thread,\nbecause it happens during startup of both threads.\n\nThe change also removes the startup jitter for the AudioTrack callback\nthread, by having the target thread check whether the requestPriority()\nhas completed yet.  If not, the target thread blocks with a timeout\nuntil the priority boost finishes.\n\nFinally, we now log an error message if the expected priority boost\ndoesn\u0027t happen.\n\nBug: 8698989\nChange-Id: Id590e9a274b70ec1ba85b44a585ee37a22e41cbc\n"
    },
    {
      "commit": "660fbbb77f42745d2c05b436f1a09c5cbd3853c5",
      "tree": "4e0b9cba98937dabfc4f1205cf095a465eade71a",
      "parents": [
        "9f2f963d4080bfe1be87bb0616a81c7ec98bb78b",
        "9c6745f128648f6e0144b74ee593911a9fa10d51"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sat Mar 09 00:43:03 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Mar 09 00:43:03 2013 +0000"
      },
      "message": "Merge \"Propose new interpretation for setPosition and setLoop\""
    },
    {
      "commit": "c9b2e20f7c9a71e07ef398152709c76079decbcd",
      "tree": "7e3cbee883fbe1462e24a31b8b4af5a5911e8276",
      "parents": [
        "bf04b5860182d8f4130dcb5d6d88ee68a58c99cd"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 26 11:32:32 2013 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 04 12:58:21 2013 -0800"
      },
      "message": "Miscellaneous cleanup\n\nAbbreviation framesReady to fRdy for new systrace.\nPut inline const on one line.\nUse local copy of mState in state.\nImprove logging.\nLine length 100.\n\nChange-Id: I8201c3ce0e53fd464fd33d02544e52c342d40b68\n"
    },
    {
      "commit": "9c6745f128648f6e0144b74ee593911a9fa10d51",
      "tree": "04921173242fd90eec6f5d6589d0e7c2edc53c4d",
      "parents": [
        "f78f2629f5f6f5fc37a2089a85107fed97f12192"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Nov 30 13:35:29 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jan 07 14:24:21 2013 -0800"
      },
      "message": "Propose new interpretation for setPosition and setLoop\n\nAdd new API getBufferPosition to return position relative\nto start of fixed buffer.\n\nChange-Id: I7aca8e392d45b988545f07b36b5032691057b03e\n"
    },
    {
      "commit": "e3aa659e9cee7df5c12a80d285cc29ab3b2cbb39",
      "tree": "90fdb6e9da1a03f4f24691aae27ae94ff913f1c7",
      "parents": [
        "84b6440fa1d1274267deabe0bd8dc626b5548e4c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Dec 04 12:22:46 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 12 12:21:59 2012 -0800"
      },
      "message": "Start isolating control block accesses in a proxy\n\nThe proxy object will eventually be the only code that understands the\ndetails of the control block.  This should make it easier to change the\ncontrol block in the future.\n\nInitial set of control block fields that are isolated:\n - sample rate\n - send level\n - volume\n\nPrepare for streaming/static separation by adding a union to the control\nblock for the new fields.\n\nFix bug in handling of max sample rate on a track.  It was only checking\nat re-configuration, not at each mix.\n\nSimplify OutputTrack::obtainBuffer.\n\nChange-Id: I2249f9d04f73a911a922ad1d7f6197292c74cd92\n"
    },
    {
      "commit": "083d1c1492d496960d5b28f4664ff02101736677",
      "tree": "5640adaecd5293c1088bf6bf3475b4887f4f9cb2",
      "parents": [
        "4bae3649d504d590a546717a8e49f96a30d9a745"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Nov 30 15:00:36 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Dec 03 11:38:57 2012 -0800"
      },
      "message": "Emphasize distinction between streaming and static\n\nUpdate comments and improve error checks to match\n\nChange-Id: I7370d6e59a7ef26dfb284a8b058d5ab2e0a42ccf\n"
    },
    {
      "commit": "4bae3649d504d590a546717a8e49f96a30d9a745",
      "tree": "0e9cc2e5390671a4021d85193b1ad31544040f3c",
      "parents": [
        "e4756fe3a387615acb63c6a05788c8db9b5786cb"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Nov 30 13:41:12 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Dec 03 10:42:52 2012 -0800"
      },
      "message": "flush() comments and checks\n\nflush() is only useful for streaming mode.\nIt is a no-op if track is active or uses a static buffer.\n\nChange-Id: I918ac181ffae3d16a0d67d8a7208f4aec61b5bd6\n"
    },
    {
      "commit": "e4756fe3a387615acb63c6a05788c8db9b5786cb",
      "tree": "7e0b0278f71c7667784612a83af8f43ff08bf708",
      "parents": [
        "391f1bb93d5720bfe1a025307178b3208a3ce7d7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 29 13:38:14 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Dec 03 09:57:37 2012 -0800"
      },
      "message": "AudioTrack::mute() is unused so remove it\n\nIf ever needed again, it could be implemented on client side by forcing\na track volume of 0.\n\nChange-Id: I88a9b4f675b6dca2948549414f9ec2c192d29269\n"
    },
    {
      "commit": "01437b7cdaecf53acb46b50ff8b5d86b9d36eb20",
      "tree": "da1b17ed3bd02368e33b0c83c872db25f78bd36c",
      "parents": [
        "24ee6aaf1368e3a07061948273c629d05cb9b12a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 29 07:32:49 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Nov 30 15:23:44 2012 -0800"
      },
      "message": "AudioTrack inline short const methods\n\nChange-Id: I142917edb454d510bbe545e94e6eaea30b650fae\n"
    },
    {
      "commit": "a42ff007a17d63df22c60dd5e5fd811ee45ca1b3",
      "tree": "58ba8c1bf24f27680d48b6040132a02bfaedc0ff",
      "parents": [
        "aa25c0321bd4b9eb46a4d1cb4ac5fa47af30eeb4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 14 12:47:55 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Nov 19 11:25:58 2012 -0800"
      },
      "message": "Clean up channel count and channel mask\n\nChannel count is uint32_t.\nRemove redundant mask parameter to AudioTrack::createTrack_l()\n    and AudioRecord::openRecord_l().\n\nChange-Id: I5dc2b18eb609b2c0dc3091994cbaa4628062c17f\n"
    },
    {
      "commit": "b603744e96b07b1d5bf745bde593fb2c025cefcf",
      "tree": "0c8ae15dbd430ccfcb872c701de48907ec48afc8",
      "parents": [
        "f91a3abb7d136e75f0f5d999193b8c8297d97628"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 14 13:42:25 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Nov 16 15:01:47 2012 -0800"
      },
      "message": "Don\u0027t use control block frame count after create\n\nThis is part of a series to clean up the control block.\n\nChange-Id: I7f4cb05aef63053f8e2ab05b286d302260ef4758\n"
    },
    {
      "commit": "e33054eb968cbf8ccaee1b0ff0301403902deed6",
      "tree": "b91f7abd2927e25a4cb7c50a8ef197c643ca9db6",
      "parents": [
        "7d9c126be8dfe3016683eeb2b7a2d88ba5b24c0b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 14 12:54:39 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 15 16:43:40 2012 -0800"
      },
      "message": "Use size_t for frame counts\n\nAlso fix typo: bufferCount should be frameCount.\n\nChange-Id: Ibed539504db75ef99dc21c8ff1bf2987122063a5\n"
    },
    {
      "commit": "60a839204713e0f8258d082af83262b1eb33a6c3",
      "tree": "5b8ef6ace475c96637bb6498b1c0a602611f9a58",
      "parents": [
        "3b16c766d1ae2cfd8487e8ffb2b23936fc0a8e17"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 21 12:56:37 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 14 16:45:53 2012 -0800"
      },
      "message": "Clean up frame size in AudioTrack and AudioFlinger\n\nTrackBase::mFrameSize, mChannelMask, and mChannelCount are now const.\nUse TrackBase::mFrameSize instead of re-calculating frame size.\nAudioFlinger only sees 16-bit PCM format, conversion from 8-bit is\n  now entirely on the client side.  Previously a small part of the\n  responsibility was on server side also.\nsize_t is unsigned, so use %u in logs.\nFix theoretical bug where TrackBase constructor was over-allocating space\n  for non-linear AudioTrack or 8-bit PCM AudioRecord (probably benign).\n\nChange-Id: I7cbbba0bf4dba29ea751d8af341ab8e5cbbdc206\n"
    },
    {
      "commit": "3b16c766d1ae2cfd8487e8ffb2b23936fc0a8e17",
      "tree": "56e1f373606202e5d5277f9645158d91b1a0a80c",
      "parents": [
        "b4a17e834b718eff1ba2eac4232de6e73a4bf9f5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 14 08:44:39 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 14 16:19:23 2012 -0800"
      },
      "message": "Use uint32_t for sample rate\n\nChange-Id: Ie240b48fb54b08359f69ecd4e5f8bda3d15cbe80\n"
    },
    {
      "commit": "22eb4e239fbe9103568147d566d7482e480350b8",
      "tree": "132fa6ac8c0bc47fd6d3b1cc67d1724dc3b939a2",
      "parents": [
        "2d81f665461409f0c5d0be674a35a0aea63a4fc8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 07 14:03:00 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 14 11:58:17 2012 -0800"
      },
      "message": "Update audio comments\n\nChange-Id: I85d7d2f6381b251db5695202fec75128883a8662\n"
    },
    {
      "commit": "83a0382dc17364567667a4e6135db43f5bd92efc",
      "tree": "c3738c183fa49d9ccd023e27b37024860ccfff22",
      "parents": [
        "bc0f6b92bba33ca9c2e76f2a520d290f055da6b2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Nov 12 07:58:20 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Nov 12 15:13:34 2012 -0800"
      },
      "message": "Move frame size out of the control block\n\nThis is part of a series to clean up the control block.\n\nChange-Id: Ifab1c42ac0f8be704e571b292713cd2250d12a3f\n"
    },
    {
      "commit": "b929e417853694e37aba1ef4399f188987b709d9",
      "tree": "670f2da01fd3d33df6da2998c78273e0701300ad",
      "parents": [
        "a47f3165f53c8e8fb8907a94de7417e2c3047eeb"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 08 12:13:58 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 08 12:18:59 2012 -0800"
      },
      "message": "Move buffers pointer out of the control block\n\nThis is part of a series to clean up the control block.\n\nChange-Id: Ie474557db7cb360f2d9a0f11600a68f5a3d46f07\n"
    },
    {
      "commit": "a47f3165f53c8e8fb8907a94de7417e2c3047eeb",
      "tree": "d6f691af946f8754b8534347c9b0b3ec535e776e",
      "parents": [
        "659004c2949620d8adb29e1d950a2dd1c75ba9a9"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 07 10:13:08 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 08 11:22:38 2012 -0800"
      },
      "message": "Simplify AudioTrack::restoreTrack_l()\n\nRemove CBLK_RESTORING and CBLK_RESTORED from control block flags,\nfor AudioTrack only.  They are still used by AudioRecord.\n\nThis is part of a series to clean up the control block.\n\nChange-Id: Iae4798f5b527c492bdaf789987ff3a1dadd0cb37\n"
    },
    {
      "commit": "659004c2949620d8adb29e1d950a2dd1c75ba9a9",
      "tree": "0619d1c2fa1515119ddd92648724e89a1073e76a",
      "parents": [
        "755e8e1dcf36f282b727ff22d87d3c2fac70d30a",
        "b1c0993b215c5c3eebd1c6bafc22bba23d57a70b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 08 10:35:06 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Nov 08 10:35:07 2012 -0800"
      },
      "message": "Merge \"Add all-channel AudioTrack::setVolume() API\""
    },
    {
      "commit": "d5ed6e88a9bea1879e41d7defaf1edea7c09f554",
      "tree": "99a34f51474700f4873e3f817b6b9f2c47001fc3",
      "parents": [
        "8fa3ad0e4c77f7868348ad2a4cacc34c34e7c39e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Nov 02 13:05:14 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 07 16:11:56 2012 -0800"
      },
      "message": "Fix call to restoreTrack_l() without lock held\n\nAlso document lock order\n\nChange-Id: I2c1f273a0a51fa79ee3dd766de8d23083e270051\n"
    },
    {
      "commit": "05d499958e4030938ed77a924ebdd9899f36752e",
      "tree": "c1eb564773575a2905de4b99f2a352e315611a5e",
      "parents": [
        "48c6b2628f8a6037309c7957b07129d850187aa3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Nov 06 14:25:20 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Nov 06 14:37:04 2012 -0800"
      },
      "message": "Remove unused fields in AudioTrack::Buffer\n\nChange-Id: Iab75f6e2348d8b6d1f3cec95aeb3fcd5135dfb50\n"
    },
    {
      "commit": "b1c0993b215c5c3eebd1c6bafc22bba23d57a70b",
      "tree": "7b2d2eb6d08c5460fc896e083983ef6e65b5db45",
      "parents": [
        "ad4e408b8ea397caadbfee85e1e39515e7e08104"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 27 16:21:04 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Nov 05 15:12:51 2012 -0800"
      },
      "message": "Add all-channel AudioTrack::setVolume() API\n\nAdd combined channel APIs setVolume to AudioTrack,\nand remove obsolete getVolume.\n\nChange-Id: I0c87bfdbff4f4292259fa33e65f67badbafd270b\n"
    },
    {
      "commit": "847d05dc8fa144dcf8f4f435d6a6ac1727f00937",
      "tree": "c079d882c6070ba620cad05b2b5254b4ba2ecf50",
      "parents": [
        "f27bdebd0c611f9618577f65346f44574146dc00"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Feb 27 16:05:09 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Nov 05 13:49:59 2012 -0800"
      },
      "message": "Remove deprecated AudioTrack APIs\n\nChange-Id: I88be6525f3e33df529c0c3cb701d12a484809477\n"
    },
    {
      "commit": "ad2f6dbe14e601ae69f3697bc17106f9fd7d59d6",
      "tree": "bfc68efc76a15bf581b9663c759097397c1732c6",
      "parents": [
        "cd91c4461d2d3da1b3cc3d8d0f61fc266dbeec0f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 01 15:45:06 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Nov 02 10:18:37 2012 -0700"
      },
      "message": "AudioTrack comments\n\nChange-Id: I08988f635c5bc6f4c35e9c4188f3d6fa557bc4c2\n"
    },
    {
      "commit": "85ab62c4b433df3f1a9826bed1c9bec07a86c750",
      "tree": "0c5443a20824924cb7403f4cabfee84062489793",
      "parents": [
        "5fe6138bd839297a1eed16885102b3bdfc98c040"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 01 11:11:38 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Nov 01 12:19:25 2012 -0700"
      },
      "message": "Line length 100\n\nChange-Id: Ib28fd7b9ce951a6933f006e7f8812ba617625530\n"
    },
    {
      "commit": "c3ae93f21280859086ae371428ffd32f39e76d50",
      "tree": "542d16fac64eb1f6e40c32517d60c2da5078e900",
      "parents": [
        "c9936c72c128a4a9288424fb082d7e7fe4b9b91f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 30 10:59:30 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Aug 30 15:31:00 2012 -0700"
      },
      "message": "Update audio comments\n\nChange-Id: Ie7504d0ddb252f7e4d4f99ed0b44cfc7b1049816\n"
    },
    {
      "commit": "a997e7a7c5aa2fc7e95316218316f8b7b98786ba",
      "tree": "4f98e352833c4de61728588cacc08d40d1d01778",
      "parents": [
        "8da4cd7d706d9f551bf2d08cd8b61907a10cd38d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 07 09:44:19 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 07 15:13:42 2012 -0700"
      },
      "message": "Revert \"Swap the order of creating IAudioTrack and thread\"\n\nThis reverts commit 5d464eb0b8cffb994a754ff108795e858a882414.\nIt caused the wrong thread ID -1 to be passed to IAudioFlinger::createTrack().\n\nChange-Id: Ic221d2bb4af572d3d2d752af19238c52f6728e3a\n"
    },
    {
      "commit": "5d464eb0b8cffb994a754ff108795e858a882414",
      "tree": "e5d78a91a03a1895cc03cfeb89c26aac49d15a9e",
      "parents": [
        "0ec23ce0d1ff79566c402bc30df3074f6e25a22b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 22 17:19:53 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 27 14:58:43 2012 -0700"
      },
      "message": "Swap the order of creating IAudioTrack and thread\n\nSimplifies the error recovery in case IAudioTrack fails.\n\nChange-Id: I6aee41a2ac747a5689fb4836b04174e6107bf32f\n"
    },
    {
      "commit": "28b76b334f92a15a2be3cc9e2f7d229a3275d1ac",
      "tree": "c605d3e995f4b6be55dd4b10e1c998b059990d0d",
      "parents": [
        "fd4e20c226eca185fc789de761beae64855bfbbb"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 03 17:24:41 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 17 11:31:59 2012 -0700"
      },
      "message": "Use audio_channel_mask_t for channel mask\n\nChange-Id: I1c1896da48983aa9f1462a4b471f910498816f60\n"
    },
    {
      "commit": "d4070955e28ae62aa4be1657f9d32acde104bb86",
      "tree": "4e289a66bb82da52f8e0e1c1691b35f1309d9f35",
      "parents": [
        "39c54f68804c1ce5c85ec588f3c2c63447a807b4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 12 11:03:31 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jul 12 11:09:09 2012 -0700"
      },
      "message": "Remove dead code in libmedia\n\nChange-Id: I7d8201590cda29c9fa99662a4fdba222091febfe\n"
    },
    {
      "commit": "a636433cbd09c0708b85f337ef45c0cdef3bcb4d",
      "tree": "8a629f33d648d1ddd8b79305f02763c539fef7cd",
      "parents": [
        "9adb12830ac2da72c91b842d24725ced6d236b16"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Apr 19 09:35:04 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 23 16:54:41 2012 -0700"
      },
      "message": "Use C APIs instead of C++ APIs for policy\n\nThe C++ APIs are going away.\n\nNote: we use tid \u003d\u003d 0 which is not supported yet by the C APIs,\ndo not submit this until that is added.\n\nChange-Id: I0e90789e6c81c69f2544e899c52421ea5d1342be\n"
    },
    {
      "commit": "3acbd053c842e76e1a40fc8a0bf62de87eebf00f",
      "tree": "1d6dcc01039a1af770131c6b427efa27a2e5755f",
      "parents": [
        "f853499c6a088ef8506cacbb3ccdffa87e0cec3e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 28 10:39:56 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Sun Apr 22 14:50:01 2012 -0700"
      },
      "message": "Configure policy of mediaserver threads\n\nChange-Id: Ifd825590ba36996064a458f64453a94b84722cb0\n"
    },
    {
      "commit": "0ca3cf94c0dfc173ad7886ae162c4b67067539f6",
      "tree": "bc156e7822e663626b78ec2ad09ef3970fbb48c5",
      "parents": [
        "ee685f6d19a6cc3b0bf02e69eb5dea11a2aeb601"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 18 09:24:29 2012 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed Apr 18 15:04:46 2012 -0700"
      },
      "message": "rename audio policy output flags\n\nChange-Id: I27c46bd1d1b2b5f96b87af7d05b951fef18a1312\n"
    },
    {
      "commit": "4a4a0959bca78e03e3c3f486ba17829c28314d8c",
      "tree": "5fbfe5302ca28741483ae64d0ccf2630830f167e",
      "parents": [
        "a1472d9883e35edd280201c8be3191695007dfd4"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 11:38:14 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 02 07:34:39 2012 -0700"
      },
      "message": "AudioTrack client fast policy\n\nChange-Id: I42ce691df3f586ac061b62237f35a263a0116f1f\n"
    },
    {
      "commit": "291f4d505aff81969e6666049d3cc3446f836af2",
      "tree": "f2ad96c1acfb08c190148f8f12a7f86825cd7728",
      "parents": [
        "ccf89b54f973f11082150d02ed957f7e967fbc8b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 12:16:56 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 21 15:41:02 2012 -0700"
      },
      "message": "Remove enforceFrameCount\n\nIt was only used to decide whether to issue a warning.\nThe warning was issued the first time track was created but\nnot at re-creation.  Now it is a verbose message every time,\nnot a warning since it happens all the time with key clicks on A2DP.\n\nChange-Id: I9d39f53c0a7eb84b666e55b1b76ff830cf8f37ba\n"
    },
    {
      "commit": "ea7939a079b3600cab955760839b021326f8cfc3",
      "tree": "570fb56838735a46a28e28a4f083d763f758ea24",
      "parents": [
        "eb76ff27c13386eb5a2dad73b1a8366f80eb0ff7"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 14 12:56:26 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 17:53:33 2012 -0700"
      },
      "message": "Whitespace\n\nFix indentation, and add blank lines in key places for clarity\n\nChange-Id: I57a0a8142394f83203161aa9b8aa9276abf3ed7c\n"
    },
    {
      "commit": "18868c5db2f90309c6d11e5837822135e4a0c0fa",
      "tree": "58c7505f59a1a93ab729fc039aa5cb1eaa49652e",
      "parents": [
        "f2015b625cd6bea86da7401e725332c35b90e7cf"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 07 09:15:37 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 09 15:32:22 2012 -0800"
      },
      "message": "Use audio_policy_output_flags_t consistently\n\nThis affects:\n - IAudioFlinger::openOutput\n - AudioTrack::AudioTrack\n - AudioTrack::set\n - apps that call these\n\nChange-Id: I26fb281bac6cb87593d17697bc9cb37a835af205\n"
    },
    {
      "commit": "d8d6185c978c9b27ca69e7791785e0983ed9e8b8",
      "tree": "cda49b71e787cf1bcf68671e237389f70706cff3",
      "parents": [
        "985ed9a1a22ec7e6e245d3fb8e93d3a23bdc539b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 05 17:06:40 2012 -0800"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon Mar 05 17:18:36 2012 -0800"
      },
      "message": "AudioTrack: relax check on minimum buffer size\n\nCurrent AudioTrack implementation enforces that the requested audio\nbuffer size is at least corresponding the audio latency.\nThis requirement is too strong and leads to problems with current\nstagefright and AudioSink implementations when playing over output\nstreams with long latency.\n\nUltimately, the AudioSink design should be changed to specify a minimum\nbuffer size in time or frames units but not in buffer count units.\n\nChange-Id: I8ba603956f92ac49143a8249572665aa548f2f0f\n"
    },
    {
      "commit": "4ff14bae91075eb274eb1c2975982358946e7e63",
      "tree": "e9e54fddb9832d30b69c2a11c9ed2884397f2f95",
      "parents": [
        "951bd8d1ad9581a414e171ad8605a9515d0ad667"
      ],
      "author": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Wed Feb 08 16:37:41 2012 -0800"
      },
      "committer": {
        "name": "John Grossman",
        "email": "johngro@google.com",
        "time": "Thu Feb 16 13:45:11 2012 -0800"
      },
      "message": "Upintegrate Audio Flinger changes from ICS_AAH\n\nBring in changes to audio flinger made to support timed audio tracks\nand HW master volume control.\n\nChange-Id: Ide52d48809bdbed13acf35fd59b24637e35064ae\nSigned-off-by: John Grossman \u003cjohngro@google.com\u003e\n"
    },
    {
      "commit": "d9b9b8d09e7471b0ffa21cfa9f944ef4ad300a71",
      "tree": "e2b8666cc7ca81254ce264129ddd70c076a63ed1",
      "parents": [
        "ed15977476a3d53103866e6d527fa3fb65d4166c",
        "99e53b86eebb605b70dd7591b89bf61a9414ed0e"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 14 09:42:32 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 14 09:42:32 2012 -0800"
      },
      "message": "Merge \"Update comments\""
    },
    {
      "commit": "99e53b86eebb605b70dd7591b89bf61a9414ed0e",
      "tree": "8939550ada02fe21121550a83952ebf7638c0dac",
      "parents": [
        "6dbc1359f778575d09d6da722b060a6d72c2e7c5"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 19 08:59:58 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 14 09:17:59 2012 -0800"
      },
      "message": "Update comments\n\nWe no longer put the filename at start of file.\n\nChange-Id: Ic435b159a23105681e3d4a6cb1ac097bc853302e\n"
    },
    {
      "commit": "38f5d71e72f3b76c5b519614d27f051d53cd2712",
      "tree": "a27ac85c22bc55b10bdeeaa3bddaae473325caaf",
      "parents": [
        "98ec94c5854daccc3474758524e7f4adfe535ce0"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 14:12:12 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 14:12:12 2012 -0800"
      },
      "message": "Remove dead code AudioTrack::getLoop\n\nChange-Id: I868329c52f31bc20125f068500d8f892b4ec9796\n"
    },
    {
      "commit": "4f9b0c54011eb8fd2ccfb393c2dcd51cd07800e0",
      "tree": "318b28bb04ce0b4ce39f75f6a8dbac27cee1455c",
      "parents": [
        "86feafe15b3f9609e1e9f64184688c2b6f2e4834",
        "0e265cf36d201a7ccc0238b5c60b50f43d1dc450"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 08 08:34:33 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 08 08:34:33 2012 -0800"
      },
      "message": "Merge \"Remove dead mutex in AudioTrack/AudioRecord thread\""
    },
    {
      "commit": "a5224f319e2ba4b51ddb4287705ccf8d4b8ecc51",
      "tree": "eb36f63045d044c840072ad95398d49b743cd6bd",
      "parents": [
        "787bae0578fbaab6219ebf23494866b224d01438"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 04 12:41:44 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 03 15:48:25 2012 -0800"
      },
      "message": "AudioTrack declare more methods const\n\nChange-Id: I4999e984460893961d0d8092cff17f3cf07d7214\n"
    },
    {
      "commit": "a0d68338a88c2ddb4502f95017b546d603ef1ec7",
      "tree": "f052125f4720fde00179d41d4ee04e02934052e4",
      "parents": [
        "87f155d6655b2d3b27e69281a29e85c6407e4d26"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 27 16:47:15 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Feb 03 07:57:01 2012 -0800"
      },
      "message": "Use NULL not 0 for raw pointers\n\nUse if (p !\u003d NULL) instead of if (ptr)\n\nChange-Id: Iaec3413a59ccbf233c98fcd918cc7d70ac5da9fa\n"
    },
    {
      "commit": "0e265cf36d201a7ccc0238b5c60b50f43d1dc450",
      "tree": "395a2c8f3685c1d1140f3ad12d2dff884d7db6ad",
      "parents": [
        "bf6954598193147cac980b8b5d7ad5215f1dec16"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 02 10:52:34 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 02 11:23:30 2012 -0800"
      },
      "message": "Remove dead mutex in AudioTrack/AudioRecord thread\n\nThe client callback threads had mutexes called AudioTrackThread::mLock\nand ClientRecordThread::mLock.  These mutexes were only used by start()\nand stop(), and were unused by the thread itself.  But start() and\nstop() already have their own protection provided by AudioTrack::mLock\nand AudioRecord::mLock.  So the thread mutexes can be removed.\n\nChange-Id: I098406d381645d77fba06a15511e179a327848ef\n"
    },
    {
      "commit": "335787fe43596f38ea2fa50b24c54d0823a3fb1d",
      "tree": "8efb65da6c538ee243e4ac63541f8f815591aa7b",
      "parents": [
        "58f30210ea540b6ce5aa6a46330cd3499483cb97"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 20 17:00:00 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 20 17:12:59 2012 -0800"
      },
      "message": "Remove AudioFlinger dependencies on client\n\nChange-Id: Ibb591e41a3ca5d7015e2b66b98b8fef5f415fb37\n"
    },
    {
      "commit": "c813985abd8ba61e999b3505f6a332574f87a1be",
      "tree": "d87c4ec564d4f3d19db4c1032661799cce847617",
      "parents": [
        "04eaf3e5f20d7faa956c0d672024ffb5117f4c26"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Jan 18 10:51:55 2012 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Jan 18 10:51:55 2012 -0800"
      },
      "message": "Temporarily restore AudioSystem/AudioTrack APIs with their former signatures\n\nuntil we get updated prebuilts from vendor.\n\nChange-Id: I8aae81d2513edca0ab268053a11c8c4206879e61\n"
    },
    {
      "commit": "613882293184e575a44bff681a3decaefe889e69",
      "tree": "052f84c8fe6e7b201f03117f617c3ad77b8b0dd0",
      "parents": [
        "0107954f72153db747a3727dc1157e9236dfed90",
        "b9980659501d0428d65d8292f3c32da69d37fbd2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 17 07:27:46 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 17 07:27:46 2012 -0800"
      },
      "message": "Merge \"Use size_t for frame size\""
    },
    {
      "commit": "b9980659501d0428d65d8292f3c32da69d37fbd2",
      "tree": "8b703aca299f4f715a65d07cc37b753e9753a941",
      "parents": [
        "f4e76c538f81068bc2e125f3f9ef8b8dd40f2d2a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 11 09:48:27 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 13 14:58:44 2012 -0800"
      },
      "message": "Use size_t for frame size\n\nexcept in the control block, where we don\u0027t have room.\n\nIn AudioFlinger::ThreadBase::TrackBase::getBuffer,\nread the frame size from control block only once.\n\nChange-Id: Id6c4bccd4ed3e07d91df6bbea43bae45524f9f4e\n"
    },
    {
      "commit": "fff6d715a8db0daf08a50634f242c40268de3d49",
      "tree": "f5331971b746b2e0d878e1127003a0dab72e5fbb",
      "parents": [
        "09192653e836b21689f004bf8dee375356641181"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 12 16:38:12 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jan 13 10:20:14 2012 -0800"
      },
      "message": "Use audio_stream_type_t consistently\n\nAt native level it was a mixture of audio_stream_type_t, int, uint32_t,\nand uint8_t.  Java is still int.  Also fixed a couple of hard-coded -1\ninstead of AUDIO_STREAM_DEFAULT, and in startToneCommand a hard-coded 0\ninstead of AUDIO_STREAM_VOICE_CALL.\n\nChange-Id: Ia33bfd70edca8c2daec9052984b369cd8eee2a83\n"
    },
    {
      "commit": "4cc55d53d542c4f4ed645738cebb65b9e7eb6c44",
      "tree": "417efab1bc349bfaa4bdf7fccdff0e53fb76e7c0",
      "parents": [
        "d5a8bf0bca459389cdb81fdcc30893516bdce951",
        "e1c3962e268ffc12bfd1bd9ea84da1f135f36960"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 12 10:30:28 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 12 10:30:28 2012 -0800"
      },
      "message": "Merge \"Use audio_format_t consistently\""
    },
    {
      "commit": "e1c3962e268ffc12bfd1bd9ea84da1f135f36960",
      "tree": "d24fac9434dbe5808a6c31a50414da7b5ce47c9a",
      "parents": [
        "a2a0a5d7d56baa831870f4bf2a0d942a477d92ef"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jan 04 09:36:37 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 05 13:34:54 2012 -0800"
      },
      "message": "Use audio_format_t consistently\n\nWas int, uint32_t, uint16_t, and uint8_t with 2-bit bitfield.\nAlso replace 0 by AUDIO_FORMAT_DEFAULT and replace 1 by\nAUDIO_FORMAT_PCM_16_BIT.\n\nChange-Id: Ia8804f53f1725669e368857d5bb2044917e17975\n"
    },
    {
      "commit": "9a2aaf927e56a4b4acab23ef16b3f133a9f48a63",
      "tree": "c4bbdbe2a7e0292105736849e28faf12d298e47c",
      "parents": [
        "a2a0a5d7d56baa831870f4bf2a0d942a477d92ef"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jan 03 09:42:47 2012 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jan 05 11:55:24 2012 -0800"
      },
      "message": "Clean up AudioTrack::mActive and stopped()\n\nmActive is protected by mLock; volatile is meaningless on SMP.\n\nFixed a couple of places where mActive was accessed without a lock:\n - stopped()\n - processAudioBuffer()\n\nAdded stopped_l() for cases where we already hold the lock.\n\nMade mActive a bool not int.\n\nMoved down a lock in setPosition that was being acquired too early.\n\nChange-Id: I73ff368e991c0db9f9472df0b3f96fd33fcc7311\n"
    },
    {
      "commit": "362c4e697d8e9c034e964ac7b40227e054491547",
      "tree": "dde3ca3f11e00cc82f1b6a6bd7ebe7b1c24421c5",
      "parents": [
        "eebeceec684a36222b4559e3157b0db04c0a67ed"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 14 10:28:06 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Dec 14 14:38:26 2011 -0800"
      },
      "message": "Audio C++ comments\n\nChange-Id: I84906ebb9dfcfa5b96b287d18364b407f02a30c1\n"
    },
    {
      "commit": "c9260c15c1e7e2743039c964b8769379a3fff332",
      "tree": "cd829dd370a04344ec40f73c20dff6e8cc8b7793",
      "parents": [
        "926798f8c21ab002d9797ef8973852a2612c1f75",
        "b68a91a70bc8d0d18e7404e14443d4e4020b3635"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Nov 28 14:54:28 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Nov 28 14:54:28 2011 -0800"
      },
      "message": "Merge \"Make AudioTrack a RefBase so wrappers not needed\""
    },
    {
      "commit": "879135196fd1c97deefc538c888037c56c2879a7",
      "tree": "3ee39136a951bf1fbb25e0b484c3c1b6709c5868",
      "parents": [
        "5c052218128013d630b4d9a84393ebfbff11f3e8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 22 16:15:25 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Nov 16 14:52:55 2011 -0800"
      },
      "message": "Bug 4903178 Restore priority and cgroup on stop\n\nOn AudioTrack and AudioRecord stop or failed start, restore the priority\nand cgroup of the caller to their previous values, rather than forcing\nto NORMAL.  Dependent on new thread APIs.\n\nAlso fixes bug where priority was set to AUDIO but cgroup not set.\n\nChange-Id: Ib83893918fb4fdf57c6b87884b51038997a631d8\n"
    },
    {
      "commit": "b68a91a70bc8d0d18e7404e14443d4e4020b3635",
      "tree": "e885c21714d54383f2fad17ac4d98cd6c822550e",
      "parents": [
        "5c052218128013d630b4d9a84393ebfbff11f3e8"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Nov 15 13:55:13 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Nov 15 14:26:09 2011 -0800"
      },
      "message": "Make AudioTrack a RefBase so wrappers not needed\n\nChange-Id: I2305abe586ac41251af04a194bc818c110a1b293\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"
    }
  ],
  "next": "7b5eb023f8d87cca6d830ae6c11c6aadbe02aca8"
}
