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

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: Comment out streaming test until the default implementation is improved. 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
« no previous file with comments | « chromecast/public/media/cast_audio_output_device.h ('k') | chromecast/public/task_runner.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « chromecast/public/media/cast_audio_output_device.h ('k') | chromecast/public/task_runner.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698