Skip to content

Commit

Permalink
Empty HandlerBox name instead of "libavif" (#2378)
Browse files Browse the repository at this point in the history
Factor code into avifRWStreamWriteHandlerBox().
  • Loading branch information
y-guyon authored Aug 22, 2024
1 parent ab708ca commit 8dc2a62
Show file tree
Hide file tree
Showing 14 changed files with 87 additions and 51 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ The changes are relative to the previous release, unless the baseline is specifi
error.
The `gainMapPresent` field is now only populated if enableParsingGainMapMetadata
is true.
* Write an empty HandlerBox name field instead of "libavif" (saves 7 bytes).

## [1.1.1] - 2024-07-30

Expand Down
36 changes: 15 additions & 21 deletions src/write.c
Original file line number Diff line number Diff line change
Expand Up @@ -771,6 +771,18 @@ static avifResult avifEncoderWriteExtendedColorProperties(avifRWStream * dedupSt
return AVIF_RESULT_OK;
}

static avifResult avifRWStreamWriteHandlerBox(avifRWStream * s, const char handlerType[4])
{
avifBoxMarker hdlr;
AVIF_CHECKRES(avifRWStreamWriteFullBox(s, "hdlr", AVIF_BOX_SIZE_TBD, 0, 0, &hdlr));
AVIF_CHECKRES(avifRWStreamWriteU32(s, 0)); // unsigned int(32) pre_defined = 0;
AVIF_CHECKRES(avifRWStreamWriteChars(s, handlerType, 4)); // unsigned int(32) handler_type;
AVIF_CHECKRES(avifRWStreamWriteZeros(s, 12)); // const unsigned int(32)[3] reserved = 0;
AVIF_CHECKRES(avifRWStreamWriteChars(s, "", 1)); // string name; (writing null terminator)
avifRWStreamFinishBox(s, hdlr);
return AVIF_RESULT_OK;
}

// Write unassociated metadata items (EXIF, XMP) to a small meta box inside of a trak box.
// These items are implicitly associated with the track they are contained within.
static avifResult avifEncoderWriteTrackMetaBox(avifEncoder * encoder, avifRWStream * s)
Expand All @@ -791,13 +803,7 @@ static avifResult avifEncoderWriteTrackMetaBox(avifEncoder * encoder, avifRWStre
avifBoxMarker meta;
AVIF_CHECKRES(avifRWStreamWriteFullBox(s, "meta", AVIF_BOX_SIZE_TBD, 0, 0, &meta));

avifBoxMarker hdlr;
AVIF_CHECKRES(avifRWStreamWriteFullBox(s, "hdlr", AVIF_BOX_SIZE_TBD, 0, 0, &hdlr));
AVIF_CHECKRES(avifRWStreamWriteU32(s, 0)); // unsigned int(32) pre_defined = 0;
AVIF_CHECKRES(avifRWStreamWriteChars(s, "pict", 4)); // unsigned int(32) handler_type;
AVIF_CHECKRES(avifRWStreamWriteZeros(s, 12)); // const unsigned int(32)[3] reserved = 0;
AVIF_CHECKRES(avifRWStreamWriteChars(s, "libavif", 8)); // string name; (writing null terminator)
avifRWStreamFinishBox(s, hdlr);
AVIF_CHECKRES(avifRWStreamWriteHandlerBox(s, "pict"));

avifBoxMarker iloc;
AVIF_CHECKRES(avifRWStreamWriteFullBox(s, "iloc", AVIF_BOX_SIZE_TBD, 0, 0, &iloc));
Expand Down Expand Up @@ -3095,13 +3101,7 @@ avifResult avifEncoderFinish(avifEncoder * encoder, avifRWData * output)
// -----------------------------------------------------------------------
// Write hdlr

avifBoxMarker hdlr;
AVIF_CHECKRES(avifRWStreamWriteFullBox(&s, "hdlr", AVIF_BOX_SIZE_TBD, 0, 0, &hdlr));
AVIF_CHECKRES(avifRWStreamWriteU32(&s, 0)); // unsigned int(32) pre_defined = 0;
AVIF_CHECKRES(avifRWStreamWriteChars(&s, "pict", 4)); // unsigned int(32) handler_type;
AVIF_CHECKRES(avifRWStreamWriteZeros(&s, 12)); // const unsigned int(32)[3] reserved = 0;
AVIF_CHECKRES(avifRWStreamWriteChars(&s, "libavif", 8)); // string name; (writing null terminator)
avifRWStreamFinishBox(&s, hdlr);
AVIF_CHECKRES(avifRWStreamWriteHandlerBox(&s, "pict"));

// -----------------------------------------------------------------------
// Write pitm
Expand Down Expand Up @@ -3447,13 +3447,7 @@ avifResult avifEncoderFinish(avifEncoder * encoder, avifRWData * output)
AVIF_CHECKRES(avifRWStreamWriteU16(&s, 0)); // unsigned int(16) pre_defined = 0;
avifRWStreamFinishBox(&s, mdhd);

avifBoxMarker hdlrTrak;
AVIF_CHECKRES(avifRWStreamWriteFullBox(&s, "hdlr", AVIF_BOX_SIZE_TBD, 0, 0, &hdlrTrak));
AVIF_CHECKRES(avifRWStreamWriteU32(&s, 0)); // unsigned int(32) pre_defined = 0;
AVIF_CHECKRES(avifRWStreamWriteChars(&s, (item->itemCategory == AVIF_ITEM_ALPHA) ? "auxv" : "pict", 4)); // unsigned int(32) handler_type;
AVIF_CHECKRES(avifRWStreamWriteZeros(&s, 12)); // const unsigned int(32)[3] reserved = 0;
AVIF_CHECKRES(avifRWStreamWriteChars(&s, "libavif", 8)); // string name; (writing null terminator)
avifRWStreamFinishBox(&s, hdlrTrak);
AVIF_CHECKRES(avifRWStreamWriteHandlerBox(&s, (item->itemCategory == AVIF_ITEM_ALPHA) ? "auxv" : "pict"));

avifBoxMarker minf;
AVIF_CHECKRES(avifRWStreamWriteBox(&s, "minf", AVIF_BOX_SIZE_TBD, &minf));
Expand Down
2 changes: 2 additions & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ if(AVIF_ENABLE_GTEST)
endif()

add_avif_gtest(avifgridapitest)
add_avif_gtest(avifheadertest)
add_avif_gtest_with_data(avifilocextenttest)
add_avif_gtest(avifimagetest)
add_avif_gtest_with_data(avifincrtest avifincrtest_helpers)
Expand Down Expand Up @@ -356,6 +357,7 @@ if(AVIF_CODEC_AVM_ENABLED)
avifdimgtest
avifencodetest
avifgridapitest
avifheadertest
avifincrtest
avifiostatstest
avifmetadatatest
Expand Down
4 changes: 2 additions & 2 deletions tests/data/goldens/circle-trns-after-plte.png.avif.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
<BrandEntry AlternateBrand="miaf"/>
<BrandEntry AlternateBrand="MA1A"/>
</FileTypeBox>
<MetaBox Size="397" Type="meta" Version="0" Flags="0" Specification="p12" Container="file moov trak moof traf udta" >
<HandlerBox Size="40" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="libavif" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
<MetaBox Size="390" Type="meta" Version="0" Flags="0" Specification="p12" Container="file moov trak moof traf udta" >
<HandlerBox Size="33" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
</HandlerBox>
<PrimaryItemBox Size="14" Type="pitm" Version="0" Flags="0" Specification="p12" Container="meta" item_ID="1">
</PrimaryItemBox>
Expand Down
4 changes: 2 additions & 2 deletions tests/data/goldens/dog_exif_extended_xmp_icc.jpg.avif.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
<BrandEntry AlternateBrand="miaf"/>
<BrandEntry AlternateBrand="MA1B"/>
</FileTypeBox>
<MetaBox Size="495" Type="meta" Version="0" Flags="0" Specification="p12" Container="file moov trak moof traf udta" >
<HandlerBox Size="40" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="libavif" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
<MetaBox Size="488" Type="meta" Version="0" Flags="0" Specification="p12" Container="file moov trak moof traf udta" >
<HandlerBox Size="33" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
</HandlerBox>
<PrimaryItemBox Size="14" Type="pitm" Version="0" Flags="0" Specification="p12" Container="meta" item_ID="1">
</PrimaryItemBox>
Expand Down
14 changes: 7 additions & 7 deletions tests/data/goldens/kodim03_23_animation.avif.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
<BrandEntry AlternateBrand="miaf"/>
<BrandEntry AlternateBrand="MA1B"/>
</FileTypeBox>
<MetaBox Size="242" Type="meta" Version="0" Flags="0" Specification="p12" Container="file moov trak moof traf udta" >
<HandlerBox Size="40" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="libavif" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
<MetaBox Size="235" Type="meta" Version="0" Flags="0" Specification="p12" Container="file moov trak moof traf udta" >
<HandlerBox Size="33" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
</HandlerBox>
<PrimaryItemBox Size="14" Type="pitm" Version="0" Flags="0" Specification="p12" Container="meta" item_ID="1">
</PrimaryItemBox>
Expand Down Expand Up @@ -51,10 +51,10 @@
</ItemPropertyAssociationBox>
</ItemPropertiesBox>
</MetaBox>
<MovieBox Size="717" Type="moov" Specification="p12" Container="file cmvd" >
<MovieBox Size="710" Type="moov" Specification="p12" Container="file cmvd" >
<MovieHeaderBox Size="120" Type="mvhd" Version="1" Flags="0" Specification="p12" Container="moov" CreationTime="REDACTED" ModificationTime="REDACTED" TimeScale="25" Duration="-1" NextTrackID="1">
</MovieHeaderBox>
<TrackBox Size="589" Type="trak" Specification="p12" Container="moov" >
<TrackBox Size="582" Type="trak" Specification="p12" Container="moov" >
<TrackHeaderBox Size="104" Type="tkhd" Version="1" Flags="1" Specification="p12" Container="trak" CreationTime="REDACTED" ModificationTime="REDACTED" TrackID="1" Duration="-1" Width="768.00" Height="512.00">
<Matrix m11="0x00010000" m12="0x00000000" m13="0x00000000" m21="0x00000000" m22="0x00010000" m23="0x00000000" m31="0x00000000" m32="0x00000000" m33="0x40000000"/>
</TrackHeaderBox>
Expand All @@ -63,10 +63,10 @@
<EditListEntry Duration="2" MediaTime="0" MediaRate="1"/>
</EditListBox>
</EditBox>
<MediaBox Size="433" Type="mdia" Specification="p12" Container="trak" >
<MediaBox Size="426" Type="mdia" Specification="p12" Container="trak" >
<MediaHeaderBox Size="44" Type="mdhd" Version="1" Flags="0" Specification="p12" Container="mdia" CreationTime="REDACTED" ModificationTime="REDACTED" TimeScale="25" Duration="2" LanguageCode="und">
</MediaHeaderBox>
<HandlerBox Size="40" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="libavif" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
<HandlerBox Size="33" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
</HandlerBox>
<MediaInformationBox Size="341" Type="minf" Specification="p12" Container="mdia" >
<VideoMediaHeaderBox Size="20" Type="vmhd" Version="0" Flags="1" Specification="p12" Container="minf" >
Expand Down Expand Up @@ -105,7 +105,7 @@
<SampleSizeEntry Size="REDACTED"/>
</SampleSizeBox>
<ChunkOffsetBox Size="20" Type="stco" Version="0" Flags="0" Specification="p12" Container="stbl" EntryCount="1">
<ChunkEntry offset="1011"/>
<ChunkEntry offset="997"/>
</ChunkOffsetBox>
<SyncSampleBox Size="20" Type="stss" Version="0" Flags="0" Specification="p12" Container="stbl" EntryCount="1">
<SyncSampleEntry sampleNumber="1"/>
Expand Down
14 changes: 7 additions & 7 deletions tests/data/goldens/kodim03_23_animation_keyframes.avif.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
<BrandEntry AlternateBrand="miaf"/>
<BrandEntry AlternateBrand="MA1B"/>
</FileTypeBox>
<MetaBox Size="242" Type="meta" Version="0" Flags="0" Specification="p12" Container="file moov trak moof traf udta" >
<HandlerBox Size="40" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="libavif" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
<MetaBox Size="235" Type="meta" Version="0" Flags="0" Specification="p12" Container="file moov trak moof traf udta" >
<HandlerBox Size="33" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
</HandlerBox>
<PrimaryItemBox Size="14" Type="pitm" Version="0" Flags="0" Specification="p12" Container="meta" item_ID="1">
</PrimaryItemBox>
Expand Down Expand Up @@ -52,10 +52,10 @@
</ItemPropertyAssociationBox>
</ItemPropertiesBox>
</MetaBox>
<MovieBox Size="697" Type="moov" Specification="p12" Container="file cmvd" >
<MovieBox Size="690" Type="moov" Specification="p12" Container="file cmvd" >
<MovieHeaderBox Size="120" Type="mvhd" Version="1" Flags="0" Specification="p12" Container="moov" CreationTime="REDACTED" ModificationTime="REDACTED" TimeScale="25" Duration="-1" NextTrackID="1">
</MovieHeaderBox>
<TrackBox Size="569" Type="trak" Specification="p12" Container="moov" >
<TrackBox Size="562" Type="trak" Specification="p12" Container="moov" >
<TrackHeaderBox Size="104" Type="tkhd" Version="1" Flags="1" Specification="p12" Container="trak" CreationTime="REDACTED" ModificationTime="REDACTED" TrackID="1" Duration="-1" Width="768.00" Height="512.00">
<Matrix m11="0x00010000" m12="0x00000000" m13="0x00000000" m21="0x00000000" m22="0x00010000" m23="0x00000000" m31="0x00000000" m32="0x00000000" m33="0x40000000"/>
</TrackHeaderBox>
Expand All @@ -64,10 +64,10 @@
<EditListEntry Duration="2" MediaTime="0" MediaRate="1"/>
</EditListBox>
</EditBox>
<MediaBox Size="413" Type="mdia" Specification="p12" Container="trak" >
<MediaBox Size="406" Type="mdia" Specification="p12" Container="trak" >
<MediaHeaderBox Size="44" Type="mdhd" Version="1" Flags="0" Specification="p12" Container="mdia" CreationTime="REDACTED" ModificationTime="REDACTED" TimeScale="25" Duration="2" LanguageCode="und">
</MediaHeaderBox>
<HandlerBox Size="40" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="libavif" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
<HandlerBox Size="33" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
</HandlerBox>
<MediaInformationBox Size="321" Type="minf" Specification="p12" Container="mdia" >
<VideoMediaHeaderBox Size="20" Type="vmhd" Version="0" Flags="1" Specification="p12" Container="minf" >
Expand Down Expand Up @@ -106,7 +106,7 @@
<SampleSizeEntry Size="REDACTED"/>
</SampleSizeBox>
<ChunkOffsetBox Size="20" Type="stco" Version="0" Flags="0" Specification="p12" Container="stbl" EntryCount="1">
<ChunkEntry offset="995"/>
<ChunkEntry offset="981"/>
</ChunkOffsetBox>
</SampleTableBox>
</MediaInformationBox>
Expand Down
4 changes: 2 additions & 2 deletions tests/data/goldens/kodim03_yuv420_8bpc.y4m.avif.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
<BrandEntry AlternateBrand="miaf"/>
<BrandEntry AlternateBrand="MA1B"/>
</FileTypeBox>
<MetaBox Size="242" Type="meta" Version="0" Flags="0" Specification="p12" Container="file moov trak moof traf udta" >
<HandlerBox Size="40" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="libavif" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
<MetaBox Size="235" Type="meta" Version="0" Flags="0" Specification="p12" Container="file moov trak moof traf udta" >
<HandlerBox Size="33" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
</HandlerBox>
<PrimaryItemBox Size="14" Type="pitm" Version="0" Flags="0" Specification="p12" Container="meta" item_ID="1">
</PrimaryItemBox>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
<BrandEntry AlternateBrand="MA1B"/>
<BrandEntry AlternateBrand="tmap"/>
</FileTypeBox>
<MetaBox Size="606" Type="meta" Version="0" Flags="0" Specification="p12" Container="file moov trak moof traf udta" >
<HandlerBox Size="40" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="libavif" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
<MetaBox Size="599" Type="meta" Version="0" Flags="0" Specification="p12" Container="file moov trak moof traf udta" >
<HandlerBox Size="33" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
</HandlerBox>
<PrimaryItemBox Size="14" Type="pitm" Version="0" Flags="0" Specification="p12" Container="meta" item_ID="1">
</PrimaryItemBox>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
<BrandEntry AlternateBrand="miaf"/>
<BrandEntry AlternateBrand="MA1B"/>
</FileTypeBox>
<MetaBox Size="379" Type="meta" Version="0" Flags="0" Specification="p12" Container="file moov trak moof traf udta" >
<HandlerBox Size="40" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="libavif" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
<MetaBox Size="372" Type="meta" Version="0" Flags="0" Specification="p12" Container="file moov trak moof traf udta" >
<HandlerBox Size="33" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
</HandlerBox>
<PrimaryItemBox Size="14" Type="pitm" Version="0" Flags="0" Specification="p12" Container="meta" item_ID="1">
</PrimaryItemBox>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
<BrandEntry AlternateBrand="MA1B"/>
<BrandEntry AlternateBrand="tmap"/>
</FileTypeBox>
<MetaBox Size="606" Type="meta" Version="0" Flags="0" Specification="p12" Container="file moov trak moof traf udta" >
<HandlerBox Size="40" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="libavif" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
<MetaBox Size="599" Type="meta" Version="0" Flags="0" Specification="p12" Container="file moov trak moof traf udta" >
<HandlerBox Size="33" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
</HandlerBox>
<PrimaryItemBox Size="14" Type="pitm" Version="0" Flags="0" Specification="p12" Container="meta" item_ID="1">
</PrimaryItemBox>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
<BrandEntry AlternateBrand="MA1B"/>
<BrandEntry AlternateBrand="tmap"/>
</FileTypeBox>
<MetaBox Size="1121" Type="meta" Version="0" Flags="0" Specification="p12" Container="file moov trak moof traf udta" >
<HandlerBox Size="40" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="libavif" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
<MetaBox Size="1114" Type="meta" Version="0" Flags="0" Specification="p12" Container="file moov trak moof traf udta" >
<HandlerBox Size="33" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
</HandlerBox>
<PrimaryItemBox Size="14" Type="pitm" Version="0" Flags="0" Specification="p12" Container="meta" item_ID="1">
</PrimaryItemBox>
Expand Down
4 changes: 2 additions & 2 deletions tests/data/goldens/paris_icc_exif_xmp.png.avif.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
<BrandEntry AlternateBrand="miaf"/>
<BrandEntry AlternateBrand="MA1A"/>
</FileTypeBox>
<MetaBox Size="988" Type="meta" Version="0" Flags="0" Specification="p12" Container="file moov trak moof traf udta" >
<HandlerBox Size="40" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="libavif" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
<MetaBox Size="981" Type="meta" Version="0" Flags="0" Specification="p12" Container="file moov trak moof traf udta" >
<HandlerBox Size="33" Type="hdlr" Version="0" Flags="0" Specification="p12" Container="mdia meta minf" hdlrType="pict" Name="" reserved1="0" reserved2="data:application/octet-string,000000000000000000000000">
</HandlerBox>
<PrimaryItemBox Size="14" Type="pitm" Version="0" Flags="0" Specification="p12" Container="meta" item_ID="1">
</PrimaryItemBox>
Expand Down
39 changes: 39 additions & 0 deletions tests/gtest/avifheadertest.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// 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

0 comments on commit 8dc2a62

Please sign in to comment.