blob: 8420d16c726906cb74b8eebd90e9ac34506ef6a2 [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.
#ifndef SRC_MEDIA_CODEC_CODECS_TEST_TEST_CODEC_PACKETS_H_
#define SRC_MEDIA_CODEC_CODECS_TEST_TEST_CODEC_PACKETS_H_
#include <fuchsia/mediacodec/cpp/fidl.h>
#include <lib/fzl/vmo-mapper.h>
#include <lib/syslog/cpp/macros.h>
#include <algorithm>
#include <map>
#include "src/media/lib/codec_impl/include/lib/media/codec_impl/codec_buffer.h"
#include "src/media/lib/codec_impl/include/lib/media/codec_impl/codec_packet.h"
constexpr uint32_t kBufferLifetimeOrdinal = 1;
class CodecPacketForTest : public CodecPacket {
public:
CodecPacketForTest(uint32_t index) : CodecPacket(kBufferLifetimeOrdinal, index) {}
};
static CodecVmoRange VmoRangeOfSize(size_t size) {
zx::vmo vmo_handle;
fzl::VmoMapper mapper;
zx_status_t err =
mapper.CreateAndMap(size, ZX_VM_PERM_READ | ZX_VM_PERM_WRITE, nullptr, &vmo_handle);
FX_CHECK(err == ZX_OK) << "Failed to create and map vmo: " << err;
return CodecVmoRange(std::move(vmo_handle), 0, size);
}
class CodecBufferForTest : public CodecBuffer {
public:
CodecBufferForTest(size_t size, uint32_t index, bool is_secure)
: CodecBuffer(/*parent=*/nullptr,
Info{.port = kOutputPort,
.lifetime_ordinal = kBufferLifetimeOrdinal,
.index = index,
.is_secure = is_secure},
VmoRangeOfSize(size)) {
if (!Map()) {
ZX_PANIC("CodecBufferForTest() failed to Map()");
}
}
};
struct TestPackets {
std::vector<std::unique_ptr<CodecPacketForTest>> packets;
CodecPacket* ptr(size_t i) { return packets[i].get(); }
};
static inline TestPackets Packets(size_t count) {
TestPackets packets;
for (size_t i = 0; i < count; ++i) {
packets.packets.push_back(std::make_unique<CodecPacketForTest>(i));
}
return packets;
}
struct TestBuffers {
std::vector<std::unique_ptr<CodecBufferForTest>> buffers;
const CodecBuffer* ptr(size_t i) { return buffers[i].get(); }
};
static inline TestBuffers Buffers(std::vector<size_t> sizes) {
TestBuffers buffers;
for (size_t i = 0; i < sizes.size(); ++i) {
constexpr bool kIsSecure = false;
buffers.buffers.push_back(std::make_unique<CodecBufferForTest>(sizes[i], i, kIsSecure));
}
return buffers;
}
#endif // SRC_MEDIA_CODEC_CODECS_TEST_TEST_CODEC_PACKETS_H_