blob: 29e211c9063fc45991dc68953d06f1ada560daa6 [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.
#pragma once
#include <fbl/vmo_mapper.h>
#include <media/cpp/fidl.h>
namespace examples {
class MediaApp {
public:
MediaApp();
~MediaApp();
void set_verbose(bool verbose) { verbose_ = verbose; }
void set_low_water_mark_ms(int64_t value) {
low_water_mark_ = ZX_MSEC(value);
}
void set_high_water_mark_ms(int64_t value) {
high_water_mark_ = ZX_MSEC(value);
}
void set_float(bool enable_float) { use_float_ = enable_float; }
int Run();
private:
bool AcquireRenderer();
void SetMediaType();
zx_status_t CreateMemoryMapping();
void WriteAudioIntoBuffer(void* buffer, size_t num_frames);
bool RefillBuffer();
media::AudioPacket CreateAudioPacket(size_t payload_num);
bool SendAudioPacket(media::AudioPacket packet);
void WaitForPackets(size_t num_packets);
media::AudioRenderer2SyncPtr audio_renderer_;
fbl::VmoMapper payload_buffer_;
size_t sample_size_;
size_t payload_size_;
size_t total_mapping_size_;
size_t num_packets_sent_ = 0u;
zx_time_t start_time_;
bool start_time_known_ = false;
bool verbose_ = false;
zx_duration_t low_water_mark_;
zx_duration_t high_water_mark_;
bool use_float_ = false;
};
} // namespace examples