Changeset 252470 in webkit


Ignore:
Timestamp:
Nov 14, 2019 4:34:01 PM (4 years ago)
Author:
eric.carlson@apple.com
Message:

[iOS] Audio capture fails when a track is unmuted
https://bugs.webkit.org/show_bug.cgi?id=204202
<rdar://problem/57005820>

Reviewed by Youenn Fablet.

Tested manually.

  • platform/audio/PlatformMediaSession.cpp:

(WebCore::PlatformMediaSession::canProduceAudioChanged): Remove unused "client" parameter.

  • platform/audio/PlatformMediaSessionManager.cpp:

(WebCore::PlatformMediaSessionManager::sessionCanProduceAudioChanged): Ditto.

  • platform/audio/PlatformMediaSessionManager.h:
  • platform/audio/cocoa/MediaSessionManagerCocoa.h:
  • platform/audio/cocoa/MediaSessionManagerCocoa.mm:

(MediaSessionManagerCocoa::sessionCanProduceAudioChanged): Ditto.

  • platform/mediastream/RealtimeMediaSource.cpp:

(WebCore::RealtimeMediaSource::setMuted): Change m_muted before calling start/stop so the
muted method will return the correct value.

  • platform/mediastream/mac/CoreAudioCaptureSource.cpp:

(WebCore::CoreAudioSharedUnit::startInternal): Call sessionCanProduceAudioChanged before
starting the audio unit so the audio session category is set correctly. ASSERT if the
audio session category is incorrect.

  • platform/mock/MockRealtimeAudioSource.cpp:

(WebCore::MockRealtimeAudioSource::startProducingData): Ditto.

Location:
trunk/Source/WebCore
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r252467 r252470  
     12019-11-14  Eric Carlson  <eric.carlson@apple.com>
     2
     3        [iOS] Audio capture fails when a track is unmuted
     4        https://bugs.webkit.org/show_bug.cgi?id=204202
     5        <rdar://problem/57005820>
     6
     7        Reviewed by Youenn Fablet.
     8
     9        Tested manually.
     10
     11        * platform/audio/PlatformMediaSession.cpp:
     12        (WebCore::PlatformMediaSession::canProduceAudioChanged): Remove unused "client" parameter.
     13        * platform/audio/PlatformMediaSessionManager.cpp:
     14        (WebCore::PlatformMediaSessionManager::sessionCanProduceAudioChanged): Ditto.
     15        * platform/audio/PlatformMediaSessionManager.h:
     16
     17        * platform/audio/cocoa/MediaSessionManagerCocoa.h:
     18        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
     19        (MediaSessionManagerCocoa::sessionCanProduceAudioChanged): Ditto.
     20
     21        * platform/mediastream/RealtimeMediaSource.cpp:
     22        (WebCore::RealtimeMediaSource::setMuted): Change m_muted before calling start/stop so the
     23        muted method will return the correct value.
     24
     25        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
     26        (WebCore::CoreAudioSharedUnit::startInternal): Call sessionCanProduceAudioChanged before
     27        starting the audio unit so the audio session category is set correctly. ASSERT if the
     28        audio session category is incorrect.
     29       
     30        * platform/mock/MockRealtimeAudioSource.cpp:
     31        (WebCore::MockRealtimeAudioSource::startProducingData): Ditto.
     32
    1332019-11-14  Said Abou-Hallawa  <sabouhallawa@apple.com>
    234
  • trunk/Source/WebCore/platform/audio/PlatformMediaSession.cpp

    r248962 r252470  
    359359void PlatformMediaSession::canProduceAudioChanged()
    360360{
    361     PlatformMediaSessionManager::sharedManager().sessionCanProduceAudioChanged(*this);
     361    PlatformMediaSessionManager::sharedManager().sessionCanProduceAudioChanged();
    362362}
    363363
  • trunk/Source/WebCore/platform/audio/PlatformMediaSessionManager.cpp

    r250694 r252470  
    408408}
    409409
    410 void PlatformMediaSessionManager::sessionCanProduceAudioChanged(PlatformMediaSession&)
     410void PlatformMediaSessionManager::sessionCanProduceAudioChanged()
    411411{
    412412    updateSessionState();
  • trunk/Source/WebCore/platform/audio/PlatformMediaSessionManager.h

    r250694 r252470  
    118118    virtual void sessionDidEndRemoteScrubbing(const PlatformMediaSession&) { };
    119119    virtual void clientCharacteristicsChanged(PlatformMediaSession&) { }
    120     virtual void sessionCanProduceAudioChanged(PlatformMediaSession&);
     120    virtual void sessionCanProduceAudioChanged();
    121121
    122122#if PLATFORM(IOS_FAMILY)
  • trunk/Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.h

    r242901 r252470  
    5757    void sessionDidEndRemoteScrubbing(const PlatformMediaSession&) override;
    5858    void clientCharacteristicsChanged(PlatformMediaSession&) override;
    59     void sessionCanProduceAudioChanged(PlatformMediaSession&) override;
     59    void sessionCanProduceAudioChanged() override;
    6060
    6161    virtual void providePresentingApplicationPIDIfNecessary() { }
  • trunk/Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.mm

    r245712 r252470  
    174174}
    175175
    176 void MediaSessionManagerCocoa::sessionCanProduceAudioChanged(PlatformMediaSession& session)
    177 {
    178     PlatformMediaSessionManager::sessionCanProduceAudioChanged(session);
     176void MediaSessionManagerCocoa::sessionCanProduceAudioChanged()
     177{
     178    PlatformMediaSessionManager::sessionCanProduceAudioChanged();
    179179    scheduleUpdateNowPlayingInfo();
    180180}
  • trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp

    r247391 r252470  
    9191void RealtimeMediaSource::setMuted(bool muted)
    9292{
     93    if (!muted && interrupted()) {
     94        ALWAYS_LOG_IF(m_logger, LOGIDENTIFIER, "ignoring unmute because of interruption");
     95        return;
     96    }
     97
    9398    ALWAYS_LOG_IF(m_logger, LOGIDENTIFIER, muted);
    9499
     100    // Changed m_muted before calling start/stop so muted() will reflect the correct state.
     101    notifyMutedChange(muted);
    95102    if (muted)
    96103        stop();
    97     else {
    98         if (interrupted())
    99             return;
    100 
     104    else
    101105        start();
    102     }
    103 
    104     notifyMutedChange(muted);
    105106}
    106107
  • trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp

    r251888 r252470  
    3535#include "CoreAudioCaptureDeviceManager.h"
    3636#include "Logging.h"
     37#include "PlatformMediaSessionManager.h"
    3738#include "Timer.h"
    3839#include "WebAudioSourceProviderAVFObjC.h"
     
    666667    unduck();
    667668
     669#if PLATFORM(IOS_FAMILY)
     670    PlatformMediaSessionManager::sharedManager().sessionCanProduceAudioChanged();
     671    ASSERT(AudioSession::sharedSession().category() == AudioSession::PlayAndRecord);
     672#endif
     673
    668674    err = AudioOutputUnitStart(m_ioUnit);
    669675    if (err) {
  • trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.cpp

    r250918 r252470  
    3333
    3434#if ENABLE(MEDIA_STREAM)
     35#include "AudioSession.h"
    3536#include "CaptureDevice.h"
    3637#include "Logging.h"
     
    3839#include "MockRealtimeMediaSourceCenter.h"
    3940#include "NotImplemented.h"
     41#include "PlatformMediaSessionManager.h"
    4042#include "RealtimeMediaSourceSettings.h"
    4143#include <wtf/UUID.h>
     
    134136#if PLATFORM(IOS_FAMILY)
    135137    RealtimeMediaSourceCenter::singleton().audioCaptureFactory().setActiveSource(*this);
     138    PlatformMediaSessionManager::sharedManager().sessionCanProduceAudioChanged();
     139    ASSERT(AudioSession::sharedSession().category() == AudioSession::PlayAndRecord);
    136140#endif
    137141
Note: See TracChangeset for help on using the changeset viewer.