Replace FINAL and OVERRIDE with their C++11 counterparts in content/renderer
[chromium-blink-merge.git] / content / renderer / pepper / pepper_platform_audio_input.h
blobc1848b83f5c5e11b505a1447e6fc9f4518fbf80b
1 // Copyright (c) 2012 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.
5 #ifndef CONTENT_RENDERER_PEPPER_PEPPER_PLATFORM_AUDIO_INPUT_H_
6 #define CONTENT_RENDERER_PEPPER_PEPPER_PLATFORM_AUDIO_INPUT_H_
8 #include <string>
10 #include "base/basictypes.h"
11 #include "base/compiler_specific.h"
12 #include "base/memory/ref_counted.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/memory/weak_ptr.h"
15 #include "media/audio/audio_input_ipc.h"
16 #include "media/audio/audio_parameters.h"
18 class GURL;
20 namespace base {
21 class MessageLoopProxy;
24 namespace media {
25 class AudioParameters;
28 namespace content {
30 class PepperAudioInputHost;
31 class PepperMediaDeviceManager;
33 // PepperPlatformAudioInput is operated on two threads: the main thread (the
34 // thread on which objects are created) and the I/O thread. All public methods,
35 // except the destructor, must be called on the main thread. The notifications
36 // to the users of this class (i.e. PepperAudioInputHost) are also sent on the
37 // main thread. Internally, this class sends audio input IPC messages and
38 // receives media::AudioInputIPCDelegate notifications on the I/O thread.
40 class PepperPlatformAudioInput
41 : public media::AudioInputIPCDelegate,
42 public base::RefCountedThreadSafe<PepperPlatformAudioInput> {
43 public:
44 // Factory function, returns NULL on failure. StreamCreated() will be called
45 // when the stream is created.
46 static PepperPlatformAudioInput* Create(
47 int render_frame_id,
48 const std::string& device_id,
49 const GURL& document_url,
50 int sample_rate,
51 int frames_per_buffer,
52 PepperAudioInputHost* client);
54 // Called on main thread.
55 void StartCapture();
56 void StopCapture();
57 // Closes the stream. Make sure to call this before the object is destructed.
58 void ShutDown();
60 // media::AudioInputIPCDelegate.
61 virtual void OnStreamCreated(base::SharedMemoryHandle handle,
62 base::SyncSocket::Handle socket_handle,
63 int length,
64 int total_segments) override;
65 virtual void OnVolume(double volume) override;
66 virtual void OnStateChanged(media::AudioInputIPCDelegate::State state)
67 override;
68 virtual void OnIPCClosed() override;
70 protected:
71 virtual ~PepperPlatformAudioInput();
73 private:
74 friend class base::RefCountedThreadSafe<PepperPlatformAudioInput>;
76 PepperPlatformAudioInput();
78 bool Initialize(int render_frame_id,
79 const std::string& device_id,
80 const GURL& document_url,
81 int sample_rate,
82 int frames_per_buffer,
83 PepperAudioInputHost* client);
85 // I/O thread backends to above functions.
86 void InitializeOnIOThread(int session_id);
87 void StartCaptureOnIOThread();
88 void StopCaptureOnIOThread();
89 void ShutDownOnIOThread();
91 void OnDeviceOpened(int request_id, bool succeeded, const std::string& label);
92 void CloseDevice();
93 void NotifyStreamCreationFailed();
95 // Can return NULL if the RenderFrame referenced by |render_frame_id_| has
96 // gone away.
97 PepperMediaDeviceManager* GetMediaDeviceManager();
99 // The client to notify when the stream is created. THIS MUST ONLY BE
100 // ACCESSED ON THE MAIN THREAD.
101 PepperAudioInputHost* client_;
103 // Used to send/receive IPC. THIS MUST ONLY BE ACCESSED ON THE
104 // I/O THREAD.
105 scoped_ptr<media::AudioInputIPC> ipc_;
107 scoped_refptr<base::MessageLoopProxy> main_message_loop_proxy_;
108 scoped_refptr<base::MessageLoopProxy> io_message_loop_proxy_;
110 // The frame containing the Pepper widget.
111 int render_frame_id_;
113 // The unique ID to identify the opened device. THIS MUST ONLY BE ACCESSED ON
114 // THE MAIN THREAD.
115 std::string label_;
117 // Initialized on the main thread and accessed on the I/O thread afterwards.
118 media::AudioParameters params_;
120 // Whether we have tried to create an audio stream. THIS MUST ONLY BE ACCESSED
121 // ON THE I/O THREAD.
122 bool create_stream_sent_;
124 // Whether we have a pending request to open a device. We have to make sure
125 // there isn't any pending request before this object goes away.
126 // THIS MUST ONLY BE ACCESSED ON THE MAIN THREAD.
127 bool pending_open_device_;
128 // THIS MUST ONLY BE ACCESSED ON THE MAIN THREAD.
129 int pending_open_device_id_;
131 DISALLOW_COPY_AND_ASSIGN(PepperPlatformAudioInput);
134 } // namespace content
136 #endif // CONTENT_RENDERER_PEPPER_PEPPER_PLATFORM_AUDIO_INPUT_H_