Changeset 238909 in webkit


Ignore:
Timestamp:
Dec 5, 2018 2:32:26 PM (5 years ago)
Author:
youenn@apple.com
Message:

Enable the possibility to do video capture in UIProcess
https://bugs.webkit.org/show_bug.cgi?id=192394

Reviewed by Eric Carlson.

Source/WebCore:

Create IOSurface-backed sample buffers so that we can easily send them through IPC.
Manually tested.

  • platform/mediastream/mac/AVVideoCaptureSource.mm:

(WebCore::AVVideoCaptureSource::setSizeAndFrameRateWithPreset):

Source/WebKit:

Add two web preferences to toggle audio/video capture in UIProcess or WebProcess.
Add mechanism for video capture that was not implemented yet.

  • Shared/WebPreferences.yaml:
  • Shared/WebPreferencesDefaultValues.h:
  • Shared/WebProcessCreationParameters.cpp:

(WebKit::WebProcessCreationParameters::encode const):
(WebKit::WebProcessCreationParameters::decode):

  • Shared/WebProcessCreationParameters.h:
  • UIProcess/API/APIProcessPoolConfiguration.h:
  • UIProcess/API/C/WKPreferences.cpp:

(WKPreferencesSetCaptureAudioInUIProcessEnabled):
(WKPreferencesGetCaptureAudioInUIProcessEnabled):
(WKPreferencesSetCaptureVideoInUIProcessEnabled):
(WKPreferencesGetCaptureVideoInUIProcessEnabled):

  • UIProcess/API/C/WKPreferencesRef.h:
  • UIProcess/WebPreferences.cpp:

(WebKit::WebPreferences::updateBoolValueForInternalDebugFeatureKey):

  • UIProcess/WebProcessPool.cpp:

(WebKit::WebProcessPool::initializeNewWebProcess):
(WebKit::WebProcessPool::createWebPage):

  • WebProcess/cocoa/UserMediaCaptureManager.cpp:

(WebKit::UserMediaCaptureManager::initialize):

Location:
trunk/Source
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r238908 r238909  
     12018-12-05  Youenn Fablet  <youenn@apple.com>
     2
     3        Enable the possibility to do video capture in UIProcess
     4        https://bugs.webkit.org/show_bug.cgi?id=192394
     5
     6        Reviewed by Eric Carlson.
     7
     8        Create IOSurface-backed sample buffers so that we can easily send them through IPC.
     9        Manually tested.
     10
     11        * platform/mediastream/mac/AVVideoCaptureSource.mm:
     12        (WebCore::AVVideoCaptureSource::setSizeAndFrameRateWithPreset):
     13
    1142018-12-05  Youenn Fablet  <youenn@apple.com>
    215
  • trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm

    r238145 r238909  
    343343                    (__bridge NSString *)kCVPixelBufferPixelFormatTypeKey: @(avVideoCapturePixelBufferFormat()),
    344344                    (__bridge NSString *)kCVPixelBufferWidthKey: @(avPreset->size.width()),
    345                     (__bridge NSString *)kCVPixelBufferHeightKey: @(avPreset->size.height())
     345                    (__bridge NSString *)kCVPixelBufferHeightKey: @(avPreset->size.height()),
     346                    (__bridge NSString *)kCVPixelBufferIOSurfacePropertiesKey : @{ }
    346347                };
    347348                [m_videoOutput setVideoSettings:settingsDictionary];
  • trunk/Source/WebKit/ChangeLog

    r238900 r238909  
     12018-12-05  Youenn Fablet  <youenn@apple.com>
     2
     3        Enable the possibility to do video capture in UIProcess
     4        https://bugs.webkit.org/show_bug.cgi?id=192394
     5
     6        Reviewed by Eric Carlson.
     7
     8        Add two web preferences to toggle audio/video capture in UIProcess or WebProcess.
     9        Add mechanism for video capture that was not implemented yet.
     10
     11        * Shared/WebPreferences.yaml:
     12        * Shared/WebPreferencesDefaultValues.h:
     13        * Shared/WebProcessCreationParameters.cpp:
     14        (WebKit::WebProcessCreationParameters::encode const):
     15        (WebKit::WebProcessCreationParameters::decode):
     16        * Shared/WebProcessCreationParameters.h:
     17        * UIProcess/API/APIProcessPoolConfiguration.h:
     18        * UIProcess/API/C/WKPreferences.cpp:
     19        (WKPreferencesSetCaptureAudioInUIProcessEnabled):
     20        (WKPreferencesGetCaptureAudioInUIProcessEnabled):
     21        (WKPreferencesSetCaptureVideoInUIProcessEnabled):
     22        (WKPreferencesGetCaptureVideoInUIProcessEnabled):
     23        * UIProcess/API/C/WKPreferencesRef.h:
     24        * UIProcess/WebPreferences.cpp:
     25        (WebKit::WebPreferences::updateBoolValueForInternalDebugFeatureKey):
     26        * UIProcess/WebProcessPool.cpp:
     27        (WebKit::WebProcessPool::initializeNewWebProcess):
     28        (WebKit::WebProcessPool::createWebPage):
     29        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
     30        (WebKit::UserMediaCaptureManager::initialize):
     31
    1322018-12-05  Alex Christensen  <achristensen@webkit.org>
    233
  • trunk/Source/WebKit/Shared/WebPreferences.yaml

    r238791 r238909  
    14751475  condition: ENABLE(LAYOUT_FORMATTING_CONTEXT)
    14761476
     1477CaptureAudioInUIProcessEnabled:
     1478  type: bool
     1479  defaultValue: DEFAULT_CAPTURE_AUDIO_IN_UIPROCESS
     1480  humanReadableName: "Capture audio in UIProcess"
     1481  humanReadableDescription: "Enable audio capture in UIProcess"
     1482  category: internal
     1483  webcoreBinding: none
     1484  condition: ENABLE(MEDIA_STREAM)
     1485
     1486CaptureVideoInUIProcessEnabled:
     1487  type: bool
     1488  defaultValue: false
     1489  humanReadableName: "Capture video in UIProcess"
     1490  humanReadableDescription: "Enable video capture in UIProcess"
     1491  category: internal
     1492  webcoreBinding: none
     1493  condition: ENABLE(MEDIA_STREAM)
  • trunk/Source/WebKit/Shared/WebPreferencesDefaultValues.h

    r238288 r238909  
    224224bool defaultCustomPasteboardDataEnabled();
    225225
     226#if PLATFORM(MAC)
     227#define DEFAULT_CAPTURE_AUDIO_IN_UIPROCESS true
     228#else
     229#define DEFAULT_CAPTURE_AUDIO_IN_UIPROCESS false
     230#endif
     231
    226232#if PLATFORM(WATCHOS)
    227233#define DEFAULT_INPUT_TYPE_COLOR_ENABLED false
  • trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp

    r238746 r238909  
    7070    encoder << audioCaptureExtensionHandle;
    7171    encoder << shouldCaptureAudioInUIProcess;
     72    encoder << shouldCaptureVideoInUIProcess;
    7273    encoder << shouldCaptureDisplayInUIProcess;
    7374#endif
     
    262263    if (!decoder.decode(parameters.shouldCaptureAudioInUIProcess))
    263264        return false;
     265    if (!decoder.decode(parameters.shouldCaptureVideoInUIProcess))
     266        return false;
    264267    if (!decoder.decode(parameters.shouldCaptureDisplayInUIProcess))
    265268        return false;
  • trunk/Source/WebKit/Shared/WebProcessCreationParameters.h

    r238746 r238909  
    9494    SandboxExtension::Handle audioCaptureExtensionHandle;
    9595    bool shouldCaptureAudioInUIProcess { false };
     96    bool shouldCaptureVideoInUIProcess { false };
    9697    bool shouldCaptureDisplayInUIProcess { false };
    9798#endif
  • trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h

    r238900 r238909  
    139139    void setShouldCaptureAudioInUIProcess(bool shouldCaptureAudioInUIProcess) { m_shouldCaptureAudioInUIProcess = shouldCaptureAudioInUIProcess; }
    140140
     141    bool shouldCaptureVideoInUIProcess() const { return m_shouldCaptureVideoInUIProcess; }
     142    void setShouldCaptureVideoInUIProcess(bool shouldCaptureVideoInUIProcess) { m_shouldCaptureVideoInUIProcess = shouldCaptureVideoInUIProcess; }
     143
    141144    bool shouldCaptureDisplayInUIProcess() const { return m_shouldCaptureDisplayInUIProcess; }
    142145    void setShouldCaptureDisplayInUIProcess(bool shouldCaptureDisplayInUIProcess) { m_shouldCaptureDisplayInUIProcess = shouldCaptureDisplayInUIProcess; }
     
    207210    bool m_shouldTakeUIBackgroundAssertion { true };
    208211    bool m_shouldCaptureAudioInUIProcess { false };
     212    bool m_shouldCaptureVideoInUIProcess { false };
    209213    bool m_shouldCaptureDisplayInUIProcess { DEFAULT_CAPTURE_DISPLAY_IN_UI_PROCESS };
    210214    ProcessID m_presentingApplicationPID { getCurrentProcessID() };
  • trunk/Source/WebKit/UIProcess/API/C/WKPreferences.cpp

    r238264 r238909  
    20802080    return toImpl(preferencesRef)->webSQLDisabled();
    20812081}
     2082
     2083void WKPreferencesSetCaptureAudioInUIProcessEnabled(WKPreferencesRef preferencesRef, bool flag)
     2084{
     2085    toImpl(preferencesRef)->setCaptureAudioInUIProcessEnabled(flag);
     2086}
     2087
     2088bool WKPreferencesGetCaptureAudioInUIProcessEnabled(WKPreferencesRef preferencesRef)
     2089{
     2090    return toImpl(preferencesRef)->captureAudioInUIProcessEnabled();
     2091}
     2092
     2093void WKPreferencesSetCaptureVideoInUIProcessEnabled(WKPreferencesRef preferencesRef, bool flag)
     2094{
     2095    toImpl(preferencesRef)->setCaptureVideoInUIProcessEnabled(flag);
     2096}
     2097
     2098bool WKPreferencesGetCaptureVideoInUIProcessEnabled(WKPreferencesRef preferencesRef)
     2099{
     2100    return toImpl(preferencesRef)->captureVideoInUIProcessEnabled();
     2101}
  • trunk/Source/WebKit/UIProcess/API/C/WKPreferencesRef.h

    r237210 r238909  
    333333WK_EXPORT void WKPreferencesSetWebSQLDisabled(WKPreferencesRef preferencesRef, bool enabled);
    334334
     335WK_EXPORT void WKPreferencesSetCaptureAudioInUIProcessEnabled(WKPreferencesRef preferencesRef, bool flag);
     336WK_EXPORT bool WKPreferencesGetCaptureAudioInUIProcessEnabled(WKPreferencesRef preferencesRef);
     337WK_EXPORT void WKPreferencesSetCaptureVideoInUIProcessEnabled(WKPreferencesRef preferencesRef, bool flag);
     338WK_EXPORT bool WKPreferencesGetCaptureVideoInUIProcessEnabled(WKPreferencesRef preferencesRef);
     339
    335340#ifdef __cplusplus
    336341}
  • trunk/Source/WebKit/UIProcess/WebPreferences.cpp

    r235921 r238909  
    140140        return;
    141141    }
     142    if (key == WebPreferencesKey::captureAudioInUIProcessEnabledKey()) {
     143        for (auto* page : m_pages)
     144            page->process().processPool().configuration().setShouldCaptureAudioInUIProcess(value);
     145
     146        return;
     147    }
     148    if (key == WebPreferencesKey::captureVideoInUIProcessEnabledKey()) {
     149        for (auto* page : m_pages)
     150            page->process().processPool().configuration().setShouldCaptureVideoInUIProcess(value);
     151
     152        return;
     153    }
    142154
    143155    update(); // FIXME: Only send over the changed key and value.
  • trunk/Source/WebKit/UIProcess/WebProcessPool.cpp

    r238900 r238909  
    920920#if ENABLE(MEDIA_STREAM)
    921921    parameters.shouldCaptureAudioInUIProcess = m_configuration->shouldCaptureAudioInUIProcess();
     922    parameters.shouldCaptureVideoInUIProcess = m_configuration->shouldCaptureVideoInUIProcess();
    922923    parameters.shouldCaptureDisplayInUIProcess = m_configuration->shouldCaptureDisplayInUIProcess();
    923924#endif
     
    11471148    auto page = process->createWebPage(pageClient, WTFMove(pageConfiguration));
    11481149    m_configuration->setProcessSwapsOnNavigationFromExperimentalFeatures(page->preferences().processSwapOnCrossSiteNavigationEnabled());
     1150    m_configuration->setShouldCaptureAudioInUIProcess(page->preferences().captureAudioInUIProcessEnabled());
     1151    m_configuration->setShouldCaptureVideoInUIProcess(page->preferences().captureVideoInUIProcessEnabled());
    11491152
    11501153    return page;
  • trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp

    r237281 r238909  
    220220    if (parameters.shouldCaptureAudioInUIProcess)
    221221        RealtimeMediaSourceCenter::setAudioFactory(*this);
     222    if (parameters.shouldCaptureVideoInUIProcess)
     223        RealtimeMediaSourceCenter::setVideoFactory(*this);
    222224    if (parameters.shouldCaptureDisplayInUIProcess)
    223225        RealtimeMediaSourceCenter::setDisplayCaptureFactory(*this);
Note: See TracChangeset for help on using the changeset viewer.