| // 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 |