梦见青蛇是什么预兆| 藏红花有什么作用| s属性什么意思| 什么水果对肝有好处| 社恐是什么意思| 足跟痛吃什么药| 肢体麻木是什么原因| 下聘是什么意思| 阴虚火旺吃什么中成药好| 扁桃体发炎有什么症状| 突然暴瘦是什么原因| 牙周炎吃什么消炎药| 左金丸治什么病最好| 配裙子穿什么鞋子好看| 心律平又叫什么名字| 女性私处长痘痘是什么原因| 18年是什么年| 怀孕补铁吃什么| 什么叫渣男| 金屋藏娇是什么意思| 木耳吃多了有什么坏处| 舌头裂纹是什么病| 乌龟为什么会叫| 阿司匹林是什么| 什么人容易得胆结石| 经常头晕吃什么食物好| 去黄疸吃什么药| 葛根的作用是什么| 铁什么时候吃| 众望所归是什么意思| 免疫抑制剂是什么意思| 白带什么颜色正常| 长情是什么意思| 包皮什么意思| 距骨在什么位置| 甲抗是什么原因引起的| 用什么锅炒菜对人体健康更有益| 龙筋是什么| 小孩子注意力不集中是什么原因| 缺钠有什么症状和危害| 鳊鱼是什么鱼| 江苏龙虾盱眙读什么| dx是什么| 口腔老是出血是什么原因| 饮鸩止渴是什么意思| 后悔是什么意思| 2月出生的是什么星座| 小孩记忆力差需要补充什么营养| 血管狭窄吃什么食物好| 子宫脱垂有什么症状| 臻字五行属什么的| 早期流产是什么症状| 吐气如兰是什么意思| 一龙一什么填十二生肖| 妇科病吃什么药| 葛根粉吃了有什么作用| 555是什么烟| 关节间隙变窄什么意思| 开普拉多的都是什么人| 1977年出生是什么命| 淋巴结是什么意思| 结婚五十年是什么婚| prf是什么意思| 彰字五行属什么| 血脂高吃什么能降下来| 聚乙二醇是什么| 阴虚阳亢是什么意思| 尉姓氏读什么的| 冰妹是什么| 阴道炎用什么洗| 透支是什么意思| 阴道流黄水是什么病| 效果是什么意思| 男人喜欢女人什么| 下颌骨紊乱挂什么科| 什么叫白眼狼| 张学友属什么生肖| fm什么意思| 眩晕症是什么引起的| 吴承恩是什么朝代的| php是什么意思| 结婚14年是什么婚| 肾阴阳两虚吃什么药| 为什么早上起来血压高| 大便黑色的是什么原因| 清远有什么好玩的| 率真是什么意思| 眼睛经常充血是什么原因引起的| 脑死亡是什么原因引起的| 矢车菊在中国叫什么名| 性欲什么意思| 屁臭是什么原因造成的| 久经沙场是什么意思| 黔驴技穷的意思是什么| 手指发痒是什么原因| 6.14是什么星座| 墨菲定律是什么意思| 10015是什么电话| 耷拉的近义词是什么| 什么是梅雨季节| 倒钩是什么意思| 1964年出生属什么| 见红是什么意思| 红薯什么时候种植| 月球是地球的什么星| 怨念是什么意思| 璠字取名寓意什么| 皮肤过敏用什么药| 水奶是什么| 尿蛋白是什么| 9月30日什么星座| 嗣女是什么意思| 三点水加盆读什么| 尿结石吃什么药| 头发麻是什么病的前兆| 一个月一个并念什么| cybex是什么牌子| 统筹支付是什么意思| tfboys是什么意思| 低钾是什么原因造成的| 有利有弊是什么意思| 抽筋吃什么药见效快| 外阴萎缩是什么症状| 芈月传芈姝结局是什么| lanvin是什么牌子| 水火不容是什么意思| 有黄痰吃什么药| msi是什么比赛| 冷冻液是什么| 个个想出头是什么生肖| 包皮过长有什么危害| 邹去掉耳朵旁读什么| 丝状疣用什么药| 妇科清洁度3度用什么药治疗| 03年属什么的| 鱼油什么牌子好| 什么样的人容易得心梗| 12月18号是什么星座| 清五行属什么| 支气管炎有什么症状| 牡丹花代表什么生肖| 紫癜是什么病| 六月初十是什么日子| 卡卡是什么意思| swisse是什么意思| 五月十二是什么星座| 黄盖代表什么生肖| 什么快递最便宜| 回流是什么意思| 舍利子到底是什么| 消防支队长是什么级别| 尼特族是什么意思| 肠胃不好适合喝什么茶| h7n9是什么病毒| 未必是什么意思| 抵押是什么意思| 黄墙绿地的作用是什么| 假如时光倒流我能做什么| 血压太低会有什么危险| 长史相当于现在什么官| 滇红属于什么茶| 漫反射是什么意思| 王朔为什么不娶徐静蕾| 梦见自己假牙掉了是什么意思| 哪吒他妈叫什么名字| 暂时无法接通是什么意思| 长命百岁是什么生肖| 11月17号是什么星座| 属猪五行属什么| 茶叶有什么功效与作用| 嘴唇神经跳动是什么原因| 望梅止渴什么意思| 口腔上火了吃什么降火最快| 右肋骨下方是什么器官| 翠鸟吃什么| 胎盘做成胶囊吃有什么好处| 胃泌素偏低是什么原因| 拉肚子吃什么药好| 梦见偷别人东西是什么意思| 鼠的本命佛是什么佛| 胃寒湿气重吃什么药效果最好| 为什么十个络腮九个帅| 梦见怀孕流产是什么意思| 腹胀吃什么药| 息肉吃什么药可以消掉| 电磁炉滴滴响不加热是什么原因| 怀孕早期需要注意什么| showroom是什么意思| 儿童扁桃体发炎吃什么药| zd是什么意思| 拔牙后吃什么消炎药| 92年的猴是什么命| 饱和脂肪是什么| 倾尽所有什么意思| 蚯蚓用什么呼吸| 缪斯什么意思| 什么食物去湿气| 女人裹脚是从什么时候开始的| 蝴蝶是什么意思| 原则性问题是什么意思| 离子水是什么水| 呼吸科属于什么科室| 血虚吃什么中成药最好| 舌头溃疡吃什么药| 人的心脏在什么位置| 盐酸舍曲林片治疗什么程度的抑郁| 梦见妖魔鬼怪是什么意思| 病毒的繁殖方式是什么| 磨牙是什么原因| 折耳根是什么东西| 女生肚子疼是什么原因| 天麻有什么作用| 什么叫造影| 外阴裂口用什么药| 为什么一吃完饭就肚子疼| 乳腺结节挂什么科| 内参是什么意思| 虎的本命佛是什么佛| 毛毛虫吃什么| 段泥紫砂壶适合泡什么茶| 梦到借钱给别人什么意思| egm是什么意思| 黄瓜炒什么好吃| 带状疱疹能吃什么| 肾结石都有什么症状| 偶是什么意思| 什么木材有香味| 做梦孩子死了什么预兆| 6月19号是什么星座| ab和b型血生的孩子是什么血型| 怀孕十天有什么反应| 女性更年期在什么年龄段| 令妹是什么意思| 迪丽热巴是什么族| bbs是什么意思| 吃瓜群众什么意思| 利湿是什么意思| 经常梦遗是什么原因| 阿司匹林什么时候吃| 猫咪弓背是什么原因| 迪丽热巴的全名叫什么| 黔驴技穷是什么意思| 宝宝缺锌有什么表现和症状| 失落感是什么意思| 视频脑电图能检查出什么| 眼睛干痒滴什么眼药水| 甲亢看什么指标| cea升高是什么意思| 阴虱病是什么原因引起的| 血红素高是什么原因| 人间仙境是什么意思| 什么人不适合戴翡翠| 肩周炎挂什么科室| 很无奈是什么意思| 惊讶的什么| 巨蟹女和什么星座最配| 13岁属什么生肖| 士大夫什么意思| 面部油腻是什么原因| 献血浆有什么好处| 神经衰弱是什么病| 健康是什么意思| 婴儿黄疸母亲忌口什么| 胰岛素针头4mm和5mm有什么区别| 百度

湖南6名村干部擅自抵制镇党委评奖结果被通报查处龙桥镇单项奖


Directory: ../../../ffmpeg/
File: src/tests/checkasm/vp8dsp.c
Date: 2025-08-04 00:43:16
Exec Total Coverage
Lines: 313 319 98.1%
Functions: 13 13 100.0%
Branches: 209 270 77.4%

Line Branch Exec Source
1 /*
2 * Copyright (c) 2016 Martin Storsjo
3 *
4 * This file is part of FFmpeg.
5 *
6 * FFmpeg is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along
17 * with FFmpeg; if not, write to the Free Software Foundation, Inc.,
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 */
20
21 #include <stdbool.h>
22 #include <string.h>
23
24 #include "config_components.h"
25 #include "libavcodec/vp8dsp.h"
26
27 #include "libavutil/common.h"
28 #include "libavutil/intreadwrite.h"
29 #include "libavutil/mem_internal.h"
30
31 #include "checkasm.h"
32
33 #define PIXEL_STRIDE 16
34
35 #define randomize_buffers(src, dst, stride, coef) \
36 do { \
37 int x, y; \
38 for (y = 0; y < 4; y++) { \
39 AV_WN32A((src) + y * (stride), rnd()); \
40 AV_WN32A((dst) + y * (stride), rnd()); \
41 for (x = 0; x < 4; x++) \
42 (coef)[y * 4 + x] = (src)[y * (stride) + x] - \
43 (dst)[y * (stride) + x]; \
44 } \
45 } while (0)
46
47 466 static void dct4x4(int16_t *coef)
48 {
49 int i;
50
2/2
✓ Branch 0 taken 1864 times.
✓ Branch 1 taken 466 times.
2330 for (i = 0; i < 4; i++) {
51 1864 const int a1 = (coef[i*4 + 0] + coef[i*4 + 3]) * 8;
52 1864 const int b1 = (coef[i*4 + 1] + coef[i*4 + 2]) * 8;
53 1864 const int c1 = (coef[i*4 + 1] - coef[i*4 + 2]) * 8;
54 1864 const int d1 = (coef[i*4 + 0] - coef[i*4 + 3]) * 8;
55 1864 coef[i*4 + 0] = a1 + b1;
56 1864 coef[i*4 + 1] = (c1 * 2217 + d1 * 5352 + 14500) >> 12;
57 1864 coef[i*4 + 2] = a1 - b1;
58 1864 coef[i*4 + 3] = (d1 * 2217 - c1 * 5352 + 7500) >> 12;
59 }
60
2/2
✓ Branch 0 taken 1864 times.
✓ Branch 1 taken 466 times.
2330 for (i = 0; i < 4; i++) {
61 1864 const int a1 = coef[i + 0*4] + coef[i + 3*4];
62 1864 const int b1 = coef[i + 1*4] + coef[i + 2*4];
63 1864 const int c1 = coef[i + 1*4] - coef[i + 2*4];
64 1864 const int d1 = coef[i + 0*4] - coef[i + 3*4];
65 1864 coef[i + 0*4] = (a1 + b1 + 7) >> 4;
66 1864 coef[i + 1*4] = ((c1 * 2217 + d1 * 5352 + 12000) >> 16) + !!d1;
67 1864 coef[i + 2*4] = (a1 - b1 + 7) >> 4;
68 1864 coef[i + 3*4] = (d1 * 2217 - c1 * 5352 + 51000) >> 16;
69 }
70 466 }
71
72 26 static void wht4x4(int16_t *coef)
73 {
74 int i;
75
2/2
✓ Branch 0 taken 104 times.
✓ Branch 1 taken 26 times.
130 for (i = 0; i < 4; i++) {
76 104 int a1 = coef[0 * 4 + i];
77 104 int b1 = coef[1 * 4 + i];
78 104 int c1 = coef[2 * 4 + i];
79 104 int d1 = coef[3 * 4 + i];
80 int e1;
81 104 a1 += b1;
82 104 d1 -= c1;
83 104 e1 = (a1 - d1) >> 1;
84 104 b1 = e1 - b1;
85 104 c1 = e1 - c1;
86 104 a1 -= c1;
87 104 d1 += b1;
88 104 coef[0 * 4 + i] = a1;
89 104 coef[1 * 4 + i] = c1;
90 104 coef[2 * 4 + i] = d1;
91 104 coef[3 * 4 + i] = b1;
92 }
93
2/2
✓ Branch 0 taken 104 times.
✓ Branch 1 taken 26 times.
130 for (i = 0; i < 4; i++) {
94 104 int a1 = coef[i * 4 + 0];
95 104 int b1 = coef[i * 4 + 1];
96 104 int c1 = coef[i * 4 + 2];
97 104 int d1 = coef[i * 4 + 3];
98 int e1;
99 104 a1 += b1;
100 104 d1 -= c1;
101 104 e1 = (a1 - d1) >> 1;
102 104 b1 = e1 - b1;
103 104 c1 = e1 - c1;
104 104 a1 -= c1;
105 104 d1 += b1;
106 104 coef[i * 4 + 0] = a1 * 2;
107 104 coef[i * 4 + 1] = c1 * 2;
108 104 coef[i * 4 + 2] = d1 * 2;
109 104 coef[i * 4 + 3] = b1 * 2;
110 }
111 26 }
112
113 26 static void check_idct(VP8DSPContext *d, bool is_vp7)
114 {
115 26 LOCAL_ALIGNED_16(uint8_t, src, [4 * 4]);
116 26 LOCAL_ALIGNED_16(uint8_t, dst, [4 * 4]);
117 26 LOCAL_ALIGNED_16(uint8_t, dst0, [4 * 4]);
118 26 LOCAL_ALIGNED_16(uint8_t, dst1, [4 * 4]);
119 26 LOCAL_ALIGNED_16(int16_t, coef, [4 * 4]);
120 26 LOCAL_ALIGNED_16(int16_t, subcoef0, [4 * 4]);
121 26 LOCAL_ALIGNED_16(int16_t, subcoef1, [4 * 4]);
122 int dc;
123
2/2
✓ Branch 1 taken 24 times.
✓ Branch 2 taken 2 times.
26 declare_func_emms(AV_CPU_FLAG_MMX, void, uint8_t *dst, int16_t *block, ptrdiff_t stride);
124
125
4/4
✓ Branch 2 taken 416 times.
✓ Branch 3 taken 104 times.
✓ Branch 4 taken 104 times.
✓ Branch 5 taken 26 times.
546 randomize_buffers(src, dst, 4, coef);
126
127 26 dct4x4(coef);
128
129
2/2
✓ Branch 0 taken 52 times.
✓ Branch 1 taken 26 times.
78 for (dc = 0; dc <= 1; dc++) {
130
2/2
✓ Branch 0 taken 26 times.
✓ Branch 1 taken 26 times.
52 void (*idct)(uint8_t *, int16_t *, ptrdiff_t) = dc ? d->vp8_idct_dc_add : d->vp8_idct_add;
131
132
4/4
✓ Branch 2 taken 26 times.
✓ Branch 3 taken 26 times.
✓ Branch 5 taken 7 times.
✓ Branch 6 taken 45 times.
52 if (check_func(idct, "vp%d_idct_%sadd", 8 - is_vp7, dc ? "dc_" : "")) {
133
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 3 times.
7 if (dc) {
134 4 memset(subcoef0, 0, 4 * 4 * sizeof(int16_t));
135 4 subcoef0[0] = coef[0];
136 } else {
137 3 memcpy(subcoef0, coef, 4 * 4 * sizeof(int16_t));
138 }
139 7 memcpy(dst0, dst, 4 * 4);
140 7 memcpy(dst1, dst, 4 * 4);
141 7 memcpy(subcoef1, subcoef0, 4 * 4 * sizeof(int16_t));
142 // Note, this uses a pixel stride of 4, even though the real decoder uses a stride as a
143 // multiple of 16. If optimizations want to take advantage of that, this test needs to be
144 // updated to make it more like the h264dsp tests.
145 7 call_ref(dst0, subcoef0, 4);
146 7 call_new(dst1, subcoef1, 4);
147
1/2
✓ Branch 0 taken 7 times.
✗ Branch 1 not taken.
7 if (memcmp(dst0, dst1, 4 * 4) ||
148
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 7 times.
7 memcmp(subcoef0, subcoef1, 4 * 4 * sizeof(int16_t)))
149 fail();
150
151
1/8
✗ Branch 1 not taken.
✓ Branch 2 taken 7 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
7 bench_new(dst1, subcoef1, 4);
152 }
153 }
154 26 }
155
156 26 static void check_idct_dc4(VP8DSPContext *d, bool is_vp7)
157 {
158 26 LOCAL_ALIGNED_16(uint8_t, src, [4 * 4 * 4]);
159 26 LOCAL_ALIGNED_16(uint8_t, dst, [4 * 4 * 4]);
160 26 LOCAL_ALIGNED_16(uint8_t, dst0, [4 * 4 * 4]);
161 26 LOCAL_ALIGNED_16(uint8_t, dst1, [4 * 4 * 4]);
162 26 LOCAL_ALIGNED_16(int16_t, coef, [4], [4 * 4]);
163 26 LOCAL_ALIGNED_16(int16_t, subcoef0, [4], [4 * 4]);
164 26 LOCAL_ALIGNED_16(int16_t, subcoef1, [4], [4 * 4]);
165 int i, chroma;
166
2/2
✓ Branch 1 taken 24 times.
✓ Branch 2 taken 2 times.
26 declare_func_emms(AV_CPU_FLAG_MMX, void, uint8_t *dst, int16_t block[4][16], ptrdiff_t stride);
167
168
2/2
✓ Branch 0 taken 52 times.
✓ Branch 1 taken 26 times.
78 for (chroma = 0; chroma <= 1; chroma++) {
169
2/2
✓ Branch 0 taken 26 times.
✓ Branch 1 taken 26 times.
52 void (*idct4dc)(uint8_t *, int16_t[4][16], ptrdiff_t) = chroma ? d->vp8_idct_dc_add4uv : d->vp8_idct_dc_add4y;
170
4/4
✓ Branch 2 taken 26 times.
✓ Branch 3 taken 26 times.
✓ Branch 5 taken 6 times.
✓ Branch 6 taken 46 times.
52 if (check_func(idct4dc, "vp%d_idct_dc_add4%s", 8 - is_vp7, chroma ? "uv" : "y")) {
171
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 3 times.
6 ptrdiff_t stride = chroma ? 8 : 16;
172
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 3 times.
6 int w = chroma ? 2 : 4;
173
2/2
✓ Branch 0 taken 24 times.
✓ Branch 1 taken 6 times.
30 for (i = 0; i < 4; i++) {
174 24 int blockx = 4 * (i % w);
175 24 int blocky = 4 * (i / w);
176
4/4
✓ Branch 2 taken 384 times.
✓ Branch 3 taken 96 times.
✓ Branch 4 taken 96 times.
✓ Branch 5 taken 24 times.
504 randomize_buffers(src + stride * blocky + blockx, dst + stride * blocky + blockx, stride, coef[i]);
177 24 dct4x4(coef[i]);
178 24 memset(&coef[i][1], 0, 15 * sizeof(int16_t));
179 }
180
181 6 memcpy(dst0, dst, 4 * 4 * 4);
182 6 memcpy(dst1, dst, 4 * 4 * 4);
183 6 memcpy(subcoef0, coef, 4 * 4 * 4 * sizeof(int16_t));
184 6 memcpy(subcoef1, coef, 4 * 4 * 4 * sizeof(int16_t));
185 6 call_ref(dst0, subcoef0, stride);
186 6 call_new(dst1, subcoef1, stride);
187
1/2
✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
6 if (memcmp(dst0, dst1, 4 * 4 * 4) ||
188
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 6 times.
6 memcmp(subcoef0, subcoef1, 4 * 4 * 4 * sizeof(int16_t)))
189 fail();
190
1/8
✗ Branch 1 not taken.
✓ Branch 2 taken 6 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
6 bench_new(dst1, subcoef1, stride);
191 }
192 }
193
194 26 }
195
196 26 static void check_luma_dc_wht(VP8DSPContext *d, bool is_vp7)
197 {
198 26 LOCAL_ALIGNED_16(int16_t, dc, [4 * 4]);
199 26 LOCAL_ALIGNED_16(int16_t, dc0, [4 * 4]);
200 26 LOCAL_ALIGNED_16(int16_t, dc1, [4 * 4]);
201 int16_t block[4][4][16];
202 26 LOCAL_ALIGNED_16(int16_t, block0, [4], [4][16]);
203 26 LOCAL_ALIGNED_16(int16_t, block1, [4], [4][16]);
204 int dc_only;
205 int blockx, blocky;
206
2/2
✓ Branch 1 taken 24 times.
✓ Branch 2 taken 2 times.
26 declare_func_emms(AV_CPU_FLAG_MMX, void, int16_t block[4][4][16], int16_t dc[16]);
207
208
2/2
✓ Branch 0 taken 104 times.
✓ Branch 1 taken 26 times.
130 for (blocky = 0; blocky < 4; blocky++) {
209
2/2
✓ Branch 0 taken 416 times.
✓ Branch 1 taken 104 times.
520 for (blockx = 0; blockx < 4; blockx++) {
210 uint8_t src[16], dst[16];
211
4/4
✓ Branch 2 taken 6656 times.
✓ Branch 3 taken 1664 times.
✓ Branch 4 taken 1664 times.
✓ Branch 5 taken 416 times.
8736 randomize_buffers(src, dst, 4, block[blocky][blockx]);
212
213 416 dct4x4(block[blocky][blockx]);
214 416 dc[blocky * 4 + blockx] = block[blocky][blockx][0];
215 416 block[blocky][blockx][0] = rnd();
216 }
217 }
218 26 wht4x4(dc);
219
220
2/2
✓ Branch 0 taken 52 times.
✓ Branch 1 taken 26 times.
78 for (dc_only = 0; dc_only <= 1; dc_only++) {
221
2/2
✓ Branch 0 taken 26 times.
✓ Branch 1 taken 26 times.
52 void (*idct)(int16_t [4][4][16], int16_t [16]) = dc_only ? d->vp8_luma_dc_wht_dc : d->vp8_luma_dc_wht;
222
223
4/4
✓ Branch 2 taken 26 times.
✓ Branch 3 taken 26 times.
✓ Branch 5 taken 5 times.
✓ Branch 6 taken 47 times.
52 if (check_func(idct, "vp%d_luma_dc_wht%s", 8 - is_vp7, dc_only ? "_dc" : "")) {
224
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 3 times.
5 if (dc_only) {
225 2 memset(dc0, 0, 16 * sizeof(int16_t));
226 2 dc0[0] = dc[0];
227 } else {
228 3 memcpy(dc0, dc, 16 * sizeof(int16_t));
229 }
230 5 memcpy(dc1, dc0, 16 * sizeof(int16_t));
231 5 memcpy(block0, block, 4 * 4 * 16 * sizeof(int16_t));
232 5 memcpy(block1, block, 4 * 4 * 16 * sizeof(int16_t));
233 5 call_ref(block0, dc0);
234 5 call_new(block1, dc1);
235
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
5 if (memcmp(block0, block1, 4 * 4 * 16 * sizeof(int16_t)) ||
236
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
5 memcmp(dc0, dc1, 16 * sizeof(int16_t)))
237 fail();
238
1/8
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
5 bench_new(block1, dc1);
239 }
240 }
241 26 }
242
243 #define SRC_BUF_STRIDE 32
244 #define SRC_BUF_SIZE (((size << (size < 16)) + 5) * SRC_BUF_STRIDE)
245 // The mc subpixel interpolation filter needs the 2 previous pixels in either
246 // direction, the +1 is to make sure the actual load addresses always are
247 // unaligned.
248 #define src (buf + 2 * SRC_BUF_STRIDE + 2 + 1)
249
250 #undef randomize_buffers
251 #define randomize_buffers() \
252 do { \
253 int k; \
254 for (k = 0; k < SRC_BUF_SIZE; k += 4) { \
255 AV_WN32A(buf + k, rnd()); \
256 } \
257 } while (0)
258
259 13 static void check_mc(VP8DSPContext *d)
260 {
261 13 LOCAL_ALIGNED_16(uint8_t, buf, [32 * 32]);
262 13 BUF_RECT(uint8_t, dst0, 16, 16);
263 13 BUF_RECT(uint8_t, dst1, 16, 16);
264 int type, k, dx, dy;
265
2/2
✓ Branch 1 taken 12 times.
✓ Branch 2 taken 1 times.
13 declare_func_emms(AV_CPU_FLAG_MMX, void, uint8_t *, ptrdiff_t,
266 const uint8_t *, ptrdiff_t, int, int, int);
267
268
2/2
✓ Branch 0 taken 26 times.
✓ Branch 1 taken 13 times.
39 for (type = 0; type < 2; type++) {
269
2/2
✓ Branch 0 taken 182 times.
✓ Branch 1 taken 26 times.
208 for (k = 1; k < 8; k++) {
270 182 int hsize = k / 3;
271 182 int size = 16 >> hsize;
272 182 int height = (size << 1) >> (k % 3);
273
2/2
✓ Branch 0 taken 546 times.
✓ Branch 1 taken 182 times.
728 for (dy = 0; dy < 3; dy++) {
274
2/2
✓ Branch 0 taken 1638 times.
✓ Branch 1 taken 546 times.
2184 for (dx = 0; dx < 3; dx++) {
275 char str[100];
276
2/2
✓ Branch 0 taken 819 times.
✓ Branch 1 taken 819 times.
1638 vp8_mc_func func = (type ? d->put_vp8_bilinear_pixels_tab : d->put_vp8_epel_pixels_tab)[hsize][dy][dx];
277
278
4/4
✓ Branch 0 taken 546 times.
✓ Branch 1 taken 1092 times.
✓ Branch 2 taken 364 times.
✓ Branch 3 taken 182 times.
1638 if (dx || dy) {
279
2/2
✓ Branch 0 taken 728 times.
✓ Branch 1 taken 728 times.
1456 if (type == 0) {
280 static const char *dx_names[] = { "", "h4", "h6" };
281 static const char *dy_names[] = { "", "v4", "v6" };
282 728 snprintf(str, sizeof(str), "epel%d_%s%s", size, dx_names[dx], dy_names[dy]);
283 } else {
284
4/4
✓ Branch 0 taken 546 times.
✓ Branch 1 taken 182 times.
✓ Branch 2 taken 546 times.
✓ Branch 3 taken 182 times.
728 snprintf(str, sizeof(str), "bilin%d_%s%s", size, dx ? "h" : "", dy ? "v" : "");
285 }
286 } else {
287 182 snprintf(str, sizeof(str), "pixels%d", size);
288 }
289
290
2/2
✓ Branch 3 taken 94 times.
✓ Branch 4 taken 1544 times.
1638 if (check_func(func, "vp8_put_%s", str)) {
291 int mx, my;
292 int i;
293
2/2
✓ Branch 0 taken 67 times.
✓ Branch 1 taken 27 times.
94 if (type == 0) {
294
4/4
✓ Branch 0 taken 25 times.
✓ Branch 1 taken 42 times.
✓ Branch 3 taken 21 times.
✓ Branch 4 taken 21 times.
67 mx = dx == 2 ? 2 + 2 * (rnd() % 3) : dx == 1 ? 1 + 2 * (rnd() % 4) : 0;
295
4/4
✓ Branch 0 taken 25 times.
✓ Branch 1 taken 42 times.
✓ Branch 3 taken 21 times.
✓ Branch 4 taken 21 times.
67 my = dy == 2 ? 2 + 2 * (rnd() % 3) : dy == 1 ? 1 + 2 * (rnd() % 4) : 0;
296 } else {
297
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 9 times.
27 mx = dx ? 1 + (rnd() % 7) : 0;
298
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 9 times.
27 my = dy ? 1 + (rnd() % 7) : 0;
299 }
300
2/2
✓ Branch 1 taken 13616 times.
✓ Branch 2 taken 94 times.
13710 randomize_buffers();
301
2/2
✓ Branch 0 taken 564 times.
✓ Branch 1 taken 94 times.
658 for (i = -2; i <= 3; i++) {
302
4/4
✓ Branch 0 taken 470 times.
✓ Branch 1 taken 94 times.
✓ Branch 2 taken 94 times.
✓ Branch 3 taken 376 times.
564 int val = (i == -1 || i == 2) ? 0 : 0xff;
303 // Set pixels in the first row and column to the maximum pattern,
304 // to test for potential overflows in the filter.
305 564 src[i ] = val;
306 564 src[i * SRC_BUF_STRIDE] = val;
307 }
308 94 CLEAR_BUF_RECT(dst0);
309 94 CLEAR_BUF_RECT(dst1);
310 94 call_ref(dst0, dst0_stride, src, SRC_BUF_STRIDE, height, mx, my);
311 94 call_new(dst1, dst1_stride, src, SRC_BUF_STRIDE, height, mx, my);
312 94 checkasm_check_padded(uint8_t, dst0, dst0_stride, dst1, dst1_stride, size, height, "dst");
313
1/8
✗ Branch 1 not taken.
✓ Branch 2 taken 94 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
94 bench_new(dst1, size, src, SRC_BUF_STRIDE, height, mx, my);
314 }
315 }
316 }
317 }
318 }
319 13 }
320
321 #undef randomize_buffers
322
323 #define setpx(a, b, c) buf[(a) + (b) * jstride] = av_clip_uint8(c)
324 // Set the pixel to c +/- [0,d]
325 #define setdx(a, b, c, d) setpx(a, b, c - (d) + (rnd() % ((d) * 2 + 1)))
326 // Set the pixel to c +/- [d,d+e] (making sure it won't be clipped)
327 #define setdx2(a, b, o, c, d, e) setpx(a, b, o = c + ((d) + (rnd() % (e))) * (c >= 128 ? -1 : 1))
328
329 290 static void randomize_loopfilter_buffers(int lineoff, int str,
330 int dir, int flim_E, int flim_I,
331 int hev_thresh, uint8_t *buf,
332 int force_hev)
333 {
334 290 uint32_t mask = 0xff;
335
2/2
✓ Branch 0 taken 154 times.
✓ Branch 1 taken 136 times.
290 int off = dir ? lineoff : lineoff * str;
336
2/2
✓ Branch 0 taken 154 times.
✓ Branch 1 taken 136 times.
290 int istride = dir ? 1 : str;
337
2/2
✓ Branch 0 taken 136 times.
✓ Branch 1 taken 154 times.
290 int jstride = dir ? str : 1;
338 int i;
339
2/2
✓ Branch 0 taken 1160 times.
✓ Branch 1 taken 290 times.
1450 for (i = 0; i < 8; i += 2) {
340 // Row 0 will trigger hev for q0/q1, row 2 will trigger hev for p0/p1,
341 // rows 4 and 6 will not trigger hev.
342 // force_hev 1 will make sure all rows trigger hev, while force_hev -1
343 // makes none of them trigger it.
344 1160 int idx = off + i * istride, p2, p1, p0, q0, q1, q2;
345 1160 setpx(idx, 0, q0 = rnd() & mask);
346
6/6
✓ Branch 0 taken 290 times.
✓ Branch 1 taken 870 times.
✓ Branch 2 taken 86 times.
✓ Branch 3 taken 204 times.
✓ Branch 4 taken 204 times.
✓ Branch 5 taken 752 times.
1160 if (i == 0 && force_hev >= 0 || force_hev > 0)
347
2/2
✓ Branch 1 taken 200 times.
✓ Branch 2 taken 208 times.
408 setdx2(idx, 1, q1, q0, hev_thresh + 1, flim_I - hev_thresh - 1);
348 else
349 752 setdx(idx, 1, q1 = q0, hev_thresh);
350 1160 setdx(idx, 2, q2 = q1, flim_I);
351 1160 setdx(idx, 3, q2, flim_I);
352 1160 setdx(idx, -1, p0 = q0, flim_E >> 2);
353
6/6
✓ Branch 0 taken 290 times.
✓ Branch 1 taken 870 times.
✓ Branch 2 taken 86 times.
✓ Branch 3 taken 204 times.
✓ Branch 4 taken 204 times.
✓ Branch 5 taken 752 times.
1160 if (i == 2 && force_hev >= 0 || force_hev > 0)
354
2/2
✓ Branch 1 taken 201 times.
✓ Branch 2 taken 207 times.
408 setdx2(idx, -2, p1, p0, hev_thresh + 1, flim_I - hev_thresh - 1);
355 else
356 752 setdx(idx, -2, p1 = p0, hev_thresh);
357 1160 setdx(idx, -3, p2 = p1, flim_I);
358 1160 setdx(idx, -4, p2, flim_I);
359 }
360 290 }
361
362 // Fill the buffer with random pixels
363 213 static void fill_loopfilter_buffers(uint8_t *buf, ptrdiff_t stride, int w, int h)
364 {
365 int x, y;
366
2/2
✓ Branch 0 taken 3408 times.
✓ Branch 1 taken 213 times.
3621 for (y = 0; y < h; y++)
367
2/2
✓ Branch 0 taken 54528 times.
✓ Branch 1 taken 3408 times.
57936 for (x = 0; x < w; x++)
368 54528 buf[y * stride + x] = rnd() & 0xff;
369 213 }
370
371 #define randomize_buffers(buf, lineoff, str, force_hev) \
372 randomize_loopfilter_buffers(lineoff, str, dir, flim_E, flim_I, hev_thresh, buf, force_hev)
373
374 26 static void check_loopfilter_16y(VP8DSPContext *d, bool is_vp7)
375 {
376 26 LOCAL_ALIGNED_16(uint8_t, base0, [32 + 16 * 16]);
377 26 LOCAL_ALIGNED_16(uint8_t, base1, [32 + 16 * 16]);
378 int dir, edge, force_hev;
379 26 int flim_E = 20, flim_I = 10, hev_thresh = 7;
380 26 declare_func(void, uint8_t *, ptrdiff_t, int, int, int);
381
382
2/2
✓ Branch 0 taken 52 times.
✓ Branch 1 taken 26 times.
78 for (dir = 0; dir < 2; dir++) {
383
2/2
✓ Branch 0 taken 26 times.
✓ Branch 1 taken 26 times.
52 int midoff = dir ? 4 * 16 : 4;
384
2/2
✓ Branch 0 taken 26 times.
✓ Branch 1 taken 26 times.
52 int midoff_aligned = dir ? 4 * 16 : 16;
385 52 uint8_t *buf0 = base0 + midoff_aligned;
386 52 uint8_t *buf1 = base1 + midoff_aligned;
387
2/2
✓ Branch 0 taken 104 times.
✓ Branch 1 taken 52 times.
156 for (edge = 0; edge < 2; edge++) {
388 104 void (*func)(uint8_t *, ptrdiff_t, int, int, int) = NULL;
389
4/5
✓ Branch 0 taken 26 times.
✓ Branch 1 taken 26 times.
✓ Branch 2 taken 26 times.
✓ Branch 3 taken 26 times.
✗ Branch 4 not taken.
104 switch (dir << 1 | edge) {
390 26 case (0 << 1) | 0: func = d->vp8_h_loop_filter16y; break;
391 26 case (1 << 1) | 0: func = d->vp8_v_loop_filter16y; break;
392 26 case (0 << 1) | 1: func = d->vp8_h_loop_filter16y_inner; break;
393 26 case (1 << 1) | 1: func = d->vp8_v_loop_filter16y_inner; break;
394 }
395
6/6
✓ Branch 2 taken 52 times.
✓ Branch 3 taken 52 times.
✓ Branch 4 taken 52 times.
✓ Branch 5 taken 52 times.
✓ Branch 7 taken 17 times.
✓ Branch 8 taken 87 times.
104 if (check_func(func, "vp%d_loop_filter16y%s_%s", 8 - is_vp7, edge ? "_inner" : "", dir ? "v" : "h")) {
396
2/2
✓ Branch 0 taken 51 times.
✓ Branch 1 taken 17 times.
68 for (force_hev = -1; force_hev <= 1; force_hev++) {
397 51 fill_loopfilter_buffers(buf0 - midoff, 16, 16, 16);
398 51 randomize_buffers(buf0, 0, 16, force_hev);
399 51 randomize_buffers(buf0, 8, 16, force_hev);
400 51 memcpy(buf1 - midoff, buf0 - midoff, 16 * 16);
401 51 call_ref(buf0, 16, flim_E, flim_I, hev_thresh);
402 51 call_new(buf1, 16, flim_E, flim_I, hev_thresh);
403
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 51 times.
51 if (memcmp(buf0 - midoff, buf1 - midoff, 16 * 16))
404 fail();
405 }
406 17 fill_loopfilter_buffers(buf0 - midoff, 16, 16, 16);
407 17 randomize_buffers(buf0, 0, 16, 0);
408 17 randomize_buffers(buf0, 8, 16, 0);
409
1/8
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
17 bench_new(buf0, 16, flim_E, flim_I, hev_thresh);
410 }
411 }
412 }
413 26 }
414
415 26 static void check_loopfilter_8uv(VP8DSPContext *d, bool is_vp7)
416 {
417 26 LOCAL_ALIGNED_16(uint8_t, base0u, [32 + 16 * 16]);
418 26 LOCAL_ALIGNED_16(uint8_t, base0v, [32 + 16 * 16]);
419 26 LOCAL_ALIGNED_16(uint8_t, base1u, [32 + 16 * 16]);
420 26 LOCAL_ALIGNED_16(uint8_t, base1v, [32 + 16 * 16]);
421 int dir, edge, force_hev;
422 26 int flim_E = 20, flim_I = 10, hev_thresh = 7;
423 26 declare_func(void, uint8_t *, uint8_t *, ptrdiff_t, int, int, int);
424
425
2/2
✓ Branch 0 taken 52 times.
✓ Branch 1 taken 26 times.
78 for (dir = 0; dir < 2; dir++) {
426
2/2
✓ Branch 0 taken 26 times.
✓ Branch 1 taken 26 times.
52 int midoff = dir ? 4 * 16 : 4;
427
2/2
✓ Branch 0 taken 26 times.
✓ Branch 1 taken 26 times.
52 int midoff_aligned = dir ? 4 * 16 : 16;
428 52 uint8_t *buf0u = base0u + midoff_aligned;
429 52 uint8_t *buf0v = base0v + midoff_aligned;
430 52 uint8_t *buf1u = base1u + midoff_aligned;
431 52 uint8_t *buf1v = base1v + midoff_aligned;
432
2/2
✓ Branch 0 taken 104 times.
✓ Branch 1 taken 52 times.
156 for (edge = 0; edge < 2; edge++) {
433 104 void (*func)(uint8_t *, uint8_t *, ptrdiff_t, int, int, int) = NULL;
434
4/5
✓ Branch 0 taken 26 times.
✓ Branch 1 taken 26 times.
✓ Branch 2 taken 26 times.
✓ Branch 3 taken 26 times.
✗ Branch 4 not taken.
104 switch (dir << 1 | edge) {
435 26 case (0 << 1) | 0: func = d->vp8_h_loop_filter8uv; break;
436 26 case (1 << 1) | 0: func = d->vp8_v_loop_filter8uv; break;
437 26 case (0 << 1) | 1: func = d->vp8_h_loop_filter8uv_inner; break;
438 26 case (1 << 1) | 1: func = d->vp8_v_loop_filter8uv_inner; break;
439 }
440
6/6
✓ Branch 2 taken 52 times.
✓ Branch 3 taken 52 times.
✓ Branch 4 taken 52 times.
✓ Branch 5 taken 52 times.
✓ Branch 7 taken 17 times.
✓ Branch 8 taken 87 times.
104 if (check_func(func, "vp%d_loop_filter8uv%s_%s", 8 - is_vp7, edge ? "_inner" : "", dir ? "v" : "h")) {
441
2/2
✓ Branch 0 taken 51 times.
✓ Branch 1 taken 17 times.
68 for (force_hev = -1; force_hev <= 1; force_hev++) {
442 51 fill_loopfilter_buffers(buf0u - midoff, 16, 16, 16);
443 51 fill_loopfilter_buffers(buf0v - midoff, 16, 16, 16);
444 51 randomize_buffers(buf0u, 0, 16, force_hev);
445 51 randomize_buffers(buf0v, 0, 16, force_hev);
446 51 memcpy(buf1u - midoff, buf0u - midoff, 16 * 16);
447 51 memcpy(buf1v - midoff, buf0v - midoff, 16 * 16);
448
449 51 call_ref(buf0u, buf0v, 16, flim_E, flim_I, hev_thresh);
450 51 call_new(buf1u, buf1v, 16, flim_E, flim_I, hev_thresh);
451
1/2
✓ Branch 0 taken 51 times.
✗ Branch 1 not taken.
51 if (memcmp(buf0u - midoff, buf1u - midoff, 16 * 16) ||
452
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 51 times.
51 memcmp(buf0v - midoff, buf1v - midoff, 16 * 16))
453 fail();
454 }
455 17 fill_loopfilter_buffers(buf0u - midoff, 16, 16, 16);
456 17 fill_loopfilter_buffers(buf0v - midoff, 16, 16, 16);
457 17 randomize_buffers(buf0u, 0, 16, 0);
458 17 randomize_buffers(buf0v, 0, 16, 0);
459
1/8
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
17 bench_new(buf0u, buf0v, 16, flim_E, flim_I, hev_thresh);
460 }
461 }
462 }
463 26 }
464
465 26 static void check_loopfilter_simple(VP8DSPContext *d, bool is_vp7)
466 {
467 26 LOCAL_ALIGNED_16(uint8_t, base0, [32 + 16 * 16]);
468 26 LOCAL_ALIGNED_16(uint8_t, base1, [32 + 16 * 16]);
469 int dir;
470 26 int flim_E = 20, flim_I = 30, hev_thresh = 0;
471 26 declare_func(void, uint8_t *, ptrdiff_t, int);
472
473
2/2
✓ Branch 0 taken 52 times.
✓ Branch 1 taken 26 times.
78 for (dir = 0; dir < 2; dir++) {
474
2/2
✓ Branch 0 taken 26 times.
✓ Branch 1 taken 26 times.
52 int midoff = dir ? 4 * 16 : 4;
475
2/2
✓ Branch 0 taken 26 times.
✓ Branch 1 taken 26 times.
52 int midoff_aligned = dir ? 4 * 16 : 16;
476 52 uint8_t *buf0 = base0 + midoff_aligned;
477 52 uint8_t *buf1 = base1 + midoff_aligned;
478
2/2
✓ Branch 0 taken 26 times.
✓ Branch 1 taken 26 times.
52 void (*func)(uint8_t *, ptrdiff_t, int) = dir ? d->vp8_v_loop_filter_simple : d->vp8_h_loop_filter_simple;
479
4/4
✓ Branch 2 taken 26 times.
✓ Branch 3 taken 26 times.
✓ Branch 5 taken 9 times.
✓ Branch 6 taken 43 times.
52 if (check_func(func, "vp%d_loop_filter_simple_%s", 8 - is_vp7, dir ? "v" : "h")) {
480 9 fill_loopfilter_buffers(buf0 - midoff, 16, 16, 16);
481 9 randomize_buffers(buf0, 0, 16, -1);
482 9 randomize_buffers(buf0, 8, 16, -1);
483 9 memcpy(buf1 - midoff, buf0 - midoff, 16 * 16);
484 9 call_ref(buf0, 16, flim_E);
485 9 call_new(buf1, 16, flim_E);
486
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9 times.
9 if (memcmp(buf0 - midoff, buf1 - midoff, 16 * 16))
487 fail();
488
1/8
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
9 bench_new(buf0, 16, flim_E);
489 }
490 }
491 26 }
492
493 26 static void checkasm_check_vp78dsp(VP8DSPContext *d, bool is_vp7)
494 {
495 #if CONFIG_VP7_DECODER
496
2/2
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 13 times.
26 if (is_vp7)
497 13 ff_vp7dsp_init(d);
498 else
499 #endif
500 13 ff_vp8dsp_init(d);
501 26 check_idct(d, is_vp7);
502 26 check_idct_dc4(d, is_vp7);
503 26 check_luma_dc_wht(d, is_vp7);
504 26 report("idct");
505 26 check_loopfilter_16y(d, is_vp7);
506 26 check_loopfilter_8uv(d, is_vp7);
507 26 check_loopfilter_simple(d, is_vp7);
508 26 report("loopfilter");
509 26 }
510
511 13 void checkasm_check_vp8dsp(void)
512 {
513 VP8DSPContext d;
514
515 13 ff_vp78dsp_init(&d);
516 13 check_mc(&d);
517 13 report("mc");
518 13 checkasm_check_vp78dsp(&d, false);
519 #if CONFIG_VP7_DECODER
520 13 checkasm_check_vp78dsp(&d, true);
521 #endif
522 13 }
523

是故是什么意思 排骨和什么菜搭配最好 蕙质兰心什么意思 尿频是什么原因导致的 大便为什么是黑色的是什么原因
乐话提醒业务是什么意思 膀胱破裂什么症状 广州地铁什么时候停运 俄罗斯乌克兰为什么打仗 感冒头晕吃什么药
猪横利是什么 丁丁是什么 2023年是什么生肖年 水指什么生肖 格格不入什么意思
梦见照相是什么意思 心脏做什么检查最准确 有什么游戏 喉咙吞口水痛吃什么药 孕妇早餐吃什么
雪花粉是什么面粉hcv9jop2ns2r.cn 下线是什么意思hcv7jop5ns3r.cn 吃什么水果能美白hcv8jop9ns3r.cn 马粟是什么hcv8jop6ns7r.cn 肝经不通吃什么中成药hcv8jop1ns7r.cn
才高八斗什么意思hcv9jop2ns5r.cn 开市是什么意思hcv8jop2ns2r.cn 二道贩子是什么意思sanhestory.com 支气管炎有什么症状xinjiangjialails.com 什么牌子的学习机好hcv9jop0ns2r.cn
坐骨神经痛用什么药最好hcv8jop4ns4r.cn 超声波是什么原理hcv9jop2ns5r.cn 缺血灶是什么病hcv9jop3ns0r.cn 政协是干什么的hcv7jop9ns9r.cn 4月2号什么星座hcv8jop6ns4r.cn
中国一词最早出现在什么时候hcv8jop0ns4r.cn 父亲节送什么好jinxinzhichuang.com 喉咙长溃疡是什么原因hcv9jop2ns2r.cn 为什么很多人不去庐山xscnpatent.com p是什么单位hcv8jop7ns7r.cn
百度