- From: cowwoc <cowwoc@bbs.darktech.org>
- Date: Mon, 09 Jun 2014 18:11:06 -0400
- To: Peter Thatcher <pthatcher@google.com>
- CC: public-media-capture@w3.org
- Message-ID: <539630FA.4080700@bbs.darktech.org>
Fair enough. Thank you. Gili On 09/06/2014 5:34 PM, Peter Thatcher wrote: > I also like the idea of changing the name of "advanced", but my > purpose here is to flesh out the consensus that was reached in DC, and > that was not part of the consensus, and I don't want to vary to much > from what we agreed on, lest we end up not agreeing on anything again. > > > On Mon, Jun 9, 2014 at 2:32 PM, cowwoc <cowwoc@bbs.darktech.org > <mailto:cowwoc@bbs.darktech.org>> wrote: > > I don't understand the meaning of: > > “facingMode”: {"exact": “environment”}, > > In theory, this means I didn't read some documentation which > explains this. In practice, this means the convention is not > intuitive. > > And I also suggest renaming "advanced" to something more > intuitive. The current name does not hint what the section > actually does. > > Gili > > > On 09/06/2014 5:08 PM, Peter Thatcher wrote: > > At the interim meeting in DC, we reached a consensus for a > form of getUserMedia constraints that has the following form: > > var supports = DeviceManager.getSupportedConstraints("video"); > if(!supports["aspectRatio"] || !supports["facingMode"]) { > // Treat like an error. > } > getUserMedia({“video”: { > “width”: {"min": 320, “ideal”: 1280, “max”: 1920}, > “height”: {"min": 240, “ideal”: 720, “max”: 1080}, > // Shorthand for ideal. > “framerate”: 30, > // "facingMode": "environment" would be optional. > “facingMode”: {"exact": “environment”}, > "advanced": [...] > }}, ...); > > And the following rules: > > 1. "min", "max", and "exact" are required, except when in the > "advanced" list. > 2. "ideal" and a bare value or list of values are optional. > 3. The browser indicates what it supports via > DeviceManager.getSupportedConstraints, which the JS can use to > make sure the browser supports a certain constraint before > trying to use it. > > Here is an example of "I want 720p, I can go up to 1080p, and > I can go down to VGA": > > getUserMedia({“video”: { > “width”: {"min": 640, “ideal”: 1280, “max”: 1920}, > “height”: {"min": 480, “ideal”: 720, “max”: 1080}, > }}, ...); > > > Here is an example of "I want camera X, ideally with VGA": > > var cameraSourceId = ...; > getUserMedia({“video”: { > "sourceId": {"exact": cameraSourceId}, > "width": 640, > "height": 480 > }}, ...); > > Here is an example of "I want a front-facing camera and it > must be VGA": > > var supports = DeviceManager.getSupportedConstraints("video"); > if(supports["facingMode"]) { > getUserMedia({“video”: { > "facingMode": {"exact": "user"}, > "width": {"exact": 640}, > "height": {"exact": 480} > }}, ...); > } > > Here is an advanced example of "I want 4k, then 1080, then > 720p, and nothing else". > > getUserMedia({“video”: { > "advanced": [ > {"width": 4096, "height": 2160}, > {"width": 1920, "height": 1080}, > {"width": 1280, "height": 720} > ] > }}, ...); > > > I have looked through the existing WebIDL, and I believe this > is would be the best way to structure the new WebIDL. Note > the assumption that there is a "DeviceManager" to be added > before this: > > partial interface DeviceManager { > // Keys are constraint keys, and truthy values = supported and > // untruthy values = unsupported. > static Dictionary getSupportedConstraints(DOMString kind); > } > > dictionary MediaTrackConstraints : MediaTrackConstraintSet { > sequence<MediaTrackConstraintSet> advanced; > }; > > dictionary MediaTrackConstraintSet { > ConstrainLong width; > ConstrainLong height; > ConstrainDouble aspectRatio; > ConstrainDouble frameRate; > ConstrainVideoFacingMode facingMode; > ConstrainDouble volume; > ConstrainLong sampleRate; > ConstrainLong sampleSize; > boolean echoCancelation; > ConstrainDOMString sourceId; > }; > > typedef (Long or ConstrainLongRange) ConstrainLong; > typedef (Double or ConstrainDoubleRange) ConstrainDouble; > typedef (DOMString or sequence<DOMString> or > ConstrainDOMStringParameters) > ConstrainDOMString; > typedef (VideoFacingModeEnum or sequence<VideoFacingModeEnum> or > ConstrainVideoFacingModeParameters) ConstrainVideoFacingMode; > > dictionary ConstrainLongRange { > long max; > long min; > long exact; // new > long ideal; // new > } > > dictionary ConstrainDoubleRange { > double min; > double max; > double exact; // new > double ideal; // new > }; > > // new > dictionary ConstrainDOMStringParameters { > (DOMString or sequence<DOMString>) exact; > (DOMString or sequence<DOMString>) ideal; > } > > // new > dictionary ConstrainVideoFacingModeParameters { > (VideoFacingModeEnum or sequence<VideoFacingModeEnum>) exact; > (VideoFacingModeEnum or sequence<VideoFacingModeEnum>) ideal; > } > > Note that it's possible, according to the type system, to have > "exact" and "ideal" in "advanced", which doesn't make sense > according to the algorithm. But making that not possible > complicates the types a lot, which probably isn't worth it. > It would be much more simple to put a check in the runtime > rather than the type system to disallow that. > > > Now, two questions: > > 1. Does everyone like these details? > 2. What are the next steps to add text and get in the spec? > > > >
Received on Monday, 9 June 2014 22:12:00 UTC