blob: 4b312c0e70d84d1fd6a0da0d537aff5ef17a2361 [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.
#include "src/media/audio/audio_core/intermediate_buffer.h"
#include <gtest/gtest.h>
namespace media::audio {
namespace {
static const Format kFormat =
Format::Create({
.sample_format = fuchsia::media::AudioSampleFormat::FLOAT,
.channels = 2,
.frames_per_second = 48000,
})
.take_value();
class IntermediateBufferTest : public ::testing::Test {};
TEST_F(IntermediateBufferTest, WriteLock) {
auto one_frame_per_ms = fbl::MakeRefCounted<VersionedTimelineFunction>(
TimelineFunction(TimelineRate(FractionalFrames<uint32_t>(1).raw_value(), 1'000'000)));
auto intermediate_buffer = std::make_shared<IntermediateBuffer>(kFormat, 256, one_frame_per_ms);
ASSERT_TRUE(intermediate_buffer);
ASSERT_NE(intermediate_buffer->buffer(), nullptr);
ASSERT_EQ(intermediate_buffer->frame_count(), 256u);
{
auto stream_buffer = intermediate_buffer->WriteLock(zx::time(0), 0, 256);
ASSERT_TRUE(stream_buffer);
ASSERT_EQ(intermediate_buffer->buffer(), stream_buffer->payload());
ASSERT_EQ(FractionalFrames<int64_t>(0), stream_buffer->start());
ASSERT_EQ(FractionalFrames<uint32_t>(256), stream_buffer->length());
}
{
auto stream_buffer = intermediate_buffer->WriteLock(zx::time(0), 3, 256);
ASSERT_TRUE(stream_buffer);
ASSERT_EQ(intermediate_buffer->buffer(), stream_buffer->payload());
ASSERT_EQ(FractionalFrames<int64_t>(3), stream_buffer->start());
ASSERT_EQ(FractionalFrames<uint32_t>(256), stream_buffer->length());
}
}
TEST_F(IntermediateBufferTest, ClampLengthToBufferSize) {
auto one_frame_per_ms = fbl::MakeRefCounted<VersionedTimelineFunction>(
TimelineFunction(TimelineRate(FractionalFrames<uint32_t>(1).raw_value(), 1'000'000)));
auto intermediate_buffer = std::make_shared<IntermediateBuffer>(kFormat, 256, one_frame_per_ms);
ASSERT_TRUE(intermediate_buffer);
// Request 1024 frames, but since the buffer is only 256 frames the returned buffer should be
// truncated to 256 frames.
auto stream_buffer = intermediate_buffer->WriteLock(zx::time(0), 0, 1024);
ASSERT_TRUE(stream_buffer);
ASSERT_EQ(intermediate_buffer->buffer(), stream_buffer->payload());
ASSERT_EQ(FractionalFrames<int64_t>(0), stream_buffer->start());
ASSERT_EQ(FractionalFrames<uint32_t>(256), stream_buffer->length());
}
} // namespace
} // namespace media::audio