- From: Harald Alvestrand <harald@alvestrand.no>
- Date: Mon, 25 Aug 2014 12:44:52 +0200
- To: public-media-capture@w3.org
- Message-ID: <53FB13A4.9060409@alvestrand.no>
I've submitted a bug (26654) to track this.
On 08/19/2014 03:49 AM, Jan-Ivar Bruaroey wrote:
> The spec still leaves several types to be inferred by the implementer
> around constraints:
>
> 1. In [1]:
>> partial interfaceMediaDevices {
>> staticDictionary getSupportedConstraints (DOMString kind);
>
> "Dictionary" is not defined. To implement this, we'd need something like:
>
> dictionary SupportedMediaTrackConstraintSet {
> boolean width;
> boolean height;
> boolean aspectRatio;
> boolean frameRate;
> boolean facingMode;
> boolean volume;
> boolean sampleRate;
> boolean sampleSize;
> boolean echoCancelation;
> boolean sourceId;
> boolean groupId;
> //basically a boolean rehash of MediaTrackConstraintSet
> };
>
> staticSupportedMediaTrackConstraintSet getSupportedConstraints (DOMString kind);
>
> or simply:
>
> staticMediaTrackConstraintSet getSupportedConstraints (DOMString kind);
>
> since UAs can return non-zero values in MediaTrackConstraintSet just fine!
I like the idea of returning a MediaTrackConstraintSet.
>
>
> 2. In [2]:
>> interfaceMediaStreamTrack :EventTarget {
>> ...
>> Capabilities getCapabilities ();
>> MediaTrackConstraints getConstraints ();
>> Settings getSettings ();
>
> Capabilities and Settings are not defined in this use ofthe
> Constrainable pattern. To implement this, we'd need something like:
>
> dictionary MediaTrackSettingSet {
> long width;
> long height;
> double aspectRatio;
> double frameRate;
> VideoFacingMode facingMode;
> double volume;
> long sampleRate;
> long sampleSize;
> boolean echoCancelation;
> DOMString sourceId;
> DOMString groupId;
> //basically a bare-value rehash of MediaTrackConstraintSet
> };
>
> interfaceMediaStreamTrack :EventTarget {
> ...
> MediaTrackConstraintSet getCapabilities ();
> MediaTrackConstraints getConstraints ();
> MediaTrackSettingSet getSettings ();
>
> or simply:
> interfaceMediaStreamTrack :EventTarget {
> ...
> MediaTrackConstraintSet getCapabilities ();
> MediaTrackConstraints getConstraints ();
> MediaTrackConstraintSet getSettings ();
>
> since UAs can return bare values in MediaTrackConstraintSet just fine!
I thought bare values was what we had decided on for Settings. I guess
we didn't capture itin text.
>
> 3. In the Constrainable Pattern in [3]:
>> Capabilities are dictionary containing one or more key-value pairs,
>> where each key must be a constrainable property defined in the
>> registry, and each value must be a subset of the set of values
>> defined for that property in the registry. The exact syntax of the
>> value expression depends on the type of the property but is of type
>> ConstraintValues . The Capabilities dictionary specifies the subset
>> of the constrainable properties and values from the registry that the
>> UA supports.
>
> Typo: "Capabilities are dictionary" -> "Capabilities is a dictionary".
> Importantly, all capabilities are in one dictionary.
>
> The type "ConstraintValues" is not defined anywhere. Do we mean
> "members of ConstraintSet" here? If so, that makes Capabilities of
> type ConstraintSet, yet we're leaving that deduction to the reader.
> IMHO prose and examples are no substitute for definitions.
>
>
> 4. In the Constrainable Pattern in [4]:
>> A Setting isa dictionary containing one or more key-value pairs. It
>> must contain each key returned in |getCapabilities()|. There must be
>> a single value for each key and the value must a member of the set
>> defined for that property by |capabilities()|. The |Settings|
>> dictionary contains the actual values that the UA has chosen for the
>> object's Capabilities. The exact syntax of the value depends on the
>> type of the property.
>
> Typo: "A Setting isa dictionary" -> "Settings is a dictionary".
> Importantly, all settings are in one dictionary.
> Typo: "the value must a member" -> "the value must be a member"
>
> We're leaving the reader to deduce that Settings is a bare-values-only
> subset of ConstraintSet. IMHO prose and examples are no substitute for
> definitions.
In my dictionary, definitions are usually written in prose :-)
Agreed that we need to be explict.
>
> 5. In the Constrainable Pattern in [5]:
>> typedef Dictionary ConstraintSet;
>
> "Dictionary" is not defined, and even if it were, it wouldn't have the
> right members, so a typedef infers the wrong thing. We could say:
>
> dictionary ConstraintSet { /* members */ };
I think this is people remembering some other variant of the
"dictionary" spec - the implementation currently in Chrome uses
"Dictionary" as "any dictionary can go here"; WebIDL doesn't allow that.
>
>
> 6. In [6]:
>> dictionary MediaTrackConstraintSet {
>> ConstrainLong width;
>> ConstrainLong height;
>> ConstrainDouble aspectRatio;
>> ConstrainDouble frameRate;
>> ConstrainVideoFacingMode facingMode;
>> ConstrainDouble volume;
>> ConstrainLong sampleRate;
>> ConstrainLong sampleSize;
>> boolean echoCancelation;
>> ConstrainDOMString sourceId;
>> DOMString groupId;
>> };
>
> groupId seems to have the wrong type. Why not ConstrainDOMString groupId ?
ConstrainDOMString seems to have the semantics I would want.
Does ConstrainBoolean make sense? Would we ever want to say
"echoCancelation: {exact: false}"?
At least it would make explicit whether we are talking about "exact" or
"ideal" semantics of the field.
>
> .: Jan-Ivar :.
>
> [1]http://dev.w3.org/2011/webrtc/editor/archives/20140817/getusermedia.html#mediadevices-interface-extensions
> [2]http://dev.w3.org/2011/webrtc/editor/archives/20140817/getusermedia.html#media-stream-track-interface-definition
> [3]http://dev.w3.org/2011/webrtc/editor/archives/20140817/getusermedia.html#capabilities
> [4]http://dev.w3.org/2011/webrtc/editor/archives/20140817/getusermedia.html#settings
> [5]http://dev.w3.org/2011/webrtc/editor/archives/20140817/getusermedia.html#constraints
> [6]http://dev.w3.org/2011/webrtc/editor/archives/20140817/getusermedia.html#dictionary-mediatrackconstraints-members
>
Received on Monday, 25 August 2014 10:45:26 UTC