Changeset 190115 in webkit


Ignore:
Timestamp:
Sep 22, 2015 7:31:24 AM (9 years ago)
Author:
eric.carlson@apple.com
Message:

[MediaStream Mac] implement WebAudioSourceProvider
https://bugs.webkit.org/show_bug.cgi?id=149419

Reviewed by Darin Adler.

  • Modules/mediastream/MediaStreamTrack.cpp:

(WebCore::MediaStreamTrack::audioSourceProvider): New.

  • Modules/mediastream/MediaStreamTrack.h:
  • Modules/webaudio/AudioContext.cpp:

(WebCore::AudioContext::createMediaStreamSource): Rewrite.

  • Modules/webaudio/MediaStreamAudioDestinationNode.cpp:

(WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): We know the Vector

size, so reserve capacity.

  • Modules/webaudio/MediaStreamAudioSource.cpp:

(WebCore::MediaStreamAudioSource::audioSourceProvider): Add.

  • Modules/webaudio/MediaStreamAudioSource.h:

(WebCore::MediaStreamAudioSource::~MediaStreamAudioSource):
(WebCore::MediaStreamAudioSource::deviceId):
(WebCore::MediaStreamAudioSource::setDeviceId):
(WebCore::MediaStreamAudioSource::useIDForTrackID): Deleted.

  • Modules/webaudio/MediaStreamAudioSourceNode.cpp:

(WebCore::MediaStreamAudioSourceNode::create): Context and track can't be null so take references.
(WebCore::MediaStreamAudioSourceNode::MediaStreamAudioSourceNode): Ditto.
(WebCore::MediaStreamAudioSourceNode::~MediaStreamAudioSourceNode): Clear provider client.
(WebCore::MediaStreamAudioSourceNode::setFormat): Create a resampler when necessary.
(WebCore::MediaStreamAudioSourceNode::process): Process.
(WebCore::MediaStreamAudioSourceNode::reset): Deleted.

  • Modules/webaudio/MediaStreamAudioSourceNode.h:

(WebCore::MediaStreamAudioSourceNode::mediaStream):
(WebCore::MediaStreamAudioSourceNode::audioSourceProvider): Deleted.

  • WebCore.xcodeproj/project.pbxproj: Add WebAudioSourceProviderAVFObjC.cpp/h.
  • platform/mediastream/MediaStreamTrackPrivate.cpp:

(WebCore::MediaStreamTrackPrivate::audioSourceProvider): New, passthrough to source.

  • platform/mediastream/MediaStreamTrackPrivate.h:
  • platform/mediastream/RealtimeMediaSource.h:

(WebCore::RealtimeMediaSource::audioSourceProvider):

  • platform/mediastream/mac/AVAudioCaptureSource.h:
  • platform/mediastream/mac/AVAudioCaptureSource.mm:

(WebCore::AVAudioCaptureSource::audioSourceProvider): New.

  • platform/mediastream/mac/AVCaptureDeviceManager.mm:
  • platform/mediastream/mac/AVMediaCaptureSource.h:
  • platform/mediastream/mac/AVMediaCaptureSource.mm:

(WebCore::AVMediaCaptureSource::audioSourceProvider): Assert, this shouldn't be reachable.

  • platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h: Added.
  • platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: Added.

(WebCore::WebAudioSourceProviderAVFObjC::create):
(WebCore::WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC):
(WebCore::WebAudioSourceProviderAVFObjC::~WebAudioSourceProviderAVFObjC):
(WebCore::WebAudioSourceProviderAVFObjC::startProducingData):
(WebCore::WebAudioSourceProviderAVFObjC::stopProducingData):
(WebCore::WebAudioSourceProviderAVFObjC::provideInput):
(WebCore::WebAudioSourceProviderAVFObjC::setClient):
(WebCore::operator==):
(WebCore::operator!=):
(WebCore::WebAudioSourceProviderAVFObjC::prepare):
(WebCore::WebAudioSourceProviderAVFObjC::unprepare):
(WebCore::WebAudioSourceProviderAVFObjC::process):

Location:
trunk/Source/WebCore
Files:
2 added
19 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r190114 r190115  
     12015-09-22  Eric Carlson  <eric.carlson@apple.com>
     2
     3        [MediaStream Mac] implement WebAudioSourceProvider
     4        https://bugs.webkit.org/show_bug.cgi?id=149419
     5
     6        Reviewed by Darin Adler.
     7
     8        * Modules/mediastream/MediaStreamTrack.cpp:
     9        (WebCore::MediaStreamTrack::audioSourceProvider): New.
     10        * Modules/mediastream/MediaStreamTrack.h:
     11
     12        * Modules/webaudio/AudioContext.cpp:
     13        (WebCore::AudioContext::createMediaStreamSource): Rewrite.
     14
     15        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
     16        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): We know the Vector
     17          size, so reserve capacity.
     18
     19        * Modules/webaudio/MediaStreamAudioSource.cpp:
     20        (WebCore::MediaStreamAudioSource::audioSourceProvider): Add.
     21        * Modules/webaudio/MediaStreamAudioSource.h:
     22        (WebCore::MediaStreamAudioSource::~MediaStreamAudioSource):
     23        (WebCore::MediaStreamAudioSource::deviceId):
     24        (WebCore::MediaStreamAudioSource::setDeviceId):
     25        (WebCore::MediaStreamAudioSource::useIDForTrackID): Deleted.
     26
     27        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
     28        (WebCore::MediaStreamAudioSourceNode::create): Context and track can't be null so take references.
     29        (WebCore::MediaStreamAudioSourceNode::MediaStreamAudioSourceNode): Ditto.
     30        (WebCore::MediaStreamAudioSourceNode::~MediaStreamAudioSourceNode): Clear provider client.
     31        (WebCore::MediaStreamAudioSourceNode::setFormat): Create a resampler when necessary.
     32        (WebCore::MediaStreamAudioSourceNode::process): Process.
     33        (WebCore::MediaStreamAudioSourceNode::reset): Deleted.
     34        * Modules/webaudio/MediaStreamAudioSourceNode.h:
     35        (WebCore::MediaStreamAudioSourceNode::mediaStream):
     36        (WebCore::MediaStreamAudioSourceNode::audioSourceProvider): Deleted.
     37
     38        * WebCore.xcodeproj/project.pbxproj: Add WebAudioSourceProviderAVFObjC.cpp/h.
     39
     40        * platform/mediastream/MediaStreamTrackPrivate.cpp:
     41        (WebCore::MediaStreamTrackPrivate::audioSourceProvider): New, passthrough to source.
     42        * platform/mediastream/MediaStreamTrackPrivate.h:
     43        * platform/mediastream/RealtimeMediaSource.h:
     44        (WebCore::RealtimeMediaSource::audioSourceProvider):
     45
     46        * platform/mediastream/mac/AVAudioCaptureSource.h:
     47        * platform/mediastream/mac/AVAudioCaptureSource.mm:
     48        (WebCore::AVAudioCaptureSource::audioSourceProvider): New.
     49        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
     50        * platform/mediastream/mac/AVMediaCaptureSource.h:
     51        * platform/mediastream/mac/AVMediaCaptureSource.mm:
     52        (WebCore::AVMediaCaptureSource::audioSourceProvider): Assert, this shouldn't be reachable.
     53
     54        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h: Added.
     55        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: Added.
     56        (WebCore::WebAudioSourceProviderAVFObjC::create):
     57        (WebCore::WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC):
     58        (WebCore::WebAudioSourceProviderAVFObjC::~WebAudioSourceProviderAVFObjC):
     59        (WebCore::WebAudioSourceProviderAVFObjC::startProducingData):
     60        (WebCore::WebAudioSourceProviderAVFObjC::stopProducingData):
     61        (WebCore::WebAudioSourceProviderAVFObjC::provideInput):
     62        (WebCore::WebAudioSourceProviderAVFObjC::setClient):
     63        (WebCore::operator==):
     64        (WebCore::operator!=):
     65        (WebCore::WebAudioSourceProviderAVFObjC::prepare):
     66        (WebCore::WebAudioSourceProviderAVFObjC::unprepare):
     67        (WebCore::WebAudioSourceProviderAVFObjC::process):
     68
    1692015-09-22  sangdeug.kim  <sangdeug.kim@samsung.com>
    270
  • trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp

    r190072 r190115  
    236236}
    237237
     238AudioSourceProvider* MediaStreamTrack::audioSourceProvider()
     239{
     240    return m_private->audioSourceProvider();
     241}
     242
    238243} // namespace WebCore
    239244
  • trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h

    r190072 r190115  
    8888    MediaStreamTrackPrivate& privateTrack() { return m_private.get(); }
    8989
     90    AudioSourceProvider* audioSourceProvider();
     91
    9092    void addObserver(Observer*);
    9193    void removeObserver(Observer*);
  • trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp

    r187098 r190115  
    456456PassRefPtr<MediaStreamAudioSourceNode> AudioContext::createMediaStreamSource(MediaStream* mediaStream, ExceptionCode& ec)
    457457{
     458    ASSERT(isMainThread());
     459
    458460    ASSERT(mediaStream);
    459461    if (!mediaStream) {
     
    462464    }
    463465
    464     ASSERT(isMainThread());
    465     lazyInitialize();
    466 
    467     AudioSourceProvider* provider = nullptr;
    468 
    469     RefPtr<MediaStreamTrack> audioTrack;
    470 
    471     // FIXME: get a provider for non-local MediaStreams (like from a remote peer).
    472     for (auto& track : mediaStream->getAudioTracks()) {
    473         audioTrack = track;
    474         if (audioTrack->source()->isAudioStreamSource()) {
    475             auto source = static_cast<MediaStreamAudioSource*>(audioTrack->source());
    476             ASSERT(!source->deviceId().isEmpty());
    477             destination()->enableInput(source->deviceId());
    478             provider = destination()->localAudioInputProvider();
     466    auto audioTracks = mediaStream->getAudioTracks();
     467    if (audioTracks.isEmpty()) {
     468        ec = INVALID_STATE_ERR;
     469        return nullptr;
     470    }
     471
     472    MediaStreamTrack* providerTrack = nullptr;
     473    for (auto& track : audioTracks) {
     474        if (track->audioSourceProvider()) {
     475            providerTrack = track.get();
    479476            break;
    480477        }
    481478    }
    482479
    483     RefPtr<MediaStreamAudioSourceNode> node = MediaStreamAudioSourceNode::create(this, mediaStream, audioTrack.get(), provider);
    484 
    485     // FIXME: Only stereo streams are supported right now. We should be able to accept multi-channel streams.
     480    if (!providerTrack) {
     481        ec = INVALID_STATE_ERR;
     482        return nullptr;
     483    }
     484
     485    lazyInitialize();
     486
     487    auto node = MediaStreamAudioSourceNode::create(*this, *mediaStream, *providerTrack);
    486488    node->setFormat(2, sampleRate());
    487489
    488     refNode(node.get()); // context keeps reference until node is disconnected
    489     return node;
     490    refNode(&node.get()); // context keeps reference until node is disconnected
     491    return &node.get();
    490492}
    491493
  • trunk/Source/WebCore/Modules/webaudio/AudioDestinationNode.cpp

    r183424 r190115  
    5454}
    5555
    56 void AudioDestinationNode::render(AudioBus* sourceBus, AudioBus* destinationBus, size_t numberOfFrames)
     56void AudioDestinationNode::render(AudioBus*, AudioBus* destinationBus, size_t numberOfFrames)
    5757{
    5858    // We don't want denormals slowing down any of the audio processing
     
    7171    // Let the context take care of any business at the start of each render quantum.
    7272    context()->handlePreRenderTasks();
    73 
    74     // Prepare the local audio input provider for this render quantum.
    75     if (sourceBus)
    76         m_localAudioInputProvider.set(sourceBus);
    7773
    7874    // This will cause the node(s) connected to us to process, which in turn will pull on their input(s),
  • trunk/Source/WebCore/Modules/webaudio/AudioDestinationNode.h

    r182141 r190115  
    6363    virtual void close(std::function<void()>) { }
    6464
    65     AudioSourceProvider* localAudioInputProvider() { return &m_localAudioInputProvider; }
    66 
    6765    virtual bool isPlaying() { return false; }
    6866    virtual void isPlayingDidChange() override;
     
    7169
    7270protected:
    73     // LocalAudioInputProvider allows us to expose an AudioSourceProvider for local/live audio input.
    74     // If there is local/live audio input, we call set() with the audio input data every render quantum.
    75     class LocalAudioInputProvider : public AudioSourceProvider {
    76     public:
    77         LocalAudioInputProvider()
    78             : m_sourceBus(AudioBus::create(2, AudioNode::ProcessingSizeInFrames)) // FIXME: handle non-stereo local input.
    79         {
    80         }
    81 
    82         void set(AudioBus* bus)
    83         {
    84             if (bus)
    85                 m_sourceBus->copyFrom(*bus);
    86         }
    87 
    88         // AudioSourceProvider.
    89         virtual void provideInput(AudioBus* destinationBus, size_t numberOfFrames) override
    90         {
    91             bool isGood = destinationBus && destinationBus->length() == numberOfFrames && m_sourceBus->length() == numberOfFrames;
    92             ASSERT(isGood);
    93             if (isGood)
    94                 destinationBus->copyFrom(*m_sourceBus);
    95         }
    96 
    97     private:
    98         RefPtr<AudioBus> m_sourceBus;
    99     };
    100 
    10171    virtual double tailTime() const override { return 0; }
    10272    virtual double latencyTime() const override { return 0; }
     
    10878    size_t m_currentSampleFrame;
    10979
    110     LocalAudioInputProvider m_localAudioInputProvider;
    11180    bool m_isSilent;
    11281    bool m_isEffectivelyPlayingAudio;
  • trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp

    r184940 r190115  
    5050
    5151    m_source = MediaStreamAudioSource::create();
    52     Vector<RefPtr<RealtimeMediaSource>> audioSources;
    53     audioSources.append(m_source);
    54     m_stream = MediaStream::create(*context->scriptExecutionContext(), MediaStreamPrivate::create(audioSources, Vector<RefPtr<RealtimeMediaSource>>()));
     52    Vector<RefPtr<RealtimeMediaSource>> audioSources(1, m_source);
     53    m_stream = MediaStream::create(*context->scriptExecutionContext(), MediaStreamPrivate::create(WTF::move(audioSources), Vector<RefPtr<RealtimeMediaSource>>()));
    5554
    5655    m_source->setAudioFormat(numberOfChannels, context->sampleRate());
  • trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.cpp

    r188594 r190115  
    2525
    2626#include "config.h"
     27#include "MediaStreamAudioSource.h"
    2728
    2829#if ENABLE(MEDIA_STREAM)
    2930
    30 #include "MediaStreamAudioSource.h"
    31 
     31#include "AudioSourceProvider.h"
    3232#include "NotImplemented.h"
    3333#include "UUID.h"
     
    5959    notImplemented();
    6060    return m_currentStates;
    61    
     61}
     62
     63AudioSourceProvider* MediaStreamAudioSource::audioSourceProvider()
     64{
     65    // FIXME: implement this.
     66    notImplemented();
     67    return nullptr;
    6268}
    6369
  • trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.h

    r188594 r190115  
    4848    ~MediaStreamAudioSource() { }
    4949
    50     virtual bool useIDForTrackID() const { return true; }
    51 
    52     virtual RefPtr<RealtimeMediaSourceCapabilities> capabilities() const;
    53     virtual const RealtimeMediaSourceStates& states();
     50    RefPtr<RealtimeMediaSourceCapabilities> capabilities() const override;
     51    const RealtimeMediaSourceStates& states() override;
    5452   
    5553    const String& deviceId() const { return m_deviceId; }
     
    6664    MediaStreamAudioSource();
    6765
     66    AudioSourceProvider* audioSourceProvider() override;
     67
    6868    String m_deviceId;
    6969    Lock m_audioConsumersLock;
  • trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSourceNode.cpp

    r188642 r190115  
    3636namespace WebCore {
    3737
    38 Ref<MediaStreamAudioSourceNode> MediaStreamAudioSourceNode::create(AudioContext* context, MediaStream* mediaStream, MediaStreamTrack* audioTrack, AudioSourceProvider* audioSourceProvider)
     38Ref<MediaStreamAudioSourceNode> MediaStreamAudioSourceNode::create(AudioContext& context, MediaStream& mediaStream, MediaStreamTrack& audioTrack)
    3939{
    40     return adoptRef(*new MediaStreamAudioSourceNode(context, mediaStream, audioTrack, audioSourceProvider));
     40    return adoptRef(*new MediaStreamAudioSourceNode(context, mediaStream, audioTrack));
    4141}
    4242
    43 MediaStreamAudioSourceNode::MediaStreamAudioSourceNode(AudioContext* context, MediaStream* mediaStream, MediaStreamTrack* audioTrack, AudioSourceProvider* audioSourceProvider)
    44     : AudioNode(context, context->sampleRate())
     43MediaStreamAudioSourceNode::MediaStreamAudioSourceNode(AudioContext& context, MediaStream& mediaStream, MediaStreamTrack& audioTrack)
     44    : AudioNode(&context, context.sampleRate())
    4545    , m_mediaStream(mediaStream)
    4646    , m_audioTrack(audioTrack)
    47     , m_audioSourceProvider(audioSourceProvider)
    48     , m_sourceNumberOfChannels(0)
    4947{
     48    AudioSourceProvider* audioSourceProvider = m_audioTrack->audioSourceProvider();
     49    ASSERT(audioSourceProvider);
     50
     51    audioSourceProvider->setClient(this);
     52   
    5053    // Default to stereo. This could change depending on the format of the MediaStream's audio track.
    5154    addOutput(std::make_unique<AudioNodeOutput>(this, 2));
     
    5861MediaStreamAudioSourceNode::~MediaStreamAudioSourceNode()
    5962{
     63    AudioSourceProvider* audioSourceProvider = m_audioTrack->audioSourceProvider();
     64    ASSERT(audioSourceProvider);
     65    audioSourceProvider->setClient(nullptr);
    6066    uninitialize();
    6167}
     
    6369void MediaStreamAudioSourceNode::setFormat(size_t numberOfChannels, float sourceSampleRate)
    6470{
    65     if (numberOfChannels != m_sourceNumberOfChannels || sourceSampleRate != sampleRate()) {
     71    float sampleRate = this->sampleRate();
     72    if (numberOfChannels != m_sourceNumberOfChannels || sourceSampleRate != sampleRate) {
    6673        // The sample-rate must be equal to the context's sample-rate.
    67         if (!numberOfChannels || numberOfChannels > AudioContext::maxNumberOfChannels() || sourceSampleRate != sampleRate()) {
     74        if (!numberOfChannels || numberOfChannels > AudioContext::maxNumberOfChannels() || sourceSampleRate != sampleRate) {
    6875            // process() will generate silence for these uninitialized values.
    6976            LOG(Media, "MediaStreamAudioSourceNode::setFormat(%u, %f) - unhandled format change", static_cast<unsigned>(numberOfChannels), sourceSampleRate);
     
    7481        // Synchronize with process().
    7582        std::lock_guard<Lock> lock(m_processMutex);
     83
     84        m_sourceNumberOfChannels = numberOfChannels;
     85        m_sourceSampleRate = sourceSampleRate;
     86
     87        if (sourceSampleRate == sampleRate)
     88            m_multiChannelResampler = nullptr;
     89        else {
     90            double scaleFactor = sourceSampleRate / sampleRate;
     91            m_multiChannelResampler = std::make_unique<MultiChannelResampler>(scaleFactor, numberOfChannels);
     92        }
    7693
    7794        m_sourceNumberOfChannels = numberOfChannels;
     
    90107{
    91108    AudioBus* outputBus = output(0)->bus();
     109    AudioSourceProvider* provider = m_audioTrack->audioSourceProvider();
    92110
    93     if (!audioSourceProvider()) {
    94         outputBus->zero();
    95         return;
    96     }
    97 
    98     if (!mediaStream() || m_sourceNumberOfChannels != outputBus->numberOfChannels()) {
     111    if (!mediaStream() || !m_sourceNumberOfChannels || !m_sourceSampleRate || !provider) {
    99112        outputBus->zero();
    100113        return;
     
    111124    }
    112125
    113     audioSourceProvider()->provideInput(outputBus, numberOfFrames);
    114 }
    115 
    116 void MediaStreamAudioSourceNode::reset()
    117 {
     126    if (m_multiChannelResampler.get()) {
     127        ASSERT(m_sourceSampleRate != sampleRate());
     128        m_multiChannelResampler->process(provider, outputBus, numberOfFrames);
     129    } else {
     130        // Bypass the resampler completely if the source is at the context's sample-rate.
     131        ASSERT(m_sourceSampleRate == sampleRate());
     132        provider->provideInput(outputBus, numberOfFrames);
     133    }
    118134}
    119135
  • trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSourceNode.h

    r188642 r190115  
    3232#include "AudioSourceProviderClient.h"
    3333#include "MediaStream.h"
     34#include "MultiChannelResampler.h"
    3435#include <wtf/Lock.h>
    35 #include <wtf/PassRefPtr.h>
     36#include <wtf/RefPtr.h>
    3637
    3738namespace WebCore {
    3839
    3940class AudioContext;
     41class MultiChannelResampler;
    4042
    4143class MediaStreamAudioSourceNode : public AudioNode, public AudioSourceProviderClient {
    4244public:
    43     static Ref<MediaStreamAudioSourceNode> create(AudioContext*, MediaStream*, MediaStreamTrack*, AudioSourceProvider*);
     45    static Ref<MediaStreamAudioSourceNode> create(AudioContext&, MediaStream&, MediaStreamTrack&);
    4446
    4547    virtual ~MediaStreamAudioSourceNode();
    4648
    47     MediaStream* mediaStream() { return m_mediaStream.get(); }
     49    MediaStream* mediaStream() { return &m_mediaStream.get(); }
    4850
    4951    // AudioNode
    50     virtual void process(size_t framesToProcess) override;
    51     virtual void reset() override;
     52    void process(size_t framesToProcess) override;
     53    void reset() override { }
    5254
    5355    // AudioSourceProviderClient
    54     virtual void setFormat(size_t numberOfChannels, float sampleRate) override;
    55 
    56     AudioSourceProvider* audioSourceProvider() const { return m_audioSourceProvider; }
     56    void setFormat(size_t numberOfChannels, float sampleRate) override;
    5757
    5858private:
    59     MediaStreamAudioSourceNode(AudioContext*, MediaStream*, MediaStreamTrack*, AudioSourceProvider*);
     59    MediaStreamAudioSourceNode(AudioContext&, MediaStream&, MediaStreamTrack&);
    6060
    61     virtual double tailTime() const override { return 0; }
    62     virtual double latencyTime() const override { return 0; }
     61    double tailTime() const override { return 0; }
     62    double latencyTime() const override { return 0; }
    6363
    6464    // As an audio source, we will never propagate silence.
    65     virtual bool propagatesSilence() const override { return false; }
     65    bool propagatesSilence() const override { return false; }
    6666
    67     RefPtr<MediaStream> m_mediaStream;
    68     RefPtr<MediaStreamTrack> m_audioTrack;
    69     AudioSourceProvider* m_audioSourceProvider;
     67    Ref<MediaStream> m_mediaStream;
     68    Ref<MediaStreamTrack> m_audioTrack;
     69    std::unique_ptr<MultiChannelResampler> m_multiChannelResampler;
    7070
    7171    Lock m_processMutex;
    7272
    73     unsigned m_sourceNumberOfChannels;
     73    unsigned m_sourceNumberOfChannels { 0 };
     74    double m_sourceSampleRate { 0 };
    7475};
    7576
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r190106 r190115  
    341341                07CE77D516712A6A00C55A47 /* InbandTextTrackPrivateClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 07CE77D416712A6A00C55A47 /* InbandTextTrackPrivateClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
    342342                07D07B141834158800ABDD3C /* JSRTCSessionDescriptionCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07D07B131834158800ABDD3C /* JSRTCSessionDescriptionCustom.cpp */; };
     343                07D637401BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = 07D6373E1BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.h */; };
     344                07D637411BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07D6373F1BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.mm */; };
    343345                07DC5FD417D3EEE90099F890 /* JSRTCStatsResponseCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07DC5FD317D3EEE90099F890 /* JSRTCStatsResponseCustom.cpp */; };
    344346                07E116B11489C9A100EC5ACE /* JSTextTrackCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07E116B01489C9A100EC5ACE /* JSTextTrackCustom.cpp */; };
     
    66956697                FD31608712B026F700C1A359 /* AudioResamplerKernel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FD31605112B026F700C1A359 /* AudioResamplerKernel.cpp */; };
    66966698                FD31608812B026F700C1A359 /* AudioResamplerKernel.h in Headers */ = {isa = PBXBuildFile; fileRef = FD31605212B026F700C1A359 /* AudioResamplerKernel.h */; };
    6697                 FD31608912B026F700C1A359 /* AudioSourceProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = FD31605312B026F700C1A359 /* AudioSourceProvider.h */; };
     6699                FD31608912B026F700C1A359 /* AudioSourceProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = FD31605312B026F700C1A359 /* AudioSourceProvider.h */; settings = {ATTRIBUTES = (Private, ); }; };
    66986700                FD31608A12B026F700C1A359 /* AudioUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FD31605412B026F700C1A359 /* AudioUtilities.cpp */; };
    66996701                FD31608B12B026F700C1A359 /* AudioUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = FD31605512B026F700C1A359 /* AudioUtilities.h */; };
     
    74937495                07CE77D416712A6A00C55A47 /* InbandTextTrackPrivateClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InbandTextTrackPrivateClient.h; sourceTree = "<group>"; };
    74947496                07D07B131834158800ABDD3C /* JSRTCSessionDescriptionCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSRTCSessionDescriptionCustom.cpp; sourceTree = "<group>"; };
     7497                07D6373E1BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebAudioSourceProviderAVFObjC.h; sourceTree = "<group>"; };
     7498                07D6373F1BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebAudioSourceProviderAVFObjC.mm; sourceTree = "<group>"; };
    74957499                07DC5FD317D3EEE90099F890 /* JSRTCStatsResponseCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSRTCStatsResponseCustom.cpp; sourceTree = "<group>"; };
    74967500                07E116B01489C9A100EC5ACE /* JSTextTrackCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTextTrackCustom.cpp; sourceTree = "<group>"; };
     
    1500315007                                4A0FFAA31AAF5EF60062803B /* RealtimeMediaSourceCenterMac.cpp */,
    1500415008                                4A0FFAA41AAF5EF60062803B /* RealtimeMediaSourceCenterMac.h */,
     15009                                07D6373E1BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.h */,
     15010                                07D6373F1BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.mm */,
    1500515011                        );
    1500615012                        path = mac;
     
    2659226598                                BCEA4880097D93020094C9E4 /* RenderObject.h in Headers */,
    2659326599                                BCFA930810333193007B25D1 /* RenderOverflow.h in Headers */,
     26600                                07D637401BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.h in Headers */,
    2659426601                                A43BF59D1149292800C643CA /* RenderProgress.h in Headers */,
    2659526602                                B5B65874186FDE4C009C26E8 /* RenderPtr.h in Headers */,
     
    3039430401                                A78FE13B12366B1000ACE8D0 /* SpellChecker.cpp in Sources */,
    3039530402                                B8DBDB4D130B0F8A00F5CDB1 /* SpellingCorrectionCommand.cpp in Sources */,
     30403                                07D637411BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.mm in Sources */,
    3039630404                                5103C2B11BA22D1A00E26337 /* LegacyAny.cpp in Sources */,
    3039730405                                4512502215DCE37D002F84E2 /* SpinButtonElement.cpp in Sources */,
  • trunk/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp

    r190072 r190115  
    151151}
    152152
     153AudioSourceProvider* MediaStreamTrackPrivate::audioSourceProvider()
     154{
     155    return m_source->audioSourceProvider();
     156}
     157
    153158void MediaStreamTrackPrivate::sourceStopped()
    154159{
  • trunk/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h

    r190072 r190115  
    8989    void applyConstraints(const MediaConstraints&);
    9090
     91    AudioSourceProvider* audioSourceProvider();
     92
    9193private:
    9294    explicit MediaStreamTrackPrivate(const MediaStreamTrackPrivate&);
  • trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h

    r190072 r190115  
    3737#if ENABLE(MEDIA_STREAM)
    3838
     39#include "AudioSourceProvider.h"
    3940#include "MediaConstraints.h"
    4041#include "RealtimeMediaSourceCapabilities.h"
     
    108109    void reset();
    109110
     111    virtual AudioSourceProvider* audioSourceProvider() { return nullptr; }
     112   
    110113protected:
    111114    RealtimeMediaSource(const String& id, Type, const String& name);
  • trunk/Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.h

    r189913 r190115  
    3737namespace WebCore {
    3838
     39class WebAudioSourceProviderAVFObjC;
     40
    3941class AVAudioCaptureSource : public AVMediaCaptureSource {
    4042public:
     
    6264    void setupCaptureSession() override;
    6365    void updateStates() override;
     66    AudioSourceProvider* audioSourceProvider() override;
    6467
    6568    RetainPtr<AVCaptureConnection> m_audioConnection;
    6669
     70    RefPtr<WebAudioSourceProviderAVFObjC> m_audioSourceProvider;
    6771    std::unique_ptr<AudioStreamBasicDescription> m_inputDescription;
    6872    Vector<Observer*> m_observers;
  • trunk/Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.mm

    r189913 r190115  
    3434#import "RealtimeMediaSourceStates.h"
    3535#import "SoftLinking.h"
     36#import "WebAudioSourceProviderAVFObjC.h"
    3637#import <AVFoundation/AVFoundation.h>
    3738#import <CoreAudio/CoreAudioTypes.h>
     
    165166}
    166167
     168AudioSourceProvider* AVAudioCaptureSource::audioSourceProvider()
     169{
     170    if (!m_audioSourceProvider)
     171        m_audioSourceProvider = WebAudioSourceProviderAVFObjC::create(*this);
     172
     173    return m_audioSourceProvider.get();
     174}
     175
    167176} // namespace WebCore
    168177
  • trunk/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.h

    r189913 r190115  
    6464
    6565    const RealtimeMediaSourceStates& states() override;
     66    AudioSourceProvider* audioSourceProvider() override;
    6667
    6768    virtual void setupCaptureSession() = 0;
  • trunk/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm

    r189913 r190115  
    210210}
    211211
     212AudioSourceProvider* AVMediaCaptureSource::audioSourceProvider()
     213{
     214    ASSERT_NOT_REACHED();
     215    return nullptr;
     216}
     217
    212218} // namespace WebCore
    213219
Note: See TracChangeset for help on using the changeset viewer.