Changeset 223412 in webkit


Ignore:
Timestamp:
Oct 16, 2017 9:40:48 AM (6 years ago)
Author:
commit-queue@webkit.org
Message:

Make RealtimeIncomingAudioSources and RealtimeOutgoingAudioSources port agnostic
https://bugs.webkit.org/show_bug.cgi?id=177928

Patch by Alejandro G. Castro <alex@igalia.com> on 2017-10-16
Reviewed by Youenn Fablet.

Refactor the RealtimeIncomingAudioSource and RealtimeOutgoingAudioSource classes,
move the mac specific code to a different class. This way we can use them from
other ports.

No new tests, we are not adding new functionality just refactoring.

  • CMakeLists.txt:
  • WebCore.xcodeproj/project.pbxproj:
  • platform/mediastream/RealtimeIncomingAudioSource.cpp: Copied from Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h. Just the port agnostic parts.
  • platform/mediastream/RealtimeIncomingAudioSource.h: Copied from Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h. Ditto.
  • platform/mediastream/RealtimeOutgoingAudioSource.cpp: Copied from Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp. Ditto.
  • platform/mediastream/RealtimeOutgoingAudioSource.h: Copied from Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.h. Ditto.
  • platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp: Added, it adds Cocoa code parts from original Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.cpp.

(WebCore::RealtimeIncomingAudioSource::create): Moved this function from the RealtimeOutgoingAudioSource.cpp file to avoid including the Cocoa file there.

  • platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.h: Added Cocoa code from original Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h.
  • platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp: Added Cocoa code from original Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp.

(WebCore::RealtimeOutgoingAudioSource::create): Moved this function from the RealtimeOutgoingAudioSource.cpp file to avoid including the Cocoa file there.

  • platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.h: Added Cocoa code from the original Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.h.
Location:
trunk/Source/WebCore
Files:
2 added
3 edited
2 copied
4 moved

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/CMakeLists.txt

    r223406 r223412  
    25402540    platform/mediastream/RTCIceCandidateDescriptor.cpp
    25412541    platform/mediastream/RTCSessionDescriptionDescriptor.cpp
     2542    platform/mediastream/RealtimeIncomingAudioSource.cpp
    25422543    platform/mediastream/RealtimeIncomingVideoSource.cpp
    25432544    platform/mediastream/RealtimeMediaSource.cpp
    25442545    platform/mediastream/RealtimeMediaSourceCenter.cpp
    25452546    platform/mediastream/RealtimeMediaSourceSettings.cpp
     2547    platform/mediastream/RealtimeOutgoingAudioSource.cpp
    25462548    platform/mediastream/RealtimeOutgoingVideoSource.cpp
    25472549
  • trunk/Source/WebCore/ChangeLog

    r223410 r223412  
     12017-10-16  Alejandro G. Castro  <alex@igalia.com>
     2
     3        Make RealtimeIncomingAudioSources and RealtimeOutgoingAudioSources port agnostic
     4        https://bugs.webkit.org/show_bug.cgi?id=177928
     5
     6        Reviewed by Youenn Fablet.
     7
     8        Refactor the RealtimeIncomingAudioSource and RealtimeOutgoingAudioSource classes,
     9        move the mac specific code to a different class. This way we can use them from
     10        other ports.
     11
     12        No new tests, we are not adding new functionality just refactoring.
     13
     14        * CMakeLists.txt:
     15        * WebCore.xcodeproj/project.pbxproj:
     16        * platform/mediastream/RealtimeIncomingAudioSource.cpp: Copied from Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h. Just the port agnostic parts.
     17        * platform/mediastream/RealtimeIncomingAudioSource.h: Copied from Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h. Ditto.
     18        * platform/mediastream/RealtimeOutgoingAudioSource.cpp: Copied from Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp. Ditto.
     19        * platform/mediastream/RealtimeOutgoingAudioSource.h: Copied from Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.h. Ditto.
     20        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp: Added, it adds Cocoa code parts from original Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.cpp.
     21        (WebCore::RealtimeIncomingAudioSource::create): Moved this function from the RealtimeOutgoingAudioSource.cpp file to avoid including the Cocoa file there.
     22        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.h: Added Cocoa code from original Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h.
     23        * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp: Added Cocoa code from original Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp.
     24        (WebCore::RealtimeOutgoingAudioSource::create): Moved this function from the RealtimeOutgoingAudioSource.cpp file to avoid including the Cocoa file there.
     25        * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.h: Added Cocoa code from the original Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.h.
     26
    1272017-10-16  Wenson Hsieh  <wenson_hsieh@apple.com>
    228
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r223408 r223412  
    16761676                41103AAB1E39791000769F03 /* RealtimeOutgoingAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41103AA71E39790A00769F03 /* RealtimeOutgoingAudioSource.cpp */; };
    16771677                41103AAC1E39791000769F03 /* RealtimeOutgoingAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 41103AA81E39790A00769F03 /* RealtimeOutgoingAudioSource.h */; };
     1678                41103AAB1E39791000769F14 /* RealtimeOutgoingAudioSourceCocoa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41103AA71E39790A00769F14 /* RealtimeOutgoingAudioSourceCocoa.cpp */; };
     1679                41103AAC1E39791000769F14 /* RealtimeOutgoingAudioSourceCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 41103AA81E39790A00769F14 /* RealtimeOutgoingAudioSourceCocoa.h */; };
    16781680                41103AAD1E39791000769F03 /* RealtimeIncomingAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 41103AA91E39790A00769F03 /* RealtimeIncomingAudioSource.h */; };
    16791681                41103AAE1E39791000769F03 /* RealtimeIncomingAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41103AAA1E39790A00769F03 /* RealtimeIncomingAudioSource.cpp */; };
     1682                41103AAD1E39791000769F14 /* RealtimeIncomingAudioSourceCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 41103AA91E39790A00769F14 /* RealtimeIncomingAudioSourceCocoa.h */; };
     1683                41103AAE1E39791000769F14 /* RealtimeIncomingAudioSourceCocoa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41103AAA1E39790A00769F14 /* RealtimeIncomingAudioSourceCocoa.cpp */; };
    16801684                4123081B138C429700BCCFCA /* WebCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93F19B1A08245E5A001E9ABC /* WebCore.framework */; };
    16811685                41230913138C42FF00BCCFCA /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8216299029F4FB501000131 /* JavaScriptCore.framework */; };
     
    94749478                41103AA71E39790A00769F03 /* RealtimeOutgoingAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RealtimeOutgoingAudioSource.cpp; sourceTree = "<group>"; };
    94759479                41103AA81E39790A00769F03 /* RealtimeOutgoingAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RealtimeOutgoingAudioSource.h; sourceTree = "<group>"; };
     9480                41103AA71E39790A00769F14 /* RealtimeOutgoingAudioSourceCocoa.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RealtimeOutgoingAudioSourceCocoa.cpp; sourceTree = "<group>"; };
     9481                41103AA81E39790A00769F14 /* RealtimeOutgoingAudioSourceCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RealtimeOutgoingAudioSourceCocoa.h; sourceTree = "<group>"; };
    94769482                41103AA91E39790A00769F03 /* RealtimeIncomingAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RealtimeIncomingAudioSource.h; sourceTree = "<group>"; };
    94779483                41103AAA1E39790A00769F03 /* RealtimeIncomingAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RealtimeIncomingAudioSource.cpp; sourceTree = "<group>"; };
     9484                41103AA91E39790A00769F14 /* RealtimeIncomingAudioSourceCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RealtimeIncomingAudioSourceCocoa.h; sourceTree = "<group>"; };
     9485                41103AAA1E39790A00769F14 /* RealtimeIncomingAudioSourceCocoa.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RealtimeIncomingAudioSourceCocoa.cpp; sourceTree = "<group>"; };
    94789486                41189EF71AD8232800B90A0D /* ReadableStreamDefaultController.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ReadableStreamDefaultController.idl; sourceTree = "<group>"; };
    94799487                41189EF71AD8232800B93F64 /* ReadableByteStreamController.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ReadableByteStreamController.idl; sourceTree = "<group>"; };
     
    1656516573                                07FFDE67181AED420072D409 /* MediaStreamTrackPrivate.h */,
    1656616574                                5EBB89381C77BDA400C65D41 /* PeerMediaDescription.h */,
     16575                                41103AAA1E39790A00769F03 /* RealtimeIncomingAudioSource.cpp */,
     16576                                41103AA91E39790A00769F03 /* RealtimeIncomingAudioSource.h */,
    1656716577                                5CDD83391E4324BB00621E92 /* RealtimeIncomingVideoSource.cpp */,
    1656816578                                5CDD833A1E4324BB00621E92 /* RealtimeIncomingVideoSource.h */,
     
    1657616586                                2EC41DE21C0410A300D294FE /* RealtimeMediaSourceSupportedConstraints.cpp */,
    1657716587                                07C1C0E41BFB60ED00BD2256 /* RealtimeMediaSourceSupportedConstraints.h */,
     16588                                41103AA71E39790A00769F03 /* RealtimeOutgoingAudioSource.cpp */,
     16589                                41103AA81E39790A00769F03 /* RealtimeOutgoingAudioSource.h */,
    1657816590                                5CDD833B1E4324BB00621E92 /* RealtimeOutgoingVideoSource.cpp */,
    1657916591                                5CDD833C1E4324BB00621E92 /* RealtimeOutgoingVideoSource.h */,
     
    1662816640                                41103AAA1E39790A00769F03 /* RealtimeIncomingAudioSource.cpp */,
    1662916641                                41103AA91E39790A00769F03 /* RealtimeIncomingAudioSource.h */,
     16642                                41103AAA1E39790A00769F14 /* RealtimeIncomingAudioSourceCocoa.cpp */,
     16643                                41103AA91E39790A00769F14 /* RealtimeIncomingAudioSourceCocoa.h */,
    1663016644                                5CDD83391E4324BB00621E83 /* RealtimeIncomingVideoSourceCocoa.cpp */,
    1663116645                                5CDD833A1E4324BB00621E83 /* RealtimeIncomingVideoSourceCocoa.h */,
     
    1663416648                                41103AA71E39790A00769F03 /* RealtimeOutgoingAudioSource.cpp */,
    1663516649                                41103AA81E39790A00769F03 /* RealtimeOutgoingAudioSource.h */,
     16650                                41103AA71E39790A00769F14 /* RealtimeOutgoingAudioSourceCocoa.cpp */,
     16651                                41103AA81E39790A00769F14 /* RealtimeOutgoingAudioSourceCocoa.h */,
    1663616652                                5CDD833B1E4324BB00621B83 /* RealtimeOutgoingVideoSourceCocoa.cpp */,
    1663716653                                5CDD833C1E4324BB00621B83 /* RealtimeOutgoingVideoSourceCocoa.h */,
     
    2977329789                                FD31603C12B0267600C1A359 /* RealtimeAnalyser.h in Headers */,
    2977429790                                41103AAD1E39791000769F03 /* RealtimeIncomingAudioSource.h in Headers */,
     29791                                41103AAD1E39791000769F14 /* RealtimeIncomingAudioSourceCocoa.h in Headers */,
    2977529792                                4A4F65711AA997F100E38CDD /* RealtimeMediaSource.h in Headers */,
    2977629793                                4A4F65721AA997F100E38CDD /* RealtimeMediaSourceCapabilities.h in Headers */,
     
    2978029797                                07C1C0E51BFB60ED00BD2256 /* RealtimeMediaSourceSupportedConstraints.h in Headers */,
    2978129798                                41103AAC1E39791000769F03 /* RealtimeOutgoingAudioSource.h in Headers */,
     29799                                41103AAC1E39791000769F14 /* RealtimeOutgoingAudioSourceCocoa.h in Headers */,
    2978229800                                91B952241F58A58F00931DC2 /* RecordingSwizzleTypes.h in Headers */,
    2978329801                                BC4368E80C226E32005EFB5F /* Rect.h in Headers */,
     
    3375333771                                FD31603B12B0267600C1A359 /* RealtimeAnalyser.cpp in Sources */,
    3375433772                                41103AAE1E39791000769F03 /* RealtimeIncomingAudioSource.cpp in Sources */,
     33773                                41103AAE1E39791000769F14 /* RealtimeIncomingAudioSourceCocoa.cpp in Sources */,
    3375533774                                5CDD833E1E4324DC00621E92 /* RealtimeIncomingVideoSource.cpp in Sources */,
    3375633775                                5CDD833E1E4324DC00621E83 /* RealtimeIncomingVideoSourceCocoa.cpp in Sources */,
     
    3376133780                                2EC41DE41C0410A300D294FE /* RealtimeMediaSourceSupportedConstraints.cpp in Sources */,
    3376233781                                41103AAB1E39791000769F03 /* RealtimeOutgoingAudioSource.cpp in Sources */,
     33782                                41103AAB1E39791000769F14 /* RealtimeOutgoingAudioSourceCocoa.cpp in Sources */,
    3376333783                                5CDD833D1E4324D900621E92 /* RealtimeOutgoingVideoSource.cpp in Sources */,
    3376433784                                5CDD833D1E4324D900621B83 /* RealtimeOutgoingVideoSourceCocoa.cpp in Sources */,
  • trunk/Source/WebCore/platform/mediastream/RealtimeIncomingAudioSource.cpp

    r223411 r223412  
    1212 *    in the documentation and/or other materials provided with the
    1313 *    distribution.
    14  * 3. Neither the name of Ericsson nor the names of its contributors
     14 * 3. Neither the name of Google Inc. nor the names of its contributors
    1515 *    may be used to endorse or promote products derived from this
    1616 *    software without specific prior written permission.
     
    2929 */
    3030
    31 #pragma once
     31#include "config.h"
     32#include "RealtimeIncomingAudioSource.h"
    3233
    3334#if USE(LIBWEBRTC)
    3435
    35 #include "LibWebRTCMacros.h"
    36 #include "RealtimeMediaSource.h"
    37 #include <CoreAudio/CoreAudioTypes.h>
    38 #include <webrtc/api/mediastreaminterface.h>
    39 #include <wtf/RetainPtr.h>
    40 
    41 typedef const struct opaqueCMFormatDescription *CMFormatDescriptionRef;
     36#include "LibWebRTCAudioFormat.h"
    4237
    4338namespace WebCore {
    4439
    45 class WebAudioSourceProviderAVFObjC;
     40RealtimeIncomingAudioSource::RealtimeIncomingAudioSource(rtc::scoped_refptr<webrtc::AudioTrackInterface>&& audioTrack, String&& audioTrackId)
     41    : RealtimeMediaSource(WTFMove(audioTrackId), RealtimeMediaSource::Type::Audio, String())
     42    , m_audioTrack(WTFMove(audioTrack))
     43{
     44    notifyMutedChange(!m_audioTrack);
     45}
    4646
    47 class RealtimeIncomingAudioSource final : public RealtimeMediaSource, private webrtc::AudioTrackSinkInterface {
    48 public:
    49     static Ref<RealtimeIncomingAudioSource> create(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&, String&&);
     47RealtimeIncomingAudioSource::~RealtimeIncomingAudioSource()
     48{
     49    stop();
     50}
    5051
    51     void setSourceTrack(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&);
     52void RealtimeIncomingAudioSource::startProducingData()
     53{
     54    if (m_audioTrack)
     55        m_audioTrack->AddSink(this);
     56}
    5257
    53 private:
    54     RealtimeIncomingAudioSource(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&, String&&);
    55     ~RealtimeIncomingAudioSource();
     58void RealtimeIncomingAudioSource::stopProducingData()
     59{
     60    if (m_audioTrack)
     61        m_audioTrack->RemoveSink(this);
     62}
    5663
    57     // webrtc::AudioTrackSinkInterface API
    58     void OnData(const void* audioData, int bitsPerSample, int sampleRate, size_t numberOfChannels, size_t numberOfFrames) final;
     64void RealtimeIncomingAudioSource::setSourceTrack(rtc::scoped_refptr<webrtc::AudioTrackInterface>&& track)
     65{
     66    ASSERT(!m_audioTrack);
     67    ASSERT(track);
    5968
    60     // RealtimeMediaSource API
    61     void startProducingData() final;
    62     void stopProducingData()  final;
     69    m_audioTrack = WTFMove(track);
     70    notifyMutedChange(!m_audioTrack);
     71    if (isProducingData())
     72        m_audioTrack->AddSink(this);
     73}
    6374
    64     const RealtimeMediaSourceCapabilities& capabilities() const final;
    65     const RealtimeMediaSourceSettings& settings() const final;
     75const RealtimeMediaSourceCapabilities& RealtimeIncomingAudioSource::capabilities() const
     76{
     77    return RealtimeMediaSourceCapabilities::emptyCapabilities();
     78}
    6679
    67     RealtimeMediaSourceSettings m_currentSettings;
    68     rtc::scoped_refptr<webrtc::AudioTrackInterface> m_audioTrack;
     80const RealtimeMediaSourceSettings& RealtimeIncomingAudioSource::settings() const
     81{
     82    return m_currentSettings;
     83}
    6984
    70     uint64_t m_numberOfFrames { 0 };
    71 };
    72 
    73 } // namespace WebCore
     85}
    7486
    7587#endif // USE(LIBWEBRTC)
  • trunk/Source/WebCore/platform/mediastream/RealtimeIncomingAudioSource.h

    r223411 r223412  
    3535#include "LibWebRTCMacros.h"
    3636#include "RealtimeMediaSource.h"
    37 #include <CoreAudio/CoreAudioTypes.h>
    3837#include <webrtc/api/mediastreaminterface.h>
    3938#include <wtf/RetainPtr.h>
    4039
    41 typedef const struct opaqueCMFormatDescription *CMFormatDescriptionRef;
    42 
    4340namespace WebCore {
    4441
    45 class WebAudioSourceProviderAVFObjC;
    46 
    47 class RealtimeIncomingAudioSource final : public RealtimeMediaSource, private webrtc::AudioTrackSinkInterface {
     42class RealtimeIncomingAudioSource : public RealtimeMediaSource, private webrtc::AudioTrackSinkInterface {
    4843public:
    4944    static Ref<RealtimeIncomingAudioSource> create(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&, String&&);
     
    5146    void setSourceTrack(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&);
    5247
    53 private:
     48protected:
    5449    RealtimeIncomingAudioSource(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&, String&&);
    5550    ~RealtimeIncomingAudioSource();
    5651
     52private:
    5753    // webrtc::AudioTrackSinkInterface API
    58     void OnData(const void* audioData, int bitsPerSample, int sampleRate, size_t numberOfChannels, size_t numberOfFrames) final;
     54    virtual void OnData(const void* /* audioData */, int /* bitsPerSample */, int /* sampleRate */, size_t /* numberOfChannels */, size_t /* numberOfFrames */) { };
    5955
    6056    // RealtimeMediaSource API
     
    6763    RealtimeMediaSourceSettings m_currentSettings;
    6864    rtc::scoped_refptr<webrtc::AudioTrackInterface> m_audioTrack;
    69 
    70     uint64_t m_numberOfFrames { 0 };
    7165};
    7266
  • trunk/Source/WebCore/platform/mediastream/RealtimeOutgoingAudioSource.h

    r223411 r223412  
    2929#pragma once
    3030
     31
    3132#if USE(LIBWEBRTC)
    3233
    33 #include "AudioSampleDataSource.h"
    3434#include "LibWebRTCMacros.h"
    3535#include "MediaStreamTrackPrivate.h"
     
    4545namespace WebCore {
    4646
    47 class RealtimeOutgoingAudioSource final : public ThreadSafeRefCounted<RealtimeOutgoingAudioSource>, public webrtc::AudioSourceInterface, private MediaStreamTrackPrivate::Observer {
     47class RealtimeOutgoingAudioSource : public ThreadSafeRefCounted<RealtimeOutgoingAudioSource>, public webrtc::AudioSourceInterface, private MediaStreamTrackPrivate::Observer {
    4848public:
    49     static Ref<RealtimeOutgoingAudioSource> create(Ref<MediaStreamTrackPrivate>&& audioSource) { return adoptRef(*new RealtimeOutgoingAudioSource(WTFMove(audioSource))); }
     49    static Ref<RealtimeOutgoingAudioSource> create(Ref<MediaStreamTrackPrivate>&& audioSource);
     50
    5051    ~RealtimeOutgoingAudioSource() { stop(); }
    5152
     
    5556    MediaStreamTrackPrivate& source() const { return m_audioSource.get(); }
    5657
    57 private:
     58protected:
    5859    explicit RealtimeOutgoingAudioSource(Ref<MediaStreamTrackPrivate>&&);
    5960
     61    virtual void handleMutedIfNeeded();
     62    virtual void sendSilence() { };
     63    virtual void pullAudioData() { };
     64
     65    Vector<webrtc::AudioTrackSinkInterface*> m_sinks;
     66    bool m_muted { false };
     67    bool m_enabled { true };
     68
     69private:
    6070    virtual void AddSink(webrtc::AudioTrackSinkInterface* sink) { m_sinks.append(sink); }
    6171    virtual void RemoveSink(webrtc::AudioTrackSinkInterface* sink) { m_sinks.removeFirst(sink); }
     
    7080    void sourceMutedChanged();
    7181    void sourceEnabledChanged();
    72     void audioSamplesAvailable(const MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t);
     82    virtual void audioSamplesAvailable(const MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t) { };
    7383
    74     bool isReachingBufferedAudioDataHighLimit();
    75     bool isReachingBufferedAudioDataLowLimit();
    76     bool hasBufferedEngouhData();
     84    virtual bool isReachingBufferedAudioDataHighLimit() { return false; };
     85    virtual bool isReachingBufferedAudioDataLowLimit() { return false; };
     86    virtual bool hasBufferedEnoughData() { return false; };
    7787
    7888    // MediaStreamTrackPrivate::Observer API
    7989    void trackMutedChanged(MediaStreamTrackPrivate&) final { sourceMutedChanged(); }
    8090    void trackEnabledChanged(MediaStreamTrackPrivate&) final { sourceEnabledChanged(); }
    81     void audioSamplesAvailable(MediaStreamTrackPrivate&, const MediaTime& mediaTime, const PlatformAudioData& data, const AudioStreamDescription& description, size_t sampleCount) final { audioSamplesAvailable(mediaTime, data, description, sampleCount); }
     91    void audioSamplesAvailable(MediaStreamTrackPrivate&, const MediaTime& mediaTime, const PlatformAudioData& data, const AudioStreamDescription& description, size_t sampleCount) { audioSamplesAvailable(mediaTime, data, description, sampleCount); }
    8292    void trackEnded(MediaStreamTrackPrivate&) final { }
    8393    void trackSettingsChanged(MediaStreamTrackPrivate&) final { }
    8494
    85     void pullAudioData();
     95    void initializeConverter();
    8696
    87     void initializeConverter();
    88     void handleMutedIfNeeded();
    89     void sendSilence();
     97    Ref<MediaStreamTrackPrivate> m_audioSource;
    9098
    91     Vector<webrtc::AudioTrackSinkInterface*> m_sinks;
    92     Ref<MediaStreamTrackPrivate> m_audioSource;
    93     Ref<AudioSampleDataSource> m_sampleConverter;
    94     CAAudioStreamDescription m_inputStreamDescription;
    95     CAAudioStreamDescription m_outputStreamDescription;
    96 
    97     Vector<uint8_t> m_audioBuffer;
    98     uint64_t m_readCount { 0 };
    99     uint64_t m_writeCount { 0 };
    100     bool m_muted { false };
    101     bool m_enabled { true };
    102     bool m_skippingAudioData { false };
    10399    Timer m_silenceAudioTimer;
    104100};
  • trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp

    r223411 r223412  
    1212 *    in the documentation and/or other materials provided with the
    1313 *    distribution.
    14  * 3. Neither the name of Google Inc. nor the names of its contributors
    15  *    may be used to endorse or promote products derived from this
    16  *    software without specific prior written permission.
    1714 *
    1815 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     
    3027
    3128#include "config.h"
    32 #include "RealtimeIncomingAudioSource.h"
     29#include "RealtimeIncomingAudioSourceCocoa.h"
    3330
    3431#if USE(LIBWEBRTC)
     
    4744Ref<RealtimeIncomingAudioSource> RealtimeIncomingAudioSource::create(rtc::scoped_refptr<webrtc::AudioTrackInterface>&& audioTrack, String&& audioTrackId)
    4845{
    49     auto source = adoptRef(*new RealtimeIncomingAudioSource(WTFMove(audioTrack), WTFMove(audioTrackId)));
     46    auto source = RealtimeIncomingAudioSourceCocoa::create(WTFMove(audioTrack), WTFMove(audioTrackId));
    5047    source->start();
    51     return source;
     48    return WTFMove(source);
    5249}
    5350
    54 RealtimeIncomingAudioSource::RealtimeIncomingAudioSource(rtc::scoped_refptr<webrtc::AudioTrackInterface>&& audioTrack, String&& audioTrackId)
    55     : RealtimeMediaSource(WTFMove(audioTrackId), RealtimeMediaSource::Type::Audio, String())
    56     , m_audioTrack(WTFMove(audioTrack))
     51Ref<RealtimeIncomingAudioSourceCocoa> RealtimeIncomingAudioSourceCocoa::create(rtc::scoped_refptr<webrtc::AudioTrackInterface>&& audioTrack, String&& audioTrackId)
    5752{
    58     notifyMutedChange(!m_audioTrack);
     53    return adoptRef(*new RealtimeIncomingAudioSourceCocoa(WTFMove(audioTrack), WTFMove(audioTrackId)));
    5954}
    6055
    61 RealtimeIncomingAudioSource::~RealtimeIncomingAudioSource()
     56RealtimeIncomingAudioSourceCocoa::RealtimeIncomingAudioSourceCocoa(rtc::scoped_refptr<webrtc::AudioTrackInterface>&& audioTrack, String&& audioTrackId)
     57    : RealtimeIncomingAudioSource(WTFMove(audioTrack), WTFMove(audioTrackId))
    6258{
    63     stop();
    6459}
    65 
    6660
    6761static inline AudioStreamBasicDescription streamDescription(size_t sampleRate, size_t channelCount)
     
    7266}
    7367
    74 void RealtimeIncomingAudioSource::OnData(const void* audioData, int bitsPerSample, int sampleRate, size_t numberOfChannels, size_t numberOfFrames)
     68void RealtimeIncomingAudioSourceCocoa::OnData(const void* audioData, int bitsPerSample, int sampleRate, size_t numberOfChannels, size_t numberOfFrames)
    7569{
    7670    // We may receive OnData calls with empty sound data (mono, samples equal to zero and sampleRate equal to 16000) when starting the call.
     
    10397}
    10498
    105 void RealtimeIncomingAudioSource::startProducingData()
    106 {
    107     if (m_audioTrack)
    108         m_audioTrack->AddSink(this);
    109 }
    110 
    111 void RealtimeIncomingAudioSource::stopProducingData()
    112 {
    113     if (m_audioTrack)
    114         m_audioTrack->RemoveSink(this);
    115 }
    116 
    117 void RealtimeIncomingAudioSource::setSourceTrack(rtc::scoped_refptr<webrtc::AudioTrackInterface>&& track)
    118 {
    119     ASSERT(!m_audioTrack);
    120     ASSERT(track);
    121 
    122     m_audioTrack = WTFMove(track);
    123     notifyMutedChange(!m_audioTrack);
    124     if (isProducingData())
    125         m_audioTrack->AddSink(this);
    126 }
    127 
    128 const RealtimeMediaSourceCapabilities& RealtimeIncomingAudioSource::capabilities() const
    129 {
    130     return RealtimeMediaSourceCapabilities::emptyCapabilities();
    131 }
    132 
    133 const RealtimeMediaSourceSettings& RealtimeIncomingAudioSource::settings() const
    134 {
    135     return m_currentSettings;
    136 }
    137 
    13899}
    139100
  • trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.h

    r223411 r223412  
    1212 *    in the documentation and/or other materials provided with the
    1313 *    distribution.
    14  * 3. Neither the name of Ericsson nor the names of its contributors
    15  *    may be used to endorse or promote products derived from this
    16  *    software without specific prior written permission.
    1714 *
    1815 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     
    3330#if USE(LIBWEBRTC)
    3431
    35 #include "LibWebRTCMacros.h"
    36 #include "RealtimeMediaSource.h"
     32#include "RealtimeIncomingAudioSource.h"
     33
    3734#include <CoreAudio/CoreAudioTypes.h>
    38 #include <webrtc/api/mediastreaminterface.h>
    39 #include <wtf/RetainPtr.h>
    4035
    4136typedef const struct opaqueCMFormatDescription *CMFormatDescriptionRef;
     
    4540class WebAudioSourceProviderAVFObjC;
    4641
    47 class RealtimeIncomingAudioSource final : public RealtimeMediaSource, private webrtc::AudioTrackSinkInterface {
     42class RealtimeIncomingAudioSourceCocoa final : public RealtimeIncomingAudioSource {
    4843public:
    49     static Ref<RealtimeIncomingAudioSource> create(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&, String&&);
    50 
    51     void setSourceTrack(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&);
     44    static Ref<RealtimeIncomingAudioSourceCocoa> create(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&, String&&);
    5245
    5346private:
    54     RealtimeIncomingAudioSource(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&, String&&);
    55     ~RealtimeIncomingAudioSource();
     47    RealtimeIncomingAudioSourceCocoa(rtc::scoped_refptr<webrtc::AudioTrackInterface>&&, String&&);
    5648
    5749    // webrtc::AudioTrackSinkInterface API
    5850    void OnData(const void* audioData, int bitsPerSample, int sampleRate, size_t numberOfChannels, size_t numberOfFrames) final;
    59 
    60     // RealtimeMediaSource API
    61     void startProducingData() final;
    62     void stopProducingData()  final;
    63 
    64     const RealtimeMediaSourceCapabilities& capabilities() const final;
    65     const RealtimeMediaSourceSettings& settings() const final;
    66 
    67     RealtimeMediaSourceSettings m_currentSettings;
    68     rtc::scoped_refptr<webrtc::AudioTrackInterface> m_audioTrack;
    6951
    7052    uint64_t m_numberOfFrames { 0 };
  • trunk/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp

    r223411 r223412  
    1111 *     notice, this list of conditions and the following disclaimer in the
    1212 *     documentation and/or other materials provided with the distribution.
    13  * 3.  Neither the name of Apple Inc. nor the names of
    14  *     its contributors may be used to endorse or promote products derived
    15  *     from this software without specific prior written permission.
    1613 *
    1714 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS "AS IS" AND ANY
     
    2825
    2926#include "config.h"
    30 #include "RealtimeOutgoingAudioSource.h"
     27#include "RealtimeOutgoingAudioSourceCocoa.h"
    3128
    3229#if USE(LIBWEBRTC)
     
    4744}
    4845
    49 RealtimeOutgoingAudioSource::RealtimeOutgoingAudioSource(Ref<MediaStreamTrackPrivate>&& audioSource)
    50     : m_audioSource(WTFMove(audioSource))
     46RealtimeOutgoingAudioSourceCocoa::RealtimeOutgoingAudioSourceCocoa(Ref<MediaStreamTrackPrivate>&& audioSource)
     47    : RealtimeOutgoingAudioSource(WTFMove(audioSource))
    5148    , m_sampleConverter(AudioSampleDataSource::create(LibWebRTCAudioFormat::sampleRate * 2))
    52     , m_silenceAudioTimer(*this, &RealtimeOutgoingAudioSource::sendSilence)
    5349{
    54     m_audioSource->addObserver(*this);
    55     initializeConverter();
    5650}
    5751
    58 bool RealtimeOutgoingAudioSource::setSource(Ref<MediaStreamTrackPrivate>&& newSource)
     52Ref<RealtimeOutgoingAudioSource> RealtimeOutgoingAudioSource::create(Ref<MediaStreamTrackPrivate>&& audioSource)
    5953{
    60     m_audioSource->removeObserver(*this);
    61     m_audioSource = WTFMove(newSource);
    62     m_audioSource->addObserver(*this);
    63 
    64     initializeConverter();
    65     return true;
     54    return RealtimeOutgoingAudioSourceCocoa::create(WTFMove(audioSource));
    6655}
    6756
    68 void RealtimeOutgoingAudioSource::initializeConverter()
    69 {
    70     m_muted = m_audioSource->muted();
    71     m_enabled = m_audioSource->enabled();
    72     handleMutedIfNeeded();
    73 }
    74 
    75 void RealtimeOutgoingAudioSource::stop()
    76 {
    77     m_silenceAudioTimer.stop();
    78     m_audioSource->removeObserver(*this);
    79 }
    80 
    81 void RealtimeOutgoingAudioSource::sourceMutedChanged()
    82 {
    83     m_muted = m_audioSource->muted();
    84     handleMutedIfNeeded();
    85 }
    86 
    87 void RealtimeOutgoingAudioSource::sourceEnabledChanged()
    88 {
    89     m_enabled = m_audioSource->enabled();
    90     handleMutedIfNeeded();
    91 }
    92 
    93 void RealtimeOutgoingAudioSource::handleMutedIfNeeded()
     57void RealtimeOutgoingAudioSourceCocoa::handleMutedIfNeeded()
    9458{
    9559    bool isSilenced = m_muted || !m_enabled;
    9660    m_sampleConverter->setMuted(isSilenced);
    97     if (isSilenced && !m_silenceAudioTimer.isActive())
    98         m_silenceAudioTimer.startRepeating(1_s);
    99     if (!isSilenced && m_silenceAudioTimer.isActive())
    100         m_silenceAudioTimer.stop();
     61
     62    RealtimeOutgoingAudioSource::handleMutedIfNeeded();
    10163}
    10264
    103 void RealtimeOutgoingAudioSource::sendSilence()
     65void RealtimeOutgoingAudioSourceCocoa::sendSilence()
    10466{
    10567    LibWebRTCProvider::callOnWebRTCSignalingThread([this, protectedThis = makeRef(*this)] {
     
    11779}
    11880
    119 bool RealtimeOutgoingAudioSource::isReachingBufferedAudioDataHighLimit()
     81bool RealtimeOutgoingAudioSourceCocoa::isReachingBufferedAudioDataHighLimit()
    12082{
    12183    auto writtenAudioDuration = m_writeCount / m_inputStreamDescription.sampleRate();
     
    12688}
    12789
    128 bool RealtimeOutgoingAudioSource::isReachingBufferedAudioDataLowLimit()
     90bool RealtimeOutgoingAudioSourceCocoa::isReachingBufferedAudioDataLowLimit()
    12991{
    13092    auto writtenAudioDuration = m_writeCount / m_inputStreamDescription.sampleRate();
     
    13597}
    13698
    137 bool RealtimeOutgoingAudioSource::hasBufferedEngouhData()
     99bool RealtimeOutgoingAudioSourceCocoa::hasBufferedEnoughData()
    138100{
    139101    auto writtenAudioDuration = m_writeCount / m_inputStreamDescription.sampleRate();
     
    144106}
    145107
    146 void RealtimeOutgoingAudioSource::audioSamplesAvailable(const MediaTime&, const PlatformAudioData& audioData, const AudioStreamDescription& streamDescription, size_t sampleCount)
     108void RealtimeOutgoingAudioSourceCocoa::audioSamplesAvailable(const MediaTime&, const PlatformAudioData& audioData, const AudioStreamDescription& streamDescription, size_t sampleCount)
    147109{
    148110    if (m_inputStreamDescription != streamDescription) {
     
    171133    m_writeCount += sampleCount;
    172134
    173     if (!hasBufferedEngouhData())
     135    if (!hasBufferedEnoughData())
    174136        return;
    175137
     
    179141}
    180142
    181 void RealtimeOutgoingAudioSource::pullAudioData()
     143void RealtimeOutgoingAudioSourceCocoa::pullAudioData()
    182144{
    183145    // libwebrtc expects 10 ms chunks.
Note: See TracChangeset for help on using the changeset viewer.