Index: content/renderer/media/media_stream_audio_deliverer.h |
diff --git a/content/renderer/media/media_stream_audio_deliverer.h b/content/renderer/media/media_stream_audio_deliverer.h |
deleted file mode 100644 |
index 80a6a1c419382d8115d40e85d7ef8b9d7af8fc92..0000000000000000000000000000000000000000 |
--- a/content/renderer/media/media_stream_audio_deliverer.h |
+++ /dev/null |
@@ -1,156 +0,0 @@ |
-// Copyright 2016 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_DELIVERER_H_ |
-#define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_DELIVERER_H_ |
- |
-#include <algorithm> |
-#include <vector> |
- |
-#include "base/synchronization/lock.h" |
-#include "base/threading/thread_checker.h" |
-#include "media/base/audio_parameters.h" |
- |
-namespace content { |
- |
-// Template containing functionality common to both MediaStreamAudioSource and |
-// MediaStreamAudioTrack. This is used for managing the connections between |
-// objects through which audio data flows, and doing so in a thread-safe manner. |
-// |
-// The Consumer parameter of the template is the type of the objects to which |
-// audio data is delivered: MediaStreamAudioTrack or MediaStreamAudioSink. It's |
-// assumed the Consumer class defines methods named OnSetFormat() and OnData() |
-// that have the same signature as the ones defined in this template. |
-// MediaStreamAudioDeliverer will always guarantee the Consumer's OnSetFormat() |
-// and OnData() methods are called sequentially. |
-template <typename Consumer> |
-class MediaStreamAudioDeliverer { |
- public: |
- MediaStreamAudioDeliverer() {} |
- ~MediaStreamAudioDeliverer() {} |
- |
- // Returns the current audio parameters. These will be invalid before the |
- // first call to OnSetFormat(). This method is thread-safe. |
- media::AudioParameters GetAudioParameters() const { |
- base::AutoLock auto_lock(params_lock_); |
- return params_; |
- } |
- |
- // Begin delivering audio to |consumer|. The caller must guarantee |consumer| |
- // is not destroyed until after calling RemoveConsumer(consumer). This method |
- // must be called on the main thread. |
- void AddConsumer(Consumer* consumer) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(consumer); |
- base::AutoLock auto_lock(consumers_lock_); |
- DCHECK(std::find(consumers_.begin(), consumers_.end(), consumer) == |
- consumers_.end()); |
- DCHECK(std::find(pending_consumers_.begin(), pending_consumers_.end(), |
- consumer) == pending_consumers_.end()); |
- pending_consumers_.push_back(consumer); |
- } |
- |
- // Stop delivering audio to |consumer|. Returns true if |consumer| was the |
- // last consumer removed, false otherwise. When this method returns, no |
- // further calls will be made to OnSetFormat() or OnData() on any thread. |
- // This method must be called on the main thread. |
- bool RemoveConsumer(Consumer* consumer) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- base::AutoLock auto_lock(consumers_lock_); |
- const bool had_consumers = |
- !consumers_.empty() || !pending_consumers_.empty(); |
- auto it = std::find(consumers_.begin(), consumers_.end(), consumer); |
- if (it != consumers_.end()) { |
- consumers_.erase(it); |
- } else { |
- it = std::find(pending_consumers_.begin(), pending_consumers_.end(), |
- consumer); |
- if (it != pending_consumers_.end()) |
- pending_consumers_.erase(it); |
- } |
- return had_consumers && consumers_.empty() && pending_consumers_.empty(); |
- } |
- |
- // Returns the current list of connected Consumers. This is normally used to |
- // send a notification to all consumers. This method must be called on the |
- // main thread. |
- void GetConsumerList(std::vector<Consumer*>* consumer_list) const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- base::AutoLock auto_lock(consumers_lock_); |
- *consumer_list = consumers_; |
- consumer_list->insert(consumer_list->end(), |
- pending_consumers_.begin(), pending_consumers_.end()); |
- } |
- |
- // Change the format of the audio passed in the next call to OnData(). This |
- // method may be called on any thread but, logically, should only be called |
- // between calls to OnData(). |
- void OnSetFormat(const media::AudioParameters& params) { |
- DCHECK(params.IsValid()); |
- base::AutoLock auto_lock(consumers_lock_); |
- { |
- base::AutoLock auto_params_lock(params_lock_); |
- if (params_.Equals(params)) |
- return; |
- params_ = params; |
- } |
- pending_consumers_.insert(pending_consumers_.end(), |
- consumers_.begin(), consumers_.end()); |
- consumers_.clear(); |
- } |
- |
- // Deliver data to all consumers. This method may be called on any thread. |
- void OnData(const media::AudioBus& audio_bus, |
- base::TimeTicks reference_time) { |
- base::AutoLock auto_lock(consumers_lock_); |
- |
- // Call OnSetFormat() for all pending consumers and move them to the |
- // active-delivery list. |
- if (!pending_consumers_.empty()) { |
- const media::AudioParameters params = GetAudioParameters(); |
- DCHECK(params.IsValid()); |
- for (Consumer* consumer : pending_consumers_) |
- consumer->OnSetFormat(params); |
- consumers_.insert(consumers_.end(), |
- pending_consumers_.begin(), pending_consumers_.end()); |
- pending_consumers_.clear(); |
- } |
- |
- // Deliver the audio data to each consumer. |
- for (Consumer* consumer : consumers_) |
- consumer->OnData(audio_bus, reference_time); |
- } |
- |
- private: |
- // In debug builds, check that all methods that could cause object graph or |
- // data flow changes are being called on the main thread. |
- base::ThreadChecker thread_checker_; |
- |
- // Protects concurrent access to |pending_consumers_| and |consumers_|. |
- mutable base::Lock consumers_lock_; |
- |
- // Any consumers needing a call to OnSetFormat(), to be notified of the |
- // changed audio format, are placed in this list. This includes consumers |
- // added via AddConsumer() that need to have an initial OnSetFormat() call |
- // before audio data is first delivered. Consumers are moved from this list to |
- // |consumers_| on the audio thread. |
- std::vector<Consumer*> pending_consumers_; |
- |
- // Consumers that are up-to-date on the current audio format and are receiving |
- // audio data are placed in this list. |
- std::vector<Consumer*> consumers_; |
- |
- // Protects concurrent access to |params_|. |
- mutable base::Lock params_lock_; |
- |
- // Specifies the current format of the audio passing through this |
- // MediaStreamAudioDeliverer. |
- media::AudioParameters params_; |
- |
- DISALLOW_COPY_AND_ASSIGN(MediaStreamAudioDeliverer); |
-}; |
- |
-} // namespace content |
- |
-#endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_DELIVERER_H_ |