public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/libavif] epel9-next: Update to version 0.7.2
@ 2026-07-14 21:39 Andreas Schneider
  0 siblings, 0 replies; only message in thread
From: Andreas Schneider @ 2026-07-14 21:39 UTC (permalink / raw)
  To: git-commits

A new commit has been pushed.

Repo   : rpms/libavif
Branch : epel9-next
Commit : b0bfd6d028d50f55585b970df0426dc30df91854
Author : Andreas Schneider <asn@cryptomilk.org>
Date   : 2020-04-29T17:44:26+02:00
Stats  : +464/-2 in 6 file(s)
URL    : https://src.fedoraproject.org/rpms/libavif/c/b0bfd6d028d50f55585b970df0426dc30df91854?branch=epel9-next

Log:
Update to version 0.7.2

---
diff --git a/.gitignore b/.gitignore
index cb30d3c..735a4c8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 /libavif-0.5.7.tar.gz
 /libavif-0.7.1.tar.gz
+/libavif-0.7.2.tar.gz

diff --git a/155.patch b/155.patch
new file mode 100644
index 0000000..77f38ce
--- /dev/null
+++ b/155.patch
@@ -0,0 +1,23 @@
+From 84232e2d786967e1ce9aec668f0d31568e83f72c Mon Sep 17 00:00:00 2001
+From: Andreas Schneider <asn@cryptomilk.org>
+Date: Wed, 29 Apr 2020 17:34:57 +0200
+Subject: [PATCH] apps: Use correct enum for colourPrimaries
+
+Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
+---
+ apps/avifenc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/apps/avifenc.c b/apps/avifenc.c
+index 11595b7..e812670 100644
+--- a/apps/avifenc.c
++++ b/apps/avifenc.c
+@@ -352,7 +352,7 @@ int main(int argc, char * argv[])
+     if (lossless && (inputFormat != AVIF_APP_FILE_FORMAT_Y4M)) {
+         if (!nclxSet) { // don't stomp on the user's cmdline nclx values
+             // Assume SRGB unless they tell us otherwise via --nclx
+-            nclx.colourPrimaries = AVIF_NCLX_TRANSFER_CHARACTERISTICS_BT709;
++            nclx.colourPrimaries = AVIF_NCLX_COLOUR_PRIMARIES_BT709;
+             nclx.transferCharacteristics = AVIF_NCLX_TRANSFER_CHARACTERISTICS_SRGB;
+             nclx.matrixCoefficients = AVIF_NCLX_MATRIX_COEFFICIENTS_IDENTITY; // this is key for lossless
+             nclx.range = AVIF_RANGE_FULL;

diff --git a/e4e5d752ece581d6ef9fbb8bab0ab2edfde13fc5.patch b/e4e5d752ece581d6ef9fbb8bab0ab2edfde13fc5.patch
new file mode 100644
index 0000000..622e232
--- /dev/null
+++ b/e4e5d752ece581d6ef9fbb8bab0ab2edfde13fc5.patch
@@ -0,0 +1,279 @@
+From e4e5d752ece581d6ef9fbb8bab0ab2edfde13fc5 Mon Sep 17 00:00:00 2001
+From: Joe Drago <jdrago@netflix.com>
+Date: Mon, 27 Apr 2020 14:27:31 -0700
+Subject: [PATCH] Added avifenc Lossless (--lossless, -l) mode, which sets new
+ defaults and warns when anything would cause the AVIF to not be lossless
+
+---
+ CHANGELOG.md           |   2 +
+ apps/avifenc.c         | 119 ++++++++++++++++++++++++++++++++++++++---
+ apps/shared/avifjpeg.c |   2 +-
+ apps/shared/avifjpeg.h |   2 +-
+ apps/shared/avifpng.c  |   8 ++-
+ apps/shared/avifpng.h  |   4 +-
+ 6 files changed, 123 insertions(+), 14 deletions(-)
+
+diff --git a/CHANGELOG.md b/CHANGELOG.md
+index 19c8d08..8d05a5f 100644
+--- a/CHANGELOG.md
++++ b/CHANGELOG.md
+@@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+ 
+ ## [Unreleased]
++### Added
++- avifenc: Lossless (--lossless, -l) mode, which sets new defaults and warns when anything would cause the AVIF to not be lossless
+ 
+ ## [0.7.2] - 2020-04-24
+ ### Added
+diff --git a/apps/avifenc.c b/apps/avifenc.c
+index 357596c..2d5a591 100644
+--- a/apps/avifenc.c
++++ b/apps/avifenc.c
+@@ -25,6 +25,7 @@ static void syntax(void)
+     printf("Options:\n");
+     printf("    -h,--help                         : Show syntax help\n");
+     printf("    -j,--jobs J                       : Number of jobs (worker threads, default: 1)\n");
++    printf("    -l,--lossless                     : Set all defaults to encode losslessly, and emit warnings when settings/input don't allow for it\n");
+     printf("    -d,--depth D                      : Output depth [8,10,12]. (JPEG/PNG only; For y4m, depth is retained)\n");
+     printf("    -y,--yuv FORMAT                   : Output format [default=444, 422, 420]. (JPEG/PNG only; For y4m, format is retained)\n");
+     printf("    -n,--nclx P/T/M                   : Set nclx colr box values (3 raw numbers, use -r to set range flag)\n");
+@@ -156,6 +157,7 @@ int main(int argc, char * argv[])
+     avifRange requestedRange = AVIF_RANGE_FULL;
+     avifBool requestedRangeSet = AVIF_FALSE;
+     avifBool nclxSet = AVIF_FALSE;
++    avifBool lossless = AVIF_FALSE;
+     avifEncoder * encoder = NULL;
+ 
+     avifNclxColorProfile nclx;
+@@ -300,6 +302,19 @@ int main(int argc, char * argv[])
+                 fprintf(stderr, "ERROR: Invalid imir axis: %s\n", arg);
+                 return 1;
+             }
++        } else if (!strcmp(arg, "-l") || !strcmp(arg, "--lossless")) {
++            lossless = AVIF_TRUE;
++
++            // Set defaults, and warn later on if anything looks incorrect
++            requestedFormat = AVIF_PIXEL_FORMAT_YUV444;  // don't subsample GBR
++            minQuantizer = AVIF_QUANTIZER_LOSSLESS;      // lossless
++            maxQuantizer = AVIF_QUANTIZER_LOSSLESS;      // lossless
++            minQuantizerAlpha = AVIF_QUANTIZER_LOSSLESS; // lossless
++            maxQuantizerAlpha = AVIF_QUANTIZER_LOSSLESS; // lossless
++            codecChoice = AVIF_CODEC_CHOICE_AOM;         // rav1e doesn't support lossless transform yet:
++                                                         // https://github.com/xiph/rav1e/issues/151
++            requestedRange = AVIF_RANGE_FULL;            // avoid limited range
++            requestedRangeSet = AVIF_TRUE;
+         } else {
+             // Positional argument
+             if (!inputFilename) {
+@@ -325,6 +340,26 @@ int main(int argc, char * argv[])
+     avifImage * avif = avifImageCreateEmpty();
+     avifRWData raw = AVIF_DATA_EMPTY;
+ 
++    uint32_t sourceDepth = 0;
++    avifBool sourceWasRGB = AVIF_TRUE;
++    avifAppFileFormat inputFormat = avifGuessFileFormat(inputFilename);
++    if (inputFormat == AVIF_APP_FILE_FORMAT_UNKNOWN) {
++        fprintf(stderr, "Cannot determine input file extension: %s\n", inputFilename);
++        returnCode = 1;
++        goto cleanup;
++    }
++
++    if (lossless && (inputFormat != AVIF_APP_FILE_FORMAT_Y4M)) {
++        if (!nclxSet) { // don't stomp on the user's cmdline nclx values
++            // Assume SRGB unless they tell us otherwise via --nclx
++            nclx.colourPrimaries = AVIF_NCLX_TRANSFER_CHARACTERISTICS_BT709;
++            nclx.transferCharacteristics = AVIF_NCLX_TRANSFER_CHARACTERISTICS_SRGB;
++            nclx.matrixCoefficients = AVIF_NCLX_MATRIX_COEFFICIENTS_IDENTITY; // this is key for lossless
++            nclx.range = AVIF_RANGE_FULL;
++            nclxSet = AVIF_TRUE;
++        }
++    }
++
+     // Set range and nclx in advance so any upcoming RGB -> YUV use the proper coefficients
+     if (requestedRangeSet) {
+         avif->yuvRange = requestedRange;
+@@ -334,12 +369,6 @@ int main(int argc, char * argv[])
+         avifImageSetProfileNCLX(avif, &nclx);
+     }
+ 
+-    avifAppFileFormat inputFormat = avifGuessFileFormat(inputFilename);
+-    if (inputFormat == AVIF_APP_FILE_FORMAT_UNKNOWN) {
+-        fprintf(stderr, "Cannot determine input file extension: %s\n", inputFilename);
+-        returnCode = 1;
+-        goto cleanup;
+-    }
+     if (inputFormat == AVIF_APP_FILE_FORMAT_Y4M) {
+         if (requestedRangeSet) {
+             fprintf(stderr, "WARNING: Ignoring range (-r) value when encoding from y4m content.\n");
+@@ -353,13 +382,16 @@ int main(int argc, char * argv[])
+             nclx.range = avif->yuvRange;
+             avifImageSetProfileNCLX(avif, &nclx);
+         }
++        sourceDepth = avif->depth;
++        sourceWasRGB = AVIF_FALSE;
+     } else if (inputFormat == AVIF_APP_FILE_FORMAT_JPEG) {
+         if (!avifJPEGRead(avif, inputFilename, requestedFormat, requestedDepth)) {
+             returnCode = 1;
+             goto cleanup;
+         }
++        sourceDepth = 8;
+     } else if (inputFormat == AVIF_APP_FILE_FORMAT_PNG) {
+-        if (!avifPNGRead(avif, inputFilename, requestedFormat, requestedDepth)) {
++        if (!avifPNGRead(avif, inputFilename, requestedFormat, requestedDepth, &sourceDepth)) {
+             returnCode = 1;
+             goto cleanup;
+         }
+@@ -395,7 +427,78 @@ int main(int argc, char * argv[])
+         avif->imir.axis = imirAxis;
+     }
+ 
+-    printf("AVIF to be written:\n");
++    avifBool usingAOM = AVIF_FALSE;
++    const char * codecName = avifCodecName(codecChoice, AVIF_CODEC_FLAG_CAN_ENCODE);
++    if (codecName && !strcmp(codecName, "aom")) {
++        usingAOM = AVIF_TRUE;
++    }
++    avifBool hasAlpha = (avif->alphaPlane && avif->alphaRowBytes);
++    avifBool losslessColorQP = (minQuantizer == AVIF_QUANTIZER_LOSSLESS) && (maxQuantizer == AVIF_QUANTIZER_LOSSLESS);
++    avifBool losslessAlphaQP = (minQuantizerAlpha == AVIF_QUANTIZER_LOSSLESS) && (maxQuantizerAlpha == AVIF_QUANTIZER_LOSSLESS);
++    avifBool depthMatches = (sourceDepth == avif->depth);
++    avifBool using444 = (avif->yuvFormat == AVIF_PIXEL_FORMAT_YUV444);
++    avifBool usingFullRange = (avif->yuvRange == AVIF_RANGE_FULL);
++    avifBool usingIdentityMatrix = (nclxSet && (nclx.matrixCoefficients == AVIF_NCLX_MATRIX_COEFFICIENTS_IDENTITY));
++
++    // Guess if the enduser is asking for lossless and enable it so that warnings can be emitted
++    if (losslessColorQP && (!hasAlpha || losslessAlphaQP)) {
++        // The enduser is probably expecting lossless. Turn it on and emit warnings
++        printf("Min/max QPs set to %d, assuming --lossless to enable warnings on potential lossless issues.\n", AVIF_QUANTIZER_LOSSLESS);
++        lossless = AVIF_TRUE;
++    }
++
++    // Check for any reasons lossless will fail, and complain loudly
++    if (lossless) {
++        if (!usingAOM) {
++            fprintf(stderr, "WARNING: [--lossless] Only aom (-c) supports lossless transforms. Output might not be lossless.\n");
++            lossless = AVIF_FALSE;
++        }
++
++        if (!losslessColorQP) {
++            fprintf(stderr,
++                    "WARNING: [--lossless] Color quantizer range (--min, --max) not set to %d. Color output might not be lossless.\n",
++                    AVIF_QUANTIZER_LOSSLESS);
++            lossless = AVIF_FALSE;
++        }
++
++        if (hasAlpha && !losslessAlphaQP) {
++            fprintf(stderr,
++                    "WARNING: [--lossless] Alpha present and alpha quantizer range (--minalpha, --maxalpha) not set to %d. Alpha output might not be lossless.\n",
++                    AVIF_QUANTIZER_LOSSLESS);
++            lossless = AVIF_FALSE;
++        }
++
++        if (!depthMatches) {
++            fprintf(stderr,
++                    "WARNING: [--lossless] Input depth (%d) does not match output depth (%d). Output might not be lossless.\n",
++                    sourceDepth,
++                    avif->depth);
++            lossless = AVIF_FALSE;
++        }
++
++        if (sourceWasRGB) {
++            if (!using444) {
++                fprintf(stderr, "WARNING: [--lossless] Input data was RGB and YUV subsampling (-y) isn't YUV444. Output might not be lossless.\n");
++                lossless = AVIF_FALSE;
++            }
++
++            if (!usingFullRange) {
++                fprintf(stderr, "WARNING: [--lossless] Input data was RGB and output range (-r) isn't full. Output might not be lossless.\n");
++                lossless = AVIF_FALSE;
++            }
++
++            if (!usingIdentityMatrix) {
++                fprintf(stderr, "WARNING: [--lossless] Input data was RGB and nclx matrixCoefficients isn't set to identity (--nclx x/x/0); Output might not be lossless.\n");
++                lossless = AVIF_FALSE;
++            }
++        }
++    }
++
++    const char * lossyHint = " (Lossy)";
++    if (lossless) {
++        lossyHint = " (Lossless)";
++    }
++    printf("AVIF to be written:%s\n", lossyHint);
+     avifImageDump(avif);
+ 
+     printf("Encoding with AV1 codec '%s' speed [%d], color QP [%d (%s) <-> %d (%s)], alpha QP [%d (%s) <-> %d (%s)], %d worker thread(s), please wait...\n",
+diff --git a/apps/shared/avifjpeg.c b/apps/shared/avifjpeg.c
+index dcefb41..39bd0cd 100644
+--- a/apps/shared/avifjpeg.c
++++ b/apps/shared/avifjpeg.c
+@@ -30,7 +30,7 @@ static void my_error_exit(j_common_ptr cinfo)
+     longjmp(myerr->setjmp_buffer, 1);
+ }
+ 
+-avifBool avifJPEGRead(avifImage * avif, const char * inputFilename, avifPixelFormat requestedFormat, int requestedDepth)
++avifBool avifJPEGRead(avifImage * avif, const char * inputFilename, avifPixelFormat requestedFormat, uint32_t requestedDepth)
+ {
+     avifBool ret = AVIF_FALSE;
+     FILE * f = NULL;
+diff --git a/apps/shared/avifjpeg.h b/apps/shared/avifjpeg.h
+index 13c54dd..3824aea 100644
+--- a/apps/shared/avifjpeg.h
++++ b/apps/shared/avifjpeg.h
+@@ -6,7 +6,7 @@
+ 
+ #include "avif/avif.h"
+ 
+-avifBool avifJPEGRead(avifImage * avif, const char * inputFilename, avifPixelFormat requestedFormat, int requestedDepth);
++avifBool avifJPEGRead(avifImage * avif, const char * inputFilename, avifPixelFormat requestedFormat, uint32_t requestedDepth);
+ avifBool avifJPEGWrite(avifImage * avif, const char * outputFilename, int jpegQuality);
+ 
+ #endif // ifndef LIBAVIF_APPS_SHARED_AVIFJPEG_H
+diff --git a/apps/shared/avifpng.c b/apps/shared/avifpng.c
+index 843d6b0..3573a46 100644
+--- a/apps/shared/avifpng.c
++++ b/apps/shared/avifpng.c
+@@ -14,7 +14,7 @@
+ #pragma GCC diagnostic ignored "-Wclobbered"
+ #endif
+ 
+-avifBool avifPNGRead(avifImage * avif, const char * inputFilename, avifPixelFormat requestedFormat, int requestedDepth)
++avifBool avifPNGRead(avifImage * avif, const char * inputFilename, avifPixelFormat requestedFormat, uint32_t requestedDepth, uint32_t * outPNGDepth)
+ {
+     avifBool readResult = AVIF_FALSE;
+     png_structp png = NULL;
+@@ -104,6 +104,10 @@ avifBool avifPNGRead(avifImage * avif, const char * inputFilename, avifPixelForm
+         imgBitDepth = 16;
+     }
+ 
++    if (outPNGDepth) {
++        *outPNGDepth = imgBitDepth;
++    }
++
+     png_read_update_info(png, info);
+ 
+     avif->width = rawWidth;
+@@ -143,7 +147,7 @@ avifBool avifPNGRead(avifImage * avif, const char * inputFilename, avifPixelForm
+     return readResult;
+ }
+ 
+-avifBool avifPNGWrite(avifImage * avif, const char * outputFilename, int requestedDepth)
++avifBool avifPNGWrite(avifImage * avif, const char * outputFilename, uint32_t requestedDepth)
+ {
+     avifBool writeResult = AVIF_FALSE;
+     png_structp png = NULL;
+diff --git a/apps/shared/avifpng.h b/apps/shared/avifpng.h
+index a10220e..12b68ad 100644
+--- a/apps/shared/avifpng.h
++++ b/apps/shared/avifpng.h
+@@ -7,7 +7,7 @@
+ #include "avif/avif.h"
+ 
+ // if (requestedDepth == 0), do best-fit
+-avifBool avifPNGRead(avifImage * avif, const char * inputFilename, avifPixelFormat requestedFormat, int requestedDepth);
+-avifBool avifPNGWrite(avifImage * avif, const char * outputFilename, int requestedDepth);
++avifBool avifPNGRead(avifImage * avif, const char * inputFilename, avifPixelFormat requestedFormat, uint32_t requestedDepth, uint32_t * outPNGDepth);
++avifBool avifPNGWrite(avifImage * avif, const char * outputFilename, uint32_t requestedDepth);
+ 
+ #endif // ifndef LIBAVIF_APPS_SHARED_AVIFPNG_H

diff --git a/ebb29b37711c749681278f8b778f0e6c031c4ca2.patch b/ebb29b37711c749681278f8b778f0e6c031c4ca2.patch
new file mode 100644
index 0000000..b2b4881
--- /dev/null
+++ b/ebb29b37711c749681278f8b778f0e6c031c4ca2.patch
@@ -0,0 +1,150 @@
+From ebb29b37711c749681278f8b778f0e6c031c4ca2 Mon Sep 17 00:00:00 2001
+From: Wan-Teh Chang <wtc@google.com>
+Date: Mon, 27 Apr 2020 18:43:51 -0700
+Subject: [PATCH] Do not ignore GCC's -Wclobbered warning
+
+The C Standard requires certain local variables in the function calling
+setjmp be declared as volatile. I went through the code and declare
+variables as volatile according to the C Standard, except for the 'rgb'
+struct variable. Document my rationale.
+---
+ apps/shared/avifjpeg.c | 44 ++++++++++++++++++++++++++----------------
+ apps/shared/avifpng.c  | 25 ++++++++++++++++--------
+ 2 files changed, 44 insertions(+), 25 deletions(-)
+
+diff --git a/apps/shared/avifjpeg.c b/apps/shared/avifjpeg.c
+index 39bd0cd..5e68211 100644
+--- a/apps/shared/avifjpeg.c
++++ b/apps/shared/avifjpeg.c
+@@ -12,11 +12,6 @@
+ 
+ #include "iccjpeg.h"
+ 
+-// This warning triggers false postives way too often in here.
+-#if defined(__GNUC__) && !defined(__clang__)
+-#pragma GCC diagnostic ignored "-Wclobbered"
+-#endif
+-
+ struct my_error_mgr
+ {
+     struct jpeg_error_mgr pub;
+@@ -30,31 +25,44 @@ static void my_error_exit(j_common_ptr cinfo)
+     longjmp(myerr->setjmp_buffer, 1);
+ }
+ 
++// Note on setjmp() and volatile variables:
++//
++// K & R, The C Programming Language 2nd Ed, p. 254 says:
++//   ... Accessible objects have the values they had when longjmp was called,
++//   except that non-volatile automatic variables in the function calling setjmp
++//   become undefined if they were changed after the setjmp call.
++//
++// Therefore, 'iccData' is declared as volatile. 'rgb' should be declared as
++// volatile, but doing so would be inconvenient (try it) and since it is a
++// struct, the compiler is unlikely to put it in a register. 'ret' does not need
++// to be declared as volatile because it is not modified between setjmp and
++// longjmp. But GCC's -Wclobbered warning may have trouble figuring that out, so
++// we preemptively declare it as volatile.
++
+ avifBool avifJPEGRead(avifImage * avif, const char * inputFilename, avifPixelFormat requestedFormat, uint32_t requestedDepth)
+ {
+-    avifBool ret = AVIF_FALSE;
+-    FILE * f = NULL;
+-    uint8_t * iccData = NULL;
++    volatile avifBool ret = AVIF_FALSE;
++    uint8_t * volatile iccData = NULL;
+ 
+     avifRGBImage rgb;
+     memset(&rgb, 0, sizeof(avifRGBImage));
+ 
++    FILE * f = fopen(inputFilename, "rb");
++    if (!f) {
++        fprintf(stderr, "Can't open JPEG file for read: %s\n", inputFilename);
++        goto cleanup;
++    }
++
+     struct my_error_mgr jerr;
+     struct jpeg_decompress_struct cinfo;
+     cinfo.err = jpeg_std_error(&jerr.pub);
+     jerr.pub.error_exit = my_error_exit;
+     if (setjmp(jerr.setjmp_buffer)) {
+-        return AVIF_FALSE;
++        goto cleanup;
+     }
+ 
+     jpeg_create_decompress(&cinfo);
+ 
+-    f = fopen(inputFilename, "rb");
+-    if (!f) {
+-        fprintf(stderr, "Can't open JPEG file for read: %s\n", inputFilename);
+-        goto cleanup;
+-    }
+-
+     setup_read_icc_profile(&cinfo);
+     jpeg_stdio_src(&cinfo, f);
+     jpeg_read_header(&cinfo, TRUE);
+@@ -63,10 +71,12 @@ avifBool avifJPEGRead(avifImage * avif, const char * inputFilename, avifPixelFor
+     int row_stride = cinfo.output_width * cinfo.output_components;
+     JSAMPARRAY buffer = (*cinfo.mem->alloc_sarray)((j_common_ptr)&cinfo, JPOOL_IMAGE, row_stride, 1);
+ 
++    uint8_t * iccDataTmp;
+     unsigned int iccDataLen;
+-    if (read_icc_profile(&cinfo, &iccData, &iccDataLen)) {
++    if (read_icc_profile(&cinfo, &iccDataTmp, &iccDataLen)) {
++        iccData = iccDataTmp;
+         if (avif->profileFormat == AVIF_PROFILE_FORMAT_NONE) {
+-            avifImageSetProfileICC(avif, iccData, (size_t)iccDataLen);
++            avifImageSetProfileICC(avif, iccDataTmp, (size_t)iccDataLen);
+         } else {
+             fprintf(stderr, "WARNING: JPEG contains ICC profile which is being overridden with --nclx\n");
+         }
+diff --git a/apps/shared/avifpng.c b/apps/shared/avifpng.c
+index 3573a46..934b5aa 100644
+--- a/apps/shared/avifpng.c
++++ b/apps/shared/avifpng.c
+@@ -9,17 +9,26 @@
+ #include <stdlib.h>
+ #include <string.h>
+ 
+-// This warning triggers false postives way too often in here.
+-#if defined(__GNUC__) && !defined(__clang__)
+-#pragma GCC diagnostic ignored "-Wclobbered"
+-#endif
++// Note on setjmp() and volatile variables:
++//
++// K & R, The C Programming Language 2nd Ed, p. 254 says:
++//   ... Accessible objects have the values they had when longjmp was called,
++//   except that non-volatile automatic variables in the function calling setjmp
++//   become undefined if they were changed after the setjmp call.
++//
++// Therefore, 'rowPointers' is declared as volatile. 'rgb' should be declared as
++// volatile, but doing so would be inconvenient (try it) and since it is a
++// struct, the compiler is unlikely to put it in a register. 'readResult' and
++// 'writeResult' do not need to be declared as volatile because they are not
++// modified between setjmp and longjmp. But GCC's -Wclobbered warning may have
++// trouble figuring that out, so we preemptively declare them as volatile.
+ 
+ avifBool avifPNGRead(avifImage * avif, const char * inputFilename, avifPixelFormat requestedFormat, uint32_t requestedDepth, uint32_t * outPNGDepth)
+ {
+-    avifBool readResult = AVIF_FALSE;
++    volatile avifBool readResult = AVIF_FALSE;
+     png_structp png = NULL;
+     png_infop info = NULL;
+-    png_bytep * rowPointers = NULL;
++    png_bytep * volatile rowPointers = NULL;
+ 
+     avifRGBImage rgb;
+     memset(&rgb, 0, sizeof(avifRGBImage));
+@@ -149,10 +158,10 @@ avifBool avifPNGRead(avifImage * avif, const char * inputFilename, avifPixelForm
+ 
+ avifBool avifPNGWrite(avifImage * avif, const char * outputFilename, uint32_t requestedDepth)
+ {
+-    avifBool writeResult = AVIF_FALSE;
++    volatile avifBool writeResult = AVIF_FALSE;
+     png_structp png = NULL;
+     png_infop info = NULL;
+-    png_bytep * rowPointers = NULL;
++    png_bytep * volatile rowPointers = NULL;
+ 
+     avifRGBImage rgb;
+     memset(&rgb, 0, sizeof(avifRGBImage));

diff --git a/libavif.spec b/libavif.spec
index 51ecbae..1fc61f1 100644
--- a/libavif.spec
+++ b/libavif.spec
@@ -1,7 +1,7 @@
 %bcond_with aom
 
 Name:           libavif
-Version:        0.7.1
+Version:        0.7.2
 Release:        1%{?dist}
 Summary:        Library for encoding and decoding .avif files
 License:        BSD
@@ -10,6 +10,11 @@ Url:            https://github.com/AOMediaCodec/libavif
 
 Source0:        https://github.com/AOMediaCodec/libavif/archive/v%{version}/%{name}-%{version}.tar.gz
 
+Patch0:         e4e5d752ece581d6ef9fbb8bab0ab2edfde13fc5.patch
+Patch1:         ebb29b37711c749681278f8b778f0e6c031c4ca2.patch
+# https://github.com/AOMediaCodec/libavif/pull/155
+Patch2:         155.patch
+
 BuildRequires:  cmake
 BuildRequires:  gcc-c++
 BuildRequires:  nasm
@@ -89,6 +94,10 @@ popd
 %{_bindir}/avifenc
 
 %changelog
+* Wed Apr 29 2020 Andreas Schneider <asn@redhat.com> - 0.7.2-1
+- Update to version 0.7.2
+  * https://github.com/AOMediaCodec/libavif/blob/master/CHANGELOG.md
+
 * Wed Apr 29 2020 Andreas Schneider <asn@redhat.com> - 0.7.1-1
 - Update to version 0.7.1
 

diff --git a/sources b/sources
index 9b38806..c3f8005 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (libavif-0.7.1.tar.gz) = d6b2850797d37de3986bd1c1a366c8b35d1b1565db07ad7034cf4de88f17d2798d042b6fa61596b068161a645a9209070ac454dd5d9928cb6c08e5a58fe585ac
+SHA512 (libavif-0.7.2.tar.gz) = 543aae3dde2ed19a8d2d22425260d09f577fbddbd5bc293cc9ec97e427f3854e7a957b4975130b1129a0c73847398ce88ab22de48bec500b83bc56fde671e6b7

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-07-14 21:39 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-07-14 21:39 [rpms/libavif] epel9-next: Update to version 0.7.2 Andreas Schneider

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox