Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ Ref<CanvasCaptureMediaStreamTrack::Source> CanvasCaptureMediaStreamTrack::Source

// FIXME: Give source id and name
CanvasCaptureMediaStreamTrack::Source::Source(HTMLCanvasElement& canvas, std::optional<double>&& frameRequestRate)
: RealtimeMediaSource(CaptureDevice { { }, CaptureDevice::DeviceType::Camera, "CanvasCaptureMediaStreamTrack"_s })
: RealtimeMediaSource(CaptureDevice { { }, CaptureDevice::DeviceType::Canvas, "CanvasCaptureMediaStreamTrack"_s })
, m_frameRequestRate(WTFMove(frameRequestRate))
, m_requestFrameTimer(*this, &Source::requestFrameTimerFired)
, m_captureCanvasTimer(*this, &Source::captureCanvas)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ class CanvasCaptureMediaStreamTrack final : public MediaStreamTrack {
void scheduleCaptureCanvas();
void captureCanvas();
void requestFrameTimerFired();
CaptureDevice::DeviceType deviceType() const final { return CaptureDevice::DeviceType::Canvas; }

bool m_shouldEmitFrame { true };
std::optional<double> m_frameRequestRate;
Expand Down
1 change: 1 addition & 0 deletions Source/WebCore/Modules/mediastream/MediaDeviceInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ MediaDeviceInfo::Kind toMediaDeviceInfoKind(CaptureDevice::DeviceType type)
case CaptureDevice::DeviceType::Speaker:
return MediaDeviceInfo::Kind::Audiooutput;
case CaptureDevice::DeviceType::Camera:
case CaptureDevice::DeviceType::Canvas:
case CaptureDevice::DeviceType::Screen:
case CaptureDevice::DeviceType::Window:
return MediaDeviceInfo::Kind::Videoinput;
Expand Down
8 changes: 8 additions & 0 deletions Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,14 @@ MediaProducerMediaStateFlags MediaStreamTrack::captureState(const RealtimeMediaS
if (source.isProducingData())
return MediaProducerMediaState::HasActiveVideoCaptureDevice;
break;
case CaptureDevice::DeviceType::Canvas:
if (source.muted())
return MediaProducerMediaState::HasMutedVideoCaptureDevice;
if (source.interrupted())
return MediaProducerMediaState::HasInterruptedVideoCaptureDevice;
if (source.isProducingData())
return MediaProducerMediaState::HasActiveVideoCaptureDevice;
break;
case CaptureDevice::DeviceType::Screen:
if (source.muted())
return MediaProducerMediaState::HasMutedScreenCaptureDevice;
Expand Down
1 change: 1 addition & 0 deletions Source/WebCore/dom/Document.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5419,6 +5419,7 @@ static void updateCaptureSourceToPageMutedState(Document& document, Page& page,
source.setMuted(page.mutedState().contains(MediaProducerMutedState::AudioCaptureIsMuted) || (document.hidden() && document.settings().interruptAudioOnPageVisibilityChangeEnabled()));
break;
case CaptureDevice::DeviceType::Camera:
case CaptureDevice::DeviceType::Canvas:
source.setMuted(page.mutedState().contains(MediaProducerMutedState::VideoCaptureIsMuted) || (document.hidden() && document.settings().interruptVideoOnPageVisibilityChangeEnabled()));
break;
case CaptureDevice::DeviceType::Screen:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4501,6 +4501,16 @@ bool MediaPlayerPrivateGStreamer::isHolePunchRenderingEnabled() const
if (m_quirksManagerForTesting)
return m_quirksManagerForTesting->supportsVideoHolePunchRendering();

#if ENABLE(MEDIA_STREAM)
if (m_streamPrivate) {
auto* videoTrack = m_streamPrivate->activeVideoTrack();
if (!videoTrack)
return false;

return videoTrack->deviceType() != CaptureDevice::DeviceType::Canvas && GStreamerQuirksManager::singleton().supportsVideoHolePunchRendering();
}
#endif

auto& quirksManager = GStreamerQuirksManager::singleton();
return quirksManager.supportsVideoHolePunchRendering();
}
Expand Down
2 changes: 1 addition & 1 deletion Source/WebCore/platform/mediastream/CaptureDevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ namespace WebCore {

class CaptureDevice {
public:
enum class DeviceType : uint8_t { Unknown, Microphone, Speaker, Camera, Screen, Window, SystemAudio };
enum class DeviceType : uint8_t { Unknown, Microphone, Speaker, Camera, Screen, Window, SystemAudio, Canvas };

CaptureDevice(const String& persistentId, DeviceType type, const String& label, const String& groupId = emptyString(), bool isEnabled = false, bool isDefault = false, bool isMock = false, bool isEphemeral = false)
: m_persistentId(persistentId)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ static RealtimeMediaSource::Type toSourceType(CaptureDevice::DeviceType type)
case CaptureDevice::DeviceType::SystemAudio:
return RealtimeMediaSource::Type::Audio;
case CaptureDevice::DeviceType::Camera:
case CaptureDevice::DeviceType::Canvas:
case CaptureDevice::DeviceType::Screen:
case CaptureDevice::DeviceType::Window:
return RealtimeMediaSource::Type::Video;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ CaptureSourceOrError DisplayCaptureSourceCocoa::create(const CaptureDevice& devi
case CaptureDevice::DeviceType::Microphone:
case CaptureDevice::DeviceType::Speaker:
case CaptureDevice::DeviceType::Camera:
case CaptureDevice::DeviceType::Canvas:
case CaptureDevice::DeviceType::Unknown:
ASSERT_NOT_REACHED();
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ GstDevice* webkitMockDeviceCreate(const CaptureDevice& captureDevice)

switch (captureDevice.type()) {
case CaptureDevice::DeviceType::Camera:
case CaptureDevice::DeviceType::Canvas:
case CaptureDevice::DeviceType::Screen:
case CaptureDevice::DeviceType::Window:
deviceClass = "Video/Source";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ std::optional<CaptureDevice> DisplayCaptureManagerCocoa::captureDeviceWithPersis

case CaptureDevice::DeviceType::SystemAudio:
case CaptureDevice::DeviceType::Camera:
case CaptureDevice::DeviceType::Canvas:
case CaptureDevice::DeviceType::Microphone:
case CaptureDevice::DeviceType::Speaker:
case CaptureDevice::DeviceType::Unknown:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,7 @@ class MockRealtimeDisplaySourceFactory : public DisplayCaptureFactory {
case CaptureDevice::DeviceType::Microphone:
case CaptureDevice::DeviceType::Speaker:
case CaptureDevice::DeviceType::Camera:
case CaptureDevice::DeviceType::Canvas:
case CaptureDevice::DeviceType::SystemAudio:
case CaptureDevice::DeviceType::Unknown:
ASSERT_NOT_REACHED();
Expand Down
1 change: 1 addition & 0 deletions Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,7 @@ class GPUProxyForCapture final : public UserMediaCaptureManagerProxy::Connection
case CaptureDevice::DeviceType::Microphone:
return m_process.get()->allowsAudioCapture();
case CaptureDevice::DeviceType::Camera:
case CaptureDevice::DeviceType::Canvas:
if (!m_process.get()->allowsVideoCapture())
return false;
#if PLATFORM(IOS_FAMILY)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -526,6 +526,7 @@ void UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstrai
sourceOrError = createMicrophoneSource(device, WTFMove(hashSalts), constraints, pageIdentifier);
break;
case WebCore::CaptureDevice::DeviceType::Camera:
case WebCore::CaptureDevice::DeviceType::Canvas:
sourceOrError = createCameraSource(device, WTFMove(hashSalts), pageIdentifier);
break;
case WebCore::CaptureDevice::DeviceType::Screen:
Expand Down