IRC log of webrtc on 2013-02-07

Timestamps are in UTC.

13:41:34 [RRSAgent]
RRSAgent has joined #webrtc
13:41:34 [RRSAgent]
logging to
13:41:36 [trackbot]
RRSAgent, make logs world
13:41:36 [Zakim]
Zakim has joined #webrtc
13:41:38 [trackbot]
Zakim, this will be RTC
13:41:38 [Zakim]
I do not see a conference matching that name scheduled within the next hour, trackbot
13:41:39 [trackbot]
Meeting: Web Real-Time Communications Working Group Teleconference
13:41:39 [trackbot]
Date: 07 February 2013
13:41:58 [dom]
s/Teleconference/F2F Meeting/
13:42:16 [dom]
stefanh: propose to adapt agenda in light of lack of progress on SDP interface yesterday
13:42:54 [burn]
burn has joined #webrtc
13:42:56 [dom]
... instead of SDP agenda item, we'll look at video scaling and cropping in Media Capture Task Force
13:43:02 [hta]
hta has joined #webrtc
13:43:23 [gmandyam]
gmandyam has joined #webrtc
13:45:15 [timeless]
scribe: timeless
13:45:26 [adam]
adam has joined #webrtc
13:45:29 [fluffy]
fluffy has joined #webrtc
13:45:32 [timeless]
Topic: Conclusions Media Cap
13:45:46 [timeless]
[ Conclusions Media Cap discussions Boston ]
13:45:49 [timeless]
[ hta reads slide ]
13:45:53 [lgombos]
lgombos has joined #webrtc
13:45:58 [timeless]
hta: any comments/complaints?
13:46:00 [timeless]
[ None ]
13:46:26 [timeless]
cullen: thanks guys for doing this
13:46:36 [timeless]
Topic: MediaStream Cropping
13:46:41 [timeless]
[ MediaStream Cropping ]
13:46:47 [timeless]
justin: this is a quick set of slides i put together
13:46:52 [ekr]
ekr has joined #webrtc
13:47:02 [timeless]
... for how a camera could stream could be provided in an aspect ratio not equal to native
13:47:10 [timeless]
[ Problem statement ]
13:47:16 [dom]
-> Justin's slides on aspect ratio
13:47:22 [timeless]
justin: most sensors and cameras are moving to 16:9 capture
13:47:25 [timeless]
... not all cameras are new
13:47:29 [timeless]
... quite a few are 4:3
13:47:43 [timeless]
... it's hard for a full screen gui, especially full screen gui @ 16:9
13:47:51 [Dan_Druta]
Dan_Druta has joined #webrtc
13:47:53 [timeless]
... <video/> will always pad to fit
13:47:57 [timeless]
... as opposed to crop to fit
13:48:03 [adambe]
adambe has joined #webrtc
13:48:04 [timeless]
... even if <video/> would crop to fit
13:48:20 [timeless]
... you wouldn't want to encode those bits that'd be cropped at the other end
13:48:21 [ekr]
rrsagent, draft minutes
13:48:21 [RRSAgent]
I have made the request to generate ekr
13:48:34 [timeless]
... if you're doing local preview, you'd probably want to see the other side
13:48:38 [timeless]
... so people can see if they're out of from
13:48:44 [timeless]
[ Solution: crop 4:3 to 16:9 ]
13:49:02 [timeless]
justin: discard top/bottom (or left/right if needed)
13:49:17 [timeless]
... Flash's camera api would do this if you asked for an unsupported res
13:49:26 [timeless]
... instangram likes squares, so you could get this
13:49:42 [timeless]
... i'm only concerned w/ crop - letterboxing/pillarboxing are available from <video/>
13:49:54 [timeless]
[ General Approach ]
13:50:01 [timeless]
justin: opt in, new mandatory constraint
13:50:09 [timeless]
... you want this specific height, width
13:50:24 [timeless]
... width.max,min=640
13:50:33 [timeless]
... height.max,min=360
13:50:36 [timeless]
... allowCrop=true
13:50:48 [timeless]
... if camera supports resolution that falls within mandatory constraints, use that res
13:51:10 [timeless]
... if camera supports res that exceeds mandatory constraints, allowCrop=true to crop satisfy mandatory constraints
13:51:24 [timeless]
dom: if this is mandatory
13:51:31 [timeless]
... how does it fit?
13:51:38 [timeless]
... it doesn't seem like a `selection` critera
13:51:48 [timeless]
justin: it's more for having chosen a camera
13:51:55 [timeless]
... selecting settings later
13:52:04 [timeless]
dom: so, it's a constraint that may be more for control than selection
13:52:09 [timeless]
justin: i'm intending it for that, yes
13:52:15 [timeless]
burn: this is control, not selection
13:52:31 [timeless]
burn: why mandatory { allowCrop }
13:52:43 [timeless]
... instead of mandatory/optional { cropIfNeeded }
13:52:57 [timeless]
justin: for optional things
13:53:02 [dom]
[this seems to point to a growing divergence between constraints-for-selection and constraints-for-setting]
13:53:02 [timeless]
... if these bounds are not hard bounds
13:53:11 [timeless]
... then it'd be a closest match
13:53:18 [Dan_Druta]
Dan_Druta has joined #webrtc
13:53:19 [timeless]
burn: if it didn't get it, it didn't get it
13:53:32 [timeless]
... the point of optional constraints is notifying them if they can't be satisfied
13:53:41 [timeless]
... i'm proposing `cropIfNeeded`
13:54:07 [timeless]
... if you put it in mandatory, then it would crop if it needs to and can
13:54:14 [timeless]
justin: do you have an example?
13:54:25 [timeless]
... i have a camera that can or can't crop in hardware
13:54:34 [timeless]
burn: you might have other optional constraints relating to aspectRatio
13:54:41 [timeless]
... if you get those, you might want cropping,
13:54:46 [timeless]
... if not, you might not care
13:54:52 [timeless]
JonLennox: comment, that might make this harder
13:55:07 [timeless]
... i'm often in a situation of VGA camera
13:55:16 [timeless]
... cropping `middle 2/3` makes it easier
13:55:37 [timeless]
... but on a mobile phone in landscape, cropping like that doesn't do what i want
13:55:43 [timeless]
justin: i have another proposal
13:55:56 [timeless]
... PeterThatcher mentioned that problem on the ride over
13:56:04 [timeless]
fluffy: trying to simplify things
13:56:09 [timeless]
... i assumed crop was always true
13:56:14 [mauro]
mauro has joined #webrtc
13:56:22 [timeless]
... if they asked for 16:9 and the input is 9:16, they get a postage stamp
13:56:29 [timeless]
... person rotates phone, problem goes away
13:56:39 [timeless]
... caution that adding complexity won't help people
13:56:47 [timeless]
... what happens if it's mandatory and it comes back `can't`
13:56:55 [timeless]
hta: i kind of like the general approach
13:56:59 [timeless]
... but i dislike the examples
13:57:08 [timeless]
... i live in the world of resizable windows and interchangable cameras
13:57:12 [timeless]
... i want to write a UI once
13:57:24 [timeless]
... that will work when the user resizes the window
13:57:32 [timeless]
... and works w/ barberdall camera
13:57:35 [timeless]
... and an HD camera
13:57:54 [timeless]
... i want 1 of 2 things
13:58:01 [timeless]
... either everything in picture field
13:58:09 [timeless]
... or i want picture to fill my field
13:58:17 [timeless]
s/barberdall/Barbie Doll/
13:58:25 [timeless]
... in neither situation should we stretch the picture
13:58:31 [timeless]
... remove the talk about min/max, and use the res.
13:58:39 [timeless]
... if you need to crop, crop
13:58:45 [timeless]
justin: are you +1'ing fluffy ?
13:58:52 [timeless]
... if you ask for a res, and
13:58:57 [timeless]
hta: when media is flowing
13:59:02 [timeless]
... browser knows where it's going
13:59:06 [timeless]
... and it knows where it's coming from
13:59:11 [timeless]
... it will have to do a fit operation
13:59:22 [timeless]
... this is an instruction to browser to crop instead of letterbox
13:59:33 [timeless]
... it doesn't instruct browser to aim for res
13:59:54 [timeless]
timeless: he's complaining about the example
14:00:03 [timeless]
justin: he's saying constraint pillarbox/crop
14:00:09 [timeless]
hta: my real window size is 250:180
14:00:13 [timeless]
14:00:17 [timeless]
... it should fit to that
14:00:22 [timeless]
... the best way to achieve that
14:00:30 [timeless]
... i think the browser should do what it needs to do
14:00:51 [timeless]
stefanh: with <video/> it can adjust to video aspectRatio
14:01:00 [timeless]
... and there are examples of using <canvas/> to crop
14:01:08 [timeless]
... canvas uses lots of power
14:01:26 [timeless]
... and you lose advantage of sending non-displayed bits
14:01:38 [timeless]
justin: i was going to add <canvas/> in an earlier slide
14:01:44 [timeless]
... if we had a Media Stream Processing API
14:01:47 [timeless]
[ laughter ]
14:01:54 [timeless]
justin: doing thins in the GPU
14:01:57 [timeless]
14:02:04 [timeless]
... could be very efficient
14:02:14 [timeless]
derf: i want to apply this to any video stream
14:02:17 [timeless]
... not just cameras
14:02:37 [timeless]
... according to settings, a <video/> can't have this applied
14:02:40 [timeless]
[ Examples ]
14:02:45 [timeless]
justin: this isn't the alternate proposal
14:02:51 [timeless]
... just how to use this constraint
14:02:57 [timeless]
... 720p sensor, want 4:3
14:03:07 [timeless]
14:03:13 [timeless]
14:03:18 [timeless]
14:03:34 [timeless]
burn: on this topic of do we let browser do its wisest thing
14:03:40 [timeless]
... or let JS dev give a preference
14:03:54 [timeless]
... i don't think it makes it more complex to allow both cases
14:04:05 [timeless]
... it's quite productive to let the user choice
14:04:25 [timeless]
... crop, pad, optional
14:04:36 [timeless]
14:04:49 [timeless]
justin: that's what i heard fluffy say
14:05:03 [timeless]
burn: if there's a mismatch between <track> request and destination
14:05:11 [timeless]
... then you can express a preference as an app writer
14:05:18 [timeless]
... for cropping, or padding, or not caring
14:05:32 [timeless]
justin: how do you recognize this mismatch when the destination is PeerConnection
14:05:47 [timeless]
timeless: shouldn't PeerConnection be able to express a resolution?
14:05:57 [timeless]
burn: there's no way to express PeerConnection res as you do for <video/>
14:06:01 [timeless]
... unless we want to add that
14:06:03 [timeless]
[ Yes ]
14:06:09 [timeless]
burn: that would address a lot of this
14:06:19 [timeless]
... because then it becomes parallel to <video/>
14:06:30 [timeless]
fluffy: what i heard by hta was what i said
14:06:37 [timeless]
... a resize by Pretty, Ugly, ...
14:06:46 [timeless]
... for something that crosses the PeerConnection
14:06:55 [timeless]
... if we want that to propagate back to the origin
14:07:06 [timeless]
... the resize will have to go back across the PeerConnection
14:07:16 [timeless]
... involving a renegotiation
14:07:19 [timeless]
... complicated, but very nice
14:07:23 [timeless]
... if no one sets constraints
14:07:32 [timeless]
... but we need a way to say "i'm going to send 640x480"
14:07:43 [timeless]
... by creating a track with that
14:07:50 [timeless]
... and PeerConnection says "oh, that's what i'm sending"
14:07:59 [timeless]
... and then it doesn't negotiate
14:08:04 [timeless]
justin: someone changes window size
14:08:11 [timeless]
... and that pushes it all the way back
14:08:22 [timeless]
... if someone changes window size and camera has to stop and restart,
14:08:36 [timeless]
... that yields wacky behavior
14:08:49 [timeless]
fluffy: if camera is HD camera
14:08:53 [timeless]
14:08:57 [timeless]
... and someone selects QSIF
14:09:04 [timeless]
... allow crop also
14:09:09 [timeless]
... have constraints?
14:09:12 [timeless]
justin: proposing
14:09:23 [dom]
14:09:28 [dom]
14:09:30 [adambe]
adambe has joined #webrtc
14:09:34 [timeless]
... PeerConnection encoder can do cropping internally
14:09:45 [dom]
-> CIF on wikipedia
14:10:07 [timeless]
... the point is to give something to the encoder to do efficient scales
14:10:11 [timeless]
... for power of two scales
14:10:18 [timeless]
... for efficient matches of what output can display
14:10:22 [timeless]
martin__: the more i think of this
14:10:30 [timeless]
... the more i think i have too many ways to do the same thing
14:10:38 [timeless]
... this seems to belong in the renderer
14:10:50 [timeless]
... we have <video/> it may pillarbox/letterbox/crop
14:11:00 [timeless]
... if we treat PeerConnection as renderer
14:11:10 [timeless]
... then i don't think we need constraints
14:11:25 [timeless]
justin: assume a single camera
14:11:27 [timeless]
... no choosing
14:11:31 [timeless]
... for WYSIWYG
14:11:38 [timeless]
... do we have 2 mechanisms or 1 ?
14:11:51 [timeless]
... same way to ask camera for get X res, same way for X' res
14:11:55 [timeless]
martin__: two ways
14:12:02 [timeless]
... @ <video/>
14:12:10 [timeless]
... and a way @ Track()
14:12:17 [adam]
adam has joined #webrtc
14:12:19 [timeless]
... which may or may not
14:12:29 [timeless]
... if each sink is the only place to set these properties
14:12:35 [timeless]
... the only constraint would be for selection
14:12:36 [fluffy]
fluffy has joined #webrtc
14:12:42 [timeless]
... i'm coming to the conclusion that that's pointless
14:12:52 [timeless]
... since in most cases it's orientation of camera that matters most
14:13:02 [timeless]
hta: device selection is different topic
14:13:09 [timeless]
ekr: whatever camera aspects
14:13:15 [timeless]
... if i plug in arbitrary res
14:13:20 [timeless]
... to <video>
14:13:31 [timeless]
... we expect something as reasonable as possible
14:13:43 [timeless]
[ it will rescale in letterbox or pillarbox ]
14:13:50 [timeless]
martin__: there's no way to control it
14:13:51 [adam_]
adam_ has joined #webrtc
14:13:54 [timeless]
justin: is it specified?
14:14:00 [timeless]
stefanh: i think it's specified
14:14:12 [timeless]
... you can ask it to auto grow
14:14:17 [timeless]
justin: you can never crop
14:14:31 [timeless]
ekr: anything really sophisticated
14:14:37 [timeless]
... like Media Stream Processing API
14:14:45 [timeless]
... want something analog to <video/>
14:14:54 [timeless]
... i want to force fit this camera to this stream
14:15:01 [timeless]
... this is a stop-gap?
14:15:12 [timeless]
justin: fixing a common problem w/ an efficient+cheap solution
14:15:20 [timeless]
ekr: i could live w/ either @source or @sink
14:15:31 [timeless]
... i think i exploded at pushing across Connection
14:15:38 [timeless]
stefanh: to martin__
14:15:48 [ekr]
ekr has joined #webrtc
14:15:53 [dom]
-> HTML5 spec says: "In the absence of style rules to the contrary, video content should be rendered inside the element's playback area such that the video content is shown centered in the playback area at the largest possible size that fits completely within it, with the video content's aspect ratio being preserved. Thus, if the aspect ratio of the playback area does not match
14:15:53 [dom]
the aspect ratio of the video, the video will be shown letterboxed or pillarboxed. Areas of the element's playback area that do not contain the video represent nothing."
14:15:57 [timeless]
... to add Crop <media> element?
14:15:59 [timeless]
martin__: yeah
14:16:08 [timeless]
burn: i think simplest logical model for all of this
14:16:24 [timeless]
... is your Track is used to identify what's natively produced
14:16:31 [timeless]
... and Sink is what you expect to get out
14:16:39 [timeless]
... and influences where you munge
14:16:43 [lgombos]
lgombos has joined #webrtc
14:16:49 [timeless]
... so PeerConnection should have things like <video>
14:17:02 [timeless]
... i think constraints on Track still make sense
14:17:19 [timeless]
... so you can ask for High Res from Camera (which offers High Res and Low Res)
14:17:25 [timeless]
... so an app writer can say "these matter to me"
14:17:30 [timeless]
... so sink does processing
14:17:36 [timeless]
... and make it clear that's where it is
14:17:47 [timeless]
justin: so that's a proposal to flag it
14:17:53 [timeless]
... at ...
14:18:01 [timeless]
burn: allow back propagation or not is up to us
14:18:24 [timeless]
... we could allow settings on PeerConnection to allow settings to go across
14:18:35 [timeless]
... PeerConnection gets to decide how its properties as a sink are set
14:18:46 [timeless]
justin: choosing how a device is opened up
14:18:53 [timeless]
... i argue this is analogous
14:18:55 [adam_]
adam_ has joined #webrtc
14:19:05 [timeless]
... saying "give me X", or saying "give me X'"
14:19:05 [wonsuk]
wonsuk has joined #webrtc
14:19:18 [timeless]
... we could talk about feedback mechanism
14:19:26 [timeless]
... saying `camera can produce X res's`
14:19:55 [timeless]
justin: the reason allowCrop=true is there
14:20:03 [timeless]
... is for if you're in Portrait mode
14:20:09 [timeless]
... and you don't want to do cropping
14:20:19 [timeless]
... maybe apps don't ever do that
14:20:25 [timeless]
... give me these pixels no matter what
14:20:32 [timeless]
... give apps some flexibility
14:20:42 [timeless]
burn: i'm not recommending taking away control from app writer
14:20:46 [ekr]
ekr has joined #webrtc
14:20:46 [timeless]
... question is where to do it
14:20:50 [timeless]
... on Sink or on Track
14:21:07 [timeless]
PeterThatcher: is it safe to say we want to avoid reopening camera?
14:21:24 [timeless]
... does app tell browser this?
14:21:38 [timeless]
justin: most flexible is to open @high res
14:21:42 [timeless]
... and crop/scale
14:21:48 [timeless]
... cameras have non-0 reset time
14:22:00 [timeless]
... and there's noticable artifact as they stop/restart camera
14:22:18 [timeless]
PeterThatcher: so this ...
14:22:28 [dom]
ScribeNick: dom
14:22:28 [timeless]
justin: changing camera after feedback from sink
14:22:37 [timeless]
14:22:39 [dom]
martin__: the simple response to that is: don't do that
14:22:45 [richt]
richt has joined #webrtc
14:23:14 [dom]
... if you're operating in the wrong mode for the display you're opearting in, you'll have to deal iwth it at some point
14:23:15 [timeless]
q+ to ask if we want a selection constraint "don't pass a thing which triggers non-0 reset time to camera"?
14:23:30 [dom]
... This proposal is adding processing in the pipeline, which is what I wanted to avoid
14:23:49 [dom]
... leaving constraints for elements that matter for the hardware
14:23:59 [dom]
... anything related to processing should be left up to a processing api
14:24:17 [dom]
... that api would provide a way to crop the video among other things
14:24:33 [timeless]
s/so this.../would support controlling the crop at camera open time to avoid other constraints changing and causing re-open/
14:25:03 [dom]
justin: that would be great, but that expands the scope of needed work
14:25:30 [dom]
martin__: we would need to gather use cases, but that would be much cleaner than trying to push processing through constraints
14:25:53 [dom]
adambe: everytime we talk about constraints, it sounds like this could be for sources, tracks, or sinks
14:26:00 [dom]
... that is very confusing
14:26:19 [dom]
... it would be easier if only of these should be the focus of constraints
14:26:31 [dom]
burn: I have a similar comment; I think it should apply to two, not three
14:27:03 [dom]
adambe: we have the recorder as a sink, for peerconnection, stefanh proposed a transport handler to support setting priority etc
14:27:33 [dom]
... for the MediaElement, you can control the width and height, but I don't know how you would control framerate, etc
14:27:47 [dom]
... It seems more natural to let the sink in control
14:28:36 [dom]
Dan_Druta: I heard two aspects of applying constraints for: efficiency, and user experience
14:28:43 [timeless]
q- timeless
14:28:48 [dom]
... we should be very clear about it when we talk about pros and cons
14:29:22 [timeless]
q+ to ask if we want a selection constraint "don't pass a thing which triggers non-0 reset time to camera"?
14:29:58 [dom]
juberti: re the sink driving, that's an important model, but I don't think we should force everyone under that model
14:31:11 [dom]
gmandyam: in the media capture call in December, we discussed @@@
14:31:34 [dom]
... you can set options for recording independently of the source
14:32:19 [dom]
... it's not a real-time operation either, so with different considerations than peerconnection
14:33:57 [dom]
juberti: setting stuff at the source level doesn't invalidate options at the recording level
14:34:36 [dom]
burn: the current state of the settings proposal that we talked about, and the world we live in the current spec
14:34:51 [dom]
... is that of source, tracks, and sinks, you can only set constraints on tracks and sinks
14:35:04 [dom]
... peerconnection doesn't have the same kinf of settings capabilities
14:35:17 [dom]
... there is a need to control what the source provides natively
14:35:38 [dom]
... (if the device cheats e.g. with Apple, there is nothing we can do about it)
14:35:55 [dom]
... we only two, but we have three places
14:36:11 [dom]
... we could set constraints on sources, tracks, sinks
14:36:25 [dom]
... the problem with constraints on peerconnection, you can have multiple tracks going in a peerconnection
14:36:34 [dom]
... each of these tracks could have their own configuration
14:36:57 [dom]
... this is why we've been talking about control on tracks
14:37:38 [dom]
... the problem is to determine whether munging is done at the track abstraction level (and the source is where you set what you want), or at the sink abstraction level (and the track is where you set what you want)
14:37:43 [dom]
fluffy: +1 to burn
14:37:49 [dom]
... we're lacking a mental model of all this
14:38:00 [dom]
... there are sources, sinks, and tracks connect them together
14:38:10 [dom]
... the problem with sinks is that we don't have much control about it
14:38:27 [gmandyam]
@@@ = At December MediaCap TF call, the participants agreed that width-height combo settings are required for the recording API. I proposed a possible setting to the mailing list.
14:38:29 [dom]
... as a result, tracks are preferred location for exercising control
14:38:48 [dom]
... if you put constraint on tracks, that affect what's produced by that track
14:39:24 [dom]
... for the sources, the general model is that they look at all the tracks they deliver, and they select the best setting that allow them to satisfy the tracks they're producing
14:39:43 [dom]
... As a result, the mental model should be that Tracks are where we want to set constraints preferably
14:39:48 [dom]
juberti: that makes sense to me
14:40:44 [dom]
Josh_Soref: regarding the risk of latency attached to reopening a camera
14:40:57 [dom]
... could this be something we can prevent using a constraint?
14:41:19 [dom]
... (preventing from reopening a camera to adjust to a new setting)
14:41:50 [dom]
... On the PeerConnection bit, I've always assumed @@@
14:42:08 [dom]
stefanh: I think we need more control over transmission media
14:42:29 [dom]
... we could apply that to tracks, or provide an api in peerconnection per-track
14:43:04 [dom]
juberti: I would prefer to apply it via peerconnection
14:43:15 [dom]
stefanh: I agree
14:43:27 [timpanton]
timpanton has joined #webrtc
14:43:42 [dom]
hta: the video element has the CSS3 property to define the cropping/fitting model
14:44:32 [dom]
martin__: I don't mind fluffy's suggestions, except that it means you now have two ways to control this for the video element
14:44:45 [dom]
... I'm kind of tempted that we don't have this setting API for that
14:44:51 [dom]
... I'll have to talk with Travis about that
14:45:01 [dom]
juberti: I have an alternate proposal
14:45:07 [hta]
(the css3 property is called object-fit - it took me a while to find it)
14:45:12 [dom]
... where you define the maximal crop aspect ration
14:45:45 [dom]
-> object-fit in CSS Image Values and Replaced Content Module Level 3
14:46:33 [dom]
Josh_Soref: in the recorder case, there isn't necessary a post-processing server somewhere else
14:47:18 [adam]
adam has joined #webrtc
14:47:31 [dom]
... I can be doing local recording
14:48:36 [dom]
juberti: the cropAspectRatio is the process aspect ratio
14:49:16 [dom]
@@@: we would make it clear that process stuff would only be used for peerconnection
14:49:19 [dom]
cullen: do you have a slide on scaling?
14:49:22 [dom]
juberti: no
14:49:35 [dom]
cullen: I would love that we say we never scale up
14:49:48 [dom]
martin__: disagree, it has to happen in some cases
14:50:24 [dom]
... I think we're talking about processing, and where that processing is applied
14:50:46 [dom]
stefanh: to avoid upscaling, we would have to change the mediaelement, since it scales up
14:51:15 [dom]
cullen: I was referring to not allowing to scale up at the track level, but I think the length of the line shows I'm losing on that one
14:51:26 [dom]
ekr: what does it mean to scale up a track?
14:51:45 [dom]
cullen: say you've acquired a sd camera
14:52:14 [dom]
... and then you apply a constraint to the track to get a bigger resolution
14:53:10 [dom]
ekr: so I have a SD source that gets a SD track, plugging it into an HD video tag — that will be ugly
14:53:33 [dom]
... if you were to apply to same setting to a peerconnection, the same thing would happen
14:53:51 [dom]
... what you're saying that we should not allow to augment the resolution of a native track
14:53:57 [dom]
burn: I think you should have control
14:54:01 [ekr]
ekr has joined #webrtc
14:54:05 [dom]
... but fluffy, you're badly schizophrenic
14:54:14 [dom]
... if the constraint you set on the track is the output of the track
14:54:26 [dom]
... and it's ok for munging to happen
14:54:35 [dom]
... then scaling up has to be allowed to happen
14:54:54 [dom]
... what we would want is to have constraints to limit the way the processing can be done
14:55:06 [dom]
... and I think that's what justin is describing
14:55:28 [dom]
juberti: the goal is to provide a simpler way to do processing without providing a full-blown graph processing api
14:56:05 [dom]
juberti: I worry about an authoritarian model where @@@
14:56:59 [dom]
juberti: I don't think it makes sense to send the quadruple amount of bits with no increased quality
14:57:20 [dom]
tim: afaict, no browser has implemented object-fit property except opera in the past two years
14:57:36 [dom]
-> object-fit in caniuse
14:58:41 [dom]
jan: we're a bit off-track with upscaling
14:58:42 [Josh_Soref]
14:58:54 [dom]
... we've talked about source constraints and track constraints
14:59:15 [dom]
... if we had peerconnection.maxWidth, peerConnection.maxHeight, this would cutshort this whole debate
14:59:32 [dom]
juberti: I think the peerconnection should have specific control on what each track aspect is
14:59:50 [dom]
... I think we're pretty far afield to specific problem I'm trying to solve here
15:00:52 [dom]
martin__: if you're concerned about sending more bits over a PeerConnection than is necessary,
15:01:17 [dom]
... having these settings on PeerConnection allows the PC to say "you've set this higher than what the source provides"
15:02:18 [dom]
Jan: I would modify my earlier proposal to have PeerConnection say the aspect ration of what the client will care about (e.g. 4x3)
15:02:28 [dom]
... this is only for peerconnection
15:02:38 [dom]
juberti: not really, since object-fit is not implemented
15:02:57 [dom]
... some cameras can do cropping at the hardware level, but not all of them
15:03:07 [dom]
... this would let us solve the problem to these various cases
15:03:22 [dom]
... it's not the general mediaprocessing api, but it has a better RoI
15:03:36 [dom]
hta: I think there is some level agreement that cropping needs to be able happen
15:03:46 [dom]
... and the application should be able to have some control over it
15:04:04 [richt]
richt has joined #webrtc
15:04:16 [dom]
... there is a fair bit of debate on what the model is on what constraints apply to, and how they show up at the destination of the track
15:04:20 [dom]
... vs modification at the source of the track
15:04:38 [dom]
... We kind of passed that boundary when we agreed to be able to produce multiple resolutions from a single source
15:05:01 [dom]
... I would like to ask martin to write up his concerns on setting constraints on track
15:05:16 [dom]
... and propose an alternate approach
15:06:15 [dom]
ACTION: Martin to write up his concerns with using constraints on track to manipulate stuff that might apply to sources and might apply to sinks
15:06:15 [trackbot]
Created ACTION-83 - Write up his concerns with using constraints on track to manipulate stuff that might apply to sources and might apply to sinks [on Martin Thomson - due 2013-02-14].
15:06:21 [Josh_Soref]
15:06:29 [Josh_Soref]
RRSAgent, draft minutes
15:06:29 [RRSAgent]
I have made the request to generate Josh_Soref
15:06:45 [Josh_Soref]
Chair: hta, stefanh
15:06:57 [dom]
hta: I would like justin to take an action item to describe this constraint in a way that can be included in the document
15:07:17 [dom]
ACTION: Justin to describe the constraint for aspect ratio for potential inclusion in the document
15:07:17 [trackbot]
Created ACTION-84 - Describe the constraint for aspect ratio for potential inclusion in the document [on Justin Uberti - due 2013-02-14].
15:07:32 [Josh_Soref]
RRSAgent, draft minutes
15:07:32 [RRSAgent]
I have made the request to generate Josh_Soref
15:07:51 [adambe]
adambe has joined #webrtc
15:08:02 [dom]
Topic: Error handling
15:08:10 [timeless]
scribe: timeless
15:08:16 [dom]
hta: there are cases where we need to provide more information than just the error name
15:08:20 [timeless]
15:08:22 [dom]
... e.g. when there is an sdp error
15:08:25 [timeless]
15:08:34 [dom]
... we want the line of where the SDP arose
15:08:38 [timeless]
15:08:43 [timeless]
hta: could people help me refresh my memory?
15:08:52 [timeless]
burn: we were trying to finalize the principles
15:08:58 [timeless]
... but we decided we needed to look at specific
15:09:07 [timeless]
... and adambe said we needed to hear from implementers
15:09:12 [timeless]
... as they implement
15:09:20 [timeless]
... instead of "ooh, maybe it will do this, maybe it will do that"
15:09:25 [timeless]
ekr: what errors we're seeing
15:09:29 [timeless]
... what you need to return
15:09:32 [timeless]
... how often, and when
15:09:47 [timeless]
... justin and i are debating Error1, or Error2 and Error3
15:10:01 [timeless]
... i mostly see malformed SDP
15:10:09 [timeless]
... a browser screwed it up, or someone mangled it
15:10:21 [timeless]
... a parser of why i didn't like it and what it was
15:10:25 [adambe]
s/adambe/Adam Roach/
15:10:41 [timeless]
... Adam Roach pointed out the same need for ICE
15:10:47 [timeless]
... when i look at existing ICE information
15:10:55 [timeless]
... that would be a long way toward knowing what's going on
15:11:02 [timeless]
... a way to detail every check
15:11:05 [timeless]
... would be useful
15:11:43 [timeless]
... very confusing errors
15:11:57 [timeless]
... the only thing in the docs at all is detailed ICE info
15:12:08 [timeless]
justin: for Chrome 25, we'll have which line of ICE it choked on
15:12:18 [timeless]
... SDP people complain about Dom11 for not having crypto lines
15:12:39 [timeless]
... we should see if that's useful
15:12:45 [timeless]
s/ICE it/SDP it/
15:12:57 [timeless]
... we also created chrome:ice-debugging (not for JS)
15:13:09 [timeless]
... to allow people to debug apps w/o exposing js apis to apps
15:13:15 [timeless]
... we'll have more debugging tools
15:13:20 [timeless]
... before we invent too many more things
15:13:26 [timeless]
ekr: most of these errors are programming errors
15:13:41 [timeless]
... i think it's a great idea to have inspectors that are only accessible to programmer
15:13:45 [dom]
[The WebSockets API is very careful in not exposing too many details about errors: ; not sure if there are similar risks in our case]
15:13:45 [timeless]
... you test when you write code
15:13:48 [timeless]
... you don't know why
15:13:53 [timeless]
... once you get it working, it works
15:14:02 [timeless]
... ICE check failed on component 1 to the user
15:14:06 [timeless]
... is unlikely to help the user
15:14:20 [timeless]
fluffy: we're putting your email address in our errors
15:14:29 [timeless]
... i don't think we've reviewed the doc for errors that can come up
15:14:35 [adam]
adam has joined #webrtc
15:14:36 [timeless]
... we're seeing implementations
15:14:42 [timeless]
... a port of Firefox that does 264
15:14:49 [timeless]
... not being able to report up mismatches
15:14:54 [timeless]
s/does/also does/
15:15:02 [timeless]
... problems that you don't see since you only do one codec
15:15:07 [timeless]
derf: how we report errors is good
15:15:16 [timeless]
... we need to define what happens when there's an error
15:15:27 [timeless]
... you might parse SDP, it might be valid, but not apply to session state
15:15:36 [timeless]
... mismatched m=lines between offer and answer
15:15:44 [timeless]
... i don't care about behavior, but it needs to be consistent
15:15:52 [timeless]
... we could Tear down the entire call
15:15:59 [timeless]
... we could not access the entire SDP
15:16:06 [timeless]
... or browser crashes
15:16:15 [timeless]
... but it shouldn't be inconsistent between browsers
15:16:27 [timeless]
dom: WebSockets API is careful
15:16:32 [timeless]
... about avoiding exposing details
15:16:40 [timeless]
ekr: SDP exposes the entire Network Topology
15:16:52 [dom]
[so should we drop SDP? >:]
15:16:58 [timeless]
... hta's proposal of statistics
15:17:00 [timeless]
... could be useful
15:17:11 [timeless]
... or if i'm showing my video instead of remote
15:17:15 [timeless]
... if there's no RTP coming in
15:17:21 [timeless]
... re derf's proposal
15:17:28 [timeless]
... there's going to be a whole class of things
15:17:33 [timeless]
... passing bogus SDP
15:17:37 [timeless]
... sometimes that's a parse error
15:17:42 [timeless]
... sometimes that's an application error
15:17:49 [timeless]
... standards should encourage right behavior
15:17:59 [timeless]
... but if you get halfway through applying an SDP
15:18:05 [timeless]
... i can't roll-back
15:18:16 [timeless]
... it might be better for me to close
15:18:30 [ekr]
ekr has joined #webrtc
15:18:38 [timeless]
juberti: someone had a proposal of how rollback should happen
15:18:42 [timeless]
... two sets of errors
15:18:45 [timeless]
... @SDP layer
15:18:51 [timeless]
... either not eat
15:18:55 [timeless]
... or tear down
15:19:01 [timeless]
... or @SRTP
15:19:13 [timeless]
... and we could blow up in Security layer
15:19:21 [timeless]
... we can make best practices
15:19:27 [timeless]
hta: implementer feedback
15:19:35 [timeless]
... /me you can s//
15:19:41 [timeless]
s|... /me you can s//||
15:19:46 [timeless]
hta: some parse errors
15:19:56 [timeless]
... are easy, some are harder to pin down
15:20:03 [timeless]
... the missing crypto line is hard
15:20:08 [timeless]
... which line is the one to report it for?
15:20:18 [timeless]
... it would be nice to have some descriptive text
15:20:21 [timeless]
... not for applications
15:20:25 [timeless]
... but useful for debuggers
15:20:30 [dom]
[oh boy, are we now describing an SDP parser API?]
15:20:31 [timeless]
... or maybe useful advice
15:20:39 [timeless]
s/proposal of/action to describe/
15:20:47 [timeless]
ekr: missing crypto line v. missing fingerprint
15:20:52 [timeless]
... having looked at jingle
15:20:59 [timeless]
... it wouldn't be at parse time
15:21:02 [timeless]
... it'd be later
15:21:08 [timeless]
... you need a textual report
15:21:17 [timeless]
... "i'm sad for reason: ..."
15:21:28 [timeless]
... parsers print to logging but don't propagate
15:21:35 [timeless]
juberti: that landed last night
15:21:40 [timeless]
... in Canary
15:21:57 [timeless]
stefanh: no big need for adding errors
15:22:11 [timeless]
... but more on what happens when you encounter an error
15:22:32 [timeless]
hta: this is part of procedure description for setLocalDescription/...
15:22:37 [timeless]
... we left off precise language
15:22:49 [timeless]
... on the idea of getting the general principles before we write precise language
15:22:58 [timeless]
... i think it's the time to write precise language
15:23:21 [timeless]
[ Coffee Break for 15 minutes ]
15:55:27 [ekr]
ekr has joined #webrtc
15:55:43 [lgombos]
lgombos has joined #webrtc
15:55:46 [timeless]
Topic: Data Channel API
15:55:51 [adam]
adam has joined #webrtc
15:56:04 [dom]
dom has joined #webrtc
15:56:22 [dom]
RRSAgent, draft minutes
15:56:22 [RRSAgent]
I have made the request to generate dom
15:56:26 [timeless]
jesup: W3 flavor of data channel discussion
15:56:36 [timeless]
... i hope less controversial than the IETF flavor
15:56:43 [timeless]
... maybe we'll make a decision
15:56:48 [timeless]
[ DataChannel JS API]
15:56:52 [timeless]
s/]/ ]/
15:56:58 [dom]
i/hta: could people help me refresh my memory?/ScribeNick: timeless
15:57:00 [dom]
RRSAgent, draft minutes
15:57:00 [RRSAgent]
I have made the request to generate dom
15:57:03 [timeless]
jesup: feedback from Mozilla Devs working on those apis
15:57:07 [timeless]
... has been generally positive
15:57:14 [timeless]
... it's worked the way they've expected
15:57:21 [timeless]
... primary unresolved area
15:57:33 [timeless]
... is how to create data channel and how it interacts w/ createOffer/createAnswer
15:57:38 [timeless]
[ Changes to API ]
15:57:55 [timeless]
jesup: IETF 85 ... protocol to add data channels to agree on interop
15:58:07 [timeless]
martin__: the web socket idea of a sub protocol?
15:58:11 [timeless]
jesup: i guess so
15:58:15 [timeless]
... an IANA registered string
15:58:27 [timeless]
... if you do this, you agree you're exchanging in some form
15:58:34 [timeless]
... since we're mirroring WebSocket
15:58:40 [timeless]
... this is that thing from WebSocket
15:59:00 [timeless]
adambe: latest version of WebSocket lets you say you accept multiple protocols?
15:59:17 [timeless]
jesup: but you can only use one once it's in flight
15:59:19 [dom]
-> WebSocket Subprotocols registry
15:59:31 [timeless]
... our way to create data channel is different from WebSocket
15:59:36 [timeless]
martin__: no need to negotiate
15:59:38 [timeless]
... it's with itself
15:59:55 [timeless]
jesup: you would need a way to signal back agreement, complexity for no reason
15:59:58 [timeless]
[ Proposal ]
16:00:05 [timeless]
jesup: like yesterday, but w/o SDP
16:00:10 [timeless]
... all the JS layer
16:00:22 [timeless]
.. no DataChannel unless you call pc.createDataChannel()
16:00:23 [wonsuk]
wonsuk has joined #webrtc
16:00:24 [mreavy]
mreavy has joined #webrtc
16:00:27 [timeless]
16:00:45 [timeless]
jesup: you can call it any number of times before createOffer/createAnswer
16:01:01 [timeless]
... if called after initial createOffer, it triggers a negotiationneeded
16:01:09 [timeless]
hta: createOffer or setLocalDescription?
16:01:23 [timeless]
jesup: before SDP or after SDP is the distinction
16:01:30 [timeless]
... relative ICE things
16:01:43 [timeless]
hta: what if they createOffer throw it away and call createOffer again?
16:01:49 [timeless]
jesup: maybe `initial` is wrong
16:02:13 [timeless]
hta: one solution is first call triggers negotiationneeded
16:02:23 [timeless]
jesup: createStream throw away stream, stream is still there
16:02:27 [timeless]
... same for data channels
16:02:35 [timeless]
martin__: seems like there's some need for ...
16:02:45 [timeless]
derf: we had an AI for when negotiationneeded fires
16:02:54 [timeless]
martin__: and when other things fire after
16:02:57 [timeless]
[ Problems ]
16:03:27 [timeless]
jesup: unless you sniff SDP, you won't know if there was a data channel
16:03:31 [martin__]
the question is a) when onnegotiationneeded fires and b) when it clears such that it could fire again
16:03:43 [timeless]
... we can't add an m=line in an answer
16:03:54 [timeless]
... if you want it, you'd need a second round of offer-answer
16:03:57 [timeless]
[ Example ]
16:04:10 [derf]
martin__, I suspect the answer to b) is that it can always fire again.
16:04:24 [timeless]
[ Decisions! (Please!) ]
16:04:45 [timeless]
jesup: use createDataChannel to trigger m=application line
16:04:57 [timeless]
... if needed, createDataChannel will call negotiationneeded
16:05:25 [timeless]
martin__: need to be >0 open channels to include m=application
16:05:36 [timeless]
... because you could create a data channel, close it, and then createOffer
16:05:56 [timeless]
hta: i'm fine w/ this
16:06:28 [timeless]
... is that what you want?
16:06:31 [timeless]
jesup: basically
16:07:26 [ekr]
ekr has joined #webrtc
16:07:26 [timeless]
16:07:34 [timeless]
paul: namespace for sub protocols?
16:07:41 [timeless]
... subordinate to webrtc channel namespace?
16:07:49 [timeless]
... should be same namespace as websocket subprotocols?
16:07:54 [timeless]
... i don't know that
16:07:55 [martin__]
ACTION jesup to if we replace onnegotiationneeded conditions to the same as those we have for addStream()
16:07:55 [trackbot]
Error finding 'jesup'. You can review and register nicknames at <>.
16:08:04 [timeless]
jesup: i think it's an IANA register
16:08:20 [timeless]
paul: just want a procedure
16:08:23 [martin__]
ACTION Randell to make onnegotiationneeded conditions the same as those we have for addStream()
16:08:23 [trackbot]
Error finding 'Randell'. You can review and register nicknames at <>.
16:08:23 [timeless]
... to define these
16:08:35 [timeless]
TedHardie: it's a first come first server registry
16:08:40 [timeless]
... set up by WebSocket folks
16:08:45 [timeless]
paul: single level name
16:08:53 [timeless]
hta: you can define protocols for data channel
16:09:08 [timeless]
... that don't work well w/ web sockets
16:09:15 [timeless]
... that might be an argument for different registry
16:09:26 [timeless]
jesup: not an argument for different registry, just don't use w/ websocket
16:09:36 [timeless]
TedHardie: for this room, push to IETF side
16:09:38 [timeless]
jesup: i agree
16:09:48 [timeless]
... what `protocol` means shall be defined by IETF
16:09:51 [martin__]
OK, randell isn't a registered user
16:10:05 [timeless]
Dan_Druta: protocol isn't limited to registry, righ?
16:10:08 [timeless]
16:10:17 [timeless]
jesup: if it wishes to ignore the registry, nothing can force it
16:10:26 [timeless]
jesup: I yield the remainder of my time
16:10:40 [timeless]
stefanh: we made a decision to go w/ this w/ hta's amendment
16:11:10 [dom]
ACTION: stefanh to get Randell to make onnegotiationneeded conditions the same as those we have for addStream(
16:11:10 [trackbot]
Created ACTION-85 - Get Randell to make onnegotiationneeded conditions the same as those we have for addStream( [on Stefan Håkansson - due 2013-02-14].
16:11:16 [timeless]
[ Stats ]
16:11:22 [timeless]
i/Stats/Topic: Stats/
16:11:58 [timeless]
[ hta defines Microphones `chair at desk`, `speaker at wireless`, `individual at center mic` ]
16:12:02 [timeless]
[ New API ]
16:12:20 [timeless]
hta: changing datatype of what comes back on stats report
16:12:30 [timeless]
... to be an object that's able to tell you the identifiers
16:12:36 [timeless]
... and able to get those objects
16:12:42 [timeless]
... each object has type and id
16:12:53 [timeless]
... and set of names, and a getter to get value for name
16:13:00 [timeless]
juberti: like a Dictionary?
16:13:06 [timeless]
[ New Objects ]
16:13:11 [timeless]
hta: exactly
16:13:18 [timeless]
... Dictionaries are a name value mapping
16:13:27 [timeless]
... I decided this is a fine way of putting stuff into documentation
16:13:33 [timeless]
... that can be checked with a WebIDL parser
16:14:46 [timeless]
hta: sequence returned order is somewhat curious
16:14:51 [timeless]
... depends on alphabetical names
16:14:59 [timeless]
... and based on hierarchy
16:15:38 [timeless]
... things defined in derived dictionary are added to the sequence (sorted) after the original dictionary's list
16:15:49 [timeless]
... this is a pain in the posterior
16:16:02 [timeless]
... i looked into the state of a Dictionary
16:16:11 [timeless]
... and how to return one from a function
16:16:31 [timeless]
... the answer i got is that `it's doable, w/ 3 experts in DOM state manipulation`
16:16:42 [timeless]
... so i propose no dictionaries
16:16:51 [timeless]
... [as from the previous slide ]
16:17:00 [timeless]
[ Principles of object definition ]
16:17:10 [timeless]
hta: use Dictionary as documentation method
16:17:15 [timeless]
... pointers are done via ID
16:17:42 [timeless]
... Keep it simple (and well defined)
16:17:52 [timeless]
martin__: i'm unsympathetic to the hard to implement
16:18:06 [timeless]
hta: did you implement something that fully implements dictionary
16:18:13 [timeless]
martin__: one thing i didn't deal w/ was extra params
16:18:30 [timeless]
martin__: the idea that you'd have trouble passing objects to js as hard to do...
16:18:36 [timeless]
... we've discussed this at length
16:18:52 [timeless]
... the things we're getting are key-value-pairs w/ primitives and maybe arrays
16:19:00 [timeless]
... but you're forcing them to use unfamiliar constructs
16:19:04 [JeromeMarcon_]
JeromeMarcon_ has joined #webrtc
16:19:30 [timeless]
adambe: JS has a way to deal w/ KeyValue pairs
16:19:40 [timeless]
... couldn't we say we're returning a JS object w/ these values
16:19:43 [timeless]
... and not promise order
16:20:09 [timeless]
... that gives us enumeration and lookup from JS
16:20:14 [timeless]
hta: one vote for Dictionary
16:20:18 [timeless]
... and one comment for Object
16:20:28 [timeless]
fluffy: in favor of making this work
16:20:29 [dom]
[I think you can use [NoInterfaceObject] interface to describe regular JavaScript objects]
16:20:41 [timeless]
... keen to restrict semantics to that of Dictionary
16:20:50 [timeless]
... if function calls get mapped to thing, this would be a disaster
16:21:02 [timeless]
... nearly every language has something like Dictionary
16:21:16 [timeless]
... I want Dictionary semantics, ... ASN.1 - i don't care
16:21:45 [timeless]
ekr: is there an argument against these being properties
16:21:52 [timeless]
... that isn't rooted in implementation details
16:22:25 [timeless]
... why isn't names() and getValue() just properties of the object
16:22:48 [timeless]
... one is that it's Lousy for JS user
16:22:57 [timeless]
... and one that it's inconvenient for the C++ WebKit dev
16:23:04 [timeless]
... is it just PITA for WebKit?
16:23:37 [timeless]
... i'd have expected that a param was property index (.keys)
16:23:45 [timeless]
... and reference by .<> or [<>]
16:23:52 [timeless]
fluffy: you expect Dictionary
16:24:12 [timeless]
ekr: what's the merits of this other than implementation?
16:24:13 [jeromemarcon]
jeromemarcon has joined #webrtc
16:24:28 [timeless]
juberti: if it was []/. instead of getValue()
16:24:38 [timeless]
dom: i understand Dictionary is a pain
16:24:42 [timeless]
... but why not Interface
16:24:48 [timeless]
... this is similar to GeoLoc in a way
16:24:57 [timeless]
... they use [NoInterfaceObject]
16:25:10 [timeless]
... we shouldn't define our own way of declaring our own local data
16:25:17 [timeless]
... WebIDL w/ interfaces provides that
16:25:23 [timeless]
martin__: use partial interfaces
16:25:33 [timeless]
hta: partial interfaces w/o source
16:25:45 [timeless]
juberti: why objects
16:25:54 [timeless]
... couldn't we make them more like regular dictionaries?
16:26:28 [timeless]
hta: if `void (RTCStatsReport statsReport)` with a map
16:26:43 [timeless]
hta: Dictionary provides some guarantees and constraints i don't want
16:26:53 [timeless]
martin__: it doesn't need to be a Dictionary
16:27:00 [timeless]
... it could be [] or .
16:27:10 [timeless]
... you can do this in JS in browsers w/ handlers
16:27:23 [timeless]
... i don't see a problem w/ implementation
16:27:30 [timeless]
... if you aren't backing directly w/ C++
16:27:48 [timeless]
martin__: we need a map
16:27:56 [timeless]
adambe: `statsReport`
16:28:00 [timeless]
... report is a complete thing
16:28:04 [timeless]
... and you have subreports
16:28:12 [timeless]
... you want two levels
16:28:18 [timeless]
... you could guarantee a timestamp, type, id
16:28:24 [timeless]
... why are those on a different level?
16:28:43 [timeless]
martin__: individual stats object could be created at different times
16:29:07 [timeless]
adambe: move timetamp/id into getValue?
16:29:25 [adam]
adam has joined #webrtc
16:29:39 [timeless]
... i'm disregarding the top object
16:29:47 [timeless]
[ RTCStatsReport ]
16:30:19 [timeless]
adambe: i don't see why we need a stats.type v. stats.getValue(x).
16:30:27 [timeless]
hta: how do you specify that in WebIDL
16:30:38 [timeless]
martin__: i'd rather show example code for exact number of packets
16:30:55 [timeless]
dom: I think in WebIDL, your additional data structure is generic
16:31:09 [timeless]
... Object is a Map
16:32:27 [timeless]
fluffy: don't drive from WebIDL
16:32:31 [timeless]
... figure out from how you want to use it
16:32:37 [timeless]
... i think it generally does
16:32:42 [timeless]
hta: i don't have slides w/ code
16:33:04 [dom]
s/is generic/inherits from a core interface
16:33:38 [timeless]
hta: if i have dictionary foo { int blah; }
16:33:45 [timeless]
... i can't have additional attributes
16:33:53 [timeless]
martin__: no one sees the dictionary type
16:34:06 [timeless]
... so you can have dictionary privatefoo : foo {...}
16:34:12 [timeless]
hta: they are unobservable?
16:34:28 [timeless]
fluffy: this applies to any language w/ dictionary inheritance
16:34:38 [timeless]
ekr: no opinion about dictionaries permitting this behavior
16:34:47 [timeless]
... it's important to be able to add additional properties
16:34:54 [timeless]
... if that can't be made to work, that's death for dictionary
16:35:08 [timeless]
jan: i think Dictionary doesn't have a sequence on purpose
16:35:12 [timeless]
... as a useful constraint
16:35:49 [timeless]
... you can't know if a caller had a meaning in their sequence or not
16:35:59 [timeless]
... a sequential dictionary would be a less restrictive type
16:36:34 [timeless]
fluffy: write in the spec that objects will inherit from the type defined in the spec
16:36:36 [timeless]
hta: sold
16:37:32 [timeless]
adambe: so, StatsReport is a map?
16:37:42 [timeless]
... and we need unique key for each object?
16:37:47 [timeless]
hta: key was unique in that object
16:38:08 [timeless]
juberti: top thing is map->RTCStatsObject
16:38:45 [timeless]
... the dictionary's become interface *RTP* : RTCStatsObject
16:39:02 [timeless]
16:39:03 [gmandyam]
gmandyam has joined #webrtc
16:39:34 [timeless]
martin__: RTCStatsReport is second level of ugly
16:39:39 [timeless]
hta: it's just a map
16:39:44 [adam]
adam has joined #webrtc
16:39:49 [timeless]
martin__: a map of id's to things
16:39:53 [timeless]
... but why do we need ids?
16:39:58 [timeless]
... why are they the key?
16:40:06 [timeless]
... why not rtcstatsobject.type ?
16:40:19 [timeless]
... given id's aren't stable across calls
16:40:28 [timeless]
adambe: at time X
16:40:30 [timeless]
... you get a report
16:40:38 [timeless]
... check stats for some subreport component
16:40:42 [timeless]
... at time Y
16:40:45 [timeless]
... you get a report
16:40:49 [timeless]
... you want to compare reports
16:41:13 [timeless]
... you need to know that stats report is comparable
16:41:52 [timeless]
"Comment 22"
16:41:59 [timeless]
martin__: indexing by type
16:42:10 [timeless]
... i need to go back to usage patterns
16:42:20 [timeless]
hta: by id gives you one
16:42:33 [timeless]
... by type could give you more
16:43:18 [timeless]
hta: an id could be an implementation defined string/random number
16:43:36 [timeless]
martin__: but that can be correlated to other stats object at other random times for the same stats object?
16:43:51 [timeless]
hta: it's the identifier of the underlying object's specific stats proper
16:43:55 [timeless]
16:44:16 [dom]
-> Harald stats v2 proposal
16:44:26 [timeless]
adambe: how do we define RTCStatsReport ?
16:44:51 [timeless]
martin__: I think WebIDL has operator [index]
16:44:57 [timeless]
... or getter()
16:45:13 [timeless]
hta: i can't say definitely w/o `JS the good parts`
16:45:17 [timeless]
... i've seen filter()
16:45:35 [timeless]
... if primary map is by id, then it's easy to get by type
16:45:48 [timeless]
adambe: statsreport is only by id
16:45:53 [timeless]
... people implement by type themselves
16:45:58 [timeless]
hta: i think my life is simpler
16:46:09 [timeless]
juberti: what's the timestamp unit?
16:46:17 [timeless]
hta: `long` is a mistake
16:46:26 [timeless]
adambe: i argued for DOMTimeStamp
16:46:33 [timeless]
hta: I argued for Date
16:47:16 [timeless]
ekr: i'd be sad if i couldn't express time in units smaller than ms
16:47:28 [timeless]
... requirement is sub-ms resolution
16:47:42 [dom]
-> High Resolution Time
16:47:45 [timeless]
juberti: FP or us?
16:48:00 [timeless]
martin__: nothing native provides one
16:48:25 [timeless]
dom: High Resolution Time does this
16:48:30 [timeless]
Josh_Soref: i believe it's from Web Perf
16:48:43 [timeless]
hta: adopt High Res Time as soon as it goes to the list
16:49:22 [timeless]
hta: i implemented this as long and was surprised it didn't overflow
16:49:32 [timeless]
[ No more slides ]
16:49:46 [wonsuk]
wonsuk has joined #webrtc
16:50:01 [timeless]
juberti: on naming
16:50:07 [timeless]
... RTCStatsObject is the parent type
16:50:12 [timeless]
... derived types are RTPStream
16:50:18 [timeless]
... do we want `Stats` in the names?
16:50:39 [timeless]
... i could see having an RTPStream object at a future type
16:50:42 [timeless]
16:50:56 [timeless]
adambe: i think they should show that they're Stats
16:51:37 [timeless]
16:51:47 [timeless]
adambe: how do we keep track of remote stats?
16:51:54 [timeless]
... are they properties of a local stat
16:51:59 [timeless]
... or another property?
16:52:40 [timeless]
hta: most of the time, properties
16:52:55 [timeless]
... i defined RTPStream `other end is`
16:53:31 [timeless]
... one comes from RTCP and one's local
16:53:44 [timeless]
... linking objects together is a special case
16:53:58 [timeless]
adambe: my preference was to target the remote object directly
16:54:34 [timeless]
hta: the weird point is
16:54:40 [timeless]
... if you get partial stats
16:54:51 [timeless]
... sometimes the other side falls outside your filter
16:55:07 [timeless]
adambe: but you only filter on one level
16:55:39 [timeless]
... remote shouldn't be null or
16:55:43 [timeless]
[ scribe is getting lost ]
16:55:58 [timeless]
hta: if you filter, you get n+object graph
16:56:25 [timeless]
... you could have stats for other tracks
16:56:35 [timeless]
hta: one case you look up id and it's there
16:56:40 [timeless]
... and one case the id isn't there
16:57:03 [timeless]
hta: if there's a point about filtering
16:57:13 [timeless]
fluffy: i could live with this
16:57:17 [timeless]
... i'd prefer something more
16:57:31 [timeless]
... trying to treat remote stats slightly differently doesn't make sense to me
16:58:09 [timeless]
... i'd suggest having 4 sets of statistics ({Local,Remote}{Incoming,Outgoing}RTPStreamStats)
16:58:15 [timeless]
... and then stuff all 4 in one obect
16:58:20 [timeless]
16:58:27 [timeless]
hta: if you group, you impose a tree structure
16:58:55 [timeless]
... i have peerconnection -> streams -> tracks
16:58:59 [timeless]
... i have transports -> tracks
16:59:04 [timeless]
... not the same mapping
16:59:30 [timeless]
"relations are good, normal forms are good, trees are bad"
17:00:31 [timeless]
juberti: on name
17:00:34 [timeless]
... type
17:00:39 [timeless]
... do we prefer to spell out type
17:00:45 [timeless]
... as opposed to instanceof
17:01:02 [timeless]
... you have a bunch of RTCStats objects that are more derived
17:01:08 [timeless]
... you can look at the parent name property
17:01:18 [timeless]
... should we use instanceof?
17:01:21 [Zakim]
Zakim has left #webrtc
17:01:46 [timeless]
Josh_Soref: if you want to duct-type an object, instanceof doesn't work
17:01:59 [timeless]
martin__: i wrote up an example of how to use this
17:02:07 [timeless]
... it's clumsy if i'm looking for a particular type
17:02:12 [timeless]
... how to figure out which type i'm looking for
17:02:27 [timeless]
hta: leaf hierarchy
17:02:34 [timeless]
... reuse inheritance for more attributes
17:02:38 [timeless]
... type field isn't useful anymore
17:02:48 [timeless]
... is it incoming, or googlespecial or ...
17:03:02 [timeless]
... so we need type documentation
17:03:50 [timeless]
adambe: some way to tell getstats what you want to poll for?
17:04:00 [timeless]
... it'd be easier if you could somehow know what to expect
17:04:20 [timeless]
Topic: Open Issues
17:04:33 [timeless]
s/Topic: Open Issues/
17:04:38 [timeless]
stefanh: Lunch
17:04:44 [timeless]
[ +1 +1 +1 ]
17:05:01 [timeless]
fluffy: is there uncertainty to the ietf-stuff
17:05:06 [timeless]
... for what to do?
17:05:15 [timeless]
hta: for stats, adambe needs to edit as agreed
17:05:22 [timeless]
... adambe and i will have a telco next week
17:05:52 [timeless]
fluffy: one of you will create a document-ietf mirror of burn
17:06:00 [timeless]
hta: which registry?
17:06:11 [timeless]
fluffy: do we create a registry of stats?
17:06:21 [timeless]
hta: i think we should
17:06:24 [timeless]
fluffy: expert review?
17:06:40 [timeless]
TedHardie: there's a W3C side process for creating registries
17:06:53 [timeless]
adambe: what about additional ones
17:06:59 [timeless]
... do we want some mandatory stats?
17:07:07 [timeless]
hta: i think the spec is unreadable w/o some examples
17:07:14 [timeless]
... the document should register those
17:07:16 [timeless]
[ Lunch ]
17:07:28 [timeless]
[ Meeting resumes as IETF after Lunch ]
17:07:52 [timeless]
TedHardie: we'll try to close IETF on-time if not early due to SnowPocalypse
17:08:00 [timeless]
... i know we officially scheduled 5
17:08:07 [timeless]
... i'd suggest we target resuming @ 1:15
17:11:08 [dom]
RRSAgent, draft minutes
17:11:08 [RRSAgent]
I have made the request to generate dom
17:33:20 [mreavy]
mreavy has joined #webrtc
17:55:03 [adam]
adam has joined #webrtc
17:58:22 [lgombos]
lgombos has joined #webrtc
18:17:21 [JonLennox]
JonLennox has left #webrtc
18:28:11 [lgombos]
lgombos has joined #webrtc
19:39:07 [mreavy]
mreavy has left #webrtc
19:46:29 [lgombos_]
lgombos_ has joined #webrtc
20:25:53 [lgombos]
lgombos has joined #webrtc
21:02:31 [lgombos_]
lgombos_ has joined #webrtc
21:58:46 [jun]
jun has joined #webrtc