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;
}