多巴胺是什么药| 梦见自己大肚子怀孕是什么意思| 什么姓氏好听| 根是什么意思| 粉红色泡沫痰见于什么病| 减肥适合吃什么主食| 女性漏尿挂什么科| 散瞳后需要注意什么| 撒尿分叉是什么原因| 浮萍是什么| 遗精是什么症状| 查高血压挂什么科| 子宫内膜异位症吃什么药| 尿结石是什么症状表现| 脾胃虚弱能吃什么水果| 什么情况下需要根管治疗| 缺维生素b有什么症状| 手术刀口吃什么愈合快| 猪的耳朵像什么| 拔智齿后吃什么| 九二年属什么| 八月十三号是什么星座| 阳痿早泄吃什么药好| 郑字五行属什么| 胸部彩超能检查出什么| 国防部部长是什么级别| 胶原蛋白的成分是什么| 黛力新主治什么病| seeya是什么意思| 180是什么尺码| 癫痫是什么| 猫咪疫苗什么时候打| 关节咔咔响是什么原因| 茯苓有什么作用和功效| 为什么会有高血压| 揶揄什么意思| 哦买噶什么意思| 梦见移坟墓是什么预兆| 心肌缺血吃什么药效果最好| 健康管理是做什么的| 化胡为佛是什么意思| 女人阳虚吃什么药效果最好| 什么地方能做亲子鉴定| 生菜为什么会苦| 路人甲是什么意思| 为什么万恶淫为首| 什么叫肺结节| 墨鱼干和什么煲汤最好| 根管治疗是什么意思| 淋巴细胞百分比低说明什么问题| 扁桃体结石有什么症状| 推拿是什么| ff是什么牌子| 大脑精神紊乱什么病| 舅舅和外甥女是什么关系| 优甲乐是治什么病的| 美人坯子是什么意思| 过敏性荨麻疹吃什么药| 海水是什么颜色的| 瘆人是什么意思| 月亮为什么会有圆缺变化| 羊肉饺子馅配什么蔬菜最好吃| ccu病房什么意思| 肝阴不足吃什么中成药| 彩铅是什么| 知柏地黄丸适合什么人吃| 膀胱充盈欠佳什么意思| 检查尿液能查出什么病| 棉涤是什么面料| 没必要什么意思| HlV是什么| 哈根达斯是什么| 潜血弱阳性是什么意思| 中国的国服是什么服装| 女属猪的和什么属相最配| 天经地义的意思是什么| 黄体可能是什么意思啊| 胎心停了是什么原因引起的| 体制内是什么意思| 血沉高说明什么| 下巴长痣代表什么| 眼底充血是什么原因| 拿什么拯救你我的爱人演员表| 什么的山坡| 抑郁什么意思| 高血压降不下来是什么原因| 做人流吃什么水果| 烈士家属有什么待遇| 鼻子发酸是什么原因| 爽约是什么意思| 肛周水泡是什么病| 吃什么促进卵泡发育| 生活方式是什么意思| 甲烷是什么| 胸口不舒服是什么原因| 内蒙古有什么特产| 枫叶的花语是什么| 窒息是什么意思| 铠字五行属什么| 堃怎么读什么意思| 中性人是什么意思| 乙肝小三阳是什么| 男人喝什么汤补肾壮阳| 漫谈是什么意思| 什么牌子的氨基酸洗面奶好| 家里为什么会有蚂蚁| 下巴起痘痘是什么原因| 输血前八项指什么| 95年属什么| 紫玫瑰花语是什么意思| 夏天中午吃什么| 水蛭是什么| 小确幸是什么意思| 眼睛有异物感是什么原因| 1月9日什么星座| 龙须菜是什么| 御姐是什么意思| 海归是什么意思| 脸麻是什么原因| 女生下面出血但不是月经为什么| 2月2日是什么星座| 经常低血糖是什么原因| 奔头是什么意思| 降真香是什么| 十年是什么婚| 积阴德是什么意思| 手抽筋吃什么药| 月亮是什么意思| 籍贯填什么| 红肉是什么肉| 月经期间喝什么比较好| 我俩太不公平这是什么歌| 公务员干什么工作| 腿发软无力是什么原因引起的| 纳是什么意思| 脖子上有肿块挂什么科| 脂肪肝吃什么食物| 1.25是什么星座| 插入阴道是什么感觉| 真菌镜检阳性是什么意思| 花生有什么营养| 耳石症有什么症状| 为什么不能抖腿| 敏使朗是什么药| 古代上元节是什么节日| 窝里横是什么意思| 肚子疼吃什么药最有效| 对公转账是什么意思| 老人大便失禁是什么原因| 内推是什么意思| h型高血压是什么意思| 合作医疗是什么| 什么食物降胆固醇最好| 改姓需要什么手续| 覆盆子是什么东西| 女同学过生日送什么礼物比较好| 口舌麻木吃什么药| 蒙脱石是什么东西| 孩子出疹子应该注意什么| 什么是gmp| 打生长激素有什么副作用| ppd试验是什么意思| 肚子疼发烧是什么病症| 画龙点晴是什么生肖| 老生气会得什么病| 甲状腺球蛋白低是什么意思| 突然全身抽搐是什么病| aq是什么| 养生馆是干什么的| 汗疱疹是什么原因引起的| 夏季喝什么汤好| 结肠和直肠有什么区别| 胃胀嗳气吃什么药最有效| 蔡司是什么| 肛周湿疹用什么药膏效果好| 爱吃酸的人是什么体质| 脚趾甲凹凸不平是什么原因| 阳虚是什么| 12年属什么生肖| 眼底筛查是检查什么| 养心吃什么| 煲蛇汤放什么材料好| 楚楚欲动是什么意思| 鹿晗什么时候回国的| 塔罗牌逆位是什么意思| 四个龙念什么| 莲子心泡水喝有什么功效和作用| 免疫五项检查是什么| 转氨酶高对身体有什么影响| 喝老陈皮水有什么好处| 鼻炎吃什么| 手麻吃什么药效果好| joeone是什么牌子| 闺六月是什么意思| 空调出的水是什么水| bun是什么意思| 女性尿路感染有什么症状| 欣喜若狂是什么意思| 湿疹可以吃什么| 饱和度是什么意思| 头晕出虚汗是什么原因引起的| 男生的鸡鸡长什么样| 超敏crp是什么意思| 淋巴肿瘤吃什么食物好| 王景读什么| 近视和远视有什么区别| 喝豆浆拉肚子什么原因| 吃百合有什么好处| hkc是什么牌子| 过门是什么意思| 舌头上有黑苔是什么原因| 梦见被雷劈什么意思| 血热皮肤瘙痒吃什么药| 徐才厚什么级别| 尖锐湿疣什么症状| 董承和董卓什么关系| 饮什么止渴| 1970年属什么生肖| 免运费是什么意思| 法益是什么意思| 月亮什么颜色| 地铁和高铁有什么区别| 尿素氮偏高是什么意思| 胡子长的快是什么原因| 甲沟炎是什么症状| 独立户口需要什么条件办理| 看输卵管是否堵塞做什么检查| 胆结石是什么原因导致的| 做梦拉屎是什么意思| 希望孩子成为什么样的人| 腰脱是什么症状| 什么是中成药| 什么节日吃饺子| 白羊座后面是什么星座| 土加亥念什么| 身份证上的数字是什么字体| 爆菊什么意思| 未见卵黄囊及胚芽是什么意思| 儿童发育过早应该挂什么科| 生日可以送什么礼物| 胎芽是什么意思| 家奴是什么生肖| 肌酸激酶高是什么意思| 归脾丸和健脾丸有什么区别| 肌层回声均匀是什么意思| 咸鱼翻身是什么意思| 日本料理都有什么菜| 2月23号是什么星座| tel是什么意思啊| 虾肚子上的黑线是什么| 护照办理需要什么材料| 香茗是什么意思| 黄瓜炒什么菜好吃| 睡觉翻白眼是什么原因| 家庭长期饮用什么水最好| 美联储加息意味着什么| 什么人容易得心肌炎| 月经颜色发黑是什么原因| 近视是什么| 胰腺低密度影什么意思| alb医学上是什么意思| 女人脑供血不足吃什么| 胆汁酸高是什么原因| 大牛是什么意思| 百度

雌性激素是什么


Directory: ../../../ffmpeg/
File: src/libavfilter/vf_amplify.c
Date: 2025-08-04 00:43:16
Exec Total Coverage
Lines: 0 71 0.0%
Functions: 0 5 0.0%
Branches: 0 66 0.0%

Line Branch Exec Source
1 /*
2 * Copyright (c) 2018 Paul B Mahol
3 *
4 * This file is part of FFmpeg.
5 *
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (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 GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21 #include "libavutil/imgutils.h"
22 #include "libavutil/mem.h"
23 #include "libavutil/opt.h"
24 #include "libavutil/pixdesc.h"
25
26 #include "avfilter.h"
27 #include "filters.h"
28 #include "video.h"
29
30 typedef struct AmplifyContext {
31 const AVClass *class;
32 const AVPixFmtDescriptor *desc;
33 int radius;
34 float factor;
35 float threshold;
36 float tolerance;
37 int planes;
38
39 float llimit;
40 float hlimit;
41 int nb_inputs;
42 int nb_frames;
43
44 int depth;
45 int nb_planes;
46 int linesize[4];
47 int height[4];
48
49 AVFrame **frames;
50 } AmplifyContext;
51
52 static const enum AVPixelFormat pixel_fmts[] = {
53 AV_PIX_FMT_GRAY8, AV_PIX_FMT_GRAY9,
54 AV_PIX_FMT_GRAY10, AV_PIX_FMT_GRAY12, AV_PIX_FMT_GRAY14,
55 AV_PIX_FMT_GRAY16, AV_PIX_FMT_GRAYF32,
56 AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
57 AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
58 AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
59 AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
60 AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
61 AV_PIX_FMT_YUVJ411P,
62 AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
63 AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
64 AV_PIX_FMT_YUV440P10,
65 AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV420P12,
66 AV_PIX_FMT_YUV440P12,
67 AV_PIX_FMT_YUV444P14, AV_PIX_FMT_YUV422P14, AV_PIX_FMT_YUV420P14,
68 AV_PIX_FMT_YUV420P16, AV_PIX_FMT_YUV422P16, AV_PIX_FMT_YUV444P16,
69 AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRP9, AV_PIX_FMT_GBRP10,
70 AV_PIX_FMT_GBRP12, AV_PIX_FMT_GBRP14, AV_PIX_FMT_GBRP16,
71 AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA444P,
72 AV_PIX_FMT_YUVA444P9, AV_PIX_FMT_YUVA444P10, AV_PIX_FMT_YUVA444P12, AV_PIX_FMT_YUVA444P16,
73 AV_PIX_FMT_YUVA422P9, AV_PIX_FMT_YUVA422P10, AV_PIX_FMT_YUVA422P12, AV_PIX_FMT_YUVA422P16,
74 AV_PIX_FMT_YUVA420P9, AV_PIX_FMT_YUVA420P10, AV_PIX_FMT_YUVA420P16,
75 AV_PIX_FMT_GBRAP, AV_PIX_FMT_GBRAP10, AV_PIX_FMT_GBRAP12, AV_PIX_FMT_GBRAP16,
76 AV_PIX_FMT_GBRPF32, AV_PIX_FMT_GBRAPF32,
77 AV_PIX_FMT_NONE
78 };
79
80 static av_cold int init(AVFilterContext *ctx)
81 {
82 AmplifyContext *s = ctx->priv;
83
84 s->nb_inputs = s->radius * 2 + 1;
85
86 s->frames = av_calloc(s->nb_inputs, sizeof(*s->frames));
87 if (!s->frames)
88 return AVERROR(ENOMEM);
89
90 return 0;
91 }
92
93 typedef struct ThreadData {
94 AVFrame **in, *out;
95 } ThreadData;
96
97 #define AMPLIFY_SLICE(type, stype, clip) \
98 const stype limit[2] = { s->llimit, s->hlimit }; \
99 \
100 for (int p = 0; p < s->nb_planes; p++) { \
101 const int slice_start = (s->height[p] * jobnr) / nb_jobs; \
102 const int slice_end = (s->height[p] * (jobnr+1)) / nb_jobs; \
103 type *dst = (type *)(out->data[p] + slice_start * out->linesize[p]); \
104 ptrdiff_t dst_linesize = out->linesize[p] / sizeof(type); \
105 \
106 if (!((1 << p) & s->planes)) { \
107 av_image_copy_plane((uint8_t *)dst, out->linesize[p], \
108 in[radius]->data[p] + slice_start * in[radius]->linesize[p], \
109 in[radius]->linesize[p], \
110 s->linesize[p], slice_end - slice_start); \
111 continue; \
112 } \
113 \
114 for (int y = slice_start; y < slice_end; y++) { \
115 for (int x = 0; x < s->linesize[p] / sizeof(type); x++) { \
116 stype src = *(type *)(in[radius]->data[p] + y * in[radius]->linesize[p] + x * sizeof(type));\
117 float diff, abs_diff, avg; \
118 stype sum = 0; \
119 \
120 for (int i = 0; i < nb_inputs; i++) { \
121 sum += *(type *)(in[i]->data[p] + y * in[i]->linesize[p] + x * sizeof(type));\
122 } \
123 \
124 avg = sum * scale; \
125 diff = src - avg; \
126 abs_diff = fabsf(diff); \
127 \
128 if (abs_diff < threshold && abs_diff > tolerance) { \
129 float amp = copysignf(fminf(abs_diff * factor, limit[diff >= 0]), diff); \
130 dst[x] = clip(src + amp, depth); \
131 } else { \
132 dst[x] = src; \
133 } \
134 } \
135 \
136 dst += dst_linesize; \
137 } \
138 }
139
140 #define CLIP8(x, depth) av_clip_uint8(lrintf(x))
141 #define CLIP16(x, depth) av_clip_uintp2_c(lrintf(x), depth)
142 #define NOP(x, depth) (x)
143
144 static int amplify_frame(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
145 {
146 AmplifyContext *s = ctx->priv;
147 ThreadData *td = arg;
148 AVFrame **in = td->in;
149 AVFrame *out = td->out;
150 const int radius = s->radius;
151 const int nb_inputs = s->nb_inputs;
152 const float threshold = s->threshold;
153 const float tolerance = s->tolerance;
154 const float scale = 1.f / nb_inputs;
155 const float factor = s->factor;
156 const int depth = s->depth;
157
158 if (s->depth <= 8) {
159 AMPLIFY_SLICE(uint8_t, int, CLIP8)
160 } else if (s->depth <= 16) {
161 AMPLIFY_SLICE(uint16_t, int, CLIP16)
162 } else {
163 AMPLIFY_SLICE(float, float, NOP)
164 }
165
166 return 0;
167 }
168
169 static int config_output(AVFilterLink *outlink)
170 {
171 AVFilterContext *ctx = outlink->src;
172 AmplifyContext *s = ctx->priv;
173 AVFilterLink *inlink = ctx->inputs[0];
174 int ret;
175
176 s->desc = av_pix_fmt_desc_get(outlink->format);
177 if (!s->desc)
178 return AVERROR_BUG;
179 s->nb_planes = av_pix_fmt_count_planes(outlink->format);
180 s->depth = s->desc->comp[0].depth;
181
182 if ((ret = av_image_fill_linesizes(s->linesize, inlink->format, inlink->w)) < 0)
183 return ret;
184
185 s->height[1] = s->height[2] = AV_CEIL_RSHIFT(inlink->h, s->desc->log2_chroma_h);
186 s->height[0] = s->height[3] = inlink->h;
187
188 return 0;
189 }
190
191 static av_cold void uninit(AVFilterContext *ctx)
192 {
193 AmplifyContext *s = ctx->priv;
194 int i;
195
196 if (s->frames) {
197 for (i = 0; i < s->nb_frames; i++)
198 av_frame_free(&s->frames[i]);
199 }
200 av_freep(&s->frames);
201 }
202
203 static int filter_frame(AVFilterLink *inlink, AVFrame *in)
204 {
205 AVFilterContext *ctx = inlink->dst;
206 AVFilterLink *outlink = ctx->outputs[0];
207 AmplifyContext *s = ctx->priv;
208 ThreadData td;
209 AVFrame *out;
210
211 if (s->nb_frames < s->nb_inputs) {
212 s->frames[s->nb_frames] = in;
213 s->nb_frames++;
214 return 0;
215 } else {
216 av_frame_free(&s->frames[0]);
217 memmove(&s->frames[0], &s->frames[1], sizeof(*s->frames) * (s->nb_inputs - 1));
218 s->frames[s->nb_inputs - 1] = in;
219 }
220
221 if (!ctx->is_disabled) {
222 out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
223 if (!out)
224 return AVERROR(ENOMEM);
225 av_frame_copy_props(out, s->frames[0]);
226
227 td.out = out;
228 td.in = s->frames;
229 ff_filter_execute(ctx, amplify_frame, &td, NULL,
230 FFMIN(s->height[1], ff_filter_get_nb_threads(ctx)));
231 } else {
232 out = av_frame_clone(s->frames[s->radius]);
233 if (!out)
234 return AVERROR(ENOMEM);
235 out->pts = s->frames[0]->pts;
236 }
237
238 return ff_filter_frame(outlink, out);
239 }
240
241 #define OFFSET(x) offsetof(AmplifyContext, x)
242 #define FLAGS AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_FILTERING_PARAM
243 #define VFT AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_FILTERING_PARAM | AV_OPT_FLAG_RUNTIME_PARAM
244
245 static const AVOption amplify_options[] = {
246 { "radius", "set radius", OFFSET(radius), AV_OPT_TYPE_INT, {.i64=2}, 1, 63, .flags = FLAGS },
247 { "factor", "set factor", OFFSET(factor), AV_OPT_TYPE_FLOAT, {.dbl=2}, 0, UINT16_MAX, .flags = VFT },
248 { "threshold", "set threshold", OFFSET(threshold), AV_OPT_TYPE_FLOAT, {.dbl=10}, 0, UINT16_MAX, .flags = VFT },
249 { "tolerance", "set tolerance", OFFSET(tolerance), AV_OPT_TYPE_FLOAT, {.dbl=0}, 0, UINT16_MAX, .flags = VFT },
250 { "low", "set low limit for amplification", OFFSET(llimit), AV_OPT_TYPE_FLOAT, {.dbl=UINT16_MAX}, 0, UINT16_MAX, .flags = VFT },
251 { "high", "set high limit for amplification", OFFSET(hlimit), AV_OPT_TYPE_FLOAT, {.dbl=UINT16_MAX}, 0, UINT16_MAX, .flags = VFT },
252 { "planes", "set what planes to filter", OFFSET(planes), AV_OPT_TYPE_FLAGS, {.i64=7}, 0, 15, VFT },
253 { NULL },
254 };
255
256 static const AVFilterPad inputs[] = {
257 {
258 .name = "default",
259 .type = AVMEDIA_TYPE_VIDEO,
260 .filter_frame = filter_frame,
261 },
262 };
263
264 static const AVFilterPad outputs[] = {
265 {
266 .name = "default",
267 .type = AVMEDIA_TYPE_VIDEO,
268 .config_props = config_output,
269 },
270 };
271
272 AVFILTER_DEFINE_CLASS(amplify);
273
274 const FFFilter ff_vf_amplify = {
275 .p.name = "amplify",
276 .p.description = NULL_IF_CONFIG_SMALL("Amplify changes between successive video frames."),
277 .p.priv_class = &amplify_class,
278 .p.flags = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | AVFILTER_FLAG_SLICE_THREADS,
279 .priv_size = sizeof(AmplifyContext),
280 FILTER_OUTPUTS(outputs),
281 FILTER_INPUTS(inputs),
282 FILTER_PIXFMTS_ARRAY(pixel_fmts),
283 .init = init,
284 .uninit = uninit,
285 .process_command = ff_filter_process_command,
286 };
287

跃然纸什么 鲤鱼最爱吃什么食物 bdsm什么意思 食管鳞状上皮增生是什么意思 锴字五行属什么
为什么肚子会胀气 电器发生火灾用什么灭火器 师奶是什么意思 脾肺两虚吃什么中成药 什么时候有雨
腋下黑是什么原因 交通运输是干什么的 naco3是什么 马上好药膏主治什么 什么不什么声
食欲亢进是什么意思 饭后散步有什么好处 猪肝有什么功效与作用 内裤发黄是什么妇科病 子宫外怀孕有什么症状
喝酒吃海带有什么危害gysmod.com 吃什么可以降低尿酸hcv7jop6ns7r.cn 黄酮对女性有什么作用hcv8jop9ns8r.cn 老虔婆是什么意思hcv7jop9ns6r.cn 血压200意味着什么hcv8jop0ns5r.cn
7.11是什么日子jinxinzhichuang.com 吃木瓜有什么好处hanqikai.com hpc是什么意思wzqsfys.com 志愿号是什么意思cj623037.com 一月十九号是什么星座hcv8jop7ns6r.cn
什么药降尿酸最好hcv8jop8ns1r.cn 谢娜人气为什么那么高jasonfriends.com 肉桂属于什么茶类hcv8jop7ns2r.cn 鹅和什么一起炖最好吃hcv8jop8ns1r.cn 怀孕两个月有什么症状0735v.com
dvt是什么意思hcv7jop5ns2r.cn 女生不来大姨妈是什么原因hcv9jop8ns1r.cn 你想干什么hcv8jop3ns8r.cn 崩漏是什么意思hcv7jop9ns0r.cn 7月28日什么星座wuhaiwuya.com
百度