)]}'
{
  "log": [
    {
      "commit": "76a49d617cd817d5be4618757e8d8400aeaad8c9",
      "tree": "360bd0ba999213cf9463c6613d155eb4e57d8f12",
      "parents": [
        "175c7b7e4d9450e017e4453b97cb836da199db67"
      ],
      "author": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Fri Jul 12 11:20:33 2019 -0700"
      },
      "committer": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Fri Jul 12 20:01:55 2019 +0000"
      },
      "message": "Reuse frame decoder for sequential frame retrievel\n\nAllow sequential frame retrieval to reuse the decoder without\nre-init and re-seek.\n\nGet rid of IMediaMetadataRetriever api that retrieves multiple\nframes at a time, this method could hold up more memory than\nwhat\u0027s needed, because the client side has to copy the frames\nto a separate set of bitmaps anyways.\n\nThis change is needed to support animation Drawbles efficiently\nwhich typically get one frame at a time.\n\nbug: 120414514\ntest: cts MediaMetadataRetrieverTest, local tests that tests MetadataRetriever thumbnails\n\nChange-Id: I09924408b51bc7491fc5dee121dce9a286c5911f\n"
    },
    {
      "commit": "0c1407f79ef36422330c2003a608d37df714256b",
      "tree": "04eb9f45da49543f2ad97040a692ea245f8906bd",
      "parents": [
        "0c1f9148ed187a9c3819374050c5ea319b059439"
      ],
      "author": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Wed May 02 17:09:05 2018 -0700"
      },
      "committer": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Mon May 07 19:38:05 2018 -0700"
      },
      "message": "Decode one row of tiles at a time for image that has tiles\n\nAdd an api to IMediaMetadataRetriever to decode image rect.\nIt will reuse the same full frame IMemory, and decode only\nthe requested rect. For now, StagefrightMetadataRetriever\nwill only allow decoding of rect that\u0027s a full row of tiles,\nand the requested must be issued sequentially (i.e. no\narbitrary rects). When the extract side is fixed to allow\nseeking by tiles, it can be extended to allow arbitrary\nrects.\n\nThis allows HeifDecoderImpl (on client side) to start\nprocessing the getScanlines in parallel with the decoding.\n\nTest: CTS MediaMetadataRetrieverTest;\nManual testing of HEIF decoding of files with or without tiles;\nManual testing of HEIF thumbnails generation in Downloads app.\n\nbug: 78475896\nChange-Id: I820b21cdf33f80593ee6092d8e1ba68b3beb65dd\n"
    },
    {
      "commit": "f49d8f7b8c5f77016e9ba848219966890c9810a8",
      "tree": "7d1e93b291b1dc863d1a82eb3e313fe0f84077ad",
      "parents": [
        "8d1c940af4afef9c066e5924fed495ba8136ae34"
      ],
      "author": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Wed May 02 12:31:57 2018 -0700"
      },
      "committer": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Thu May 03 12:55:12 2018 -0700"
      },
      "message": "Prepare code to allow image decoder to be reused\n\nThis change refactors ImageDecoder to prepare it for reuse\nfor multi-slice decoding. There is no functional change.\n\nbug: 78475896\n\nTest: CTS MediaMetadataRetrieverTest;\nManual test of HEIF image decoding and thumbnail extraction.\n\nChange-Id: I8c16042020c7db3d3714d22322e6304ea4192e33\n"
    },
    {
      "commit": "d5fa357ddff0589d8a331583a56e62712af471be",
      "tree": "64a6fec9e99d8aee6e721d42fd5fc6b2c2b17a3f",
      "parents": [
        "2383098d54b6503875bdf0c6b649fa66f22d79ac"
      ],
      "author": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Mon Apr 09 19:03:10 2018 -0700"
      },
      "committer": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Thu Apr 12 00:08:38 2018 +0000"
      },
      "message": "Use heif embedded thumbnail if available\n\nAdd plumbing to retieve the embedded thumbnail from\nMPEG4Extractor/ItemTable.\n\nbug: 74395267\nTest: CTS MediaMetadataRetriever test; manual test of thumbnail\nextraction by browsing new folders containing heif files in\nDownloads app.\nChange-Id: Ic49f6dfa47eddc229b9f4b0e1835d58df1dce9f8\n"
    },
    {
      "commit": "d3e0d861aa68a7ef129fe228595bff734448ebc8",
      "tree": "4bbe13bb4dee4cc5f6059f4f0898f615beac820f",
      "parents": [
        "1e848d329b019e832a03c0e9d0e4eb6796c971c2"
      ],
      "author": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Tue Oct 03 13:17:13 2017 -0700"
      },
      "committer": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Mon Oct 30 19:58:30 2017 +0000"
      },
      "message": "heif: fixes for image sequences and dual-function files\n\nAdding support for two new sets of APIs on MediaMetadataRetriever:\n\n- getImageAtIndex() and getPrimaryImage()\n- getFrameAtIndex() and getFramesAtIndex()\n\nOutline of changes:\n\n- Proper indexing of all displayable still images, so that they\n  can be retrieved by getImageAtIndex()\n\n- Exposing still images as \"image/x.android.heic\" tracks in\n  MediaExtractor with necessary descriptive keys (such as \"grid-*\")\n\n- Support to retrieve video frames by absolute index instead\n  of timestamps, as image use cases mostly are interested in\n  getting the images and care less about timing.\n\n- Support to retrieve video frames in batches because retrieving\n  one frame at a time is inefficient.\n\n- Refactor image / frame decoding code into FrameDecoder, and split\n  still image decoding and video sequence decoding into to sub\n  classes to facilite future development.\n\nbug: 63633199\n\ntest:\ncts-tradefed run cts-dev --module CtsMediaTestCases --compatibility:module-arg CtsMediaTestCases:include-annotation:android.platform.test.annotations.RequiresDevice\n\nChange-Id: I2fe8519fb6907f315a8b513921fc1cc7f436e28d\n"
    },
    {
      "commit": "24c15776247c46e34562100213035bb7aaffe013",
      "tree": "3eb89bc53d5fab0a123ecae17400985eb43077de",
      "parents": [
        "026d520295b52d136a6962a05882a696fe620725"
      ],
      "author": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Wed Jul 26 16:25:28 2017 -0700"
      },
      "committer": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Tue Aug 08 16:52:10 2017 -0700"
      },
      "message": "stagefright: MetadataRetriever API to specify mime and color format\n\n- Allow setDataSource() to specify mime. In case of HEIF decoding\n  request from skia, we don\u0027t want to sniff any other format other\n  than mp4.\n\n- Allow getFrameAtTime() to specify dst color format.\n\nbug: 64077740\n\nTest: cts-tradefed run cts-dev --module CtsMediaTestCases --compatibility:module-arg CtsMediaTestCases:include-annotation:android.platform.test.annotations.RequiresDevice\n\nChange-Id: I471f41c28a2252417c4b3331dcfd4bd00a24408a\n"
    },
    {
      "commit": "6155085b781a81af66d42d907c9f4d1063999594",
      "tree": "8296eeaa60734e6f5711b1487aa793fa5eef0a99",
      "parents": [
        "ad9ef61e770c0751a9983aa5c9844dfeb9ed665b"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Jun 12 15:31:23 2015 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Fri Jun 12 15:31:23 2015 -0700"
      },
      "message": "Serialize calls to getFrameAtTime in the mediaserver\n\nto avoid running out of memory.\n\nBug: 21277449\nChange-Id: I7210806a24958f38d86aadab0310fc263e4c0edf\n"
    },
    {
      "commit": "6d339f1f764bbd32e3381dae7bfa7c6c575bb493",
      "tree": "3b29d455c9f3ac73327a0117d2bc18d8b199a265",
      "parents": [
        "ee4e1b1a63758941460ae79a064249d3a5189443"
      ],
      "author": {
        "name": "Lajos Molnar",
        "email": "lajos@google.com",
        "time": "Fri Apr 17 16:15:53 2015 -0700"
      },
      "committer": {
        "name": "Lajos Molnar",
        "email": "lajos@google.com",
        "time": "Fri Apr 17 16:16:27 2015 -0700"
      },
      "message": "libmediaplayerservice: fix warnings, make warnings errors, use clang\n\nChange-Id: I1b2f6b65c5abbc366068a60b8909104f31b94228\n"
    },
    {
      "commit": "99f31604136d66ae10e20669fb6b5716f342bde0",
      "tree": "20e64f4f26533b37b087ce8656b1040b8189e24f",
      "parents": [
        "2f33dbc6ca08d45efea2df775c158e2a11e07ab6"
      ],
      "author": {
        "name": "Chris Watkins",
        "email": "watk@google.com",
        "time": "Fri Mar 20 13:06:33 2015 -0700"
      },
      "committer": {
        "name": "Chris Watkins",
        "email": "watk@google.com",
        "time": "Wed Apr 15 17:12:22 2015 -0700"
      },
      "message": "Unhide the android.media.[Media]DataSource interface.\n\nThis allows apps to implement MediaDataSource, which is modeled on\nstagefright\u0027s DataSource, to supply media data to the framework. This\nwas already implemented for MediaExtractor, but it was renamed from\nDataSource.\n\nMediaExtractor, MediaPlayer and MediaMetadataRetriever each have a new\noverload: #setDataSource(android.media.MediaDataSource)\n\nOnly NuPlayer supports this new data source.\n\nThe change introduces:\n * IDataSource:        The binder interface for DataSource.\n * JMediaDataSource:   The native counterpart to the java interface. It\n                       implements IDataSource.\n * CallbackDataSource: A stagefright DataSource that wraps an\n                       IDataSource.\n\nChange-Id: Ib3c944b49cc8a792c8eb9c85e5015c07f298ebc1\n"
    },
    {
      "commit": "1b86fe063badb5f28c467ade39be0f4008688947",
      "tree": "d88660112d407540184ad8e1292ed8aa98fae317",
      "parents": [
        "5ce88270eb2d41462de8c4155673b802b2ca48cb"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Wed Jan 29 11:13:26 2014 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Feb 04 15:11:53 2014 -0800"
      },
      "message": "FINAL ATTEMPT: HTTP services are now provided from JAVA and made available to media code\n\nChange-Id: I9f74a86e70422187c9cf0ca1318a29019700192d\n"
    },
    {
      "commit": "af8791e112c8072452bd14ef3c43a47511d19542",
      "tree": "dc914f57bfb84ec7a1729581d66c06e0cad89125",
      "parents": [
        "ebd5d2541d4e5351fd1f1a23fc9ef047cfa67575"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Mar 21 10:25:44 2011 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Mar 21 11:13:59 2011 -0700"
      },
      "message": "Support passing headers to MediaMetadataRetriever\u0027s setDataSource API\n\nChange-Id: Ib1a5c08fc5034cac05034db27007a35c9b660b26\nrelated-to-bug: 3506316\n"
    },
    {
      "commit": "7f7d52ac18dfc3c6d8f6267dad29306613e9bd0e",
      "tree": "5e17f415d44cdba3c8b37a42c487e28e26593a64",
      "parents": [
        "67988a9ba5a081d14dbd8a663516e1d484d829df"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Thu Jan 06 12:20:35 2011 -0800"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Wed Jan 12 14:14:11 2011 -0800"
      },
      "message": "Publish MediaMetadataRetriever.java as public API\n\no Removed setMode() methods and related mode constants\no Removed some of the unused the metadata keys\no Updated the javadoc\n\no part of a multi-project change.\n\nbug - 2433195\n\nChange-Id: I5ed167f1fd6a53cb143b7dc385b149431d434438\n"
    },
    {
      "commit": "16afe2fb439cab6125bb46a07a8078d4ce1c1ea5",
      "tree": "146e5ad9abfa370d35b2a8912a4887356764b1e2",
      "parents": [
        "1cc73922339a110d7ffc47e8842f958492dd85bf"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Thu Dec 02 17:42:08 2010 -0800"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Fri Dec 03 15:32:47 2010 -0800"
      },
      "message": "Prepare for publishing MediaMetadataRetriever as public API\n\nstep one:\no replaced captureFrame with getFrameAtTime\no removed getMode\n\nbug - 2433195\n\nChange-Id: I38a8cecef29014692f0b08b8818326e3ebb40a12\n"
    },
    {
      "commit": "6b3359d4669f539c173bfc40809deb8ffde3dd0c",
      "tree": "0eee8468a9d1fa3fa7b960a07e6980a1bed5c03c",
      "parents": [
        "036a38099c9d339d77dc4a1a148db2907a618c2e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Jan 29 17:16:30 2010 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Jan 29 17:16:30 2010 -0800"
      },
      "message": "Don\u0027t use MemoryDealer in MetadataRetrieverClient as it\u0027s not necessary.\n\nUse a MemoryHeapBase directly instead.\n"
    },
    {
      "commit": "ec4dde75955f87e5afea3f59ef991130257f3f3a",
      "tree": "68bdeed14853f8f8a2678acb2b875487e7af706a",
      "parents": [
        "4ddf30b2b118068d82bb37858186d668eddbbe6d"
      ],
      "author": {
        "name": "Dave Sparks",
        "email": "davidsparks@android.com",
        "time": "Mon Nov 23 16:51:15 2009 -0800"
      },
      "committer": {
        "name": "Dave Sparks",
        "email": "davidsparks@android.com",
        "time": "Mon Nov 23 16:51:15 2009 -0800"
      },
      "message": "Set metadata retriever thread group to the caller\u0027s group.\n\nThis patch modifies the native binder interface to the metadata\nretriever to pass the caller\u0027s thread group across the binder\ninterface. On the server side, the thread scheduler group is\nset to the caller\u0027s scheduler group temporarily and restored\nafter the request has completed. This patch also reverts a\nprevious patch where the priority of the thread was forced to\na low priority foreground thread.\n\nThis should give apps more control over the priority of their\nmetadata retrieval, particularly allow background process to\nrun without hogging the CPU.\n"
    },
    {
      "commit": "41fbe930c0c128bcded1348e60d7d9e8f79d8a77",
      "tree": "eaeff7d7642de923d7b61f0edc0bc2591d4746c0",
      "parents": [
        "88e5ad9f0d9b35d4868347bce47b28b7358b32e4"
      ],
      "author": {
        "name": "Dave Sparks",
        "email": "davidsparks@android.com",
        "time": "Mon Oct 26 16:28:26 2009 -0700"
      },
      "committer": {
        "name": "Dave Sparks",
        "email": "davidsparks@android.com",
        "time": "Mon Oct 26 16:28:26 2009 -0700"
      },
      "message": "Run the metadataretriever at background priority. Bug 2187133.\n\nThis change forces metadata retreiver threads to background priority.\nUses an inner class to encapsulate the priority change so that it\nautomatically restores priority when returning to the client.\n"
    },
    {
      "commit": "a569aebd284506058a34d9772ebb28c8dac09aa3",
      "tree": "9d30a75250c6def34a24c31bf77ff65f7f22e850",
      "parents": [
        "824b6a4a67166c3937400702944f659bd0d5d386"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Tue Sep 29 10:45:27 2009 -0700"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Tue Sep 29 12:43:12 2009 -0700"
      },
      "message": "Fix some metadata retriever issues:\n1. mRetriever was initialized twice: one in the constructor and the other in the setDataSource\n2. cached the mode so that setMode can still be called before setDataSource.\n   mRetriever won\u0027t be initialized until data source is set; thus we have to do this\n"
    },
    {
      "commit": "273d098cc72a88c797d01c7dff0c1350f315f05f",
      "tree": "09649a3bad715a7881d8e64ade1493a07c9df1d9",
      "parents": [
        "489d60ec36c3927c9ee0bc14a44c1c77b74c09f6"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sun May 31 19:13:00 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sun May 31 19:13:00 2009 -0700"
      },
      "message": "get rid of utils.h\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": "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": "7b5eb023f8d87cca6d830ae6c11c6aadbe02aca8",
      "tree": "d9838a098f868ee2fcffc20627a8c9a33cb23377",
      "parents": [
        "2729ea9262ca60d93047e984739887cfc89e82eb"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Dec 17 18:05:43 2008 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Dec 17 18:05:43 2008 -0800"
      },
      "message": "Code drop from //branches/cupcake/...@124589\n"
    }
  ]
}
