{"action":"created","issue":{"url":"https://api.github.com/repos/sccn/labstreaminglayer/issues/149","repository_url":"https://api.github.com/repos/sccn/labstreaminglayer","labels_url":"https://api.github.com/repos/sccn/labstreaminglayer/issues/149/labels{/name}","comments_url":"https://api.github.com/repos/sccn/labstreaminglayer/issues/149/comments","events_url":"https://api.github.com/repos/sccn/labstreaminglayer/issues/149/events","html_url":"https://github.com/sccn/labstreaminglayer/pull/149","id":187077375,"number":149,"title":"Pupil Labs - Pupil LSL Relay Plugin","user":{"login":"papr","id":168390,"avatar_url":"https://avatars.githubusercontent.com/u/168390?v=3","gravatar_id":"","url":"https://api.github.com/users/papr","html_url":"https://github.com/papr","followers_url":"https://api.github.com/users/papr/followers","following_url":"https://api.github.com/users/papr/following{/other_user}","gists_url":"https://api.github.com/users/papr/gists{/gist_id}","starred_url":"https://api.github.com/users/papr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/papr/subscriptions","organizations_url":"https://api.github.com/users/papr/orgs","repos_url":"https://api.github.com/users/papr/repos","events_url":"https://api.github.com/users/papr/events{/privacy}","received_events_url":"https://api.github.com/users/papr/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":2,"created_at":"2016-11-03T14:36:45Z","updated_at":"2016-11-17T10:54:25Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/sccn/labstreaminglayer/pulls/149","html_url":"https://github.com/sccn/labstreaminglayer/pull/149","diff_url":"https://github.com/sccn/labstreaminglayer/pull/149.diff","patch_url":"https://github.com/sccn/labstreaminglayer/pull/149.patch"},"body":"Pupil Capture plugin that relays data from the backbone to the lab streaming layer.\r\n\r\nThere are no additional dependencies (other than installing the LSL Python bindings) since all plugins have access to Pupil Capture's resources."},"comment":{"url":"https://api.github.com/repos/sccn/labstreaminglayer/issues/comments/261216935","html_url":"https://github.com/sccn/labstreaminglayer/pull/149#issuecomment-261216935","issue_url":"https://api.github.com/repos/sccn/labstreaminglayer/issues/149","id":261216935,"user":{"login":"papr","id":168390,"avatar_url":"https://avatars.githubusercontent.com/u/168390?v=3","gravatar_id":"","url":"https://api.github.com/users/papr","html_url":"https://github.com/papr","followers_url":"https://api.github.com/users/papr/followers","following_url":"https://api.github.com/users/papr/following{/other_user}","gists_url":"https://api.github.com/users/papr/gists{/gist_id}","starred_url":"https://api.github.com/users/papr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/papr/subscriptions","organizations_url":"https://api.github.com/users/papr/orgs","repos_url":"https://api.github.com/users/papr/repos","events_url":"https://api.github.com/users/papr/events{/privacy}","received_events_url":"https://api.github.com/users/papr/received_events","type":"User","site_admin":false},"created_at":"2016-11-17T10:54:25Z","updated_at":"2016-11-17T10:54:25Z","body":"TL;DR:\r\n- This PR represents @pupil-labs official \"native\" LSL integration\r\n- LSL outlets are not flexible enough to map Pupil Capture's data directly\r\n\r\n---\r\n\r\nDear @dmedine \r\nMy name is Pablo and I work as software developer for @pupil-labs (as previously mentioned in #148). Let me elaborate on how Capture works, and the difficulties with LSL that arise from that.\r\n\r\n![Headset](https://raw.githubusercontent.com/wiki/pupil-labs/pupil/media/headset/w120_e120b_inv.png)\r\n\r\nAbove, you can see that a Pupil headset can have up to three cameras, the front camera (`world`) and two eye cameras (`eye.0` and `eye.1`). Pupil Capture processes each video stream in a separate process. The eye processes detect the pupil positions and report these to the `world` process. The `world` process is also responsible for running all plugins. Every feature, from the gaze mapper (that maps raw pupil positions to gaze positions on the `world` image) to simple visualisation features, are implemented as plugins.\r\n\r\nSince version `v0.8`, Pupil Capture uses a [ZMQ](http://zeromq.org)-based message-passing architecture. It does not only allow us to write highly modular plugins but is also the recommended way to interact with our software as third-party developer. See our [wiki](https://github.com/pupil-labs/pupil/wiki/Pupil-Interprocess-and-Network-Communication) for more information. The PupilPro app does not support the zmq backend at all.\r\n\r\nThe data structures that we are using are not only hierarchical but are also not static, e.g gaze positions include their matching pupil positions (these can include data from `eye.0`, `eye.1`, or both) and (if activated) additional information from the 3D pupil detector. This makes a direct mapping of our data to LSL outlets very difficult. This is also the reason why there will not be a \"native\" LSL integration from us. LSL is just not flexible enough.\r\n\r\nWe know that LSL is a great tool that is used by a lot of researchers. That is why we tried to come up with a flexible way that not only allows researchers to have access to all our data (hence the Python representation outlets) but is also maintainable for us in the long run. This plugin is the closest thing to a \"native\" implementation that we can provide. It also allows the user to turn on and off outlets for pupil, gaze and notification data."}}
{"actor":{"display_login":"papr"}}