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

Unified Diff: chromecast/public/cast_audio_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: Created 5 years, 8 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/cast_audio_stream.h
diff --git a/chromecast/public/cast_audio_stream.h b/chromecast/public/cast_audio_stream.h
new file mode 100644
index 0000000000000000000000000000000000000000..98b9f1dc614b2e5c8121bb072ff3ff13f5267891
--- /dev/null
+++ b/chromecast/public/cast_audio_stream.h
@@ -0,0 +1,93 @@
+// 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_STREAM_H_
+#define CHROMECAST_PUBLIC_CAST_AUDIO_STREAM_H_
+
+#include <stdint.h>
+#include "chromecast_export.h"
+
+namespace chromecast {
+
+// A simple struct descibing an audio stream, modeled after
+// media::AudioParmameters.
+// TODO(slan): Add to these as needed.
+struct CHROMECAST_EXPORT 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.
+};
+
+// TODO(slan): This class borrows heavily (er-hem... very heavily) from
+// media::AudioOutputStream. This will be reduced/inflated as needed as
+// dependencies on media/ are broken within externally-facing chromecast
+// interfaces.
+class CHROMECAST_EXPORT AudioOutputStream {
+ public:
+ // Audio sources must implement AudioSourceCallback. This interface will be
+ // called in a random thread which very likely is a high priority thread. Do
+ // not rely on using this thread TLS or make calls that alter the thread
+ // itself such as creating Windows or initializing COM.
+ class AudioSourceCallback {
+ public:
+ virtual ~AudioSourceCallback() {}
+
+ // The AudioOutputStream calls this to request more data from the source.
+ // This fills |dest| with |frames| frames of interleaved data. |len| is
+ // the size of |dest| in bytes, and must satisfy the following condition:
+ //
+ // |len| >= |frames| * (num channels) * (bits per sample) / 8
+ //
+ // where bits per sample and channels are properties of the stream.
+ // |total_bytes_delay| contains current number of bytes of delay buffered
+ // by the AudioOutputStream. Returns the number of frames successfully
+ // filled.
+ // TODO(slan): Replace these params with an AudioBus-like class.
+ virtual int OnMoreData(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(AudioOutputStream* stream) = 0;
+
+ // Called when the stream has been Close()d.
+ virtual void OnClose() = 0;
+ };
+
+ virtual ~AudioOutputStream() {}
+
+ // Open the stream. false is returned if the stream cannot be opened. Open()
+ // must always be followed by a call to Close() even if Open() fails.
+ virtual bool Open() = 0;
+
+ // Starts playing audio and generating AudioSourceCallback::OnMoreData().
+ // Since implementor of AudioOutputStream 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.
+ virtual void GetVolume(double* volume) = 0;
+
+ // Close the stream. This also generates AudioSourceCallback::OnClose().
+ // After calling this method, the object should not be used anymore.
+ virtual void Close() = 0;
+};
+
+} // namespace chromecast
+
+#endif // CHROMECAST_PUBLIC_CAST_AUDIO_STREAM_H_

Powered by Google App Engine
This is Rietveld 408576698