blob: 41c9a84e22f2854587e3ddf8754c96965776d38f [file] [log] [blame]
// 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.
#ifndef GARNET_BIN_MEDIA_AUDIO_CORE_DRIVER_RING_BUFFER_H_
#define GARNET_BIN_MEDIA_AUDIO_CORE_DRIVER_RING_BUFFER_H_
#include <fbl/ref_counted.h>
#include <fbl/ref_ptr.h>
#include <lib/fzl/vmo-mapper.h>
#include <lib/zx/vmo.h>
namespace media {
namespace audio {
class DriverRingBuffer : public fbl::RefCounted<DriverRingBuffer> {
public:
static fbl::RefPtr<DriverRingBuffer> Create(zx::vmo vmo, uint32_t frame_size,
uint32_t frame_count, bool input);
uint64_t size() const { return vmo_mapper_.size(); }
uint32_t frames() const { return frames_; }
uint32_t frame_size() const { return frame_size_; }
uint8_t* virt() const {
return reinterpret_cast<uint8_t*>(vmo_mapper_.start());
}
private:
friend class fbl::RefPtr<DriverRingBuffer>;
DriverRingBuffer() {}
~DriverRingBuffer() {}
zx_status_t Init(zx::vmo vmo, uint32_t frame_size, uint32_t frame_count,
bool input);
fzl::VmoMapper vmo_mapper_;
uint32_t frames_ = 0;
uint32_t frame_size_ = 0;
};
} // namespace audio
} // namespace media
#endif // GARNET_BIN_MEDIA_AUDIO_CORE_DRIVER_RING_BUFFER_H_