Bug 210932 - getUserMedia returns OverConstrained on Jitsi
Summary: getUserMedia returns OverConstrained on Jitsi
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: WebRTC (show other bugs)
Version: WebKit Nightly Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: youenn fablet
URL:
Keywords: InRadar
Depends on:
Blocks: 249057
  Show dependency treegraph
 
Reported: 2020-04-23 12:14 PDT by Philippe Normand
Modified: 2022-12-09 17:43 PST (History)
13 users (show)

See Also:


Attachments
gUM constraints (65.07 KB, image/png)
2020-04-24 09:21 PDT, Jaya
no flags Details
failing gUM (159.00 KB, image/png)
2020-04-24 10:22 PDT, Philippe Normand
no flags Details
gUM works in Chrome (197.67 KB, image/png)
2020-04-24 11:44 PDT, Philippe Normand
no flags Details
gUM probe (217.46 KB, image/png)
2020-04-24 13:58 PDT, Philippe Normand
no flags Details
WIP (1.56 KB, patch)
2020-06-26 09:42 PDT, Philippe Normand
no flags Details | Formatted Diff | Diff
Patch (18.62 KB, patch)
2020-07-02 01:44 PDT, youenn fablet
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Philippe Normand 2020-04-23 12:14:44 PDT
Because of this block of code: https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/platform/mediastream/RealtimeVideoCaptureSource.cpp#L267

Any reason why lower-resolutions presets are not checked?

Jitsi requires 1280x720 at 30fps but because of that, if my webcam doesn't support this, similar lower presets (same aspect-ratio) are dimissed. I don't understand why :)
Comment 1 Philippe Normand 2020-04-23 12:18:17 PDT
That's one of the reasons Jitsi (meet.jit.si) doesn't work well currently on Safari. It would be great to fix it, as it's quite widely used nowadays.
Comment 2 youenn fablet 2020-04-23 12:23:57 PDT
So, you would like WebKit to upsample?
This seems sad but is doable...
Maybe we should bring that issue to Jitsi.
Comment 3 Philippe Normand 2020-04-23 12:42:11 PDT
Well, I think that upsampled video is better than no video at all :)
Comment 4 Philippe Normand 2020-04-23 13:29:12 PDT
https://github.com/jitsi/jitsi-meet/issues/5425
Comment 5 Philippe Normand 2020-04-23 13:34:35 PDT
Another likely reproducer: https://test.webrtc.org
Comment 6 Jaya 2020-04-23 15:22:30 PDT
Hey there, I am a Jitsi developer. We do use ideal constraints so I am surprised you are running into this issue.
Here is the link to the line of code - https://github.com/jitsi/lib-jitsi-meet/blob/master/modules/RTC/RTCUtils.js#L56
Can you pls provide me more details about the issue ? The github issue referenced in the above comment is a meta issue for all camera related bugs, I wasn't able to dig up your particular issue. Thank you !
Comment 7 Philippe Normand 2020-04-24 08:06:12 PDT
These are the constraints Jitsi currently requires for me:

audioConstraints {"mandatoryConstraints":{},"advancedConstraints":[]} videoConstraints {"mandatoryConstraints":{"width":{"min":320,"max":1280,"ideal":1280},"height":{"min":180,"max":720,"ideal":720},"facingMode":{"exact":[],"ideal":["user"]}},"advancedConstraints":[]}

This is a JSON internal serialization of the constraints... I can submit a patch if such feature is considered useful for logging.
Comment 8 Jaya 2020-04-24 09:21:56 PDT
Created attachment 397461 [details]
gUM constraints
Comment 9 youenn fablet 2020-04-24 09:35:07 PDT
Seems like constraints that are ok, min is 320x280, ideal is 1280x720.
I am not sure how we are hitting OverConstrained here.
Comment 10 youenn fablet 2020-04-24 09:35:25 PDT
navigator.mediaDevices.getUserMedia({video : {width:{"min":320,"max":1280,"ideal":1280},height:{"min":180,"max":720,"ideal":720}, facingMode: "user"} }) works for me locally.
Comment 11 Philippe Normand 2020-04-24 10:08:22 PDT
(In reply to youenn fablet from comment #10)
> navigator.mediaDevices.getUserMedia({video :
> {width:{"min":320,"max":1280,"ideal":1280},height:{"min":180,"max":720,
> "ideal":720}, facingMode: "user"} }) works for me locally.

What's your MBP model?
On a early 2013 MBP, the gUM fails on Jitsi, I suppose because my webcam doesn't handle 720p at 30fps.
Comment 12 youenn fablet 2020-04-24 10:11:33 PDT
Mine is more recent but I am not sure it matters because Safari should process these constraints just fine as Lon as the web cam can provide 320x180.

Can you try Safari Tech Preview maybe?
Comment 13 Philippe Normand 2020-04-24 10:22:35 PDT
Created attachment 397465 [details]
failing gUM

This is on Safari TP.
Comment 14 Philippe Normand 2020-04-24 10:25:48 PDT
navigator.mediaDevices.getUserMedia({video:{}}) works though ;)
Comment 15 youenn fablet 2020-04-24 11:16:58 PDT
(In reply to Philippe Normand from comment #14)
> navigator.mediaDevices.getUserMedia({video:{}}) works though ;)

Can you play a little bit with the constraints and reduce as much as possible?
We should probably add a console log error message with the failing constraint.
Comment 16 Philippe Normand 2020-04-24 11:31:19 PDT
Any non-empty video constraint fails, basically. Even this: {video : {height:{"min":180}}}. The only working one I found so far is {video:{}}.
Comment 17 Philippe Normand 2020-04-24 11:44:13 PDT
Created attachment 397477 [details]
gUM works in Chrome
Comment 18 Eric Carlson 2020-04-24 13:51:39 PDT
What does this produce:

(async () => {
  try {
    const filter = ({width, height}) => ({width, height});
    const stream = await navigator.mediaDevices.getUserMedia({video:{}});
    const [track] = stream.getVideoTracks();
    console.log(`Capabilities: ${JSON.stringify(filter(track.getCapabilities()), null, 2)}`);
    console.log(`Settings: ${JSON.stringify(filter(track.getSettings()), null, 2)}`);
  } catch(e) {
    console.log(e);
  }
})();
Comment 19 Philippe Normand 2020-04-24 13:56:55 PDT
[Log] Capabilities: {
  "width": {
    "max": 1280,
    "min": 1
  },
  "height": {
    "max": 720,
    "min": 1
  }
}
[Log] Settings: {
  "width": 640,
  "height": 480
}
Comment 20 Philippe Normand 2020-04-24 13:58:08 PDT
Created attachment 397504 [details]
gUM probe
Comment 21 Philippe Normand 2020-04-27 10:03:13 PDT
(In reply to Philippe Normand from comment #19)
> [Log] Capabilities: {
>   "width": {
>     "max": 1280,
>     "min": 1
>   },
>   "height": {
>     "max": 720,
>     "min": 1
>   }
> }
> [Log] Settings: {
>   "width": 640,
>   "height": 480
> }

Same on Chrome BTW. So is this a bug in the end?
Comment 22 Eric Carlson 2020-04-27 12:40:12 PDT
(In reply to Philippe Normand from comment #21)
> 
> Same on Chrome BTW. So is this a bug in the end?

It is definitely a bug if all non-empty video constraint fail.
Comment 23 Philippe Normand 2020-04-28 04:58:38 PDT
FWIW this isn't specific to the Mac port. Also happens in GTK.
Comment 24 Philippe Normand 2020-05-06 10:34:27 PDT
This yields no result in Safari TP:

(async () => {
  for (let w = 1280; w > 0; w -= 10) {
    for (let h = 720; h > 0; h -= 10) {
      try {
        let stream = await navigator.mediaDevices.getUserMedia({
          video: {
            width: {
              "min": w,
              "max": 1280,
              "ideal": w
            },
            height: {
              "min": h,
              "max": 720,
              "ideal": h
            }
          }
        });
        console.log("Success " + w + "x" + h);
      } catch (err) {}
    }
  }
  console.log("Done");
})();
Comment 25 Ribero 2020-06-02 01:58:38 PDT
Same situation in my context running:

(async () => {
  try {
    const filter = ({width, height}) => ({width, height});
    const stream = await navigator.mediaDevices.getUserMedia({video:{}});
    const [track] = stream.getVideoTracks();
    console.log(`Capabilities: ${JSON.stringify(filter(track.getCapabilities()), null, 2)}`);
    console.log(`Settings: ${JSON.stringify(filter(track.getSettings()), null, 2)}`);
  } catch(e) {
    console.log(e);
  }
})();

with: 

MacBook Pro (Retina, mid-2012), macOS 10.14.6 / Safari 13.1 and 13.1.1 :

[Log] Capabilities: {
  "width": {
    "max": 1280,
    "min": 1
  },
  "height": {
    "max": 720,
    "min": 1
  }
}
[Log] Settings: {
  "width": 640,
  "height": 480
}

iMac (Retina 4K, 21.5-inch, 2017), macOS 10.14.6 / Safari 13.1 and 13.1.1:

[Log] Capabilities: {
  "width": {
    "max": 1280,
    "min": 1
  },
  "height": {
    "max": 720,
    "min": 1
  }
}
[Log] Settings: {
  "width": 640,
  "height": 480
}

and with an antique Mac Pro (beginning 2008), macOS 10.13.6 (17G66), Safari 13.0.4 (13608.4.9.1.4) + iSight :

[Log] Capabilities: {
  "width": {
    "max": 640,
    "min": 1
  },
  "height": {
    "max": 480,
    "min": 1
  }
}
[Log] Settings: {
  "width": 640,
  "height": 480
}
Comment 26 Jaya 2020-06-16 05:29:28 PDT
Any chance of this getting fixed ? We have more Jitsi users complaining about this issue. Specifying only ideal constraint and not specifying min/max values for width/height seem to work for some of the cases.
Comment 27 Radar WebKit Bug Importer 2020-06-16 05:42:07 PDT
<rdar://problem/64403675>
Comment 28 youenn fablet 2020-06-26 05:56:42 PDT
Philippe, if you have time to build WebKit Tot with https://bugs.webkit.org/show_bug.cgi?id=213643 applied on your laptop, that might help. Or we can wait for STP to pick up this change.
Comment 29 Philippe Normand 2020-06-26 07:26:10 PDT
(In reply to youenn fablet from comment #28)
> Philippe, if you have time to build WebKit Tot with
> https://bugs.webkit.org/show_bug.cgi?id=213643 applied on your laptop, that
> might help. Or we can wait for STP to pick up this change.

I'm not sure this will help, that patch doesn't log the call site I referred to in comment 0, afaics.
Comment 30 youenn fablet 2020-06-26 07:28:22 PDT
(In reply to Philippe Normand from comment #0)
> Because of this block of code:
> https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/platform/
> mediastream/RealtimeVideoCaptureSource.cpp#L267
> 
> Any reason why lower-resolutions presets are not checked?

We do not want to super-sample in general.

> Jitsi requires 1280x720 at 30fps but because of that, if my webcam doesn't
> support this, similar lower presets (same aspect-ratio) are dimissed. I
> don't understand why :)

It asks for 1280x720 but these are ideal constraints so normally, if it cannot be met, it should not result in an error.
Comment 31 youenn fablet 2020-06-26 07:29:07 PDT
> I'm not sure this will help, that patch doesn't log the call site I referred
> to in comment 0, afaics.

It should log which constraint is failing and if this is a video wifth/height/frame rate constraint, the video presets available.
Comment 32 Philippe Normand 2020-06-26 07:35:00 PDT
Starting MiniBrowser.
RealtimeVideoCaptureSource::bestSupportedSizeAndFrameRate failed supporting constraints 1280 720 30.000000
VideoPreset of size (2304,1536) and type 2
VideoPreset frame rate range [2.000000, 2.000000]
VideoPreset of size (2304,1296) and type 2
VideoPreset frame rate range [2.000000, 2.000000]
VideoPreset of size (1920,1080) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset of size (1600,896) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset of size (1280,720) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset of size (960,720) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset of size (1024,576) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset of size (800,600) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset of size (864,480) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset of size (800,448) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (640,480) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (640,360) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (432,240) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (352,288) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (320,240) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (320,180) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (176,144) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (160,120) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (160,90) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
Video capture was requested but no device was found amongst 1 devices
IntConstraint 1, min 320, max 1280, exact -1, ideal 1280
IntConstraint 2, min 180, max 720, exact -1, ideal 720
MediaConstraint 5 of type 4
RealtimeVideoCaptureSource::bestSupportedSizeAndFrameRate failed supporting constraints 1280 720 30.000000
VideoPreset of size (2304,1536) and type 2
VideoPreset frame rate range [2.000000, 2.000000]
VideoPreset of size (2304,1296) and type 2
VideoPreset frame rate range [2.000000, 2.000000]
VideoPreset of size (1920,1080) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset of size (1600,896) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset of size (1280,720) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset of size (960,720) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset of size (1024,576) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset of size (800,600) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset of size (864,480) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset of size (800,448) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (640,480) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (640,360) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (432,240) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (352,288) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (320,240) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (320,180) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (176,144) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (160,120) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (160,90) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
Video capture was requested but no device was found amongst 1 devices
IntConstraint 1, min 320, max 1280, exact -1, ideal 1280
IntConstraint 2, min 180, max 720, exact -1, ideal 720
MediaConstraint 10 of type 4
Comment 33 Philippe Normand 2020-06-26 07:35:51 PDT
That's GTK on my linux workstation, with a logitech C920 webcam.
Comment 34 Philippe Normand 2020-06-26 07:39:48 PDT
$ gst-device-monitor-1.0 Video/Source
Probing devices...


Device found:

	name  : HD Pro Webcam C920
	class : Video/Source
	caps  : video/x-raw, format=(string)YUY2, width=(int)2304, height=(int)1536, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)2/1;
	        video/x-raw, format=(string)YUY2, width=(int)2304, height=(int)1296, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)2/1;
	        video/x-raw, format=(string)YUY2, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)5/1;
	        video/x-raw, format=(string)YUY2, width=(int)1600, height=(int)896, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 15/2, 5/1 };
	        video/x-raw, format=(string)YUY2, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 10/1, 15/2, 5/1 };
	        video/x-raw, format=(string)YUY2, width=(int)960, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 15/1, 10/1, 15/2, 5/1 };
	        video/x-raw, format=(string)YUY2, width=(int)1024, height=(int)576, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 15/1, 10/1, 15/2, 5/1 };
	        video/x-raw, format=(string)YUY2, width=(int)800, height=(int)600, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-raw, format=(string)YUY2, width=(int)864, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-raw, format=(string)YUY2, width=(int)800, height=(int)448, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-raw, format=(string)YUY2, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-raw, format=(string)YUY2, width=(int)640, height=(int)360, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-raw, format=(string)YUY2, width=(int)432, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-raw, format=(string)YUY2, width=(int)352, height=(int)288, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-raw, format=(string)YUY2, width=(int)320, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-raw, format=(string)YUY2, width=(int)320, height=(int)180, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-raw, format=(string)YUY2, width=(int)176, height=(int)144, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-raw, format=(string)YUY2, width=(int)160, height=(int)120, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-raw, format=(string)YUY2, width=(int)160, height=(int)90, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        image/jpeg, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        image/jpeg, width=(int)1600, height=(int)896, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        image/jpeg, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        image/jpeg, width=(int)960, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        image/jpeg, width=(int)1024, height=(int)576, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        image/jpeg, width=(int)800, height=(int)600, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        image/jpeg, width=(int)864, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        image/jpeg, width=(int)800, height=(int)448, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        image/jpeg, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        image/jpeg, width=(int)640, height=(int)360, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        image/jpeg, width=(int)432, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        image/jpeg, width=(int)352, height=(int)288, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        image/jpeg, width=(int)320, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        image/jpeg, width=(int)320, height=(int)180, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        image/jpeg, width=(int)176, height=(int)144, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        image/jpeg, width=(int)160, height=(int)120, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        image/jpeg, width=(int)160, height=(int)90, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)1600, height=(int)896, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)960, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)1024, height=(int)576, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)800, height=(int)600, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)864, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)800, height=(int)448, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)640, height=(int)360, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)432, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)352, height=(int)288, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)320, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)320, height=(int)180, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)176, height=(int)144, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)160, height=(int)120, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	        video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)160, height=(int)90, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 24/1, 20/1, 15/1, 10/1, 15/2, 5/1 };
	properties:
		device.path = /dev/video0
		udev-probed = false
		device.api = v4l2
		v4l2.device.driver = uvcvideo
		v4l2.device.card = "HD\ Pro\ Webcam\ C920"
		v4l2.device.bus_info = usb-0000:00:14.0-1
		v4l2.device.version = 329235 (0x00050613)
		v4l2.device.capabilities = 2225078273 (0x84a00001)
		v4l2.device.device_caps = 69206017 (0x04200001)
	gst-launch-1.0 v4l2src ! ...
Comment 35 Philippe Normand 2020-06-26 07:41:52 PDT
I suppose this failure is kinda expected because the webcam doesn't support 1280x720@30 for raw video. But it would be nice to fallback to a smaller resolution.

I can't test on my MBP now, I'll wait the Safari TP update.
Comment 36 youenn fablet 2020-06-26 07:50:30 PDT
Thanks,

The issue might be that the width can go from 144 to 2304, so 1280 is fine, but frame rate cannot follow, hence the issue.
I guess the issue is ideal constraints are not handled properly.

(In reply to Philippe Normand from comment #32)
> Starting MiniBrowser.
> RealtimeVideoCaptureSource::bestSupportedSizeAndFrameRate failed supporting
> constraints 1280 720 30.000000
> VideoPreset of size (2304,1536) and type 2
> VideoPreset frame rate range [2.000000, 2.000000]
> VideoPreset of size (2304,1296) and type 2
> VideoPreset frame rate range [2.000000, 2.000000]
> VideoPreset of size (1920,1080) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset of size (1600,896) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset of size (1280,720) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset of size (960,720) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset of size (1024,576) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset of size (800,600) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset of size (864,480) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset of size (800,448) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset frame rate range [30.000000, 30.000000]
> VideoPreset of size (640,480) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset frame rate range [30.000000, 30.000000]
> VideoPreset of size (640,360) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset frame rate range [30.000000, 30.000000]
> VideoPreset of size (432,240) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset frame rate range [30.000000, 30.000000]
> VideoPreset of size (352,288) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset frame rate range [30.000000, 30.000000]
> VideoPreset of size (320,240) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset frame rate range [30.000000, 30.000000]
> VideoPreset of size (320,180) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset frame rate range [30.000000, 30.000000]
> VideoPreset of size (176,144) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset frame rate range [30.000000, 30.000000]
> VideoPreset of size (160,120) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset frame rate range [30.000000, 30.000000]
> VideoPreset of size (160,90) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset frame rate range [30.000000, 30.000000]
> Video capture was requested but no device was found amongst 1 devices
> IntConstraint 1, min 320, max 1280, exact -1, ideal 1280
> IntConstraint 2, min 180, max 720, exact -1, ideal 720
> MediaConstraint 5 of type 4
> RealtimeVideoCaptureSource::bestSupportedSizeAndFrameRate failed supporting
> constraints 1280 720 30.000000
> VideoPreset of size (2304,1536) and type 2
> VideoPreset frame rate range [2.000000, 2.000000]
> VideoPreset of size (2304,1296) and type 2
> VideoPreset frame rate range [2.000000, 2.000000]
> VideoPreset of size (1920,1080) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset of size (1600,896) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset of size (1280,720) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset of size (960,720) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset of size (1024,576) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset of size (800,600) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset of size (864,480) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset of size (800,448) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset frame rate range [30.000000, 30.000000]
> VideoPreset of size (640,480) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset frame rate range [30.000000, 30.000000]
> VideoPreset of size (640,360) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset frame rate range [30.000000, 30.000000]
> VideoPreset of size (432,240) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset frame rate range [30.000000, 30.000000]
> VideoPreset of size (352,288) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset frame rate range [30.000000, 30.000000]
> VideoPreset of size (320,240) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset frame rate range [30.000000, 30.000000]
> VideoPreset of size (320,180) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset frame rate range [30.000000, 30.000000]
> VideoPreset of size (176,144) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset frame rate range [30.000000, 30.000000]
> VideoPreset of size (160,120) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset frame rate range [30.000000, 30.000000]
> VideoPreset of size (160,90) and type 2
> VideoPreset frame rate range [5.000000, 5.000000]
> VideoPreset frame rate range [7.500000, 7.500000]
> VideoPreset frame rate range [10.000000, 10.000000]
> VideoPreset frame rate range [15.000000, 15.000000]
> VideoPreset frame rate range [20.000000, 20.000000]
> VideoPreset frame rate range [24.000000, 24.000000]
> VideoPreset frame rate range [30.000000, 30.000000]
> Video capture was requested but no device was found amongst 1 devices
> IntConstraint 1, min 320, max 1280, exact -1, ideal 1280
> IntConstraint 2, min 180, max 720, exact -1, ideal 720
> MediaConstraint 10 of type 4
Comment 37 youenn fablet 2020-06-26 08:20:06 PDT
In bool RealtimeMediaSource::supportsSizeAndFrameRate, we select width, height and frameRate independently and then try to apply them jointly.
If it fails jointly, we are failing, but we should not with ideal constraints.
Comment 38 Philippe Normand 2020-06-26 09:42:38 PDT
Created attachment 402875 [details]
WIP

This crude patch works:

Starting MiniBrowser.
RealtimeVideoCaptureSource::bestSupportedSizeAndFrameRate failed supporting constraints 1280 720 30.000000
VideoPreset of size (2304,1536) and type 2
VideoPreset frame rate range [2.000000, 2.000000]
VideoPreset of size (2304,1296) and type 2
VideoPreset frame rate range [2.000000, 2.000000]
VideoPreset of size (1920,1080) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset of size (1600,896) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset of size (1280,720) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset of size (960,720) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset of size (1024,576) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset of size (800,600) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset of size (864,480) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset of size (800,448) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (640,480) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (640,360) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (432,240) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (352,288) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (320,240) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (320,180) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (176,144) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (160,120) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
VideoPreset of size (160,90) and type 2
VideoPreset frame rate range [5.000000, 5.000000]
VideoPreset frame rate range [7.500000, 7.500000]
VideoPreset frame rate range [10.000000, 10.000000]
VideoPreset frame rate range [15.000000, 15.000000]
VideoPreset frame rate range [20.000000, 20.000000]
VideoPreset frame rate range [24.000000, 24.000000]
VideoPreset frame rate range [30.000000, 30.000000]
Comment 39 youenn fablet 2020-07-02 01:44:44 PDT
Created attachment 403353 [details]
Patch
Comment 40 Philippe Normand 2020-07-02 02:55:57 PDT
Nice, I confirm this works here on Linux in Jitsi. I'd give a r+ but you didn't ask for it :)
Comment 41 youenn fablet 2020-07-02 04:23:47 PDT
(In reply to Philippe Normand from comment #40)
> Nice, I confirm this works here on Linux in Jitsi. I'd give a r+ but you
> didn't ask for it :)

Here it is!
Comment 42 Philippe Normand 2020-07-02 06:56:51 PDT
Comment on attachment 403353 [details]
Patch

Thanks, Youenn :)
Comment 43 EWS 2020-07-02 07:05:34 PDT
Committed r263844: <https://trac.webkit.org/changeset/263844>

All reviewed patches have been landed. Closing bug and clearing flags on attachment 403353 [details].
Comment 44 Philippe Normand 2020-07-12 12:18:26 PDT
Works on Safari TP as well, btw :)