Title: [215099] trunk/Source/WebCore
Revision
215099
Author
eric.carl...@apple.com
Date
2017-04-07 10:29:40 -0700 (Fri, 07 Apr 2017)

Log Message

MediaSample should store video sample rotation instead of orientation
https://bugs.webkit.org/show_bug.cgi?id=170598

Reviewed by Youenn Fablet.

No new tests, no functional change.

* platform/MediaSample.h:
(WebCore::MediaSample::videoRotation):
(WebCore::MediaSample::videoOrientation): Deleted.
* platform/graphics/avfoundation/MediaSampleAVFObjC.h:
* platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
* platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
(WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoTransformationMatrix):
(WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample):
(WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayLayer):

* platform/mediastream/mac/AVVideoCaptureSource.mm:
(WebCore::AVVideoCaptureSource::processNewFrame):

* platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
(WebCore::RealtimeIncomingVideoSource::OnFrame):
(WebCore::RealtimeIncomingVideoSource::processNewSample):
* platform/mediastream/mac/RealtimeIncomingVideoSource.h:

* platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
(WebCore::RealtimeOutgoingVideoSource::videoSampleAvailable):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (215098 => 215099)


--- trunk/Source/WebCore/ChangeLog	2017-04-07 16:57:35 UTC (rev 215098)
+++ trunk/Source/WebCore/ChangeLog	2017-04-07 17:29:40 UTC (rev 215099)
@@ -1,3 +1,33 @@
+2017-04-07  Eric Carlson  <eric.carl...@apple.com>
+
+        MediaSample should store video sample rotation instead of orientation
+        https://bugs.webkit.org/show_bug.cgi?id=170598
+
+        Reviewed by Youenn Fablet.
+
+        No new tests, no functional change.
+
+        * platform/MediaSample.h:
+        (WebCore::MediaSample::videoRotation):
+        (WebCore::MediaSample::videoOrientation): Deleted.
+        * platform/graphics/avfoundation/MediaSampleAVFObjC.h:
+        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
+        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
+        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoTransformationMatrix):
+        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample):
+        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayLayer):
+
+        * platform/mediastream/mac/AVVideoCaptureSource.mm:
+        (WebCore::AVVideoCaptureSource::processNewFrame):
+
+        * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
+        (WebCore::RealtimeIncomingVideoSource::OnFrame):
+        (WebCore::RealtimeIncomingVideoSource::processNewSample):
+        * platform/mediastream/mac/RealtimeIncomingVideoSource.h:
+
+        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
+        (WebCore::RealtimeOutgoingVideoSource::videoSampleAvailable):
+
 2017-04-07  Brent Fulgham  <bfulg...@apple.com>
 
         WebKit should percent encode single quotes in query strings

Modified: trunk/Source/WebCore/platform/MediaSample.h (215098 => 215099)


--- trunk/Source/WebCore/platform/MediaSample.h	2017-04-07 16:57:35 UTC (rev 215098)
+++ trunk/Source/WebCore/platform/MediaSample.h	2017-04-07 17:29:40 UTC (rev 215099)
@@ -80,14 +80,13 @@
     virtual SampleFlags flags() const = 0;
     virtual PlatformSample platformSample() = 0;
 
-    enum class VideoOrientation {
-        Unknown,
-        Portrait,
-        PortraitUpsideDown,
-        LandscapeRight,
-        LandscapeLeft,
+    enum class VideoRotation {
+        None = 0,
+        UpsideDown = 180,
+        Right = 90,
+        Left = 270,
     };
-    virtual VideoOrientation videoOrientation() const { return VideoOrientation::Unknown; }
+    virtual VideoRotation videoRotation() const { return VideoRotation::None; }
     virtual bool videoMirrored() const { return false; }
 
     bool isSync() const { return flags() & IsSync; }

Modified: trunk/Source/WebCore/platform/graphics/avfoundation/MediaSampleAVFObjC.h (215098 => 215099)


--- trunk/Source/WebCore/platform/graphics/avfoundation/MediaSampleAVFObjC.h	2017-04-07 16:57:35 UTC (rev 215098)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/MediaSampleAVFObjC.h	2017-04-07 17:29:40 UTC (rev 215099)
@@ -37,7 +37,7 @@
 public:
     static Ref<MediaSampleAVFObjC> create(CMSampleBufferRef sample, int trackID) { return adoptRef(*new MediaSampleAVFObjC(sample, trackID)); }
     static Ref<MediaSampleAVFObjC> create(CMSampleBufferRef sample, AtomicString trackID) { return adoptRef(*new MediaSampleAVFObjC(sample, trackID)); }
-    static Ref<MediaSampleAVFObjC> create(CMSampleBufferRef sample, VideoOrientation orientation = VideoOrientation::Unknown, bool mirrored = false) { return adoptRef(*new MediaSampleAVFObjC(sample, orientation, mirrored)); }
+    static Ref<MediaSampleAVFObjC> create(CMSampleBufferRef sample, VideoRotation rotation = VideoRotation::None, bool mirrored = false) { return adoptRef(*new MediaSampleAVFObjC(sample, rotation, mirrored)); }
     static RefPtr<MediaSampleAVFObjC> createImageSample(Ref<JSC::Uint8ClampedArray>&&, unsigned long width, unsigned long height);
     static RefPtr<MediaSampleAVFObjC> createImageSample(Vector<uint8_t>&&, unsigned long width, unsigned long height);
 
@@ -58,9 +58,9 @@
         , m_id(String::format("%d", trackID))
     {
     }
-    MediaSampleAVFObjC(CMSampleBufferRef sample, VideoOrientation orientation, bool mirrored)
+    MediaSampleAVFObjC(CMSampleBufferRef sample, VideoRotation rotation, bool mirrored)
         : m_sample(sample)
-        , m_orientation(orientation)
+        , m_rotation(rotation)
         , m_mirrored(mirrored)
     {
     }
@@ -88,12 +88,12 @@
     std::pair<RefPtr<MediaSample>, RefPtr<MediaSample>> divide(const MediaTime& presentationTime) override;
     Ref<MediaSample> createNonDisplayingCopy() const override;
 
-    VideoOrientation videoOrientation() const final { return m_orientation; }
+    VideoRotation videoRotation() const final { return m_rotation; }
     bool videoMirrored() const final { return m_mirrored; }
 
     RetainPtr<CMSampleBufferRef> m_sample;
     AtomicString m_id;
-    VideoOrientation m_orientation { VideoOrientation::Unknown };
+    VideoRotation m_rotation { VideoRotation::None };
     bool m_mirrored { false };
 };
 

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


--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h	2017-04-07 16:57:35 UTC (rev 215098)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h	2017-04-07 17:29:40 UTC (rev 215099)
@@ -252,7 +252,7 @@
     float m_volume { 1 };
     DisplayMode m_displayMode { None };
     PlaybackState m_playbackState { PlaybackState::None };
-    MediaSample::VideoOrientation m_videoOrientation { MediaSample::VideoOrientation::Unknown };
+    MediaSample::VideoRotation m_videoRotation { MediaSample::VideoRotation::None };
     CGAffineTransform m_videoTransform;
     bool m_videoMirrored { false };
     bool m_playing { false };

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


--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm	2017-04-07 16:57:35 UTC (rev 215098)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm	2017-04-07 17:29:40 UTC (rev 215099)
@@ -314,18 +314,10 @@
     if (!width || !height)
         return CGAffineTransformIdentity;
 
-    ASSERT(m_videoOrientation >= MediaSample::VideoOrientation::Unknown);
-    ASSERT(m_videoOrientation <= MediaSample::VideoOrientation::LandscapeLeft);
+    ASSERT(m_videoRotation >= MediaSample::VideoRotation::None);
+    ASSERT(m_videoRotation <= MediaSample::VideoRotation::Left);
 
-    // Unknown, Portrait, PortraitUpsideDown, LandscapeRight, LandscapeLeft,
-#if PLATFORM(MAC)
-    static float sensorAngle[] = { 0, 0, 180, 90, 270 };
-#else
-    static float sensorAngle[] = { 0, 180, 0, 90, 270 };
-#endif
-    float rotation = sensorAngle[static_cast<int>(m_videoOrientation)];
-    m_videoTransform = CGAffineTransformMakeRotation(rotation * M_PI / 180);
-
+    m_videoTransform = CGAffineTransformMakeRotation(static_cast<int>(m_videoRotation) * M_PI / 180);
     if (sample.videoMirrored())
         m_videoTransform = CGAffineTransformScale(m_videoTransform, -1, 1);
 
@@ -370,8 +362,8 @@
     updateSampleTimes(sample, timelineOffset, "MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample");
 
     if (m_sampleBufferDisplayLayer) {
-        if (sample.videoOrientation() != m_videoOrientation || sample.videoMirrored() != m_videoMirrored) {
-            m_videoOrientation = sample.videoOrientation();
+        if (sample.videoRotation() != m_videoRotation || sample.videoMirrored() != m_videoMirrored) {
+            m_videoRotation = sample.videoRotation();
             m_videoMirrored = sample.videoMirrored();
             runWithoutAnimations([this, &sample] {
                 m_sampleBufferDisplayLayer.get().affineTransform = videoTransformationMatrix(sample, true);
@@ -1121,7 +1113,7 @@
 
     auto backgroundBounds = m_backgroundLayer.get().bounds;
     auto videoBounds = backgroundBounds;
-    if (m_videoOrientation == MediaSample::VideoOrientation::LandscapeRight || m_videoOrientation == MediaSample::VideoOrientation::LandscapeLeft)
+    if (m_videoRotation == MediaSample::VideoRotation::Right || m_videoRotation == MediaSample::VideoRotation::Left)
         std::swap(videoBounds.size.width, videoBounds.size.height);
 
     m_sampleBufferDisplayLayer.get().bounds = videoBounds;

Modified: trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm (215098 => 215099)


--- trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm	2017-04-07 16:57:35 UTC (rev 215098)
+++ trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm	2017-04-07 17:29:40 UTC (rev 215099)
@@ -428,25 +428,40 @@
     m_buffer = sampleBuffer;
     m_lastImage = nullptr;
 
-    MediaSample::VideoOrientation orientation = MediaSample::VideoOrientation::Unknown;
+    MediaSample::VideoRotation rotation;
+#if PLATFORM(IOS)
     switch ([connection videoOrientation]) {
     case AVCaptureVideoOrientationPortrait:
-        orientation = MediaSample::VideoOrientation::Portrait;
+        rotation = MediaSample::VideoRotation::UpsideDown;
         break;
     case AVCaptureVideoOrientationPortraitUpsideDown:
-        orientation = MediaSample::VideoOrientation::PortraitUpsideDown;
+        rotation = MediaSample::VideoRotation::None;
         break;
     case AVCaptureVideoOrientationLandscapeRight:
-        orientation = MediaSample::VideoOrientation::LandscapeRight;
+    case AVCaptureVideoOrientationLandscapeLeft:
+        rotation = MediaSample::VideoRotation::Right;
         break;
+    }
+#else
+    switch ([connection videoOrientation]) {
+    case AVCaptureVideoOrientationPortrait:
+        rotation = MediaSample::VideoRotation::None;
+        break;
+    case AVCaptureVideoOrientationPortraitUpsideDown:
+        rotation = MediaSample::VideoRotation::UpsideDown;
+        break;
+    case AVCaptureVideoOrientationLandscapeRight:
+        rotation = MediaSample::VideoRotation::Right;
+        break;
     case AVCaptureVideoOrientationLandscapeLeft:
-        orientation = MediaSample::VideoOrientation::LandscapeLeft;
+        rotation = MediaSample::VideoRotation::Left;
         break;
     }
+#endif
 
     bool settingsChanged = false;
     CMVideoDimensions dimensions = CMVideoFormatDescriptionGetDimensions(formatDescription);
-    if (orientation == MediaSample::VideoOrientation::LandscapeRight || orientation == MediaSample::VideoOrientation::LandscapeLeft)
+    if (rotation == MediaSample::VideoRotation::Right || rotation == MediaSample::VideoRotation::Left)
         std::swap(dimensions.width, dimensions.height);
 
     if (dimensions.width != m_width || dimensions.height != m_height) {
@@ -458,7 +473,7 @@
     if (settingsChanged)
         settingsDidChange();
 
-    videoSampleAvailable(MediaSampleAVFObjC::create(m_buffer.get(), orientation, [connection isVideoMirrored]));
+    videoSampleAvailable(MediaSampleAVFObjC::create(m_buffer.get(), rotation, [connection isVideoMirrored]));
 }
 
 void AVVideoCaptureSource::captureOutputDidOutputSampleBufferFromConnection(AVCaptureOutputType*, CMSampleBufferRef sampleBuffer, AVCaptureConnectionType* captureConnection)

Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.cpp (215098 => 215099)


--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.cpp	2017-04-07 16:57:35 UTC (rev 215098)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.cpp	2017-04-07 17:29:40 UTC (rev 215099)
@@ -171,31 +171,31 @@
     unsigned width = frame.width();
     unsigned height = frame.height();
 
-    MediaSample::VideoOrientation orientation;
+    MediaSample::VideoRotation rotation;
     switch (frame.rotation()) {
     case webrtc::kVideoRotation_0:
-        orientation = MediaSample::VideoOrientation::Portrait;
+        rotation = MediaSample::VideoRotation::None;
         break;
     case webrtc::kVideoRotation_180:
-        orientation = MediaSample::VideoOrientation::PortraitUpsideDown;
+        rotation = MediaSample::VideoRotation::UpsideDown;
         break;
     case webrtc::kVideoRotation_90:
-        orientation = MediaSample::VideoOrientation::LandscapeRight;
+        rotation = MediaSample::VideoRotation::Right;
         std::swap(width, height);
         break;
     case webrtc::kVideoRotation_270:
-        orientation = MediaSample::VideoOrientation::LandscapeLeft;
+        rotation = MediaSample::VideoRotation::Left;
         std::swap(width, height);
         break;
     }
 
     RefPtr<RealtimeIncomingVideoSource> protectedThis(this);
-    callOnMainThread([protectedThis = WTFMove(protectedThis), sample = WTFMove(sample), width, height, orientation] {
-        protectedThis->processNewSample(sample.get(), width, height, orientation);
+    callOnMainThread([protectedThis = WTFMove(protectedThis), sample = WTFMove(sample), width, height, rotation] {
+        protectedThis->processNewSample(sample.get(), width, height, rotation);
     });
 }
 
-void RealtimeIncomingVideoSource::processNewSample(CMSampleBufferRef sample, unsigned width, unsigned height, MediaSample::VideoOrientation orientation)
+void RealtimeIncomingVideoSource::processNewSample(CMSampleBufferRef sample, unsigned width, unsigned height, MediaSample::VideoRotation rotation)
 {
     m_buffer = sample;
     if (width != m_currentSettings.width() || height != m_currentSettings.height()) {
@@ -204,7 +204,7 @@
         settingsDidChange();
     }
 
-    videoSampleAvailable(MediaSampleAVFObjC::create(sample, orientation));
+    videoSampleAvailable(MediaSampleAVFObjC::create(sample, rotation));
 }
 
 RefPtr<RealtimeMediaSourceCapabilities> RealtimeIncomingVideoSource::capabilities() const

Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.h (215098 => 215099)


--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.h	2017-04-07 16:57:35 UTC (rev 215098)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.h	2017-04-07 17:29:40 UTC (rev 215099)
@@ -64,7 +64,7 @@
     MediaConstraints& constraints() { return *m_constraints.get(); }
     RealtimeMediaSourceSupportedConstraints& supportedConstraints();
 
-    void processNewSample(CMSampleBufferRef, unsigned, unsigned, MediaSample::VideoOrientation);
+    void processNewSample(CMSampleBufferRef, unsigned, unsigned, MediaSample::VideoRotation);
 
     bool isProducingData() const final { return m_isProducingData && m_buffer; }
     bool applySize(const IntSize&) final { return true; }

Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp (215098 => 215099)


--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp	2017-04-07 16:57:35 UTC (rev 215098)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp	2017-04-07 17:29:40 UTC (rev 215099)
@@ -121,18 +121,17 @@
     auto pixelFormatType = CVPixelBufferGetPixelFormatType(pixelBuffer);
 
     webrtc::VideoRotation rotation;
-    switch (sample.videoOrientation()) {
-    case MediaSample::VideoOrientation::Unknown:
-    case MediaSample::VideoOrientation::Portrait:
+    switch (sample.videoRotation()) {
+    case MediaSample::VideoRotation::None:
         rotation = webrtc::kVideoRotation_0;
         break;
-    case MediaSample::VideoOrientation::PortraitUpsideDown:
+    case MediaSample::VideoRotation::UpsideDown:
         rotation = webrtc::kVideoRotation_180;
         break;
-    case MediaSample::VideoOrientation::LandscapeRight:
+    case MediaSample::VideoRotation::Right:
         rotation = webrtc::kVideoRotation_90;
         break;
-    case MediaSample::VideoOrientation::LandscapeLeft:
+    case MediaSample::VideoRotation::Left:
         rotation = webrtc::kVideoRotation_270;
         break;
     }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to