checkasm/flacdsp: add LPC test

This commit is contained in:
Rémi Denis-Courmont 2023-11-15 18:21:18 +02:00
parent cd6089dc9c
commit 8a984aca59
1 changed files with 32 additions and 0 deletions

View File

@ -54,6 +54,28 @@ static void check_decorrelate(uint8_t **ref_dst, uint8_t **ref_src, uint8_t **ne
bench_new(new_dst, (int32_t **)new_src, channels, BUF_SIZE / sizeof(int32_t), 8); bench_new(new_dst, (int32_t **)new_src, channels, BUF_SIZE / sizeof(int32_t), 8);
} }
static void check_lpc(int pred_order)
{
int qlevel = rnd() % 16;
LOCAL_ALIGNED_16(int32_t, coeffs, [32]);
LOCAL_ALIGNED_16(int32_t, dst0, [BUF_SIZE]);
LOCAL_ALIGNED_16(int32_t, dst1, [BUF_SIZE]);
declare_func(void, int32_t *, const int[32], int, int, int);
for (int i = 0; i < 32; i++)
coeffs[i] = rnd();
for (int i = 0; i < BUF_SIZE; i++)
dst0[i] = rnd();
memcpy(dst1, dst0, BUF_SIZE * sizeof (int32_t));
call_ref(dst0, coeffs, pred_order, qlevel, BUF_SIZE);
call_new(dst1, coeffs, pred_order, qlevel, BUF_SIZE);
if (memcmp(dst0, dst1, BUF_SIZE * sizeof (int32_t)) != 0)
fail();
bench_new(dst1, coeffs, pred_order, qlevel, BUF_SIZE);
}
void checkasm_check_flacdsp(void) void checkasm_check_flacdsp(void)
{ {
LOCAL_ALIGNED_16(uint8_t, ref_dst, [BUF_SIZE*MAX_CHANNELS]); LOCAL_ALIGNED_16(uint8_t, ref_dst, [BUF_SIZE*MAX_CHANNELS]);
@ -72,6 +94,7 @@ void checkasm_check_flacdsp(void)
{ AV_SAMPLE_FMT_S16, 16 }, { AV_SAMPLE_FMT_S16, 16 },
{ AV_SAMPLE_FMT_S32, 32 }, { AV_SAMPLE_FMT_S32, 32 },
}; };
static const signed char pred_orders[] = { 13, 16, 29, 32 };
FLACDSPContext h; FLACDSPContext h;
int i, j; int i, j;
@ -88,4 +111,13 @@ void checkasm_check_flacdsp(void)
} }
report("decorrelate"); report("decorrelate");
for (i = 0; i < FF_ARRAY_ELEMS(pred_orders); i++)
if (check_func(h.lpc16, "flac_lpc_16_%d", pred_orders[i]))
check_lpc(pred_orders[i]);
for (i = 0; i < FF_ARRAY_ELEMS(pred_orders); i++)
if (check_func(h.lpc32, "flac_lpc_32_%d", pred_orders[i]))
check_lpc(pred_orders[i]);
report("lpc");
} }