blob: 282eb0cf1ed71c5b2f82d952fa55ddba093594e9 [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_EXAMPLES_MEDIA_WAV_RECORD_WAV_RECORDER_H_
#define GARNET_EXAMPLES_MEDIA_WAV_RECORD_WAV_RECORDER_H_
#include <media/cpp/fidl.h>
#include "garnet/lib/media/wav_writer/wav_writer.h"
#include "lib/app/cpp/startup_context.h"
#include "lib/fsl/tasks/fd_waiter.h"
#include "lib/fxl/command_line.h"
#include "lib/fxl/functional/closure.h"
#include "lib/fxl/logging.h"
namespace examples {
class WavRecorder {
public:
WavRecorder(fxl::CommandLine cmd_line, fxl::Closure quit_callback)
: cmd_line_(std::move(cmd_line)), quit_callback_(quit_callback) {
FXL_DCHECK(quit_callback_);
}
~WavRecorder();
void Run(fuchsia::sys::StartupContext* app_context);
private:
void Usage();
void Shutdown();
bool SetupPayloadBuffer();
void SendCaptureJob();
void OnDefaultFormatFetched(media::MediaType type);
void OnPacketCaptured(media::MediaPacket pkt);
void OnQuit();
media::AudioCapturerPtr capturer_;
fsl::FDWaiter keystroke_waiter_;
media::audio::WavWriter<> wav_writer_;
fxl::CommandLine cmd_line_;
fxl::Closure quit_callback_;
const char* filename_ = "";
bool verbose_ = false;
bool loopback_ = false;
zx::vmo payload_buf_vmo_;
void* payload_buf_virt_ = nullptr;
size_t payload_buf_size_ = 0;
size_t payload_buf_frames_ = 0;
media::AudioSampleFormat sample_format_;
uint32_t channel_count_ = 0;
uint32_t frames_per_second_ = 0;
uint32_t bytes_per_frame_ = 0;
size_t capture_frames_per_chunk_ = 0;
size_t capture_frame_offset_ = 0;
bool clean_shutdown_ = false;
};
} // namespace examples
#endif // GARNET_EXAMPLES_MEDIA_WAV_RECORD_WAV_RECORDER_H_