@@ -189,6 +189,11 @@ MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer(MediaPlayer* player)
189189#endif
190190 m_isPlayerShuttingDown.store (false );
191191
192+ if (player->isGStreamerHolePunchingEnabled ()) {
193+ m_quirksManagerForTesting = GStreamerQuirksManager::createForTesting ();
194+ m_quirksManagerForTesting->setHolePunchEnabledForTesting (true );
195+ }
196+
192197#if USE(TEXTURE_MAPPER_GL) && USE(NICOSIA)
193198 m_nicosiaLayer = Nicosia::ContentLayer::create (Nicosia::ContentLayerTextureMapperImpl::createFactory (*this ,
194199 [&]() -> Ref<TextureMapperPlatformLayerProxy> {
@@ -4015,14 +4020,19 @@ GstElement* MediaPlayerPrivateGStreamer::createVideoSinkGL()
40154020}
40164021#endif // USE(GSTREAMER_GL)
40174022
4018- static void setRectangleToVideoSink (GstElement* videoSink, const IntRect& rect)
4023+ static void setRectangleToVideoSink (GStreamerQuirksManager* quirksManagerForTesting, GstElement* videoSink, const IntRect& rect)
40194024{
40204025 // Here goes the platform-dependant code to set to the videoSink the size
40214026 // and position of the video rendering window.
40224027
40234028 if (!videoSink)
40244029 return ;
40254030
4031+ if (quirksManagerForTesting) {
4032+ quirksManagerForTesting->setHolePunchVideoRectangle (videoSink, rect);
4033+ return ;
4034+ }
4035+
40264036 auto & quirksManager = GStreamerQuirksManager::singleton ();
40274037 quirksManager.setHolePunchVideoRectangle (videoSink, rect);
40284038}
@@ -4037,6 +4047,8 @@ class GStreamerHolePunchClient : public TextureMapperPlatformLayerBuffer::HolePu
40374047
40384048bool MediaPlayerPrivateGStreamer::isHolePunchRenderingEnabled () const
40394049{
4050+ if (m_quirksManagerForTesting)
4051+ return m_quirksManagerForTesting->supportsVideoHolePunchRendering ();
40404052 auto & quirksManager = GStreamerQuirksManager::singleton ();
40414053 return quirksManager.supportsVideoHolePunchRendering ();
40424054}
@@ -4046,8 +4058,11 @@ GstElement* MediaPlayerPrivateGStreamer::createHolePunchVideoSink()
40464058 if (!isHolePunchRenderingEnabled ())
40474059 return nullptr ;
40484060
4049- auto & quirksManager = GStreamerQuirksManager::singleton ();
4050- auto sink = quirksManager.createHolePunchVideoSink (m_isLegacyPlaybin, m_player);
4061+ GstElement* sink = nullptr ;
4062+ if (m_quirksManagerForTesting)
4063+ sink = m_quirksManagerForTesting->createHolePunchVideoSink (m_isLegacyPlaybin, m_player);
4064+ else
4065+ sink = GStreamerQuirksManager::singleton ().createHolePunchVideoSink (m_isLegacyPlaybin, m_player);
40514066
40524067 // Configure sink before it allocates resources.
40534068 if (sink)
@@ -4085,7 +4100,7 @@ void MediaPlayerPrivateGStreamer::setVideoRectangle(const IntRect& rect)
40854100 Locker locker { m_holePunchLock };
40864101
40874102 if (m_visible && !m_suspended)
4088- setRectangleToVideoSink (m_videoSink.get (), rect);
4103+ setRectangleToVideoSink (m_quirksManagerForTesting. get (), m_videoSink.get (), rect);
40894104}
40904105
40914106bool MediaPlayerPrivateGStreamer::shouldIgnoreIntrinsicSize ()
@@ -4463,7 +4478,7 @@ void MediaPlayerPrivateGStreamer::setPageIsVisible(bool visible)
44634478 m_visible = visible;
44644479
44654480 if (!m_visible)
4466- setRectangleToVideoSink (m_videoSink.get (), IntRect ());
4481+ setRectangleToVideoSink (m_quirksManagerForTesting. get (), m_videoSink.get (), IntRect ());
44674482 }
44684483}
44694484
@@ -4475,7 +4490,7 @@ void MediaPlayerPrivateGStreamer::setPageIsSuspended(bool suspended)
44754490 m_suspended = suspended;
44764491
44774492 if (m_suspended)
4478- setRectangleToVideoSink (m_videoSink.get (), IntRect ());
4493+ setRectangleToVideoSink (m_quirksManagerForTesting. get (), m_videoSink.get (), IntRect ());
44794494 }
44804495}
44814496
0 commit comments