| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Ericsson AB. All rights reserved. | 2 * Copyright (C) 2011 Ericsson AB. All rights reserved. |
| 3 * Copyright (C) 2013 Google Inc. All rights reserved. | 3 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
| 7 * met: | 7 * met: |
| 8 * | 8 * |
| 9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 | 33 |
| 34 #include "platform/mediastream/MediaStreamComponent.h" | 34 #include "platform/mediastream/MediaStreamComponent.h" |
| 35 | 35 |
| 36 #include "platform/UUID.h" | 36 #include "platform/UUID.h" |
| 37 #include "platform/audio/AudioBus.h" | 37 #include "platform/audio/AudioBus.h" |
| 38 #include "platform/mediastream/MediaStreamSource.h" | 38 #include "platform/mediastream/MediaStreamSource.h" |
| 39 #include "public/platform/WebAudioSourceProvider.h" | 39 #include "public/platform/WebAudioSourceProvider.h" |
| 40 | 40 |
| 41 namespace blink { | 41 namespace blink { |
| 42 | 42 |
| 43 MediaStreamComponent* MediaStreamComponent::create(MediaStreamSource* source) | 43 PassRefPtr<MediaStreamComponent> MediaStreamComponent::create(PassRefPtr<MediaSt
reamSource> source) |
| 44 { | 44 { |
| 45 return new MediaStreamComponent(createCanonicalUUIDString(), source); | 45 return adoptRef(new MediaStreamComponent(createCanonicalUUIDString(), source
)); |
| 46 } | 46 } |
| 47 | 47 |
| 48 MediaStreamComponent* MediaStreamComponent::create(const String& id, MediaStream
Source* source) | 48 PassRefPtr<MediaStreamComponent> MediaStreamComponent::create(const String& id,
PassRefPtr<MediaStreamSource> source) |
| 49 { | 49 { |
| 50 return new MediaStreamComponent(id, source); | 50 return adoptRef(new MediaStreamComponent(id, source)); |
| 51 } | 51 } |
| 52 | 52 |
| 53 // The disposer pattern actually makes the deletion of the extra data happen | 53 MediaStreamComponent::MediaStreamComponent(const String& id, PassRefPtr<MediaStr
eamSource> source) |
| 54 // earlier and not later. The disposer makes sure that the extra data is | |
| 55 // destructed in weak processing which is run before sweeping and therefore | |
| 56 // all the objects are still alive and can be touched. | |
| 57 // | |
| 58 // FIXME: Oilpan: This disposer pattern is duplicated in a lot of places. | |
| 59 // We should create a good abstraction class for this and remove the code duplic
ation. | |
| 60 class MediaStreamComponentDisposer { | |
| 61 public: | |
| 62 explicit MediaStreamComponentDisposer(MediaStreamComponent& component) : m_c
omponent(component) { } | |
| 63 ~MediaStreamComponentDisposer() | |
| 64 { | |
| 65 m_component.dispose(); | |
| 66 } | |
| 67 | |
| 68 private: | |
| 69 MediaStreamComponent& m_component; | |
| 70 }; | |
| 71 | |
| 72 typedef HeapHashMap<WeakMember<MediaStreamComponent>, OwnPtr<MediaStreamComponen
tDisposer> > ComponentDisposers; | |
| 73 | |
| 74 static ComponentDisposers& componentDisposers() | |
| 75 { | |
| 76 DEFINE_STATIC_LOCAL(Persistent<ComponentDisposers>, disposers, (new Componen
tDisposers)); | |
| 77 return *disposers; | |
| 78 } | |
| 79 | |
| 80 MediaStreamComponent::MediaStreamComponent(const String& id, MediaStreamSource*
source) | |
| 81 : m_source(source) | 54 : m_source(source) |
| 82 , m_id(id) | 55 , m_id(id) |
| 83 , m_enabled(true) | 56 , m_enabled(true) |
| 84 , m_muted(false) | 57 , m_muted(false) |
| 85 { | 58 { |
| 86 ASSERT(m_id.length()); | 59 ASSERT(m_id.length()); |
| 87 componentDisposers().add(this, adoptPtr(new MediaStreamComponentDisposer(*th
is))); | |
| 88 } | |
| 89 | |
| 90 void MediaStreamComponent::dispose() | |
| 91 { | |
| 92 m_extraData = nullptr; | |
| 93 } | 60 } |
| 94 | 61 |
| 95 #if ENABLE(WEB_AUDIO) | 62 #if ENABLE(WEB_AUDIO) |
| 96 void MediaStreamComponent::AudioSourceProviderImpl::wrap(blink::WebAudioSourcePr
ovider* provider) | 63 void MediaStreamComponent::AudioSourceProviderImpl::wrap(blink::WebAudioSourcePr
ovider* provider) |
| 97 { | 64 { |
| 98 MutexLocker locker(m_provideInputLock); | 65 MutexLocker locker(m_provideInputLock); |
| 99 m_webAudioSourceProvider = provider; | 66 m_webAudioSourceProvider = provider; |
| 100 } | 67 } |
| 101 | 68 |
| 102 void MediaStreamComponent::AudioSourceProviderImpl::provideInput(AudioBus* bus,
size_t framesToProcess) | 69 void MediaStreamComponent::AudioSourceProviderImpl::provideInput(AudioBus* bus,
size_t framesToProcess) |
| (...skipping 11 matching lines...) Expand all Loading... |
| 114 // Wrap the AudioBus channel data using WebVector. | 81 // Wrap the AudioBus channel data using WebVector. |
| 115 size_t n = bus->numberOfChannels(); | 82 size_t n = bus->numberOfChannels(); |
| 116 blink::WebVector<float*> webAudioData(n); | 83 blink::WebVector<float*> webAudioData(n); |
| 117 for (size_t i = 0; i < n; ++i) | 84 for (size_t i = 0; i < n; ++i) |
| 118 webAudioData[i] = bus->channel(i)->mutableData(); | 85 webAudioData[i] = bus->channel(i)->mutableData(); |
| 119 | 86 |
| 120 m_webAudioSourceProvider->provideInput(webAudioData, framesToProcess); | 87 m_webAudioSourceProvider->provideInput(webAudioData, framesToProcess); |
| 121 } | 88 } |
| 122 #endif // #if ENABLE(WEB_AUDIO) | 89 #endif // #if ENABLE(WEB_AUDIO) |
| 123 | 90 |
| 124 void MediaStreamComponent::trace(Visitor* visitor) | |
| 125 { | |
| 126 visitor->trace(m_source); | |
| 127 } | |
| 128 | |
| 129 } // namespace blink | 91 } // namespace blink |
| 130 | 92 |
| OLD | NEW |