OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef MEDIA_AUDIO_AUDIO_OUTPUT_STREAM_SINK_H_ | |
6 #define MEDIA_AUDIO_AUDIO_OUTPUT_STREAM_SINK_H_ | |
7 | |
8 #include "base/compiler_specific.h" | |
9 #include "base/single_thread_task_runner.h" | |
10 #include "base/synchronization/lock.h" | |
11 #include "media/audio/audio_io.h" | |
12 #include "media/base/audio_renderer_sink.h" | |
13 #include "media/base/media_export.h" | |
14 | |
15 namespace media { | |
16 | |
17 // Wrapper which exposes the browser side audio interface (AudioOutputStream) as | |
18 // if it were a renderer side audio interface (AudioRendererSink). Note: This | |
19 // will not work for sandboxed renderers. | |
20 // | |
21 // TODO(dalecurtis): Delete this class once we have a proper mojo audio service; | |
22 // tracked by http://crbug.com/425368 | |
23 class MEDIA_EXPORT AudioOutputStreamSink | |
24 : NON_EXPORTED_BASE(public AudioRendererSink), | |
25 public AudioOutputStream::AudioSourceCallback { | |
26 public: | |
27 AudioOutputStreamSink(); | |
28 | |
29 // AudioRendererSink implementation. | |
30 virtual void Initialize(const AudioParameters& params, | |
31 RenderCallback* callback) override; | |
32 virtual void Start() override; | |
33 virtual void Stop() override; | |
34 virtual void Pause() override; | |
35 virtual void Play() override; | |
36 virtual bool SetVolume(double volume) override; | |
xhwang
2014/10/22 16:31:53
s/virtual//
Basically only use one of {virtual, o
DaleCurtis
2014/10/22 21:33:44
Done.
| |
37 | |
38 // AudioSourceCallback implementation. | |
39 virtual int OnMoreData(AudioBus* dest, uint32 total_bytes_delay) override; | |
40 virtual void OnError(AudioOutputStream* stream) override; | |
xhwang
2014/10/22 16:31:53
ditto
DaleCurtis
2014/10/22 21:33:44
Done.
| |
41 | |
42 private: | |
43 virtual ~AudioOutputStreamSink(); | |
44 | |
45 // Helper methods for running AudioManager methods on the audio thread. | |
46 void DoStart(); | |
47 void DoStop(); | |
48 void DoPause(); | |
49 void DoPlay(); | |
50 void DoSetVolume(double volume); | |
51 | |
52 // Clears |active_render_callback_| under lock, synchronously stopping render | |
53 // callbacks from any thread. Must be called before Pause() and Stop() | |
54 // trampoline to their helper methods on the audio thread. | |
55 void ClearCallback(); | |
56 | |
57 // Parameters provided by Initialize(), cached for use on other threads. | |
xhwang
2014/10/22 16:31:53
Can you explain the threading model of this class?
DaleCurtis
2014/10/22 21:33:44
The threading model is explained here: https://cod
xhwang
2014/10/22 21:37:31
I didn't know that. Thanks! Agreed that we don't n
| |
58 AudioParameters params_; | |
59 | |
60 // Since Initialize() is only called once for AudioRenderSinks, save the | |
61 // callback both here and under |active_render_callback_| which will be | |
62 // cleared during Pause() and Stop() to achieve "synchronous" stoppage. | |
63 RenderCallback* render_callback_; | |
64 | |
65 // The task runner for the audio thread. | |
66 const scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner_; | |
67 | |
68 // The actual AudioOutputStream, must only be accessed on the audio thread. | |
69 AudioOutputStream* stream_; | |
70 | |
71 // Lock and callback for forwarding OnMoreData() calls into Render() calls. | |
72 base::Lock callback_lock_; | |
73 RenderCallback* active_render_callback_; | |
74 | |
75 DISALLOW_COPY_AND_ASSIGN(AudioOutputStreamSink); | |
76 }; | |
77 | |
78 } // namepace media | |
79 | |
80 #endif // MEDIA_AUDIO_AUDIO_OUTPUT_STREAM_SINK_H_ | |
OLD | NEW |