1// Copyright 2017 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#pragma once
6
7#include <zircon/types.h>
8#include <zircon/device/audio.h>
9
10namespace audio {
11namespace utils {
12
13class AudioStream {
14public:
15    struct Format {
16        uint32_t frame_rate;
17        uint16_t channels;
18        audio_sample_format_t sample_format;
19    };
20};
21
22class AudioSource : public AudioStream {
23public:
24    virtual zx_status_t GetFormat(Format* out_format) = 0;
25    virtual zx_status_t GetFrames(void* buffer, uint32_t buf_space, uint32_t* out_packed) = 0;
26    virtual bool finished() const = 0;
27};
28
29class AudioSink : public AudioStream {
30public:
31    virtual zx_status_t SetFormat(const Format& format) = 0;
32    virtual zx_status_t PutFrames(const void* buffer, uint32_t amt) = 0;
33    virtual zx_status_t Finalize() = 0;
34};
35
36}  // namespace utils
37}  // namespace audio
38