- From: Harald Alvestrand <harald@alvestrand.no>
- Date: Wed, 26 Mar 2014 16:05:41 +0100
- To: Jan-Ivar Bruaroey <jib@mozilla.com>, public-media-capture@w3.org
- Message-ID: <5332ECC5.9010906@alvestrand.no>
On 03/26/2014 03:24 PM, Jan-Ivar Bruaroey wrote: > On 3/26/14 4:31 AM, Harald Alvestrand wrote: >> On 03/26/2014 02:18 AM, Jan-Ivar Bruaroey wrote: >>> Sure, that is certainly doable, if people prefer, or we could >>> perhaps do videoSourceId and audioSourceId? Things don't seem to >>> overlap much otherwise. >> >> If they don't overlap, to me that's an argument for keeping each in >> its own bag. >> If they overlap, to me that's an argument for keeping each in its own >> bag; separation of concerns. > > First of all, I'm delighted we're discussing what I consider mostly > naming, e.g. video::sourceId vs. videoSourceId, frameRate vs. maybe > video::rate - I don't hold a strong opinion, but I'm curious. > >> It seems hard to find an argument that would convince me that mixing >> audio and video constraints into one bag is a good idea :-) >> >> (this is about how we pass the bag/bags to gUM. That's separate from >> the question of whether having different type definitions for the two >> is a great idea or not.) > > Let me play devil's advocate then: A camera and a mic - light and > sound - are so similar - rather than complements - that their > properties don't deserve separation by TYPE, and we must use bags to > keep their otherwise ambiguous settings apart? I have my own opinions about the advisability of separating similar things by type. One of my co-workers once commented on data definition languages that they "bind before compile time". He was a fan of late binding. > > If we had, say, transport properties - like bandwidth - then I would > see why. Bits are bits. But we don't. That's over in PeerConnection. > > I actually had things broken down in an earlier draft (below), but typed. > > .: Jan-Ivar :. > > (EARLIER DRAFT USING AUDIO & VIDEO GROUPS) > > dictionary MediaStreamOptions { > (boolean or VideoTrackConstraints) video = false; > (boolean or AudioTrackConstraints) audio = false; > DOMString peerIdentity; > }; > > dictionary Constraints { > sequence<DOMString> require; // names of required constraints, if any > sequence<DOMString> prefer; // names of preferred constraints, if any > }; > > dictionary VideoTrackConstraints : Constraints { > ConstrainLong width; > ConstrainLong height; > ConstrainDouble aspectRatio; > ConstrainDouble frameRate; > ConstrainVideoFacingMode facingMode; > // Dictionary may be extended through gUM-specific IANA registry. > }; > > dictionary AudioTrackConstraints : Constraints { > ConstrainDouble volume; > ConstrainLong sampleRate; > ConstrainLong sampleSize; > boolean echoCancelation; > // Dictionary may be extended through gUM-specific IANA registry. > }; > > interface VideoStreamTrack : MediaStreamTrack { > VideoTrackConstraints getInherentCapabilities(); > VideoTrackConstraints snapshotCurrentSettings(); > void applyConstraints(VideoTrackConstraints settings, > VoidFunction successCallback, > ConstraintErrorCallback errorCallback); > }; > > interface AudioStreamTrack : MediaStreamTrack { > AudioTrackConstraints getInherentCapabilities(); > AudioTrackConstraints snapshotCurrentSettings(); > void applyConstraints(AudioTrackConstraints settings, > VoidFunction successCallback, > ConstraintErrorCallback errorCallback); > }; ... and if WebIDL had offered the option of passing / returning an AudioTrackConstraints structure in where a Constraints is declared in the WebIDL, we could have a common interface instead of declaring the same set of functions twice .... Part of the naming issue here is caused by the fact that WebIDL tries to be a strongly typed language, without the functionality that other strongly typed languages have for doing this sort of thing, while interfacing to a very weakly typed language (Javascript). -- Surveillance is pervasive. Go Dark.
Received on Wednesday, 26 March 2014 15:06:11 UTC