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 |