2 * This file is part of FFmpeg.
4 * FFmpeg is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * FFmpeg is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with FFmpeg; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 #include "libavutil/attributes.h"
24 #include "libavutil/mem_internal.h"
25 #include "libavcodec/apv_dsp.h"
28 static void check_decode_transquant_8(void)
30 LOCAL_ALIGNED_16(int16_t, input
, [64]);
31 LOCAL_ALIGNED_16(int16_t, qmatrix
, [64]);
32 LOCAL_ALIGNED_16(uint8_t, new_output
, [64]);
33 LOCAL_ALIGNED_16(uint8_t, ref_output
, [64]);
39 const int16_t *qmatrix
,
43 for (int i
= 0; i
< 64; i
++) {
44 // Any signed 12-bit integer.
45 input
[i
] = rnd() % 2048 - 1024;
47 // qmatrix input is premultiplied by level_scale, so
48 // range is 1 to 255 * 71. Interesting values are all
49 // at the low end of that, though.
50 qmatrix
[i
] = rnd() % 16 + 16;
53 call_ref(ref_output
, 8, input
, qmatrix
, 8, 4);
54 call_new(new_output
, 8, input
, qmatrix
, 8, 4);
56 if (memcmp(new_output
, ref_output
, 64 * sizeof(*ref_output
)))
59 bench_new(new_output
, 8, input
, qmatrix
, 8, 4);
62 static void check_decode_transquant_10(void)
64 LOCAL_ALIGNED_16( int16_t, input
, [64]);
65 LOCAL_ALIGNED_16( int16_t, qmatrix
, [64]);
66 LOCAL_ALIGNED_16(uint16_t, new_output
, [64]);
67 LOCAL_ALIGNED_16(uint16_t, ref_output
, [64]);
73 const int16_t *qmatrix
,
77 for (int i
= 0; i
< 64; i
++) {
78 // Any signed 14-bit integer.
79 input
[i
] = rnd() % 16384 - 8192;
81 // qmatrix input is premultiplied by level_scale, so
82 // range is 1 to 255 * 71. Interesting values are all
83 // at the low end of that, though.
84 qmatrix
[i
] = 16; //rnd() % 16 + 16;
87 call_ref(ref_output
, 16, input
, qmatrix
, 10, 4);
88 call_new(new_output
, 16, input
, qmatrix
, 10, 4);
90 if (memcmp(new_output
, ref_output
, 64 * sizeof(*ref_output
)))
93 bench_new(new_output
, 16, input
, qmatrix
, 10, 4);
96 void checkasm_check_apv_dsp(void)
100 ff_apv_dsp_init(&dsp
);
102 if (check_func(dsp
.decode_transquant
, "decode_transquant_8"))
103 check_decode_transquant_8();
105 if (check_func(dsp
.decode_transquant
, "decode_transquant_10"))
106 check_decode_transquant_10();
108 report("decode_transquant");