blob: 0d5b8e98342be61c8d5f8ffc0c687e72476635c7 [file] [log] [blame]
// Copyright 2019 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/camera/drivers/test_utils/fake_buffer_collection.h"
#include <fidl/fuchsia.sysmem/cpp/wire.h>
#include <fuchsia/sysmem/c/banjo.h>
#include <lib/ddk/debug.h>
#include <lib/fake-bti/bti.h>
#include <lib/zx/bti.h>
#include <lib/zx/vmo.h>
#include <gtest/gtest.h>
namespace camera {
namespace {
constexpr uint32_t kWidth = 1080;
constexpr uint32_t kHeight = 764;
constexpr uint32_t kNumberOfBuffers = 8;
TEST(CreateContiguousBufferCollectionInfo2, CreatesCollection2) {
zx::bti bti;
ASSERT_EQ(fake_bti_create(bti.reset_and_get_address()), ZX_OK);
buffer_collection_info_2_t buffer_collection;
image_format_2_t image_format;
EXPECT_EQ(
GetImageFormat(image_format, static_cast<uint32_t>(fuchsia_sysmem::PixelFormatType::kNv12),
kWidth, kHeight),
ZX_OK);
ASSERT_EQ(CreateContiguousBufferCollectionInfo(buffer_collection, image_format, bti.get(),
kNumberOfBuffers),
ZX_OK);
// Check it made the buffer collection like we want:
EXPECT_EQ(buffer_collection.buffer_count, kNumberOfBuffers);
EXPECT_EQ(image_format.coded_width, kWidth);
EXPECT_EQ(image_format.coded_height, kHeight);
for (uint32_t i = 0; i < std::size(buffer_collection.buffers); ++i) {
if (i < kNumberOfBuffers) {
EXPECT_FALSE(buffer_collection.buffers[i].vmo == ZX_HANDLE_INVALID);
} else {
EXPECT_TRUE(buffer_collection.buffers[i].vmo == ZX_HANDLE_INVALID);
}
}
// Clean up
EXPECT_EQ(DestroyContiguousBufferCollection(buffer_collection), ZX_OK);
}
TEST(CreateContiguousBufferCollectionInfo2, FailsOnBadHandle) {
zx_handle_t bti_handle = ZX_HANDLE_INVALID;
buffer_collection_info_2_t buffer_collection;
image_format_2_t image_format;
EXPECT_EQ(
GetImageFormat(image_format, static_cast<uint32_t>(fuchsia_sysmem::PixelFormatType::kNv12),
kWidth, kHeight),
ZX_OK);
EXPECT_EQ(camera::CreateContiguousBufferCollectionInfo(buffer_collection, image_format,
bti_handle, kNumberOfBuffers),
ZX_ERR_INVALID_ARGS);
// Cleanup
EXPECT_EQ(DestroyContiguousBufferCollection(buffer_collection), ZX_OK);
}
} // namespace
} // namespace camera