Report errors from ChromiumEnv::GetChildren in Posix.
[chromium-blink-merge.git] / media / audio / pulse / pulse_input.h
blob7566eacf10ba297b51798009e91ac59291da1693
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 MEDIA_AUDIO_PULSE_PULSE_INPUT_H_
6 #define MEDIA_AUDIO_PULSE_PULSE_INPUT_H_
8 #include <string>
10 #include "base/threading/thread_checker.h"
11 #include "media/audio/agc_audio_stream.h"
12 #include "media/audio/audio_device_name.h"
13 #include "media/audio/audio_io.h"
14 #include "media/audio/audio_parameters.h"
16 struct pa_context;
17 struct pa_source_info;
18 struct pa_stream;
19 struct pa_threaded_mainloop;
21 namespace media {
23 class AudioManagerPulse;
24 class SeekableBuffer;
26 class PulseAudioInputStream : public AgcAudioStream<AudioInputStream> {
27 public:
28 PulseAudioInputStream(AudioManagerPulse* audio_manager,
29 const std::string& device_name,
30 const AudioParameters& params,
31 pa_threaded_mainloop* mainloop,
32 pa_context* context);
34 virtual ~PulseAudioInputStream();
36 // Implementation of AudioInputStream.
37 virtual bool Open() OVERRIDE;
38 virtual void Start(AudioInputCallback* callback) OVERRIDE;
39 virtual void Stop() OVERRIDE;
40 virtual void Close() OVERRIDE;
41 virtual double GetMaxVolume() OVERRIDE;
42 virtual void SetVolume(double volume) OVERRIDE;
43 virtual double GetVolume() OVERRIDE;
45 private:
46 // PulseAudio Callbacks.
47 static void ReadCallback(pa_stream* handle, size_t length, void* user_data);
48 static void StreamNotifyCallback(pa_stream* stream, void* user_data);
49 static void VolumeCallback(pa_context* context, const pa_source_info* info,
50 int error, void* user_data);
52 // Helper for the ReadCallback.
53 void ReadData();
55 AudioManagerPulse* audio_manager_;
56 AudioInputCallback* callback_;
57 std::string device_name_;
58 AudioParameters params_;
59 int channels_;
60 double volume_;
61 bool stream_started_;
63 // Holds the data from the OS.
64 scoped_ptr<media::SeekableBuffer> buffer_;
66 // Temporary storage for recorded data. It gets a packet of data from
67 // |buffer_| and deliver the data to OnData() callback.
68 scoped_ptr<uint8[]> audio_data_buffer_;
70 // PulseAudio API structs.
71 pa_threaded_mainloop* pa_mainloop_; // Weak.
72 pa_context* pa_context_; // Weak.
73 pa_stream* handle_;
75 // Flag indicating the state of the context has been changed.
76 bool context_state_changed_;
78 base::ThreadChecker thread_checker_;
80 DISALLOW_COPY_AND_ASSIGN(PulseAudioInputStream);
83 } // namespace media
85 #endif // MEDIA_AUDIO_PULSE_PULSE_INPUT_H_