{"action":"created","issue":{"url":"https://api.github.com/repos/w3c/mediacapture-main/issues/118","labels_url":"https://api.github.com/repos/w3c/mediacapture-main/issues/118/labels{/name}","comments_url":"https://api.github.com/repos/w3c/mediacapture-main/issues/118/comments","events_url":"https://api.github.com/repos/w3c/mediacapture-main/issues/118/events","html_url":"https://github.com/w3c/mediacapture-main/issues/118","id":55168294,"number":118,"title":"A practical algorithm for constraint resolution needs to be described.","user":{"login":"alvestrand","id":480893,"avatar_url":"https://avatars.githubusercontent.com/u/480893?v=3","gravatar_id":"","url":"https://api.github.com/users/alvestrand","html_url":"https://github.com/alvestrand","followers_url":"https://api.github.com/users/alvestrand/followers","following_url":"https://api.github.com/users/alvestrand/following{/other_user}","gists_url":"https://api.github.com/users/alvestrand/gists{/gist_id}","starred_url":"https://api.github.com/users/alvestrand/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alvestrand/subscriptions","organizations_url":"https://api.github.com/users/alvestrand/orgs","repos_url":"https://api.github.com/users/alvestrand/repos","events_url":"https://api.github.com/users/alvestrand/events{/privacy}","received_events_url":"https://api.github.com/users/alvestrand/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/w3c/mediacapture-main/labels/After%20Last%20Call","name":"After Last Call","color":"fef2c0"}],"state":"open","locked":false,"assignee":{"login":"alvestrand","id":480893,"avatar_url":"https://avatars.githubusercontent.com/u/480893?v=3","gravatar_id":"","url":"https://api.github.com/users/alvestrand","html_url":"https://github.com/alvestrand","followers_url":"https://api.github.com/users/alvestrand/followers","following_url":"https://api.github.com/users/alvestrand/following{/other_user}","gists_url":"https://api.github.com/users/alvestrand/gists{/gist_id}","starred_url":"https://api.github.com/users/alvestrand/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alvestrand/subscriptions","organizations_url":"https://api.github.com/users/alvestrand/orgs","repos_url":"https://api.github.com/users/alvestrand/repos","events_url":"https://api.github.com/users/alvestrand/events{/privacy}","received_events_url":"https://api.github.com/users/alvestrand/received_events","type":"User","site_admin":false},"milestone":null,"comments":7,"created_at":"2015-01-22T15:43:02Z","updated_at":"2015-04-24T19:04:21Z","closed_at":null,"body":"The approach of generating all possible combinations of settings and then culling the set is obviously not practical - the set of possible combinations is too large to be practical to enumerate. We should have one example in the document of a way to implement the algorithm that is more practical.\r\n"},"comment":{"url":"https://api.github.com/repos/w3c/mediacapture-main/issues/comments/96037180","html_url":"https://github.com/w3c/mediacapture-main/issues/118#issuecomment-96037180","issue_url":"https://api.github.com/repos/w3c/mediacapture-main/issues/118","id":96037180,"user":{"login":"jan-ivar","id":3136226,"avatar_url":"https://avatars.githubusercontent.com/u/3136226?v=3","gravatar_id":"","url":"https://api.github.com/users/jan-ivar","html_url":"https://github.com/jan-ivar","followers_url":"https://api.github.com/users/jan-ivar/followers","following_url":"https://api.github.com/users/jan-ivar/following{/other_user}","gists_url":"https://api.github.com/users/jan-ivar/gists{/gist_id}","starred_url":"https://api.github.com/users/jan-ivar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jan-ivar/subscriptions","organizations_url":"https://api.github.com/users/jan-ivar/orgs","repos_url":"https://api.github.com/users/jan-ivar/repos","events_url":"https://api.github.com/users/jan-ivar/events{/privacy}","received_events_url":"https://api.github.com/users/jan-ivar/received_events","type":"User","site_admin":false},"created_at":"2015-04-24T19:04:21Z","updated_at":"2015-04-24T19:04:21Z","body":"Firefox 38 implements the ideal algorithm, and 39 [internally treats](http://mxr.mozilla.org/mozilla-central/source/dom/media/webrtc/MediaEngineCameraVideoSource.cpp?rev=ce72894838de&mark=119-120#115) width == 0, height == 0 or frameRate == 0  on the *capability* (not the constraint) as \"can do any\" i.e. orthogonal.\r\n\r\nBasically, if a capability is zero (\"can do any\") then it contributes zero to fitness distance.\r\n\r\nWhile no real cameras provide zero (the low-level gips stack doesn't allow it), this was helpful for internal screensharing devices which put 0,0,0 to survive the ideal algorithm.\r\n\r\nThis should also be useful on OSX where we feed the ideal algorithm fake hardcoded devices. These are hardcoded to 30 fps in Firefox 38, but I suspect OSX can return any framerate, so zero FPS might work better there."}}