PR #23623 opened by Zhao Zhili (quink)
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23623
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23623.patch

av_gcd_q64 was declared in rational64.h but never defined. Mirror the
32-bit av_gcd_q semantics.

# Summary of changes

Briefly describe what this PR does and why.

<!--
If this PR requires new FATE test samples, attach them to the PR and
list their target paths below (relative to the fate-suite root).

Attached filenames must match the sample's filename:

```fate-samples
# e.g. vorbis/new-sample.ogg
```
-->



>From 06169124bba761f9bbd1668b9745ecadf2b08481 Mon Sep 17 00:00:00 2001
From: Zhao Zhili <[email protected]>
Date: Sun, 28 Jun 2026 14:22:01 +0800
Subject: [PATCH] swscale/rational64: implement av_gcd_q64

av_gcd_q64 was declared in rational64.h but never defined. Mirror the
32-bit av_gcd_q semantics.
---
 libswscale/rational64.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/libswscale/rational64.c b/libswscale/rational64.c
index 998e46c572..9c1bcdbc6d 100644
--- a/libswscale/rational64.c
+++ b/libswscale/rational64.c
@@ -29,6 +29,7 @@
 #include <limits.h>
 
 #include "libavutil/int128.h"
+#include "libavutil/mathematics.h"
 #include "rational64.h"
 
 static av_int128 gcd128(av_int128 a, av_int128 b)
@@ -144,3 +145,14 @@ AVRational64 av_sub_q64(AVRational64 b, AVRational64 c)
                               av_mul128(av_to128i(c.num), av_to128i(b.den))),
                     av_mul128(av_to128i(b.den), av_to128i(c.den)));
 }
+
+AVRational64 av_gcd_q64(AVRational64 a, AVRational64 b, int max_den, 
AVRational64 def)
+{
+    int64_t gcd = av_gcd(a.den, b.den);
+    /* lcm can exceed INT64_MAX, so keep it in 128-bit until the comparison */
+    av_int128 lcm = av_mul128(av_to128i(a.den / gcd), av_to128i(b.den));
+
+    if (av_cmp128(lcm, av_to128i(max_den)) < 0)
+        return av_make_q64(av_gcd(a.num, b.num), av_from128i(lcm));
+    return def;
+}
-- 
2.52.0

_______________________________________________
ffmpeg-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to