FFmpeg
apv_dsp.c
Go to the documentation of this file.
1 /*
2  * This file is part of FFmpeg.
3  *
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.
8  *
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.
13  *
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
17  */
18 
19 #include <stdint.h>
20 
21 #include "checkasm.h"
22 
23 #include "libavutil/attributes.h"
24 #include "libavutil/mem_internal.h"
25 #include "libavcodec/apv_dsp.h"
26 
27 
28 static void check_decode_transquant_8(void)
29 {
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]);
34 
35  declare_func(void,
36  void *output,
37  ptrdiff_t pitch,
38  const int16_t *input,
39  const int16_t *qmatrix,
40  int bit_depth,
41  int qp_shift);
42 
43  for (int i = 0; i < 64; i++) {
44  // Any signed 12-bit integer.
45  input[i] = rnd() % 2048 - 1024;
46 
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;
51  }
52 
53  call_ref(ref_output, 8, input, qmatrix, 8, 4);
54  call_new(new_output, 8, input, qmatrix, 8, 4);
55 
56  if (memcmp(new_output, ref_output, 64 * sizeof(*ref_output)))
57  fail();
58 
59  bench_new(new_output, 8, input, qmatrix, 8, 4);
60 }
61 
62 static void check_decode_transquant_10(void)
63 {
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]);
68 
69  declare_func(void,
70  void *output,
71  ptrdiff_t pitch,
72  const int16_t *input,
73  const int16_t *qmatrix,
74  int bit_depth,
75  int qp_shift);
76 
77  for (int i = 0; i < 64; i++) {
78  // Any signed 14-bit integer.
79  input[i] = rnd() % 16384 - 8192;
80 
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;
85  }
86 
87  call_ref(ref_output, 16, input, qmatrix, 10, 4);
88  call_new(new_output, 16, input, qmatrix, 10, 4);
89 
90  if (memcmp(new_output, ref_output, 64 * sizeof(*ref_output)))
91  fail();
92 
93  bench_new(new_output, 16, input, qmatrix, 10, 4);
94 }
95 
97 {
98  APVDSPContext dsp;
99 
100  ff_apv_dsp_init(&dsp);
101 
102  if (check_func(dsp.decode_transquant, "decode_transquant_8"))
104 
105  if (check_func(dsp.decode_transquant, "decode_transquant_10"))
107 
108  report("decode_transquant");
109 }
mem_internal.h
output
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce output
Definition: filter_design.txt:225
check_func
#define check_func(func,...)
Definition: checkasm.h:186
call_ref
#define call_ref(...)
Definition: checkasm.h:201
bit_depth
static void bit_depth(AudioStatsContext *s, const uint64_t *const mask, uint8_t *depth)
Definition: af_astats.c:246
fail
#define fail()
Definition: checkasm.h:195
checkasm.h
APVDSPContext
Definition: apv_dsp.h:26
rnd
#define rnd()
Definition: checkasm.h:179
apv_dsp.h
LOCAL_ALIGNED_16
#define LOCAL_ALIGNED_16(t, v,...)
Definition: mem_internal.h:130
call_new
#define call_new(...)
Definition: checkasm.h:304
checkasm_check_apv_dsp
void checkasm_check_apv_dsp(void)
Definition: apv_dsp.c:96
ff_apv_dsp_init
av_cold void ff_apv_dsp_init(APVDSPContext *dsp)
Definition: apv_dsp.c:133
attributes.h
input
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some input
Definition: filter_design.txt:172
report
#define report
Definition: checkasm.h:198
bench_new
#define bench_new(...)
Definition: checkasm.h:375
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
check_decode_transquant_10
static void check_decode_transquant_10(void)
Definition: apv_dsp.c:62
check_decode_transquant_8
static void check_decode_transquant_8(void)
Definition: apv_dsp.c:28
declare_func
#define declare_func(ret,...)
Definition: checkasm.h:190
APVDSPContext::decode_transquant
void(* decode_transquant)(void *output, ptrdiff_t pitch, const int16_t *input, const int16_t *qmatrix, int bit_depth, int qp_shift)
Definition: apv_dsp.h:27