blob: f4f620b6055e76abafd0d88f924ce28a4e99fd14 [file] [log] [blame]
// Copyright 2024 Google LLC
// SPDX-License-Identifier: BSD-2-Clause
#include <algorithm>
#include "avif/avif.h"
#include "aviftest_helpers.h"
#include "gtest/gtest.h"
namespace avif {
namespace {
TEST(BasicTest, EncodeDecode) {
ImagePtr image = testutil::CreateImage(12, 34, 8, AVIF_PIXEL_FORMAT_YUV420,
AVIF_PLANES_ALL);
ASSERT_NE(image, nullptr);
testutil::FillImageGradient(image.get());
const testutil::AvifRwData avif = testutil::Encode(image.get());
ASSERT_NE(avif.data, nullptr);
// Make sure the HandlerBox is as small as possible, meaning its name field is
// empty.
const uint8_t kHdlr[] = {'h', 'd', 'l', 'r'};
const uint8_t* hdlr_position =
std::search(avif.data, avif.data + avif.size, kHdlr, kHdlr + 4);
ASSERT_NE(hdlr_position, avif.data + avif.size);
// The previous four bytes represent the size of the box as a big endian
// unsigned integer.
constexpr uint8_t kExpectedHdlrSize =
/*size field*/ 4 + /*"hdlr"*/ 4 + /*version*/ 3 + /*flags*/ 1 +
/*pre_defined*/ 4 + /*handler_type*/ 4 + /*reserved*/ 4 * 3 + /*name*/ 1;
ASSERT_EQ(hdlr_position[-4], 0);
ASSERT_EQ(hdlr_position[-3], 0);
ASSERT_EQ(hdlr_position[-2], 0);
ASSERT_EQ(hdlr_position[-1], kExpectedHdlrSize);
}
} // namespace
} // namespace avif