| 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_
|
|
|