)]}'
{
  "commit": "65ff0dfad6aa8a0f4bfccf0aa4bc457b4d95ee54",
  "tree": "8359f400fb93c2cb70f0581f844781a010fed606",
  "parents": [
    "86cba9a1b87113725f22881c05b1e861c6c55141"
  ],
  "author": {
    "name": "Kim Sungyeon",
    "email": "sy85.kim@samsung.com",
    "time": "Tue Jan 29 16:53:13 2019 +0900"
  },
  "committer": {
    "name": "Lajos Molnar",
    "email": "lajos@google.com",
    "time": "Sun Feb 14 16:04:18 2021 -0800"
  },
  "message": "VT: ARTPWriter: Enhanced ARTPWriter as a RTP output\n\nEnhances ARTPWriter that sends RTP packets to network.\nCode modification as per RFC 3550, RFC 1889, RFC 894.\n\n1. Interfaces are added to provide local-ip and remote-ip address to ARTPWriter.\n2. By the RFC 3550, RTP protocol is run on top of UDP typically.\n2-1. A port number for RTP is EVEN.\n3. By the RFC 3550, RTCP protocol exists with RTP as coupled one.\n3-1. By the RFC 1889, a port number for RTCP is the next ODD number of RTP port.\n4. SPS/PPS are sent for every I-frame.\n   Basically encoder generates SPS/PPS at the first video stream.\n   But those can be lost because RTP is run on UDP.\n   So those are sent for every I-frame, and this is common action for RTP.\n5. By the RFC 894, the maximum length of an IP datagram sent over an Ethernet is 1500 byte.\n   A packet would be fragmented if its size overs.\n   So some margin is needed for various cases. (various headers for UDP, RTP, encryption, etc...)\n\nChange-Id: I34e18ed5ada6b51be3645eb8f725a6c16fe4878d\nSigned-off-by: Kim Sungyeon \u003csy85.kim@samsung.com\u003e\nSigned-off-by: Byeongjo Park \u003cbjo.park@samsung.com\u003e\nMerged-in: I34e18ed5ada6b51be3645eb8f725a6c16fe4878d\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "64eb8b460c3ae3b2aa7782c924a2d7df4bb2e266",
      "old_mode": 33188,
      "old_path": "media/libstagefright/include/media/stagefright/MetaDataBase.h",
      "new_id": "d455093e85f9f1f1e63353e64d607bd701def9f2",
      "new_mode": 33188,
      "new_path": "media/libstagefright/include/media/stagefright/MetaDataBase.h"
    },
    {
      "type": "modify",
      "old_id": "58d60861a2b9a197ac9689e1259e81db1ae6bfea",
      "old_mode": 33188,
      "old_path": "media/libstagefright/rtsp/ARTPWriter.cpp",
      "new_id": "92eaa7064d4ee40cc78235fc8c7257984eecc31b",
      "new_mode": 33188,
      "new_path": "media/libstagefright/rtsp/ARTPWriter.cpp"
    },
    {
      "type": "modify",
      "old_id": "2f134861bf75a58fc403e1c6309ee25d6a04474d",
      "old_mode": 33188,
      "old_path": "media/libstagefright/rtsp/ARTPWriter.h",
      "new_id": "6795d2860353a6aca92607616ace12d463b96b5a",
      "new_mode": 33188,
      "new_path": "media/libstagefright/rtsp/ARTPWriter.h"
    }
  ]
}
