Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(228)

Unified Diff: media/audio/restartable_audio_output_device_impl.h

Issue 1666363005: Switching audio clients to using RestartableAudioRendererSink interface as a sink. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/audio/restartable_audio_output_device_impl.h
diff --git a/media/audio/restartable_audio_output_device_impl.h b/media/audio/restartable_audio_output_device_impl.h
new file mode 100644
index 0000000000000000000000000000000000000000..f014553d11aee68c984b343d2a1ffcb25ea897c8
--- /dev/null
+++ b/media/audio/restartable_audio_output_device_impl.h
@@ -0,0 +1,110 @@
+// Copyright (c) 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 MEDIA_AUDIO_RESTARTABLE_AUDIO_OUTPUT_DEVICE_IMPL_H_
+#define MEDIA_AUDIO_RESTARTABLE_AUDIO_OUTPUT_DEVICE_IMPL_H_
+
+#include <string>
+
+#include "base/memory/scoped_ptr.h"
+#include "media/audio/audio_parameters.h"
+#include "media/base/media_export.h"
+#include "media/base/restartable_audio_output_device.h"
+
+// Adapter class to implement RestartableAudioOutputDevice interface on top of
+// AudioOutputDevice. Used by RestartableAudioOutputDeviceFactory to instanciate
+// the interface in cases when audio output should not go through
+// AudioRendererMixer (as opposite to AudioRendererMixerInput implementation of
+// the interface).
+//
+// Behavior differences from AudioOutputDevice:
+// (1) Restartable, i.e. Start() can be called again after Stop().
+// - This is not utilized now, but implemented in order to be aligned with
+// AudioRendererMixerInput, which is a restartable sink.
+// (2) Does not play on start (similar to AudioRendererMixerInput)
+// (3) Play/Pause do not take an effect if Start() has not been called.
+// - Similar to AudioRendererMixerInput.
+//
+// Behaviour differences from AudioRendererMixerInput:
+// (1) SwitchOutputDevice() is not implemented.
+// - Used for media elements playout only, and there is not plan to use
+// RestartableAudioOutputDeviceImpl as a sink for their playout.
+namespace media {
+class AudioOutputDevice;
+
+class MEDIA_EXPORT RestartableAudioOutputDeviceImpl
+ : public RestartableAudioOutputDevice {
+ public:
+ // TODO(olka): If device switching needs to be supported, these callbacks
+ // should receive session_id, device_id and security_origin as parameters.
+ typedef base::Callback<scoped_refptr<AudioOutputDevice>()> GetSinkCB;
+ typedef base::Callback<AudioParameters()> GetHWParamsCB;
+
+ RestartableAudioOutputDeviceImpl(const GetSinkCB& get_sink_cb,
+ const GetHWParamsCB& get_hw_params_cb);
+
+ //----AudioRendererSink implementation.
+ // NOTE: Clients must call Initialize() before starting it for the first time.
+ // Calling Initialize() between Stop() and subsequent Start() is optional,
+ void Initialize(const AudioParameters& params,
+ RenderCallback* callback) override;
+ void Start() override;
+ void Stop() override;
+
+ // Play/Pause take an effect only when the device is already started. This is
+ // to copy AudioRendererMixerInput behavior.
+ void Play() override;
+ void Pause() override;
+
+ bool SetVolume(double volume) override;
+ OutputDevice* GetOutputDevice() override;
+
+ //----OutputDevice implementation.
+ AudioParameters GetOutputParameters() override;
+ OutputDeviceStatus GetDeviceStatus() override;
+
+ protected:
+ // Magic required by ref_counted.h to avoid any code deleting the object
+ // accidentally while there are references to it.
+ friend class base::RefCountedThreadSafe<RestartableAudioOutputDeviceImpl>;
+ ~RestartableAudioOutputDeviceImpl() override;
+
+ private:
+ // kStopped -> kStarted -> kPlaying <-> kPaused
+ // ^ | | |
+ // '-----------+-----------+-----------'
+ enum State { kStopped = 0, kStarted, kPlaying, kPaused };
+
+ // Unsupported OutputDevice implementation
+ void SwitchOutputDevice(const std::string& device_id,
+ const url::Origin& security_origin,
+ const SwitchOutputDeviceCB& callback) override;
+
+ // Internal state.
+ State state_;
+
+ // Output volume.
+ double volume_;
+
+ // Output audio parameters.
+ AudioParameters params_;
+
+ // Source of audio data which is provided to the sink.
+ AudioRendererSink::RenderCallback* render_cb_;
+
+ // Factory callback to create a new sink, provided during construction.
+ const GetSinkCB get_sink_cb_;
+
+ // Callback to access hardware output parameters, provided during
+ // construction.
+ const GetHWParamsCB get_hw_params_cb_;
+
+ scoped_refptr<AudioOutputDevice> sink_;
+
+ DISALLOW_COPY_AND_ASSIGN(RestartableAudioOutputDeviceImpl);
+};
+
+} // namespace media
+
+#endif // MEDIA_AUDIO_RESTARTABLE_AUDIO_OUTPUT_DEVICE_IMPL_H_

Powered by Google App Engine
This is Rietveld 408576698