Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(393)

Unified Diff: chromecast/public/media/cast_audio_output_stream.h

Issue 1105803002: Exposes a shlib interface for media/audio path. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Move cast_audio_output* interfaces to public/media/ Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..cf20fdc24de190b3747eacfd03e32a3a39d4f47b
--- /dev/null
+++ b/chromecast/public/media/cast_audio_output_stream.h
@@ -0,0 +1,100 @@
+// 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 {
+ public:
+ virtual ~AudioSourceCallback() {}
byungchul 2015/07/29 20:18:49 It should be protected since CastAudioOutputStream
slan 2015/07/30 21:00:42 Done.
+
+ // 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 const AudioParameters GetParameters() const = 0;
byungchul 2015/07/29 20:18:49 const function would be too restricted as a shlib
slan 2015/07/30 21:00:42 Done.
+
+ // Open the stream. A call to this method must always be followed by a call to
halliwell 2015/07/29 22:10:14 This comment is written from the POV of us (client
slan 2015/07/30 21:00:42 Done.
+ // 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_

Powered by Google App Engine
This is Rietveld 408576698