// Copyright 2013 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // Creates an output stream based on the ALSA PCM interface. // // On device write failure, the stream will move itself to an invalid state. // No more data will be pulled from the data source, or written to the device. // All calls to public API functions will either no-op themselves, or return an // error if possible. Specifically, If the stream is in an error state, Open() // will return false, and Start() will call OnError() immediately on the // provided callback. // // If the stream is successfully opened, Close() must be called. After Close // has been called, the object should be regarded as deleted and not touched. // // AlsaPcmOutputStream is a single threaded class that should only be used from // the audio thread. When modifying the code in this class, please read the // threading assumptions at the top of the implementation. #ifndef MEDIA_AUDIO_ALSA_ALSA_OUTPUT_H_ #define MEDIA_AUDIO_ALSA_ALSA_OUTPUT_H_ #include <alsa/asoundlib.h> #include <stdint.h> #include <memory> #include <string> #include "base/compiler_specific.h" #include "base/gtest_prod_util.h" #include "base/memory/raw_ptr.h" #include "base/memory/scoped_refptr.h" #include "base/memory/weak_ptr.h" #include "base/sequence_checker.h" #include "base/task/single_thread_task_runner.h" #include "base/time/tick_clock.h" #include "base/time/time.h" #include "media/audio/audio_io.h" #include "media/base/audio_parameters.h" namespace media { class AlsaWrapper; class AudioManagerBase; class ChannelMixer; class SeekableBuffer; class MEDIA_EXPORT AlsaPcmOutputStream : public AudioOutputStream { … }; MEDIA_EXPORT std::ostream& operator<<(std::ostream& os, AlsaPcmOutputStream::InternalState); } // namespace media #endif // MEDIA_AUDIO_ALSA_ALSA_OUTPUT_H_