avcodec/svq1enc: Move initializing DSP out of svq1enc.c

Otherwise svq1enc.o gets pulled in by the svq1encdsp checkasm
test and it in turn pulls the rest of lavc in.
Besides being bad size-wise this also has the downside that
it pulls in avpriv_(cga|vga16)_font from libavutil which are
marked as being imported from another library when building
libavcodec as a DLL and this breaks checkasm because it links
both lavc and lavu statically.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt 2024-02-28 13:42:38 +01:00
parent 88b3b09afa
commit 4460cb485b
2 changed files with 25 additions and 24 deletions

View File

@ -137,16 +137,6 @@ static void svq1_write_header(SVQ1EncContext *s, PutBitContext *pb, int frame_ty
#define QUALITY_THRESHOLD 100
#define THRESHOLD_MULTIPLIER 0.6
static int ssd_int8_vs_int16_c(const int8_t *pix1, const int16_t *pix2,
intptr_t size)
{
int score = 0, i;
for (i = 0; i < size; i++)
score += (pix1[i] - pix2[i]) * (pix1[i] - pix2[i]);
return score;
}
static int encode_block(SVQ1EncContext *s, uint8_t *src, uint8_t *ref,
uint8_t *decoded, int stride, unsigned level,
int threshold, int lambda, int intra)
@ -760,16 +750,3 @@ const FFCodec ff_svq1_encoder = {
AV_PIX_FMT_NONE },
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
};
void ff_svq1enc_init(SVQ1EncDSPContext *c)
{
c->ssd_int8_vs_int16 = ssd_int8_vs_int16_c;
#if ARCH_PPC
ff_svq1enc_init_ppc(c);
#elif ARCH_RISCV
ff_svq1enc_init_riscv(c);
#elif ARCH_X86
ff_svq1enc_init_x86(c);
#endif
}

View File

@ -23,14 +23,38 @@
#include <stdint.h>
#include "config.h"
typedef struct SVQ1EncDSPContext {
int (*ssd_int8_vs_int16)(const int8_t *pix1, const int16_t *pix2,
intptr_t size);
} SVQ1EncDSPContext;
void ff_svq1enc_init(SVQ1EncDSPContext *c);
void ff_svq1enc_init_ppc(SVQ1EncDSPContext *c);
void ff_svq1enc_init_riscv(SVQ1EncDSPContext *c);
void ff_svq1enc_init_x86(SVQ1EncDSPContext *c);
static int ssd_int8_vs_int16_c(const int8_t *pix1, const int16_t *pix2,
intptr_t size)
{
int score = 0;
for (intptr_t i = 0; i < size; i++)
score += (pix1[i] - pix2[i]) * (pix1[i] - pix2[i]);
return score;
}
static inline void ff_svq1enc_init(SVQ1EncDSPContext *c)
{
c->ssd_int8_vs_int16 = ssd_int8_vs_int16_c;
#if ARCH_PPC
ff_svq1enc_init_ppc(c);
#elif ARCH_RISCV
ff_svq1enc_init_riscv(c);
#elif ARCH_X86
ff_svq1enc_init_x86(c);
#endif
}
#endif /* AVCODEC_SVQ1ENCDSP_H */