Title: [262114] trunk/Source/WebCore
Revision
262114
Author
[email protected]
Date
2020-05-25 00:52:34 -0700 (Mon, 25 May 2020)

Log Message

MediaPlayerPrivateMediaStreamAVFObjC::m_activeVideoTrack should be a VideoTrackPrivateMediaStream
https://bugs.webkit.org/show_bug.cgi?id=212129

Reviewed by Eric Carlson.

Instead of looking in the map when wanting to get the VideoTrackPrivateMediaStream corresponding to the active video track,
store directly the VideoTrackPrivateMediaStream as the active video track and use streamTrack() to get the corresponding MediaStreamTrack.
Small refactoring to use more Ref<>.
Covered by existing tests.

* platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
* platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
(WebCore::MediaPlayerPrivateMediaStreamAVFObjC::~MediaPlayerPrivateMediaStreamAVFObjC):
(WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable):
(WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferDisplayLayerStatusDidChange):
(WebCore::updateTracksOfType):
(WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack):
* platform/mediastream/AudioTrackPrivateMediaStream.h:
* platform/mediastream/VideoTrackPrivateMediaStream.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (262113 => 262114)


--- trunk/Source/WebCore/ChangeLog	2020-05-25 06:28:03 UTC (rev 262113)
+++ trunk/Source/WebCore/ChangeLog	2020-05-25 07:52:34 UTC (rev 262114)
@@ -1,3 +1,25 @@
+2020-05-25  Youenn Fablet  <[email protected]>
+
+        MediaPlayerPrivateMediaStreamAVFObjC::m_activeVideoTrack should be a VideoTrackPrivateMediaStream
+        https://bugs.webkit.org/show_bug.cgi?id=212129
+
+        Reviewed by Eric Carlson.
+
+        Instead of looking in the map when wanting to get the VideoTrackPrivateMediaStream corresponding to the active video track,
+        store directly the VideoTrackPrivateMediaStream as the active video track and use streamTrack() to get the corresponding MediaStreamTrack.
+        Small refactoring to use more Ref<>.
+        Covered by existing tests.
+
+        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
+        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
+        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::~MediaPlayerPrivateMediaStreamAVFObjC):
+        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable):
+        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferDisplayLayerStatusDidChange):
+        (WebCore::updateTracksOfType):
+        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack):
+        * platform/mediastream/AudioTrackPrivateMediaStream.h:
+        * platform/mediastream/VideoTrackPrivateMediaStream.h:
+
 2020-05-24  Youenn Fablet  <[email protected]>
 
         Do not allocate a WebAudioBufferList in the AudioContext rendering thread

Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h (262113 => 262114)


--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h	2020-05-25 06:28:03 UTC (rev 262113)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h	2020-05-25 07:52:34 UTC (rev 262114)
@@ -224,7 +224,7 @@
 
     MediaPlayer* m_player { nullptr };
     RefPtr<MediaStreamPrivate> m_mediaStreamPrivate;
-    RefPtr<MediaStreamTrackPrivate> m_activeVideoTrack;
+    RefPtr<VideoTrackPrivateMediaStream> m_activeVideoTrack;
     std::unique_ptr<PAL::Clock> m_clock;
 
     MediaTime m_pausedTime;
@@ -239,8 +239,8 @@
     };
     CurrentFramePainter m_imagePainter;
 
-    HashMap<String, RefPtr<AudioTrackPrivateMediaStream>> m_audioTrackMap;
-    HashMap<String, RefPtr<VideoTrackPrivateMediaStream>> m_videoTrackMap;
+    HashMap<String, Ref<AudioTrackPrivateMediaStream>> m_audioTrackMap;
+    HashMap<String, Ref<VideoTrackPrivateMediaStream>> m_videoTrackMap;
 
     MediaPlayer::NetworkState m_networkState { MediaPlayer::NetworkState::Empty };
     MediaPlayer::ReadyState m_readyState { MediaPlayer::ReadyState::HaveNothing };

Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm (262113 => 262114)


--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm	2020-05-25 06:28:03 UTC (rev 262113)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm	2020-05-25 07:52:34 UTC (rev 262114)
@@ -166,7 +166,7 @@
         track->streamTrack().removeObserver(*this);
 
     if (m_activeVideoTrack)
-        m_activeVideoTrack->source().removeVideoSampleObserver(*this);
+        m_activeVideoTrack->streamTrack().source().removeVideoSampleObserver(*this);
 
     [m_boundsChangeListener invalidate];
 
@@ -305,14 +305,12 @@
     if (m_displayMode != LivePreview && !m_waitingForFirstImage)
         return;
 
-    // FIXME: We should not query the map each time we get a sample.
-    auto videoTrack = m_videoTrackMap.get(m_activeVideoTrack->id());
-    MediaTime timelineOffset = videoTrack->timelineOffset();
+    MediaTime timelineOffset = m_activeVideoTrack->timelineOffset();
     if (timelineOffset == MediaTime::invalidTime()) {
         timelineOffset = calculateTimelineOffset(sample, rendererLatency);
-        videoTrack->setTimelineOffset(timelineOffset);
+        m_activeVideoTrack->setTimelineOffset(timelineOffset);
 
-        INFO_LOG(LOGIDENTIFIER, "timeline offset for track ", m_activeVideoTrack->id(), " set to ", timelineOffset);
+        INFO_LOG(LOGIDENTIFIER, "timeline offset for track ", m_activeVideoTrack->streamTrack().id(), " set to ", timelineOffset);
     }
 
     DEBUG_LOG(LOGIDENTIFIER, "original sample = ", sample);
@@ -347,11 +345,8 @@
 {
     ASSERT(&layer == m_sampleBufferDisplayLayer.get());
     UNUSED_PARAM(layer);
-    if (!m_activeVideoTrack)
-        return;
-
-    if (auto track = m_videoTrackMap.get(m_activeVideoTrack->id()))
-        track->setTimelineOffset(MediaTime::invalidTime());
+    if (m_activeVideoTrack)
+        m_activeVideoTrack->setTimelineOffset(MediaTime::invalidTime());
 }
 
 void MediaPlayerPrivateMediaStreamAVFObjC::applicationDidBecomeActive()
@@ -782,18 +777,18 @@
     m_videoLayerManager->setVideoFullscreenFrame(frame);
 }
 
-typedef enum {
+enum class TrackState {
     Add,
     Remove,
     Configure
-} TrackState;
+};
 
 template <typename RefT>
-void updateTracksOfType(HashMap<String, RefT>& trackMap, RealtimeMediaSource::Type trackType, MediaStreamTrackPrivateVector& currentTracks, RefT (*itemFactory)(MediaStreamTrackPrivate&), const Function<void(typename RefT::ValueType&, int, TrackState)>& configureTrack)
+void updateTracksOfType(HashMap<String, RefT>& trackMap, RealtimeMediaSource::Type trackType, MediaStreamTrackPrivateVector& currentTracks, RefT (*itemFactory)(MediaStreamTrackPrivate&), const Function<void(std::reference_wrapper<typename std::remove_pointer<typename RefT::PtrTraits::StorageType>::type>, int, TrackState)>& configureTrack)
 {
     Vector<RefT> removedTracks;
     Vector<RefT> addedTracks;
-    Vector<RefPtr<MediaStreamTrackPrivate>> addedPrivateTracks;
+    Vector<Ref<MediaStreamTrackPrivate>> addedPrivateTracks;
 
     for (const auto& track : currentTracks) {
         if (track->type() != trackType)
@@ -800,7 +795,7 @@
             continue;
 
         if (!trackMap.contains(track->id()))
-            addedPrivateTracks.append(track);
+            addedPrivateTracks.append(*track);
     }
 
     for (const auto& track : trackMap.values()) {
@@ -814,22 +809,22 @@
         trackMap.remove(track->streamTrack().id());
 
     for (auto& track : addedPrivateTracks) {
-        RefT newTrack = itemFactory(*track.get());
-        trackMap.add(track->id(), newTrack);
-        addedTracks.append(newTrack);
+        RefT newTrack = itemFactory(track.get());
+        trackMap.add(track->id(), newTrack.copyRef());
+        addedTracks.append(WTFMove(newTrack));
     }
 
     int index = 0;
     for (auto& track : removedTracks)
-        configureTrack(*track, index++, TrackState::Remove);
+        configureTrack(track.get(), index++, TrackState::Remove);
 
     index = 0;
     for (auto& track : addedTracks)
-        configureTrack(*track, index++, TrackState::Add);
+        configureTrack(track.get(), index++, TrackState::Add);
 
     index = 0;
     for (const auto& track : trackMap.values())
-        configureTrack(*track, index++, TrackState::Configure);
+        configureTrack(track.get(), index++, TrackState::Configure);
 }
 
 void MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack()
@@ -846,7 +841,7 @@
         if (auto* activeVideoTrack = this->activeVideoTrack()) {
             for (const auto& track : m_videoTrackMap.values()) {
                 if (&track->streamTrack() == activeVideoTrack) {
-                    m_activeVideoTrack = activeVideoTrack;
+                    m_activeVideoTrack = track.ptr();
                     if (track->selected())
                         hideVideoLayer = false;
                     break;
@@ -871,9 +866,9 @@
 
         if (oldVideoTrack != m_activeVideoTrack) {
             if (oldVideoTrack)
-                oldVideoTrack->source().removeVideoSampleObserver(*this);
+                oldVideoTrack->streamTrack().source().removeVideoSampleObserver(*this);
             if (m_activeVideoTrack)
-                m_activeVideoTrack->source().addVideoSampleObserver(*this);
+                m_activeVideoTrack->streamTrack().source().addVideoSampleObserver(*this);
         }
     });
 }

Modified: trunk/Source/WebCore/platform/mediastream/AudioTrackPrivateMediaStream.h (262113 => 262114)


--- trunk/Source/WebCore/platform/mediastream/AudioTrackPrivateMediaStream.h	2020-05-25 06:28:03 UTC (rev 262113)
+++ trunk/Source/WebCore/platform/mediastream/AudioTrackPrivateMediaStream.h	2020-05-25 07:52:34 UTC (rev 262114)
@@ -40,7 +40,7 @@
     , private RealtimeMediaSource::AudioSampleObserver {
     WTF_MAKE_NONCOPYABLE(AudioTrackPrivateMediaStream)
 public:
-    static RefPtr<AudioTrackPrivateMediaStream> create(MediaStreamTrackPrivate& streamTrack)
+    static Ref<AudioTrackPrivateMediaStream> create(MediaStreamTrackPrivate& streamTrack)
     {
         return adoptRef(*new AudioTrackPrivateMediaStream(streamTrack));
     }

Modified: trunk/Source/WebCore/platform/mediastream/VideoTrackPrivateMediaStream.h (262113 => 262114)


--- trunk/Source/WebCore/platform/mediastream/VideoTrackPrivateMediaStream.h	2020-05-25 06:28:03 UTC (rev 262113)
+++ trunk/Source/WebCore/platform/mediastream/VideoTrackPrivateMediaStream.h	2020-05-25 07:52:34 UTC (rev 262114)
@@ -35,7 +35,7 @@
 class VideoTrackPrivateMediaStream final : public VideoTrackPrivate {
     WTF_MAKE_NONCOPYABLE(VideoTrackPrivateMediaStream)
 public:
-    static RefPtr<VideoTrackPrivateMediaStream> create(MediaStreamTrackPrivate& streamTrack)
+    static Ref<VideoTrackPrivateMediaStream> create(MediaStreamTrackPrivate& streamTrack)
     {
         return adoptRef(*new VideoTrackPrivateMediaStream(streamTrack));
     }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to