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