{"action":"created","comment":{"url":"https://api.github.com/repos/01org/libyami/pulls/comments/75239244","id":75239244,"diff_hunk":"@@ -0,0 +1,323 @@\n+/*\n+ * Copyright (C) 2014 Intel Corporation. All rights reserved.\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ *     http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+\n+#ifdef HAVE_CONFIG_H\n+#include \"config.h\"\n+#endif\n+\n+#include \"vaapiencoder_vp9.h\"\n+#include \"common/scopedlogger.h\"\n+#include \"common/common_def.h\"\n+#include \"vaapi/vaapicontext.h\"\n+#include \"vaapi/vaapidisplay.h\"\n+#include \"vaapicodedbuffer.h\"\n+#include \"vaapiencpicture.h\"\n+#include \"vaapiencoder_factory.h\"\n+#include <algorithm>\n+\n+namespace YamiMediaCodec {\n+\n+// each frame can have at most 3 reference frames, golden, alt and last\n+enum maxSizeValues {\n+    kMaxReferenceFrames = 8,\n+    kMaxWidth = 8192,\n+    kMaxHeight = kMaxWidth\n+};\n+\n+enum VP9QPValues { kMinQPValue = 9, kDefaultQPValue = 60, kMaxQPValue = 127 };\n+\n+enum frameType { kKeyFrame, kInterFrame };\n+\n+enum levelValues { kDefaultSharpnessLevel, kDefaultFilterLevel = 10 };\n+\n+class VaapiEncPictureVP9 : public VaapiEncPicture {\n+public:\n+    VaapiEncPictureVP9(const ContextPtr& context, const SurfacePtr& surface,\n+                       int64_t timeStamp)\n+        : VaapiEncPicture(context, surface, timeStamp)\n+    {\n+        return;\n+    }\n+\n+    VAGenericID getCodedBufferID() { return m_codedBuffer->getID(); }\n+};\n+\n+VaapiEncoderVP9::VaapiEncoderVP9()\n+    : m_frameCount(0)\n+{\n+    m_videoParamCommon.profile = VAProfileVP9Profile0;\n+    m_videoParamCommon.rcParams.minQP = kMinQPValue;\n+    m_videoParamCommon.rcParams.maxQP = kMaxQPValue;\n+    m_videoParamCommon.rcParams.initQP = kDefaultQPValue;\n+\n+    //add extra surfaces to operate due to kMaxReferenceFrames\n+    //vaapi_encoder class will create 5 extra surfaces already\n+    m_maxOutputBuffer = kMaxReferenceFrames;\n+}\n+\n+VaapiEncoderVP9::~VaapiEncoderVP9() {}\n+\n+YamiStatus VaapiEncoderVP9::getMaxOutSize(uint32_t* maxSize)\n+{\n+    FUNC_ENTER();\n+    *maxSize = m_maxCodedbufSize;\n+    return YAMI_SUCCESS;\n+}\n+\n+void VaapiEncoderVP9::resetParams()\n+{\n+    m_maxCodedbufSize = width() * height() * 3 / 2;\n+\n+    // adding extra padding.  In particular small resolutions require more\n+    // space depending on other quantization parameters during execution. The\n+    // value below is a good compromise\n+    m_maxCodedbufSize += 0x1000;\n+}\n+\n+YamiStatus VaapiEncoderVP9::start()\n+{\n+    FUNC_ENTER();\n+    resetParams();\n+    return VaapiEncoderBase::start();\n+}\n+\n+void VaapiEncoderVP9::flush()\n+{\n+    FUNC_ENTER();\n+    m_frameCount = 0;\n+    m_reference.clear();\n+    VaapiEncoderBase::flush();\n+}\n+\n+YamiStatus VaapiEncoderVP9::stop()\n+{\n+    flush();\n+    return VaapiEncoderBase::stop();\n+}\n+\n+YamiStatus VaapiEncoderVP9::setParameters(VideoParamConfigType type,\n+                                          Yami_PTR videoEncParams)\n+{\n+    YamiStatus status = YAMI_SUCCESS;\n+    FUNC_ENTER();\n+    if (!videoEncParams)\n+        return YAMI_INVALID_PARAM;\n+\n+    switch (type) {\n+    default:\n+        status = VaapiEncoderBase::setParameters(type, videoEncParams);\n+        break;\n+    }\n+    return status;\n+}\n+\n+YamiStatus VaapiEncoderVP9::getParameters(VideoParamConfigType type,\n+                                          Yami_PTR videoEncParams)\n+{\n+    FUNC_ENTER();\n+    if (!videoEncParams)\n+        return YAMI_INVALID_PARAM;\n+\n+    return VaapiEncoderBase::getParameters(type, videoEncParams);\n+}\n+\n+YamiStatus VaapiEncoderVP9::doEncode(const SurfacePtr& surface,\n+                                     uint64_t timeStamp, bool forceKeyFrame)\n+{\n+    YamiStatus ret;\n+    if (!surface)\n+        return YAMI_INVALID_PARAM;\n+\n+    PicturePtr picture(new VaapiEncPictureVP9(m_context, surface, timeStamp));\n+\n+    m_frameCount %= keyFramePeriod();\n+    picture->m_type = (m_frameCount ? VAAPI_PICTURE_P : VAAPI_PICTURE_I);\n+    m_frameCount++;\n+\n+    CodedBufferPtr codedBuffer\n+        = VaapiCodedBuffer::create(m_context, m_maxCodedbufSize);\n+    if (!codedBuffer)\n+        return YAMI_OUT_MEMORY;\n+    picture->m_codedBuffer = codedBuffer;\n+    codedBuffer->setFlag(ENCODE_BUFFERFLAG_ENDOFFRAME);\n+    if (picture->m_type == VAAPI_PICTURE_I) {\n+        codedBuffer->setFlag(ENCODE_BUFFERFLAG_SYNCFRAME);\n+    }\n+    ret = encodePicture(picture);\n+    if (ret != YAMI_SUCCESS) {\n+        return ret;\n+    }\n+    output(picture);\n+    return YAMI_SUCCESS;\n+}\n+\n+bool VaapiEncoderVP9::fill(VAEncSequenceParameterBufferVP9* seqParam) const\n+{\n+    seqParam->max_frame_width = kMaxWidth;\n+    seqParam->max_frame_height = kMaxHeight;\n+\n+    seqParam->bits_per_second = bitRate();\n+    seqParam->intra_period = intraPeriod();\n+    seqParam->kf_min_dist = 1;\n+    seqParam->kf_max_dist = intraPeriod();\n+\n+    return true;\n+}\n+\n+// Fills in VA picture parameter buffer\n+bool VaapiEncoderVP9::fill(VAEncPictureParameterBufferVP9* picParam,\n+                           const PicturePtr& picture,\n+                           const SurfacePtr& surface) const\n+{\n+    picParam->reconstructed_frame = surface->getID();\n+    picParam->coded_buf = picture->getCodedBufferID();\n+\n+    if (picture->m_type == VAAPI_PICTURE_I) {\n+        memset(picParam->reference_frames, 0xFF,\n+               sizeof(picParam->reference_frames));\n+    }\n+    else {\n+        picParam->refresh_frame_flags = 0x01; //refresh last frame\n+        picParam->pic_flags.bits.frame_type = kInterFrame;\n+\n+        ReferenceQueue::const_iterator it = m_reference.begin();\n+\n+        for (uint32_t i = 0; it != m_reference.end(); ++it, i++)\n+            picParam->reference_frames[i] = (*it)->getID();\n+\n+        it = m_reference.begin();\n+\n+        // last/golden/alt is used as reference frame. L0 forward\n+        picParam->ref_flags.bits.ref_frame_ctrl_l0 = 0x7;","path":"encoder/vaapiencoder_vp9.cpp","position":204,"original_position":204,"commit_id":"b81cecaa22045c13b0845ac5ed750acc979ad4be","original_commit_id":"b81cecaa22045c13b0845ac5ed750acc979ad4be","user":{"login":"xuguangxin","id":6667546,"avatar_url":"https://avatars.githubusercontent.com/u/6667546?v=3","gravatar_id":"","url":"https://api.github.com/users/xuguangxin","html_url":"https://github.com/xuguangxin","followers_url":"https://api.github.com/users/xuguangxin/followers","following_url":"https://api.github.com/users/xuguangxin/following{/other_user}","gists_url":"https://api.github.com/users/xuguangxin/gists{/gist_id}","starred_url":"https://api.github.com/users/xuguangxin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xuguangxin/subscriptions","organizations_url":"https://api.github.com/users/xuguangxin/orgs","repos_url":"https://api.github.com/users/xuguangxin/repos","events_url":"https://api.github.com/users/xuguangxin/events{/privacy}","received_events_url":"https://api.github.com/users/xuguangxin/received_events","type":"User","site_admin":false},"body":"I see ref_frame_ctrl_l1 in define too. When to use l1?  Is it improve image quality if we use l0 and l1 at same time.","created_at":"2016-08-18T02:12:55Z","updated_at":"2016-08-18T02:12:55Z","html_url":"https://github.com/01org/libyami/pull/534#discussion_r75239244","pull_request_url":"https://api.github.com/repos/01org/libyami/pulls/534","_links":{"self":{"href":"https://api.github.com/repos/01org/libyami/pulls/comments/75239244"},"html":{"href":"https://github.com/01org/libyami/pull/534#discussion_r75239244"},"pull_request":{"href":"https://api.github.com/repos/01org/libyami/pulls/534"}}},"pull_request":{"url":"https://api.github.com/repos/01org/libyami/pulls/534","id":81536255,"html_url":"https://github.com/01org/libyami/pull/534","diff_url":"https://github.com/01org/libyami/pull/534.diff","patch_url":"https://github.com/01org/libyami/pull/534.patch","issue_url":"https://api.github.com/repos/01org/libyami/issues/534","number":534,"state":"open","locked":false,"title":"Vp9encoder Initial implementation","user":{"login":"chivakker","id":69215,"avatar_url":"https://avatars.githubusercontent.com/u/69215?v=3","gravatar_id":"","url":"https://api.github.com/users/chivakker","html_url":"https://github.com/chivakker","followers_url":"https://api.github.com/users/chivakker/followers","following_url":"https://api.github.com/users/chivakker/following{/other_user}","gists_url":"https://api.github.com/users/chivakker/gists{/gist_id}","starred_url":"https://api.github.com/users/chivakker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chivakker/subscriptions","organizations_url":"https://api.github.com/users/chivakker/orgs","repos_url":"https://api.github.com/users/chivakker/repos","events_url":"https://api.github.com/users/chivakker/events{/privacy}","received_events_url":"https://api.github.com/users/chivakker/received_events","type":"User","site_admin":false},"body":"Initial Implementation for vp9 encoder on libyami.\r\n\r\nIt supports:\r\n\r\nCQP CBR, key frame and inter frame.\r\nSome parameters will be available to command line on yamiencode with future patches.\r\nCurrent reference scheme uses golden, alternate reference to the previous key frame, last reference frame is the previous encoded frame.\r\n\r\nFor this patch to work properly it required some fixes on the driver level.  So, to actually validate it the recommended sha's for libva and libva-intel-driver are:\r\n\r\nlibva:\r\ncommit\tb27feb9b8e62725fed959c090feb2f1c853f74b3\r\ntree\t65a88a229d71fbc5f50c7f6e9a890f911a7bd994\r\nparent\t695f99ef0405cf4255e7767b44effb0da2fe706e\r\n\r\n\r\nlibva-intel-driver: \r\ncommit\t98555d27c8291fe2511355d53924d17a5263dc22\r\ntree\tc34ff240a83e1ab20f9862ab952318ac147560ae\r\nparent\t3e115315e9ef2df1b3d8f64bced69d0f685c6651","created_at":"2016-08-16T20:12:24Z","updated_at":"2016-08-18T02:12:55Z","closed_at":null,"merged_at":null,"merge_commit_sha":"020e120d381b01b3c268de15594764b8f5d143f2","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/01org/libyami/pulls/534/commits","review_comments_url":"https://api.github.com/repos/01org/libyami/pulls/534/comments","review_comment_url":"https://api.github.com/repos/01org/libyami/pulls/comments{/number}","comments_url":"https://api.github.com/repos/01org/libyami/issues/534/comments","statuses_url":"https://api.github.com/repos/01org/libyami/statuses/b81cecaa22045c13b0845ac5ed750acc979ad4be","head":{"label":"chivakker:vp9enc_final","ref":"vp9enc_final","sha":"b81cecaa22045c13b0845ac5ed750acc979ad4be","user":{"login":"chivakker","id":69215,"avatar_url":"https://avatars.githubusercontent.com/u/69215?v=3","gravatar_id":"","url":"https://api.github.com/users/chivakker","html_url":"https://github.com/chivakker","followers_url":"https://api.github.com/users/chivakker/followers","following_url":"https://api.github.com/users/chivakker/following{/other_user}","gists_url":"https://api.github.com/users/chivakker/gists{/gist_id}","starred_url":"https://api.github.com/users/chivakker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chivakker/subscriptions","organizations_url":"https://api.github.com/users/chivakker/orgs","repos_url":"https://api.github.com/users/chivakker/repos","events_url":"https://api.github.com/users/chivakker/events{/privacy}","received_events_url":"https://api.github.com/users/chivakker/received_events","type":"User","site_admin":false},"repo":{"id":21183113,"name":"libyami","full_name":"chivakker/libyami","owner":{"login":"chivakker","id":69215,"avatar_url":"https://avatars.githubusercontent.com/u/69215?v=3","gravatar_id":"","url":"https://api.github.com/users/chivakker","html_url":"https://github.com/chivakker","followers_url":"https://api.github.com/users/chivakker/followers","following_url":"https://api.github.com/users/chivakker/following{/other_user}","gists_url":"https://api.github.com/users/chivakker/gists{/gist_id}","starred_url":"https://api.github.com/users/chivakker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chivakker/subscriptions","organizations_url":"https://api.github.com/users/chivakker/orgs","repos_url":"https://api.github.com/users/chivakker/repos","events_url":"https://api.github.com/users/chivakker/events{/privacy}","received_events_url":"https://api.github.com/users/chivakker/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/chivakker/libyami","description":"Yet Another Media Infrastructure. it is core part of media codec with hardware acceleration, it is yummy to your video experience on Linux like platform.","fork":true,"url":"https://api.github.com/repos/chivakker/libyami","forks_url":"https://api.github.com/repos/chivakker/libyami/forks","keys_url":"https://api.github.com/repos/chivakker/libyami/keys{/key_id}","collaborators_url":"https://api.github.com/repos/chivakker/libyami/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/chivakker/libyami/teams","hooks_url":"https://api.github.com/repos/chivakker/libyami/hooks","issue_events_url":"https://api.github.com/repos/chivakker/libyami/issues/events{/number}","events_url":"https://api.github.com/repos/chivakker/libyami/events","assignees_url":"https://api.github.com/repos/chivakker/libyami/assignees{/user}","branches_url":"https://api.github.com/repos/chivakker/libyami/branches{/branch}","tags_url":"https://api.github.com/repos/chivakker/libyami/tags","blobs_url":"https://api.github.com/repos/chivakker/libyami/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/chivakker/libyami/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/chivakker/libyami/git/refs{/sha}","trees_url":"https://api.github.com/repos/chivakker/libyami/git/trees{/sha}","statuses_url":"https://api.github.com/repos/chivakker/libyami/statuses/{sha}","languages_url":"https://api.github.com/repos/chivakker/libyami/languages","stargazers_url":"https://api.github.com/repos/chivakker/libyami/stargazers","contributors_url":"https://api.github.com/repos/chivakker/libyami/contributors","subscribers_url":"https://api.github.com/repos/chivakker/libyami/subscribers","subscription_url":"https://api.github.com/repos/chivakker/libyami/subscription","commits_url":"https://api.github.com/repos/chivakker/libyami/commits{/sha}","git_commits_url":"https://api.github.com/repos/chivakker/libyami/git/commits{/sha}","comments_url":"https://api.github.com/repos/chivakker/libyami/comments{/number}","issue_comment_url":"https://api.github.com/repos/chivakker/libyami/issues/comments{/number}","contents_url":"https://api.github.com/repos/chivakker/libyami/contents/{+path}","compare_url":"https://api.github.com/repos/chivakker/libyami/compare/{base}...{head}","merges_url":"https://api.github.com/repos/chivakker/libyami/merges","archive_url":"https://api.github.com/repos/chivakker/libyami/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/chivakker/libyami/downloads","issues_url":"https://api.github.com/repos/chivakker/libyami/issues{/number}","pulls_url":"https://api.github.com/repos/chivakker/libyami/pulls{/number}","milestones_url":"https://api.github.com/repos/chivakker/libyami/milestones{/number}","notifications_url":"https://api.github.com/repos/chivakker/libyami/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/chivakker/libyami/labels{/name}","releases_url":"https://api.github.com/repos/chivakker/libyami/releases{/id}","deployments_url":"https://api.github.com/repos/chivakker/libyami/deployments","created_at":"2014-06-24T22:40:20Z","updated_at":"2016-07-18T20:32:28Z","pushed_at":"2016-08-16T20:09:58Z","git_url":"git://github.com/chivakker/libyami.git","ssh_url":"git@github.com:chivakker/libyami.git","clone_url":"https://github.com/chivakker/libyami.git","svn_url":"https://github.com/chivakker/libyami","homepage":null,"size":3661,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"01org:apache","ref":"apache","sha":"e0a5f44da3c08637e0833eb0e32e1c284c90dc11","user":{"login":"01org","id":1635439,"avatar_url":"https://avatars.githubusercontent.com/u/1635439?v=3","gravatar_id":"","url":"https://api.github.com/users/01org","html_url":"https://github.com/01org","followers_url":"https://api.github.com/users/01org/followers","following_url":"https://api.github.com/users/01org/following{/other_user}","gists_url":"https://api.github.com/users/01org/gists{/gist_id}","starred_url":"https://api.github.com/users/01org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/01org/subscriptions","organizations_url":"https://api.github.com/users/01org/orgs","repos_url":"https://api.github.com/users/01org/repos","events_url":"https://api.github.com/users/01org/events{/privacy}","received_events_url":"https://api.github.com/users/01org/received_events","type":"Organization","site_admin":false},"repo":{"id":18320220,"name":"libyami","full_name":"01org/libyami","owner":{"login":"01org","id":1635439,"avatar_url":"https://avatars.githubusercontent.com/u/1635439?v=3","gravatar_id":"","url":"https://api.github.com/users/01org","html_url":"https://github.com/01org","followers_url":"https://api.github.com/users/01org/followers","following_url":"https://api.github.com/users/01org/following{/other_user}","gists_url":"https://api.github.com/users/01org/gists{/gist_id}","starred_url":"https://api.github.com/users/01org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/01org/subscriptions","organizations_url":"https://api.github.com/users/01org/orgs","repos_url":"https://api.github.com/users/01org/repos","events_url":"https://api.github.com/users/01org/events{/privacy}","received_events_url":"https://api.github.com/users/01org/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/01org/libyami","description":"Yet Another Media Infrastructure. it is core part of media codec with hardware acceleration, it is yummy to your video experience on Linux like platform.","fork":false,"url":"https://api.github.com/repos/01org/libyami","forks_url":"https://api.github.com/repos/01org/libyami/forks","keys_url":"https://api.github.com/repos/01org/libyami/keys{/key_id}","collaborators_url":"https://api.github.com/repos/01org/libyami/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/01org/libyami/teams","hooks_url":"https://api.github.com/repos/01org/libyami/hooks","issue_events_url":"https://api.github.com/repos/01org/libyami/issues/events{/number}","events_url":"https://api.github.com/repos/01org/libyami/events","assignees_url":"https://api.github.com/repos/01org/libyami/assignees{/user}","branches_url":"https://api.github.com/repos/01org/libyami/branches{/branch}","tags_url":"https://api.github.com/repos/01org/libyami/tags","blobs_url":"https://api.github.com/repos/01org/libyami/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/01org/libyami/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/01org/libyami/git/refs{/sha}","trees_url":"https://api.github.com/repos/01org/libyami/git/trees{/sha}","statuses_url":"https://api.github.com/repos/01org/libyami/statuses/{sha}","languages_url":"https://api.github.com/repos/01org/libyami/languages","stargazers_url":"https://api.github.com/repos/01org/libyami/stargazers","contributors_url":"https://api.github.com/repos/01org/libyami/contributors","subscribers_url":"https://api.github.com/repos/01org/libyami/subscribers","subscription_url":"https://api.github.com/repos/01org/libyami/subscription","commits_url":"https://api.github.com/repos/01org/libyami/commits{/sha}","git_commits_url":"https://api.github.com/repos/01org/libyami/git/commits{/sha}","comments_url":"https://api.github.com/repos/01org/libyami/comments{/number}","issue_comment_url":"https://api.github.com/repos/01org/libyami/issues/comments{/number}","contents_url":"https://api.github.com/repos/01org/libyami/contents/{+path}","compare_url":"https://api.github.com/repos/01org/libyami/compare/{base}...{head}","merges_url":"https://api.github.com/repos/01org/libyami/merges","archive_url":"https://api.github.com/repos/01org/libyami/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/01org/libyami/downloads","issues_url":"https://api.github.com/repos/01org/libyami/issues{/number}","pulls_url":"https://api.github.com/repos/01org/libyami/pulls{/number}","milestones_url":"https://api.github.com/repos/01org/libyami/milestones{/number}","notifications_url":"https://api.github.com/repos/01org/libyami/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/01org/libyami/labels{/name}","releases_url":"https://api.github.com/repos/01org/libyami/releases{/id}","deployments_url":"https://api.github.com/repos/01org/libyami/deployments","created_at":"2014-04-01T06:44:19Z","updated_at":"2016-08-17T02:44:54Z","pushed_at":"2016-08-18T01:31:45Z","git_url":"git://github.com/01org/libyami.git","ssh_url":"git@github.com:01org/libyami.git","clone_url":"https://github.com/01org/libyami.git","svn_url":"https://github.com/01org/libyami","homepage":null,"size":4891,"stargazers_count":38,"watchers_count":38,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":56,"mirror_url":null,"open_issues_count":27,"forks":56,"open_issues":27,"watchers":38,"default_branch":"apache"}},"_links":{"self":{"href":"https://api.github.com/repos/01org/libyami/pulls/534"},"html":{"href":"https://github.com/01org/libyami/pull/534"},"issue":{"href":"https://api.github.com/repos/01org/libyami/issues/534"},"comments":{"href":"https://api.github.com/repos/01org/libyami/issues/534/comments"},"review_comments":{"href":"https://api.github.com/repos/01org/libyami/pulls/534/comments"},"review_comment":{"href":"https://api.github.com/repos/01org/libyami/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/01org/libyami/pulls/534/commits"},"statuses":{"href":"https://api.github.com/repos/01org/libyami/statuses/b81cecaa22045c13b0845ac5ed750acc979ad4be"}}}}
{"actor":{"display_login":"xuguangxin"}}