Codec-specific options plumbing for advanced encoding settings (unused, first pass)
diff --git a/src/write.c b/src/write.c
index d3ac127..3b8493d 100644
--- a/src/write.c
+++ b/src/write.c
@@ -178,15 +178,22 @@
encoder->data = avifEncoderDataCreate();
encoder->timescale = 1;
encoder->keyframeInterval = 0;
+ encoder->csOptions = avifCodecSpecificOptionsCreate();
return encoder;
}
void avifEncoderDestroy(avifEncoder * encoder)
{
+ avifCodecSpecificOptionsDestroy(encoder->csOptions);
avifEncoderDataDestroy(encoder->data);
avifFree(encoder);
}
+void avifEncoderSetCodecSpecificOption(avifEncoder * encoder, const char * key, const char * value)
+{
+ avifCodecSpecificOptionsSet(encoder->csOptions, key, value);
+}
+
static void avifEncoderWriteColorProperties(avifRWStream * s, const avifImage * imageMetadata, struct ipmaArray * ipma, uint8_t * itemPropertyIndex)
{
if (imageMetadata->icc.size > 0) {
@@ -359,6 +366,7 @@
encoder->data->colorItem = avifEncoderDataCreateItem(encoder->data, "av01", "Color", 6);
encoder->data->colorItem->codec = avifCodecCreate(encoder->codecChoice, AVIF_CODEC_FLAG_CAN_ENCODE);
+ encoder->data->colorItem->codec->csOptions = encoder->csOptions;
if (!encoder->data->colorItem->codec) {
// Just bail out early, we're not surviving this function without an encoder compiled in
return AVIF_RESULT_NO_CODEC_AVAILABLE;
@@ -381,6 +389,7 @@
if (needsAlpha) {
encoder->data->alphaItem = avifEncoderDataCreateItem(encoder->data, "av01", "Alpha", 6);
encoder->data->alphaItem->codec = avifCodecCreate(encoder->codecChoice, AVIF_CODEC_FLAG_CAN_ENCODE);
+ encoder->data->alphaItem->codec->csOptions = encoder->csOptions;
if (!encoder->data->alphaItem->codec) {
return AVIF_RESULT_NO_CODEC_AVAILABLE;
}
@@ -465,8 +474,13 @@
for (uint32_t itemIndex = 0; itemIndex < encoder->data->items.count; ++itemIndex) {
avifEncoderItem * item = &encoder->data->items.item[itemIndex];
if (item->codec) {
- if (!item->codec->encodeImage(item->codec, encoder, image, item->alpha, addImageFlags, item->encodeOutput)) {
- return item->alpha ? AVIF_RESULT_ENCODE_ALPHA_FAILED : AVIF_RESULT_ENCODE_COLOR_FAILED;
+ avifResult encodeResult =
+ item->codec->encodeImage(item->codec, encoder, image, item->alpha, addImageFlags, item->encodeOutput);
+ if (encodeResult == AVIF_RESULT_UNKNOWN_ERROR) {
+ encodeResult = item->alpha ? AVIF_RESULT_ENCODE_ALPHA_FAILED : AVIF_RESULT_ENCODE_COLOR_FAILED;
+ }
+ if (encodeResult != AVIF_RESULT_OK) {
+ return encodeResult;
}
}
}