Title: [240000] trunk/Source/WebCore
- Revision
- 240000
- Author
- [email protected]
- Date
- 2019-01-15 13:21:02 -0800 (Tue, 15 Jan 2019)
Log Message
Correctly handle rotation for local video playback
https://bugs.webkit.org/show_bug.cgi?id=193412
Reviewed by Eric Carlson.
Update AVVideoCaptureSource to compute the size given to settings after rotating the sample.
This ensures computing the size of video elements appropriately.
Also makes sure to notify observers of size change whenever rotation happens as settings() call will provide a different size.
Covered by manual testing as we do not have yet emulation of local capture with rotation.
* platform/mediastream/RealtimeMediaSource.cpp:
(WebCore::RealtimeMediaSource::setIntrinsicSize):
* platform/mediastream/mac/AVVideoCaptureSource.mm:
(WebCore::AVVideoCaptureSource::settings):
(WebCore::AVVideoCaptureSource::computeSampleRotation):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (239999 => 240000)
--- trunk/Source/WebCore/ChangeLog 2019-01-15 21:16:49 UTC (rev 239999)
+++ trunk/Source/WebCore/ChangeLog 2019-01-15 21:21:02 UTC (rev 240000)
@@ -1,3 +1,21 @@
+2019-01-15 Youenn Fablet <[email protected]>
+
+ Correctly handle rotation for local video playback
+ https://bugs.webkit.org/show_bug.cgi?id=193412
+
+ Reviewed by Eric Carlson.
+
+ Update AVVideoCaptureSource to compute the size given to settings after rotating the sample.
+ This ensures computing the size of video elements appropriately.
+ Also makes sure to notify observers of size change whenever rotation happens as settings() call will provide a different size.
+ Covered by manual testing as we do not have yet emulation of local capture with rotation.
+
+ * platform/mediastream/RealtimeMediaSource.cpp:
+ (WebCore::RealtimeMediaSource::setIntrinsicSize):
+ * platform/mediastream/mac/AVVideoCaptureSource.mm:
+ (WebCore::AVVideoCaptureSource::settings):
+ (WebCore::AVVideoCaptureSource::computeSampleRotation):
+
2019-01-15 Chris Dumez <[email protected]>
Regression(PSON) View becomes blank after click a cross-site download link
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp (239999 => 240000)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp 2019-01-15 21:16:49 UTC (rev 239999)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp 2019-01-15 21:21:02 UTC (rev 240000)
@@ -890,9 +890,10 @@
if (m_intrinsicSize == size)
return;
+ auto currentSize = this->size();
m_intrinsicSize = size;
- if (m_intrinsicSize != m_size)
+ if (currentSize != this->size())
notifySettingsDidChangeObservers({ RealtimeMediaSourceSettings::Flag::Width, RealtimeMediaSourceSettings::Flag::Height });
}
Modified: trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm (239999 => 240000)
--- trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm 2019-01-15 21:16:49 UTC (rev 239999)
+++ trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm 2019-01-15 21:21:02 UTC (rev 240000)
@@ -260,7 +260,11 @@
settings.setFacingMode(RealtimeMediaSourceSettings::Unknown);
settings.setFrameRate(frameRate());
- auto& size = this->size();
+
+ auto size = this->size();
+ if (m_sampleRotation == MediaSample::VideoRotation::Left || m_sampleRotation == MediaSample::VideoRotation::Right)
+ size = size.transposedSize();
+
settings.setWidth(size.width());
settings.setHeight(size.height());
settings.setDeviceId(hashedId());
@@ -501,25 +505,31 @@
void AVVideoCaptureSource::computeSampleRotation()
{
bool frontCamera = [device() position] == AVCaptureDevicePositionFront;
+ MediaSample::VideoRotation sampleRotation;
switch (m_sensorOrientation - m_deviceOrientation) {
case 0:
- m_sampleRotation = MediaSample::VideoRotation::None;
+ sampleRotation = MediaSample::VideoRotation::None;
break;
case 180:
case -180:
- m_sampleRotation = MediaSample::VideoRotation::UpsideDown;
+ sampleRotation = MediaSample::VideoRotation::UpsideDown;
break;
case 90:
- m_sampleRotation = frontCamera ? MediaSample::VideoRotation::Left : MediaSample::VideoRotation::Right;
+ sampleRotation = frontCamera ? MediaSample::VideoRotation::Left : MediaSample::VideoRotation::Right;
break;
case -90:
case -270:
- m_sampleRotation = frontCamera ? MediaSample::VideoRotation::Right : MediaSample::VideoRotation::Left;
+ sampleRotation = frontCamera ? MediaSample::VideoRotation::Right : MediaSample::VideoRotation::Left;
break;
default:
ASSERT_NOT_REACHED();
- m_sampleRotation = MediaSample::VideoRotation::None;
+ sampleRotation = MediaSample::VideoRotation::None;
}
+ if (sampleRotation == m_sampleRotation)
+ return;
+
+ m_sampleRotation = sampleRotation;
+ notifySettingsDidChangeObservers({ RealtimeMediaSourceSettings::Flag::Width, RealtimeMediaSourceSettings::Flag::Height });
}
void AVVideoCaptureSource::processNewFrame(Ref<MediaSample>&& sample)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes