[FFmpeg-devel] [PATCH 9/9] avcodec/opus_pvq: Avoid indirection when possible
Andreas Rheinhardt
andreas.rheinhardt at outlook.com
Fri Oct 7 23:25:08 EEST 2022
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
---
libavcodec/opus_pvq.c | 4 ++--
libavcodec/opus_pvq.h | 3 +++
libavcodec/opus_pvq_template.c | 35 ++++++++++++++++++----------------
libavcodec/opusenc_psy.c | 12 ++++++------
4 files changed, 30 insertions(+), 24 deletions(-)
diff --git a/libavcodec/opus_pvq.c b/libavcodec/opus_pvq.c
index 8ef0f85a81..26d4e436e1 100644
--- a/libavcodec/opus_pvq.c
+++ b/libavcodec/opus_pvq.c
@@ -511,9 +511,9 @@ int av_cold ff_celt_pvq_init(CeltPVQ **pvq, int encode)
#if CONFIG_OPUS_ENCODER
#if CONFIG_OPUS_DECODER
- s->quant_band = encode ? pvq_quant_band_enc : pvq_quant_band_dec;
+ s->quant_band = encode ? ff_pvq_quant_band_enc : pvq_quant_band_dec;
#else
- s->quant_band = pvq_quant_band_enc;
+ s->quant_band = ff_pvq_quant_band_enc;
#endif
s->pvq_search = ppp_pvq_search_c;
#if ARCH_X86
diff --git a/libavcodec/opus_pvq.h b/libavcodec/opus_pvq.h
index b71bc49034..4907025125 100644
--- a/libavcodec/opus_pvq.h
+++ b/libavcodec/opus_pvq.h
@@ -26,6 +26,7 @@
#include "libavutil/mem_internal.h"
#include "opus_celt.h"
+#include "opus_rc.h"
#define QUANT_FN(name) uint32_t (name)(struct CeltPVQ *pvq, CeltFrame *f, \
OpusRangeCoder *rc, const int band, float *X, \
@@ -47,4 +48,6 @@ void ff_celt_pvq_init_x86(struct CeltPVQ *s);
int ff_celt_pvq_init(struct CeltPVQ **pvq, int encode);
void ff_celt_pvq_uninit(struct CeltPVQ **pvq);
+QUANT_FN(ff_pvq_quant_band_enc);
+
#endif /* AVCODEC_OPUS_PVQ_H */
diff --git a/libavcodec/opus_pvq_template.c b/libavcodec/opus_pvq_template.c
index 5f03f3d415..79e8e4ca52 100644
--- a/libavcodec/opus_pvq_template.c
+++ b/libavcodec/opus_pvq_template.c
@@ -24,14 +24,17 @@
*/
#undef FUNC
+#undef STATIC
#if ENCODING
-#define FUNC(name) name ## _enc
+#define STATIC
+#define FUNC(name) ff_ ## name ## _enc
#else
+#define STATIC static
#define FUNC(name) name ## _dec
#endif
-static
+STATIC
uint32_t FUNC(pvq_quant_band)(CeltPVQ *const pvq, CeltFrame *const f,
OpusRangeCoder *const rc,
const int band, float *X,
@@ -256,8 +259,8 @@ uint32_t FUNC(pvq_quant_band)(CeltPVQ *const pvq, CeltFrame *const f,
sign = 1 - 2 * sign;
/* We use orig_fill here because we want to fold the side, but if
itheta==16384, we'll have cleared the low bits of fill. */
- cm = pvq->quant_band(pvq, f, rc, band, x2, NULL, N, mbits, blocks, lowband, duration,
- lowband_out, level, gain, lowband_scratch, orig_fill);
+ cm = FUNC(pvq_quant_band)(pvq, f, rc, band, x2, NULL, N, mbits, blocks, lowband, duration,
+ lowband_out, level, gain, lowband_scratch, orig_fill);
/* We don't split N=2 bands, so cm is either 1 or 0 (for a fold-collapse),
and there's no need to worry about mixing with the other channel. */
y2[0] = -sign * x2[1];
@@ -309,25 +312,25 @@ uint32_t FUNC(pvq_quant_band)(CeltPVQ *const pvq, CeltFrame *const f,
if (mbits >= sbits) {
/* In stereo mode, we do not apply a scaling to the mid
* because we need the normalized mid for folding later */
- cm = pvq->quant_band(pvq, f, rc, band, X, NULL, N, mbits, blocks,
- lowband, duration, next_lowband_out1, next_level,
- stereo ? 1.0f : (gain * mid), lowband_scratch, fill);
+ cm = FUNC(pvq_quant_band)(pvq, f, rc, band, X, NULL, N, mbits, blocks,
+ lowband, duration, next_lowband_out1, next_level,
+ stereo ? 1.0f : (gain * mid), lowband_scratch, fill);
rebalance = mbits - (rebalance - f->remaining2);
if (rebalance > 3 << 3 && itheta != 0)
sbits += rebalance - (3 << 3);
/* For a stereo split, the high bits of fill are always zero,
* so no folding will be done to the side. */
- cmt = pvq->quant_band(pvq, f, rc, band, Y, NULL, N, sbits, blocks,
- next_lowband2, duration, NULL, next_level,
- gain * side, NULL, fill >> blocks);
+ cmt = FUNC(pvq_quant_band)(pvq, f, rc, band, Y, NULL, N, sbits, blocks,
+ next_lowband2, duration, NULL, next_level,
+ gain * side, NULL, fill >> blocks);
cm |= cmt << ((B0 >> 1) & (stereo - 1));
} else {
/* For a stereo split, the high bits of fill are always zero,
* so no folding will be done to the side. */
- cm = pvq->quant_band(pvq, f, rc, band, Y, NULL, N, sbits, blocks,
- next_lowband2, duration, NULL, next_level,
- gain * side, NULL, fill >> blocks);
+ cm = FUNC(pvq_quant_band)(pvq, f, rc, band, Y, NULL, N, sbits, blocks,
+ next_lowband2, duration, NULL, next_level,
+ gain * side, NULL, fill >> blocks);
cm <<= ((B0 >> 1) & (stereo - 1));
rebalance = sbits - (rebalance - f->remaining2);
if (rebalance > 3 << 3 && itheta != 16384)
@@ -335,9 +338,9 @@ uint32_t FUNC(pvq_quant_band)(CeltPVQ *const pvq, CeltFrame *const f,
/* In stereo mode, we do not apply a scaling to the mid because
* we need the normalized mid for folding later */
- cm |= pvq->quant_band(pvq, f, rc, band, X, NULL, N, mbits, blocks,
- lowband, duration, next_lowband_out1, next_level,
- stereo ? 1.0f : (gain * mid), lowband_scratch, fill);
+ cm |= FUNC(pvq_quant_band)(pvq, f, rc, band, X, NULL, N, mbits, blocks,
+ lowband, duration, next_lowband_out1, next_level,
+ stereo ? 1.0f : (gain * mid), lowband_scratch, fill);
}
}
} else {
diff --git a/libavcodec/opusenc_psy.c b/libavcodec/opusenc_psy.c
index 17a2efd8d5..0ec915d3c5 100644
--- a/libavcodec/opusenc_psy.c
+++ b/libavcodec/opusenc_psy.c
@@ -54,14 +54,14 @@ static float pvq_band_cost(CeltPVQ *pvq, CeltFrame *f, OpusEncRangeCoder *rce, i
}
if (f->dual_stereo) {
- pvq->quant_band(pvq, f, rc, band, X, NULL, band_size, b / 2, f->blocks, NULL,
- f->size, norm1, 0, 1.0f, lowband_scratch, cm[0]);
+ ff_pvq_quant_band_enc(pvq, f, rc, band, X, NULL, band_size, b / 2, f->blocks, NULL,
+ f->size, norm1, 0, 1.0f, lowband_scratch, cm[0]);
- pvq->quant_band(pvq, f, rc, band, Y, NULL, band_size, b / 2, f->blocks, NULL,
- f->size, norm2, 0, 1.0f, lowband_scratch, cm[1]);
+ ff_pvq_quant_band_enc(pvq, f, rc, band, Y, NULL, band_size, b / 2, f->blocks, NULL,
+ f->size, norm2, 0, 1.0f, lowband_scratch, cm[1]);
} else {
- pvq->quant_band(pvq, f, rc, band, X, Y, band_size, b, f->blocks, NULL, f->size,
- norm1, 0, 1.0f, lowband_scratch, cm[0] | cm[1]);
+ ff_pvq_quant_band_enc(pvq, f, rc, band, X, Y, band_size, b, f->blocks, NULL, f->size,
+ norm1, 0, 1.0f, lowband_scratch, cm[0] | cm[1]);
}
for (i = 0; i < band_size; i++) {
--
2.34.1
More information about the ffmpeg-devel
mailing list