Chromium Code Reviews| Index: media/audio/pulse/pulse_input.h |
| diff --git a/media/audio/pulse/pulse_input.h b/media/audio/pulse/pulse_input.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..0c6b8be7c87495b23fa62e800c45a227dc635ead |
| --- /dev/null |
| +++ b/media/audio/pulse/pulse_input.h |
| @@ -0,0 +1,87 @@ |
| +// Copyright (c) 2012 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_PULSE_PULSE_INPUT_H_ |
| +#define MEDIA_AUDIO_PULSE_PULSE_INPUT_H_ |
| + |
| +#include <string> |
| + |
| +#include "media/audio/audio_device_name.h" |
| +#include "media/audio/audio_input_stream_impl.h" |
| +#include "media/audio/audio_io.h" |
| +#include "media/audio/audio_parameters.h" |
| + |
| +struct pa_context; |
| +struct pa_source_info; |
| +struct pa_stream; |
| +struct pa_threaded_mainloop; |
| + |
| +namespace media { |
| + |
| +class AudioManagerPulse; |
| +class SeekableBuffer; |
| + |
| +class PulseAudioInputStream : public AudioInputStreamImpl { |
| + public: |
| + PulseAudioInputStream(AudioManagerPulse* audio_manager, |
| + const std::string& device_name, |
| + const AudioParameters& params, |
| + pa_threaded_mainloop* mainloop, |
| + pa_context* context); |
| + |
| + virtual ~PulseAudioInputStream(); |
| + |
| + // Implementation of AudioInputStream. |
| + virtual bool Open() OVERRIDE; |
| + virtual void Start(AudioInputCallback* callback) OVERRIDE; |
| + virtual void Stop() OVERRIDE; |
| + virtual void Close() OVERRIDE; |
| + virtual double GetMaxVolume() OVERRIDE; |
| + virtual void SetVolume(double volume) OVERRIDE; |
| + virtual double GetVolume() OVERRIDE; |
| + |
| + private: |
| + // PulseAudio Callbacks. |
| + static void ReadCallback(pa_stream* handle, size_t length, void* user_data); |
| + static void StreamNotifyCallback(pa_stream* stream, void* user_data); |
| + static void VolumeCallback(pa_context* context, const pa_source_info* info, |
| + int error, void* user_data); |
| + static void StreamSuccessCallback(pa_stream* s, int error, void* user_data); |
| + |
| + // Helper for the ReadCallback. |
| + void ReadData(); |
| + |
| + AudioManagerPulse* audio_manager_; |
| + AudioInputCallback* callback_; |
| + std::string device_name_; |
| + AudioParameters params_; |
| + int channels_; |
| + double volume_; |
| + |
| + // Flag indicating the code should stop reading from the data source or |
| + // writing to the PulseAudio server. This is set because the device has |
| + // entered an unrecoverable error state, or the Stio() has executed. |
|
DaleCurtis
2013/02/20 00:17:38
Stio?
no longer working on chromium
2013/02/20 14:43:38
Oh, the comment is not valid any more, removed.
|
| + bool stream_started_; |
| + |
| + // Holds the data from the OS. |
| + scoped_ptr<media::SeekableBuffer> buffer_; |
| + |
| + // Temporary storage for recorded data. It gets a packet of data from |
| + // |buffer_| and deliver the data to OnData() callback. |
| + scoped_array<uint8> audio_data_buffer_; |
| + |
| + // PulseAudio API structs. |
| + pa_threaded_mainloop* pa_mainloop_; // Weak. |
| + pa_context* pa_context_; // Weak. |
| + pa_stream* handle_; |
| + |
| + // Flag indicating the state of the context has been changed. |
| + bool context_state_changed_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(PulseAudioInputStream); |
| +}; |
| + |
| +} // namespace media |
| + |
| +#endif // MEDIA_AUDIO_PULSE_PULSE_INPUT_H_ |