[FFmpeg-cvslog] avcodec/ratecontrol: Avoid function pointer casts
Andreas Rheinhardt
git at videolan.org
Thu Mar 28 05:01:44 EET 2024
ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at outlook.com> | Mon Mar 25 02:24:22 2024 +0100| [6edd83c0e2f9fc4b483c497485423281b376a7f5] | committer: Andreas Rheinhardt
avcodec/ratecontrol: Avoid function pointer casts
It is undefined behaviour to call a function with a different
signature for the call than the actual function signature;
there are no exceptions for void* and RateControlEntry*.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6edd83c0e2f9fc4b483c497485423281b376a7f5
---
libavcodec/ratecontrol.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c
index 55ce054735..031da7a4f6 100644
--- a/libavcodec/ratecontrol.c
+++ b/libavcodec/ratecontrol.c
@@ -78,6 +78,11 @@ static inline double qp2bits(RateControlEntry *rce, double qp)
return rce->qscale * (double)(rce->i_tex_bits + rce->p_tex_bits + 1) / qp;
}
+static double qp2bits_cb(void *rce, double qp)
+{
+ return qp2bits(rce, qp);
+}
+
static inline double bits2qp(RateControlEntry *rce, double bits)
{
if (bits < 0.9) {
@@ -86,6 +91,11 @@ static inline double bits2qp(RateControlEntry *rce, double bits)
return rce->qscale * (double)(rce->i_tex_bits + rce->p_tex_bits + 1) / bits;
}
+static double bits2qp_cb(void *rce, double qp)
+{
+ return bits2qp(rce, qp);
+}
+
static double get_diff_limited_q(MpegEncContext *s, RateControlEntry *rce, double q)
{
RateControlContext *rcc = &s->rc_context;
@@ -506,8 +516,8 @@ av_cold int ff_rate_control_init(MpegEncContext *s)
NULL
};
static double (* const func1[])(void *, double) = {
- (double (*)(void *, double)) bits2qp,
- (double (*)(void *, double)) qp2bits,
+ bits2qp_cb,
+ qp2bits_cb,
NULL
};
static const char * const func1_names[] = {
More information about the ffmpeg-cvslog
mailing list