{
  "id": "type-p16",
  "revision": "b68e06e8f2e4dda0642ff95bef7f1d491c6e1d139d6222057c70a871c5c3151a",
  "regions": [
    {
      "id": "mobile",
      "label": "Mobile",
      "parent": null
    },
    {
      "id": "native",
      "label": "Native",
      "parent": null
    },
    {
      "id": "server",
      "label": "Server",
      "parent": null
    }
  ],
  "nodes": [
    {
      "id": "camera",
      "label": "Camera producer",
      "kind": "N15",
      "region": "mobile",
      "ports": [
        {
          "id": "frame",
          "profile": "P16",
          "contract": "OwnedCameraFrameV1",
          "polarity": "Offer"
        },
        {
          "id": "available",
          "profile": "P01",
          "contract": "ReusableFrameAllocationV1",
          "polarity": "Require"
        }
      ]
    },
    {
      "id": "encoder",
      "label": "Native encoder",
      "kind": "N16",
      "region": "native",
      "ports": [
        {
          "id": "frame",
          "profile": "P16",
          "contract": "OwnedCameraFrameV1",
          "polarity": "Require"
        },
        {
          "id": "released",
          "profile": "P04",
          "contract": "FrameAllocationReleasedV1",
          "polarity": "Offer"
        },
        {
          "id": "output",
          "profile": "P16",
          "contract": "OwnedEncodedFrameV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "pool",
      "label": "Frame allocation pool",
      "kind": "N26",
      "region": "mobile",
      "ports": [
        {
          "id": "release",
          "profile": "P04",
          "contract": "FrameAllocationReleasedV1",
          "polarity": "Require"
        },
        {
          "id": "available",
          "profile": "P01",
          "contract": "ReusableFrameAllocationV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "upload",
      "label": "Encoded frame upload",
      "kind": "N02",
      "region": "server",
      "ports": [
        {
          "id": "bytes",
          "profile": "P16",
          "contract": "OwnedEncodedFrameV1",
          "polarity": "Require"
        }
      ]
    }
  ],
  "relations": [
    {
      "id": "frame",
      "kind": "H02",
      "incidences": [
        {
          "node": "camera",
          "port": "frame",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "encoder",
          "port": "frame",
          "role": "target",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "released",
      "kind": "H04",
      "incidences": [
        {
          "node": "encoder",
          "port": "released",
          "role": "publisher",
          "ordinal": 0
        },
        {
          "node": "pool",
          "port": "release",
          "role": "subscriber",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "encoded",
      "kind": "H02",
      "incidences": [
        {
          "node": "encoder",
          "port": "output",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "upload",
          "port": "bytes",
          "role": "target",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "reuse",
      "kind": "H02",
      "incidences": [
        {
          "node": "pool",
          "port": "available",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "camera",
          "port": "available",
          "role": "target",
          "ordinal": 0
        }
      ]
    }
  ]
}
