// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROMECAST_MEDIA_API_AUDIO_CLOCK_SIMULATOR_H_
#define CHROMECAST_MEDIA_API_AUDIO_CLOCK_SIMULATOR_H_
#include <cstddef>
#include <cstdint>
#include <memory>
#include "chromecast/media/api/audio_provider.h"
namespace chromecast {
namespace media {
// Simulates a modifiable audio output clock rate by resampling. Note that this
// will always provide audio (FillFrames() always fills the entire buffer),
// even if the upstream provider does not provide any data.
class AudioClockSimulator : public AudioProvider {
public:
static std::unique_ptr<AudioClockSimulator> Create(AudioProvider* provider);
// Sets the simulated audio clock rate. Returns the effective rate.
virtual double SetRate(double rate) = 0;
// Returns the number of frames of additional delay due to audio stored
// internally.
virtual double DelayFrames() const = 0;
// Sets a new playback sample rate. Needed to calculate timestamps correctly.
virtual void SetSampleRate(int sample_rate) = 0;
// Sets the playback rate (rate at which samples are played out relative to
// the sample rate). Needed to calculate timestamps correctly.
virtual void SetPlaybackRate(double playback_rate) = 0;
};
} // namespace media
} // namespace chromecast
#endif // CHROMECAST_MEDIA_API_AUDIO_CLOCK_SIMULATOR_H_