blob: d5c19e921b28cdad1bd8628a688b83270ebec225 [file] [log] [blame]
// Copyright 2020 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 SRC_MEDIA_SOUNDS_SOUNDPLAYER_TEST_FAKE_AUDIO_RENDERER_H_
#define SRC_MEDIA_SOUNDS_SOUNDPLAYER_TEST_FAKE_AUDIO_RENDERER_H_
#include <fuchsia/media/cpp/fidl.h>
#include <lib/syslog/cpp/macros.h>
#include "lib/fidl/cpp/binding.h"
namespace soundplayer::test {
// Implements AudioRenderer for testing.
class FakeAudioRenderer : public fuchsia::media::AudioRenderer {
public:
struct Expectations {
zx_koid_t payload_buffer_ = ZX_KOID_INVALID;
std::vector<fuchsia::media::StreamPacket> packets_;
fuchsia::media::AudioStreamType stream_type_;
fuchsia::media::AudioRenderUsage usage_;
bool block_completion_ = false;
};
FakeAudioRenderer();
~FakeAudioRenderer() override;
// Sets expectations.
void SetExpectations(const Expectations& expectations) {
expectations_ = expectations;
expected_packets_iterator_ = expectations_.packets_.begin();
}
bool completed() const { return play_no_reply_called_; }
// Binds the renderer.
void Bind(fidl::InterfaceRequest<fuchsia::media::AudioRenderer> request,
fit::function<void(zx_status_t)> error_handler);
// AudioRenderer implementation.
void SetPcmStreamType(fuchsia::media::AudioStreamType format) override;
void AddPayloadBuffer(uint32_t id, zx::vmo payload_buffer) override;
void RemovePayloadBuffer(uint32_t id) override;
void SetPtsUnits(uint32_t tick_per_second_numerator,
uint32_t tick_per_second_denominator) override;
void SetPtsContinuityThreshold(float threshold_seconds) override;
void SetReferenceClock(zx::clock ref_clock) override;
void GetReferenceClock(GetReferenceClockCallback callback) override;
void SendPacket(fuchsia::media::StreamPacket packet, SendPacketCallback callback) override;
void SendPacketNoReply(fuchsia::media::StreamPacket packet) override;
void EndOfStream() final;
void DiscardAllPackets(DiscardAllPacketsCallback callback) override;
void DiscardAllPacketsNoReply() override;
void Play(int64_t reference_time, int64_t media_time, PlayCallback callback) override;
void PlayNoReply(int64_t reference_time, int64_t media_time) override;
void Pause(PauseCallback callback) override;
void PauseNoReply() override;
void BindGainControl(fidl::InterfaceRequest<fuchsia::media::audio::GainControl> request) override;
void EnableMinLeadTimeEvents(bool enabled) override;
void GetMinLeadTime(GetMinLeadTimeCallback callback) override;
void SetUsage(fuchsia::media::AudioRenderUsage usage) override;
private:
fidl::Binding<fuchsia::media::AudioRenderer> binding_;
Expectations expectations_;
std::vector<fuchsia::media::StreamPacket>::const_iterator expected_packets_iterator_;
SendPacketCallback send_packet_callback_;
bool set_usage_called_ = false;
bool set_pcm_stream_type_called_ = false;
bool add_payload_buffer_called_ = false;
bool play_no_reply_called_ = false;
};
} // namespace soundplayer::test
#endif // SRC_MEDIA_SOUNDS_SOUNDPLAYER_TEST_FAKE_AUDIO_RENDERER_H_