Change avifRWStreamFinishBox to return avifResult
Follow up on PR #3207. Allow error handling.
diff --git a/include/avif/internal.h b/include/avif/internal.h
index 4982eac..cdaa654 100644
--- a/include/avif/internal.h
+++ b/include/avif/internal.h
@@ -742,7 +742,7 @@
avifResult avifRWStreamWriteFullBox(avifRWStream * stream, const char * type, size_t contentSize, int version, uint32_t flags, avifBoxMarker * marker);
// marker is the offset of the size field in stream, returned by a previous
// avifRWStreamWriteBox() or avifRWStreamWriteFullBox() call.
-void avifRWStreamFinishBox(avifRWStream * stream, avifBoxMarker marker);
+AVIF_NODISCARD avifResult avifRWStreamFinishBox(avifRWStream * stream, avifBoxMarker marker);
avifResult avifRWStreamWriteU8(avifRWStream * stream, uint8_t v);
avifResult avifRWStreamWriteU16(avifRWStream * stream, uint16_t v);
avifResult avifRWStreamWriteU32(avifRWStream * stream, uint32_t v);
diff --git a/src/stream.c b/src/stream.c
index d1aa495..56965a8 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -426,7 +426,7 @@
return avifRWStreamWriteFullBox(stream, type, contentSize, -1, 0, marker);
}
-void avifRWStreamFinishBox(avifRWStream * stream, avifBoxMarker marker)
+avifResult avifRWStreamFinishBox(avifRWStream * stream, avifBoxMarker marker)
{
assert(stream->numUsedBitsInPartialByte == 0); // Byte alignment is required.
size_t boxSize = stream->offset - marker;
@@ -434,12 +434,11 @@
// avifRWStreamWriteFullBox() call, boxSize must be >= the size of the size
// and type fields. This implies that boxSize cannot be equal to the two
// special values 0 and 1.
- assert(boxSize >= sizeof(uint32_t) + 4);
- if (boxSize > UINT32_MAX) {
- abort();
- }
+ AVIF_ASSERT_OR_RETURN(boxSize >= sizeof(uint32_t) + 4);
+ AVIF_CHECKERR(boxSize <= UINT32_MAX, AVIF_RESULT_INVALID_ARGUMENT);
uint32_t noSize = avifHTONL((uint32_t)boxSize);
memcpy(stream->raw->data + marker, &noSize, sizeof(uint32_t));
+ return AVIF_RESULT_OK;
}
avifResult avifRWStreamWriteU8(avifRWStream * stream, uint8_t v)
diff --git a/src/write.c b/src/write.c
index dd98adf..3b880a4 100644
--- a/src/write.c
+++ b/src/write.c
@@ -621,7 +621,7 @@
AVIF_CHECKRES(avifRWStreamWriteU16(dedupStream, imageMetadata->matrixCoefficients)); // unsigned int(16) matrix_coefficients;
AVIF_CHECKRES(avifRWStreamWriteBits(dedupStream, (imageMetadata->yuvRange == AVIF_RANGE_FULL) ? 1 : 0, /*bitCount=*/1)); // unsigned int(1) full_range_flag;
AVIF_CHECKRES(avifRWStreamWriteBits(dedupStream, 0, /*bitCount=*/7)); // unsigned int(7) reserved = 0;
- avifRWStreamFinishBox(dedupStream, colr);
+ AVIF_CHECKRES(avifRWStreamFinishBox(dedupStream, colr));
if (dedup) {
AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, outputStream, associations, /*essential=*/AVIF_FALSE));
}
@@ -675,7 +675,7 @@
AVIF_CHECKRES(avifRWStreamWriteBox(dedupStream, "colr", AVIF_BOX_SIZE_TBD, &colr));
AVIF_CHECKRES(avifRWStreamWriteChars(dedupStream, "prof", 4)); // unsigned int(32) colour_type;
AVIF_CHECKRES(avifRWStreamWrite(dedupStream, imageMetadata->icc.data, imageMetadata->icc.size));
- avifRWStreamFinishBox(dedupStream, colr);
+ AVIF_CHECKRES(avifRWStreamFinishBox(dedupStream, colr));
if (dedup) {
AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, outputStream, associations, /*essential=*/AVIF_FALSE));
}
@@ -713,7 +713,7 @@
avifBoxMarker clli;
AVIF_CHECKRES(avifRWStreamWriteBox(dedupStream, "clli", AVIF_BOX_SIZE_TBD, &clli));
AVIF_CHECKRES(avifEncoderWriteContentLightLevelInformation(dedupStream, &imageMetadata->clli));
- avifRWStreamFinishBox(dedupStream, clli);
+ AVIF_CHECKRES(avifRWStreamFinishBox(dedupStream, clli));
if (dedup) {
AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, outputStream, associations, /*essential=*/AVIF_FALSE));
}
@@ -777,7 +777,7 @@
AVIF_CHECKRES(avifRWStreamWriteBox(dedupStream, "pasp", AVIF_BOX_SIZE_TBD, &pasp));
AVIF_CHECKRES(avifRWStreamWriteU32(dedupStream, imageMetadata->pasp.hSpacing)); // unsigned int(32) hSpacing;
AVIF_CHECKRES(avifRWStreamWriteU32(dedupStream, imageMetadata->pasp.vSpacing)); // unsigned int(32) vSpacing;
- avifRWStreamFinishBox(dedupStream, pasp);
+ AVIF_CHECKRES(avifRWStreamFinishBox(dedupStream, pasp));
if (dedup) {
AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, outputStream, associations, /*essential=*/AVIF_FALSE));
}
@@ -805,7 +805,7 @@
AVIF_CHECKRES(avifRWStreamWriteU32(dedupStream, imageMetadata->clap.horizOffD)); // unsigned int(32) horizOffD;
AVIF_CHECKRES(avifRWStreamWriteU32(dedupStream, imageMetadata->clap.vertOffN)); // unsigned int(32) vertOffN;
AVIF_CHECKRES(avifRWStreamWriteU32(dedupStream, imageMetadata->clap.vertOffD)); // unsigned int(32) vertOffD;
- avifRWStreamFinishBox(dedupStream, clap);
+ AVIF_CHECKRES(avifRWStreamFinishBox(dedupStream, clap));
if (dedup) {
AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, outputStream, associations, /*essential=*/AVIF_TRUE));
}
@@ -818,7 +818,7 @@
AVIF_CHECKRES(avifRWStreamWriteBox(dedupStream, "irot", AVIF_BOX_SIZE_TBD, &irot));
AVIF_CHECKRES(avifRWStreamWriteBits(dedupStream, 0, /*bitCount=*/6)); // unsigned int (6) reserved = 0;
AVIF_CHECKRES(avifRWStreamWriteBits(dedupStream, imageMetadata->irot.angle & 0x3, /*bitCount=*/2)); // unsigned int (2) angle;
- avifRWStreamFinishBox(dedupStream, irot);
+ AVIF_CHECKRES(avifRWStreamFinishBox(dedupStream, irot));
if (dedup) {
AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, outputStream, associations, /*essential=*/AVIF_TRUE));
}
@@ -831,7 +831,7 @@
AVIF_CHECKRES(avifRWStreamWriteBox(dedupStream, "imir", AVIF_BOX_SIZE_TBD, &imir));
AVIF_CHECKRES(avifRWStreamWriteBits(dedupStream, 0, /*bitCount=*/7)); // unsigned int(7) reserved = 0;
AVIF_CHECKRES(avifRWStreamWriteBits(dedupStream, imageMetadata->imir.axis ? 1 : 0, /*bitCount=*/1)); // unsigned int(1) axis;
- avifRWStreamFinishBox(dedupStream, imir);
+ AVIF_CHECKRES(avifRWStreamFinishBox(dedupStream, imir));
if (dedup) {
AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, outputStream, associations, /*essential=*/AVIF_TRUE));
}
@@ -847,7 +847,7 @@
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);
+ AVIF_CHECKRES(avifRWStreamFinishBox(s, hdlr));
return AVIF_RESULT_OK;
}
@@ -894,7 +894,7 @@
AVIF_CHECKRES(avifRWStreamWriteU32(s, 0 /* set later */)); // unsigned int(offset_size*8) extent_offset;
AVIF_CHECKRES(avifRWStreamWriteU32(s, (uint32_t)item->metadataPayload.size)); // unsigned int(length_size*8) extent_length;
}
- avifRWStreamFinishBox(s, iloc);
+ AVIF_CHECKRES(avifRWStreamFinishBox(s, iloc));
avifBoxMarker iinf;
AVIF_CHECKRES(avifRWStreamWriteFullBox(s, "iinf", AVIF_BOX_SIZE_TBD, 0, 0, &iinf));
@@ -915,11 +915,11 @@
if (item->infeContentType && item->infeContentTypeSize) { // string content_type; (writing null terminator)
AVIF_CHECKRES(avifRWStreamWriteChars(s, item->infeContentType, item->infeContentTypeSize));
}
- avifRWStreamFinishBox(s, infe);
+ AVIF_CHECKRES(avifRWStreamFinishBox(s, infe));
}
- avifRWStreamFinishBox(s, iinf);
+ AVIF_CHECKRES(avifRWStreamFinishBox(s, iinf));
- avifRWStreamFinishBox(s, meta);
+ AVIF_CHECKRES(avifRWStreamFinishBox(s, meta));
return AVIF_RESULT_OK;
}
@@ -2327,7 +2327,7 @@
AVIF_ASSERT_OR_RETURN(layerIndex <= AVIF_MAX_AV1_LAYER_COUNT);
}
- avifRWStreamFinishBox(s, mdat);
+ AVIF_CHECKRES(avifRWStreamFinishBox(s, mdat));
return AVIF_RESULT_OK;
}
@@ -2345,9 +2345,9 @@
AVIF_CHECKRES(avifRWStreamWriteU32(s, (uint32_t)itemIDs->itemID[i])); // unsigned int(32) entity_id;
}
- avifRWStreamFinishBox(s, altr);
+ AVIF_CHECKRES(avifRWStreamFinishBox(s, altr));
- avifRWStreamFinishBox(s, grpl);
+ AVIF_CHECKRES(avifRWStreamFinishBox(s, grpl));
return AVIF_RESULT_OK;
}
@@ -2498,7 +2498,7 @@
AVIF_CHECKRES(avifRWStreamWriteChars(&s, "mif3", 4)); // unsigned int(32) major_brand;
AVIF_CHECKRES(avifRWStreamWriteChars(&s, "avif", 4)); // unsigned int(32) minor_version;
// unsigned int(32) compatible_brands[];
- avifRWStreamFinishBox(&s, ftyp);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, ftyp));
AVIF_CHECKRES(avifEncoderWriteMiniBox(encoder, &s));
@@ -2854,7 +2854,7 @@
tmapIccSize + gainmapMetadataSize + (hasAlpha ? alphaData->size : 0) +
(hasGainmap ? gainmapData->size : 0) + colorData->size + image->exif.size + image->xmp.size;
AVIF_ASSERT_OR_RETURN(avifRWStreamOffset(s) == headerBytes + expectedChunkBytes);
- avifRWStreamFinishBox(s, mini);
+ AVIF_CHECKRES(avifRWStreamFinishBox(s, mini));
return AVIF_RESULT_OK;
}
#endif // AVIF_ENABLE_EXPERIMENTAL_MINI
@@ -2939,7 +2939,7 @@
AVIF_CHECKRES(avifRWStreamWriteFullBox(&dedup->s, "ispe", AVIF_BOX_SIZE_TBD, 0, 0, &ispe));
AVIF_CHECKRES(avifRWStreamWriteU32(&dedup->s, imageWidth)); // unsigned int(32) image_width;
AVIF_CHECKRES(avifRWStreamWriteU32(&dedup->s, imageHeight)); // unsigned int(32) image_height;
- avifRWStreamFinishBox(&dedup->s, ispe);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&dedup->s, ispe));
AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, s, &item->associations, /*essential=*/AVIF_FALSE));
// pixi = pixel information (depth, channel count)
@@ -3013,7 +3013,7 @@
}
}
#endif // AVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI
- avifRWStreamFinishBox(&dedup->s, pixi);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&dedup->s, pixi));
AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, s, &item->associations, /*essential=*/AVIF_FALSE));
}
@@ -3031,7 +3031,7 @@
avifBoxMarker auxC;
AVIF_CHECKRES(avifRWStreamWriteFullBox(&dedup->s, "auxC", AVIF_BOX_SIZE_TBD, 0, 0, &auxC));
AVIF_CHECKRES(avifRWStreamWriteChars(&dedup->s, alphaURN, alphaURNSize)); // string aux_type;
- avifRWStreamFinishBox(&dedup->s, auxC);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&dedup->s, auxC));
AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, s, &item->associations, /*essential=*/AVIF_FALSE));
} else if (item->itemCategory == AVIF_ITEM_COLOR) {
// Color specific properties
@@ -3077,7 +3077,7 @@
AVIF_CHECKRES(avifRWStreamWriteU16(&dedup->s, (uint16_t)layerSize[layer]));
}
}
- avifRWStreamFinishBox(&dedup->s, a1lx);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&dedup->s, a1lx));
AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, s, &item->associations, /*essential=*/AVIF_FALSE));
// We don't add an 'lsel' property since many decoders do not support it and will reject the image,
@@ -3094,7 +3094,7 @@
AVIF_CHECKRES(avifRWStreamWrite(&dedup->s, prop->usertype, 16));
}
AVIF_CHECKRES(avifRWStreamWrite(&dedup->s, prop->boxPayload.data, prop->boxPayload.size));
- avifRWStreamFinishBox(&dedup->s, propMarker);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&dedup->s, propMarker));
AVIF_CHECKRES(avifItemPropertyDedupFinish(dedup, s, &item->associations, /*essential=*/AVIF_FALSE));
}
@@ -3315,7 +3315,7 @@
break;
}
}
- avifRWStreamFinishBox(&s, ftyp);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, ftyp));
// -----------------------------------------------------------------------
// Start meta
@@ -3380,7 +3380,7 @@
AVIF_CHECKRES(avifRWStreamWriteU32(&s, (uint32_t)contentSize)); // unsigned int(length_size*8) extent_length;
}
- avifRWStreamFinishBox(&s, iloc);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, iloc));
// -----------------------------------------------------------------------
// Write iinf
@@ -3407,10 +3407,10 @@
// utf8string item_uri_type;
return AVIF_RESULT_NOT_IMPLEMENTED;
}
- avifRWStreamFinishBox(&s, infe);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, infe));
}
- avifRWStreamFinishBox(&s, iinf);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, iinf));
// -----------------------------------------------------------------------
// Write iref boxes
@@ -3442,7 +3442,7 @@
AVIF_CHECKRES(avifRWStreamWriteU16(&s, dimgItem->id)); // unsigned int(16) to_item_ID;
}
}
- avifRWStreamFinishBox(&s, refType);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, refType));
}
if (item->irefToID != 0) {
@@ -3454,11 +3454,11 @@
AVIF_CHECKRES(avifRWStreamWriteU16(&s, item->id)); // unsigned int(16) from_item_ID;
AVIF_CHECKRES(avifRWStreamWriteU16(&s, 1)); // unsigned int(16) reference_count;
AVIF_CHECKRES(avifRWStreamWriteU16(&s, item->irefToID)); // unsigned int(16) to_item_ID;
- avifRWStreamFinishBox(&s, refType);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, refType));
}
}
if (iref) {
- avifRWStreamFinishBox(&s, iref);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, iref));
}
// -----------------------------------------------------------------------
@@ -3475,9 +3475,9 @@
altImageMetadata = encoder->data->altImageMetadata;
avifResult result = avifRWStreamWriteProperties(dedup, &s, encoder, imageMetadata, altImageMetadata);
avifItemPropertyDedupDestroy(dedup);
- AVIF_CHECKRES(result);
- avifRWStreamFinishBox(&s, ipco);
dedup = NULL;
+ AVIF_CHECKRES(result);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, ipco));
avifBoxMarker ipma;
AVIF_CHECKRES(avifRWStreamWriteFullBox(&s, "ipma", AVIF_BOX_SIZE_TBD, 0, 0, &ipma));
@@ -3509,9 +3509,9 @@
}
}
}
- avifRWStreamFinishBox(&s, ipma);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, ipma));
- avifRWStreamFinishBox(&s, iprp);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, iprp));
// -----------------------------------------------------------------------
// Write grpl/altr box
@@ -3531,7 +3531,7 @@
// -----------------------------------------------------------------------
// Finish meta box
- avifRWStreamFinishBox(&s, meta);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, meta));
// -----------------------------------------------------------------------
// Write tracks (if an image sequence)
@@ -3591,7 +3591,7 @@
AVIF_CHECKRES(avifRWStreamWrite(&s, unityMatrix, sizeof(unityMatrix)));
AVIF_CHECKRES(avifRWStreamWriteZeros(&s, 24)); // bit(32)[6] pre_defined = 0;
AVIF_CHECKRES(avifRWStreamWriteU32(&s, encoder->data->items.count)); // unsigned int(32) next_track_ID;
- avifRWStreamFinishBox(&s, mvhd);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, mvhd));
// -------------------------------------------------------------------
// Write tracks
@@ -3628,7 +3628,7 @@
AVIF_CHECKRES(avifRWStreamWrite(&s, unityMatrix, sizeof(unityMatrix))); // template int(32)[9] matrix= // { 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 };
AVIF_CHECKRES(avifRWStreamWriteU32(&s, imageMetadata->width << 16)); // unsigned int(32) width;
AVIF_CHECKRES(avifRWStreamWriteU32(&s, imageMetadata->height << 16)); // unsigned int(32) height;
- avifRWStreamFinishBox(&s, tkhd);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, tkhd));
if (item->irefToID != 0) {
avifBoxMarker tref;
@@ -3636,8 +3636,8 @@
avifBoxMarker refType;
AVIF_CHECKRES(avifRWStreamWriteBox(&s, item->irefType, AVIF_BOX_SIZE_TBD, &refType));
AVIF_CHECKRES(avifRWStreamWriteU32(&s, (uint32_t)item->irefToID));
- avifRWStreamFinishBox(&s, refType);
- avifRWStreamFinishBox(&s, tref);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, refType));
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, tref));
}
avifBoxMarker edts;
@@ -3650,8 +3650,8 @@
AVIF_CHECKRES(avifRWStreamWriteU64(&s, 0)); // int(64) media_time;
AVIF_CHECKRES(avifRWStreamWriteU16(&s, 1)); // int(16) media_rate_integer;
AVIF_CHECKRES(avifRWStreamWriteU16(&s, 0)); // int(16) media_rate_fraction = 0;
- avifRWStreamFinishBox(&s, elst);
- avifRWStreamFinishBox(&s, edts);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, elst));
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, edts));
if (item->itemCategory != AVIF_ITEM_ALPHA) {
AVIF_CHECKRES(avifEncoderWriteTrackMetaBox(encoder, &s));
@@ -3668,7 +3668,7 @@
AVIF_CHECKRES(avifRWStreamWriteU64(&s, framesDurationInTimescales)); // unsigned int(64) duration;
AVIF_CHECKRES(avifRWStreamWriteU16(&s, 21956)); // bit(1) pad = 0; unsigned int(5)[3] language; ("und")
AVIF_CHECKRES(avifRWStreamWriteU16(&s, 0)); // unsigned int(16) pre_defined = 0;
- avifRWStreamFinishBox(&s, mdhd);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, mdhd));
AVIF_CHECKRES(avifRWStreamWriteHandlerBox(&s, (item->itemCategory == AVIF_ITEM_ALPHA) ? "auxv" : "pict"));
@@ -3679,7 +3679,7 @@
AVIF_CHECKRES(avifRWStreamWriteFullBox(&s, "vmhd", AVIF_BOX_SIZE_TBD, 0, 1, &vmhd));
AVIF_CHECKRES(avifRWStreamWriteU16(&s, 0)); // template unsigned int(16) graphicsmode = 0; (copy over the existing image)
AVIF_CHECKRES(avifRWStreamWriteZeros(&s, 6)); // template unsigned int(16)[3] opcolor = {0, 0, 0};
- avifRWStreamFinishBox(&s, vmhd);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, vmhd));
avifBoxMarker dinf;
AVIF_CHECKRES(avifRWStreamWriteBox(&s, "dinf", AVIF_BOX_SIZE_TBD, &dinf));
@@ -3687,8 +3687,8 @@
AVIF_CHECKRES(avifRWStreamWriteFullBox(&s, "dref", AVIF_BOX_SIZE_TBD, 0, 0, &dref));
AVIF_CHECKRES(avifRWStreamWriteU32(&s, 1)); // unsigned int(32) entry_count;
AVIF_CHECKRES(avifRWStreamWriteFullBox(&s, "url ", /*contentSize=*/0, 0, 1, /*marker=*/NULL)); // flags:1 means data is in this file
- avifRWStreamFinishBox(&s, dref);
- avifRWStreamFinishBox(&s, dinf);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, dref));
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, dinf));
// The boxes within the "stbl" box are ordered using the following recommendation in ISO/IEC 14496-12, Section 6.2.3:
// 4) It is recommended that the boxes within the Sample Table Box be in the following order: Sample Description
@@ -3731,17 +3731,17 @@
AVIF_CHECKRES(avifRWStreamWriteBits(&s, 1, /*bitCount=*/1)); // unsigned int(1) intra_pred_used;
AVIF_CHECKRES(avifRWStreamWriteBits(&s, 15, /*bitCount=*/4)); // unsigned int(4) max_ref_per_pic;
AVIF_CHECKRES(avifRWStreamWriteBits(&s, 0, /*bitCount=*/26)); // unsigned int(26) reserved;
- avifRWStreamFinishBox(&s, ccst);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, ccst));
if (item->itemCategory == AVIF_ITEM_ALPHA) {
avifBoxMarker auxi;
AVIF_CHECKRES(avifRWStreamWriteFullBox(&s, "auxi", AVIF_BOX_SIZE_TBD, 0, 0, &auxi));
AVIF_CHECKRES(avifRWStreamWriteChars(&s, alphaURN, alphaURNSize)); // string aux_track_type;
- avifRWStreamFinishBox(&s, auxi);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, auxi));
}
- avifRWStreamFinishBox(&s, imageItem);
- avifRWStreamFinishBox(&s, stsd);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, imageItem));
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, stsd));
avifBoxMarker stts;
AVIF_CHECKRES(avifRWStreamWriteFullBox(&s, "stts", AVIF_BOX_SIZE_TBD, 0, 0, &stts));
@@ -3766,7 +3766,7 @@
avifRWStreamSetOffset(&s, sttsEntryCountOffset);
AVIF_CHECKRES(avifRWStreamWriteU32(&s, sttsEntryCount));
avifRWStreamSetOffset(&s, prevOffset);
- avifRWStreamFinishBox(&s, stts);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, stts));
avifBoxMarker stsc;
AVIF_CHECKRES(avifRWStreamWriteFullBox(&s, "stsc", AVIF_BOX_SIZE_TBD, 0, 0, &stsc));
@@ -3774,7 +3774,7 @@
AVIF_CHECKRES(avifRWStreamWriteU32(&s, 1)); // unsigned int(32) first_chunk;
AVIF_CHECKRES(avifRWStreamWriteU32(&s, item->encodeOutput->samples.count)); // unsigned int(32) samples_per_chunk;
AVIF_CHECKRES(avifRWStreamWriteU32(&s, 1)); // unsigned int(32) sample_description_index;
- avifRWStreamFinishBox(&s, stsc);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, stsc));
avifBoxMarker stsz;
AVIF_CHECKRES(avifRWStreamWriteFullBox(&s, "stsz", AVIF_BOX_SIZE_TBD, 0, 0, &stsz));
@@ -3784,14 +3784,14 @@
avifEncodeSample * sample = &item->encodeOutput->samples.sample[sampleIndex];
AVIF_CHECKRES(avifRWStreamWriteU32(&s, (uint32_t)sample->data.size)); // unsigned int(32) entry_size;
}
- avifRWStreamFinishBox(&s, stsz);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, stsz));
avifBoxMarker stco;
AVIF_CHECKRES(avifRWStreamWriteFullBox(&s, "stco", AVIF_BOX_SIZE_TBD, 0, 0, &stco));
AVIF_CHECKRES(avifRWStreamWriteU32(&s, 1)); // unsigned int(32) entry_count;
AVIF_CHECKRES(avifEncoderItemAddMdatFixup(item, &s)); //
AVIF_CHECKRES(avifRWStreamWriteU32(&s, 1)); // unsigned int(32) chunk_offset; (set later)
- avifRWStreamFinishBox(&s, stco);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, stco));
avifBool hasNonSyncSample = AVIF_FALSE;
for (uint32_t sampleIndex = 0; sampleIndex < item->encodeOutput->samples.count; ++sampleIndex) {
@@ -3812,20 +3812,20 @@
AVIF_CHECKRES(avifRWStreamWriteU32(&s, sampleIndex + 1)); // unsigned int(32) sample_number;
}
}
- avifRWStreamFinishBox(&s, stss);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, stss));
}
- avifRWStreamFinishBox(&s, stbl);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, stbl));
- avifRWStreamFinishBox(&s, minf);
- avifRWStreamFinishBox(&s, mdia);
- avifRWStreamFinishBox(&s, trak);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, minf));
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, mdia));
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, trak));
}
// -------------------------------------------------------------------
// Finish moov box
- avifRWStreamFinishBox(&s, moov);
+ AVIF_CHECKRES(avifRWStreamFinishBox(&s, moov));
}
// -----------------------------------------------------------------------
@@ -3905,6 +3905,6 @@
avifBoxMarker configBox;
AVIF_CHECKRES(avifRWStreamWriteBox(s, configPropName, AVIF_BOX_SIZE_TBD, &configBox));
AVIF_CHECKRES(writeCodecConfig(s, cfg));
- avifRWStreamFinishBox(s, configBox);
+ AVIF_CHECKRES(avifRWStreamFinishBox(s, configBox));
return AVIF_RESULT_OK;
}
diff --git a/tests/gtest/avifstreamtest.cc b/tests/gtest/avifstreamtest.cc
index 199b8be..b696312 100644
--- a/tests/gtest/avifstreamtest.cc
+++ b/tests/gtest/avifstreamtest.cc
@@ -52,9 +52,10 @@
const uint16_t rw_someu16 = 0xAABB;
EXPECT_EQ(avifRWStreamWriteU16(&rw_stream, rw_someu16), AVIF_RESULT_OK);
- avifRWStreamFinishBox(&rw_stream, rw_full_box_marker);
+ ASSERT_EQ(avifRWStreamFinishBox(&rw_stream, rw_full_box_marker),
+ AVIF_RESULT_OK);
- avifRWStreamFinishBox(&rw_stream, rw_box_marker);
+ ASSERT_EQ(avifRWStreamFinishBox(&rw_stream, rw_box_marker), AVIF_RESULT_OK);
const uint32_t rw_someu32 = 0xAABBCCDD;
EXPECT_EQ(avifRWStreamWriteU32(&rw_stream, rw_someu32), AVIF_RESULT_OK);