Index: chromecast/public/media/cast_audio_output_stream.h |
diff --git a/chromecast/public/media/cast_audio_output_stream.h b/chromecast/public/media/cast_audio_output_stream.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..664ddf822af6fe52992e43978f91911ab99d00c9 |
--- /dev/null |
+++ b/chromecast/public/media/cast_audio_output_stream.h |
@@ -0,0 +1,101 @@ |
+// Copyright 2015 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 CHROMECAST_PUBLIC_CAST_AUDIO_OUTPUT_STREAM_H_ |
+#define CHROMECAST_PUBLIC_CAST_AUDIO_OUTPUT_STREAM_H_ |
+ |
+#include <stdint.h> |
+ |
+namespace chromecast { |
+namespace media { |
+ |
+// A simple struct describing an audio stream. |
+struct AudioParameters { |
+ int sample_rate; // Sampling frequency/rate. |
+ int bits_per_sample; // Number of bits per sample. |
+ int frames_per_buffer; // Number of frames in a buffer. |
+ int channels; // Number of channels. |
+ |
+ static const int kMaxSampleRate = 192000; |
+ static const int kMaxBitsPerSample = 32; |
+ static const int kMaxFramesPerBuffer = kMaxSampleRate; |
+ static const int kMaxChannels = 32; // The maximum number of channels. |
+}; |
+ |
+// This is an interface for a Cast audio output stream. Implementations of this |
+// interface are responsible for making calls to an AudioSourceCallback. |
+class CastAudioOutputStream { |
+ public: |
+ // Audio sources must implement AudioSourceCallback. Calls to this interface |
+ // must be made on the same thread on which the stream object is created. |
+ class AudioSourceCallback { |
+ protected: |
+ virtual ~AudioSourceCallback() {} |
byungchul
2015/07/30 22:12:16
protected should go after public ones.
|
+ |
+ public: |
+ // The CastAudioOutputStream calls this to request more data from the |
+ // source. This method fills |dest| with |frames| frames of interleaved |
+ // data, which takes the following struture for N channels: |
+ // |
+ // [ch0, ch1, ..., chN, ch0, ch1, ..., chN, ...] |
+ // |<---- Frame 0 ---->|<---- Frame 1 ---->|...| |
+ // |
+ // |len| is the size of |dest| in bytes, and must satisfy the following: |
+ // |
+ // |len| >= |frames| * (num channels) * (bytes per sample) |
+ // |
+ // where bytes per sample and channels are properties of the stream. These |
+ // can be detemined through GetParameters(). |total_bytes_delay| contains |
+ // the current number of bytes of delay buffered by the |
+ // CastAudioOutputStream. Returns the number of frames successfully filled. |
+ virtual int GetMoreData(void* dest, |
+ uint32_t len, |
+ int32_t frames, |
+ uint32_t total_bytes_delay) = 0; |
+ |
+ // There was an error while playing a buffer. Audio source cannot be |
+ // destroyed yet. No direct action needed by the AudioStream, but it is |
+ // a good place to stop accumulating sound data since is is likely that |
+ // playback will not continue. |
+ virtual void OnError(CastAudioOutputStream* stream) = 0; |
+ }; |
+ |
+ virtual ~CastAudioOutputStream() {} |
+ |
+ // Returns the parameters describing the stream. |
+ virtual AudioParameters GetParameters() = 0; |
+ |
+ // Open the stream. A call to this method will always be followed by a call to |
+ // Close() even if Open() fails. This method may block the caller's thread. |
+ virtual bool Open() = 0; |
+ |
+ // Starts playing audio and generating AudioSourceCallback::GetMoreData(). |
+ // Since implementor of CastAudioOutputStream may have internal buffers, right |
+ // after calling this method initial buffers are fetched. |
+ // |
+ // The output stream does not take ownership of this callback. |
+ virtual void Start(AudioSourceCallback* callback) = 0; |
+ |
+ // Stops playing audio. Effect might not be instantaneous as the hardware |
+ // might have locked audio data that is processing. |
+ virtual void Stop() = 0; |
+ |
+ // Sets the relative volume, with range [0.0, 1.0] inclusive. |
+ virtual void SetVolume(double volume) = 0; |
+ |
+ // Gets the relative volume, with range [0.0, 1.0] inclusive. This method may |
+ // be . |
+ virtual double GetVolume() = 0; |
+ |
+ // Close the stream. This also generates AudioSourceCallback::OnClose(). |
+ // After calling this method, the object should not be used anymore. Like all |
+ // other methods, this must be made on the same thread on which the stream was |
+ // created. |
+ virtual void Close() = 0; |
+}; |
+ |
+} // namespace media |
+} // namespace chromecast |
+ |
+#endif // CHROMECAST_PUBLIC_CAST_AUDIO_OUTPUT_STREAM_H_ |