// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#pragma once

#include <audio-utils/audio-stream.h>
#include <zircon/types.h>

#include "wav-common.h"

class WAVSource : public WAVCommon,
                  public audio::utils::AudioSource {
public:
    WAVSource() { }
    zx_status_t Initialize(const char* filename);

    // AudioSource interface
    zx_status_t GetFormat(AudioStream::Format* out_format) final;
    zx_status_t GetFrames(void* buffer, uint32_t buf_space, uint32_t* out_packed) final;
    bool finished() const final { return payload_played_ >= payload_len_; }

private:
    uint32_t payload_len_ = 0;
    uint32_t payload_played_ = 0;
    AudioStream::Format audio_format_;
};

