ib是什么单位| 52年属什么| 肝实质回声不均匀是什么意思| lm是什么意思| fpa是什么意思| 什么肠什么肚| 梦见两条大蟒蛇是什么征兆| 87年属什么的生肖| 心慌气短是什么原因| 杨玉环属什么生肖| 不孕不育有什么症状女| 红色配什么颜色| 荆芥的别名叫什么| 斗志昂扬是什么意思| 美食家是什么意思| 听吧新征程号角吹响是什么歌| 10月26日什么星座| 野字五行属什么| 骨龄是什么意思| 儿童过敏性咳嗽吃什么药| 什么好| 达泊西汀有什么副作用| 异丙醇是什么| 为什么叫犹太人| 2028年属什么生肖| 胎膜早破是什么原因引起的| 雪里红是什么菜| 清洁度1度是什么意思| 上不来气吃什么药| 1.30是什么星座| 梦见孩子被蛇咬是什么意思| 吃得什么填词语| 男人吃四环素治什么病| 趋利避害是什么意思| 晕车吃什么能缓解| 梦见枪毙人是什么意思| 1.24是什么星座| 翔是什么意思| 长痣是什么原因| 蛔虫和蛲虫有什么区别| 佛山有什么特产| 拍拖是什么意思| 1月7号什么星座| 智商税什么意思| 尤加一笔是什么字| 早上起来不晨勃是什么原因| 子嗣是什么意思| 白羊座的幸运色是什么颜色| 人经常放屁是什么原因| 无花果和什么煲汤好| 喉咙痛吃什么水果好| 肺不张是什么意思| 天秤座女和什么星座最配| 什么的琥珀| 做爱是什么感觉| 今日冲什么生肖| 小孩抵抗力差吃什么提高免疫力| 石斤读什么| 小腿灼热感是什么原因| 屈光不正是什么意思| 太阳穴疼痛是什么原因| 塑胶厂是做什么的| 牛肉粉是什么调料| 美国的国花是什么花| 仁字五行属什么| 安宫牛黄丸有什么作用| 子宫直肠陷凹什么意思| 黄体破裂什么症状| 兵马未动粮草先行是什么意思| 动物园里面有什么动物| 报考军校需要什么条件| 9.22什么星座| 龙凤呈祥是什么生肖| 铝中毒有什么症状| 腿困是什么原因| 榄仁叶是什么树的叶子| 白带发黄是什么妇科病| bn是什么意思| 反酸是什么感觉| 4.12是什么星座| 天生一对是什么意思| 9月10日是什么节| 左腰疼是什么原因| 骨折一个月能恢复到什么程度| 今年什么时候起伏| 什么是耳石| 子宫内膜薄是什么原因| 慢性非萎缩性胃炎吃什么药效果好| 成吉思汗叫什么名字| 穹隆什么意思| 蟋蟀吃什么| 肌酐300多属于什么期| spyder是什么品牌| 拮抗剂是什么| 抑郁症为什么会想死| 1955年属什么| 中国铁塔是干什么的| 肝结节是什么病严重吗| 金贵肾气丸治什么病| 狗是什么时辰| 杭州灵隐寺求什么最灵| 心跳过快是什么原因引起的| 抽烟是什么感觉| 全麻是什么感觉| 圣贤是什么意思| 甲沟炎是什么| 急火攻心是什么生肖| 眼袋大用什么方法消除| 血型o型rh阳性是什么意思| 小狗呕吐是什么原因| 塑造是什么意思| 后位子宫什么意思| 疑心病是什么意思| 紫菜吃多了有什么坏处| 什么的大象| 什么是破伤风| 肝炎挂什么科| 演宋江的演员叫什么| 被交警开罚单不交有什么后果| 梦见螃蟹是什么预兆| 多多关照是什么意思| 尿微肌酐比值高是什么情况| 红袖什么意思| 什么时间英文| 6.20什么星座| 心脏有个小洞叫什么病| 有福气是什么意思| 豌豆黄是什么| 生菜什么时候种| 高脂血症是什么病| 麦粒肿吃什么药| 蒙氏结节是什么| 灵芝孢子粉是什么| 黄精药材有什么功效| 悟性是什么意思| 梦见一个人说明什么| 乳腺结节钙化是什么意思| 戌时是什么时候| 四不伤害是指什么| 乳腺炎吃什么消炎药| 大肠杆菌用什么药治疗效果好| 什么牌子的冰箱好用又省电| 脚踝发黑是什么原因| moss是什么意思| 和田玉和翡翠有什么区别| 三月十九是什么星座| 肌酐测定低是什么意思| 东北话篮子是什么意思| 九价是什么| 丑未戌三刑 会发生什么| 关羽的马叫什么名字| 胃胀痛什么原因| 子宫占位是什么意思| 梦见死人复活什么预兆| 脚气用什么洗脚| 鸿运当头什么意思| 为什么闭眼单脚站不稳| 铁树开花是什么意思| 8月29日是什么星座| 18岁属什么| 嘴唇发紫发黑是什么原因| 胶体金法是什么意思| 维他命是什么意思| 冗长什么意思| 男人右眼皮跳是什么预兆| 梦见自己搬家是什么意思| 2004属什么| 抽完血吃什么| 买什么意思| 香菜什么时候种植最好| 澍在人名中读什么| 三月三日是什么星座| 山茱萸的功效与作用是什么| 复方氨酚烷胺胶囊是什么药| 胸是什么| 朱棣是朱元璋的什么人| 吉人天相好福气指什么生肖| 葡萄糖偏高是什么意思| 荨麻疹是由什么引起的| 撸是什么意思| 坛城是什么意思| 直肠肿瘤手术后吃什么| 木耳菜是什么菜| 松鼠桂鱼是什么鱼| 廿是什么意思| 什么快递可以寄宠物| 输卵管囊肿是什么原因引起的| 夏天吃什么蔬菜好| 吃什么水果解酒| 有什么副作用| 慈悲是什么意思| 吃什么可以降尿酸| n2是什么意思| 莫名心慌是什么原因| 曲克芦丁片治什么病| 高处不胜寒是什么意思| mi是什么单位| 什么是纯净物| 乳腺结节钙化是什么意思| 焖面用什么面条| 2是什么数| 呆萌是什么意思| 什么是蜘蛛痣图片| 巧妙是什么意思| 顺风耳是什么意思| 芥末为什么会冲鼻| 冰晶是什么| 1和0是什么意思| 万事如意是什么生肖| 高原反应什么症状| 什么姿势睡觉最好| 中暑为什么不能打点滴| 静脉曲张不治疗会有什么后果| 九月二十三是什么星座| 女性一般什么年龄绝经| 吃播为什么吃不胖| 卵泡破裂是什么意思| 九价是什么| 时髦是什么意思| 为什么会气血不足| 咳嗽是什么原因| 间接胆红素偏高是什么原因| 癸亥五行属什么| 蛐蛐是什么意思| 什么是碱性食物有哪些| 医生五行属什么| 小便憋不住尿裤子是什么情况| 炒菜什么时候放调料| fila是什么牌子| 饭后胃胀是什么原因导致的| 万什么一心| 外寒内热感冒吃什么药| 口干舌燥是什么病的前兆| 胰岛素偏低是什么原因| 觊觎什么意思| 道心是什么意思| 疙瘩是什么意思| moo是什么意思| 谛听是什么| 为什么一直不怀孕是什么原因| 喜新厌旧是什么生肖| 黄绿色痰液是什么感染| 水钻是什么材质| 唏嘘不已的意思是什么| 肺在什么位置图片| 4t什么意思| 载脂蛋白b偏高是什么意思| 哥哥的孩子叫我什么| 突然手发抖是什么原因| 533是什么意思| 无偿献血证有什么用| 灰色配什么颜色好看| 98年出生属什么| 体悟是什么意思| 分泌物多是什么原因| 武火是什么意思| 牙根吸收是什么意思| 莘莘学子是什么意思| 鹅口疮是什么引起的| 肝介入治疗是什么意思| 翻车了是什么意思| 糖尿病可以吃什么肉| 孀居是什么意思| sp什么意思| 百度

郝东文副区长夜查我区城棚改铁腕治霾、城市治理工作


Directory: ../../../ffmpeg/
File: src/libavfilter/vf_displace.c
Date: 2025-08-04 00:43:16
Exec Total Coverage
Lines: 0 227 0.0%
Functions: 0 7 0.0%
Branches: 0 110 0.0%

Line Branch Exec Source
1 /*
2 * Copyright (c) 2013 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/pixdesc.h"
22 #include "libavutil/opt.h"
23 #include "avfilter.h"
24 #include "filters.h"
25 #include "framesync.h"
26 #include "video.h"
27
28 enum EdgeMode {
29 EDGE_BLANK,
30 EDGE_SMEAR,
31 EDGE_WRAP,
32 EDGE_MIRROR,
33 EDGE_NB
34 };
35
36 typedef struct DisplaceContext {
37 const AVClass *class;
38 int width[4], height[4];
39 enum EdgeMode edge;
40 int nb_planes;
41 int nb_components;
42 int step;
43 uint8_t blank[4];
44 FFFrameSync fs;
45
46 int (*displace_slice)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs);
47 } DisplaceContext;
48
49 #define OFFSET(x) offsetof(DisplaceContext, x)
50 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
51
52 static const AVOption displace_options[] = {
53 { "edge", "set edge mode", OFFSET(edge), AV_OPT_TYPE_INT, {.i64=EDGE_SMEAR}, 0, EDGE_NB-1, FLAGS, .unit = "edge" },
54 { "blank", "", 0, AV_OPT_TYPE_CONST, {.i64=EDGE_BLANK}, 0, 0, FLAGS, .unit = "edge" },
55 { "smear", "", 0, AV_OPT_TYPE_CONST, {.i64=EDGE_SMEAR}, 0, 0, FLAGS, .unit = "edge" },
56 { "wrap" , "", 0, AV_OPT_TYPE_CONST, {.i64=EDGE_WRAP}, 0, 0, FLAGS, .unit = "edge" },
57 { "mirror" , "", 0, AV_OPT_TYPE_CONST, {.i64=EDGE_MIRROR}, 0, 0, FLAGS, .unit = "edge" },
58 { NULL }
59 };
60
61 AVFILTER_DEFINE_CLASS(displace);
62
63 static const enum AVPixelFormat pix_fmts[] = {
64 AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
65 AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
66 AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
67 AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
68 AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
69 AV_PIX_FMT_RGB24, AV_PIX_FMT_BGR24,
70 AV_PIX_FMT_ARGB, AV_PIX_FMT_ABGR, AV_PIX_FMT_RGBA, AV_PIX_FMT_BGRA,
71 AV_PIX_FMT_0RGB, AV_PIX_FMT_0BGR, AV_PIX_FMT_RGB0, AV_PIX_FMT_BGR0,
72 AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP,
73 AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE
74 };
75
76 typedef struct ThreadData {
77 AVFrame *in, *xin, *yin, *out;
78 } ThreadData;
79
80 static int displace_planar(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
81 {
82 DisplaceContext *s = ctx->priv;
83 const ThreadData *td = arg;
84 const AVFrame *in = td->in;
85 const AVFrame *xin = td->xin;
86 const AVFrame *yin = td->yin;
87 const AVFrame *out = td->out;
88
89 for (int plane = 0; plane < s->nb_planes; plane++) {
90 const int h = s->height[plane];
91 const int w = s->width[plane];
92 const int slice_start = (h * jobnr ) / nb_jobs;
93 const int slice_end = (h * (jobnr+1)) / nb_jobs;
94 const int dlinesize = out->linesize[plane];
95 const int slinesize = in->linesize[plane];
96 const int xlinesize = xin->linesize[plane];
97 const int ylinesize = yin->linesize[plane];
98 const uint8_t *src = in->data[plane];
99 const uint8_t *ysrc = yin->data[plane] + slice_start * ylinesize;
100 const uint8_t *xsrc = xin->data[plane] + slice_start * xlinesize;
101 uint8_t *dst = out->data[plane] + slice_start * dlinesize;
102 const uint8_t blank = s->blank[plane];
103
104 for (int y = slice_start; y < slice_end; y++) {
105 switch (s->edge) {
106 case EDGE_BLANK:
107 for (int x = 0; x < w; x++) {
108 int Y = y + ysrc[x] - 128;
109 int X = x + xsrc[x] - 128;
110
111 if (Y < 0 || Y >= h || X < 0 || X >= w)
112 dst[x] = blank;
113 else
114 dst[x] = src[Y * slinesize + X];
115 }
116 break;
117 case EDGE_SMEAR:
118 for (int x = 0; x < w; x++) {
119 int Y = av_clip(y + ysrc[x] - 128, 0, h - 1);
120 int X = av_clip(x + xsrc[x] - 128, 0, w - 1);
121 dst[x] = src[Y * slinesize + X];
122 }
123 break;
124 case EDGE_WRAP:
125 for (int x = 0; x < w; x++) {
126 int Y = (y + ysrc[x] - 128) % h;
127 int X = (x + xsrc[x] - 128) % w;
128
129 if (Y < 0)
130 Y += h;
131 if (X < 0)
132 X += w;
133 dst[x] = src[Y * slinesize + X];
134 }
135 break;
136 case EDGE_MIRROR:
137 for (int x = 0; x < w; x++) {
138 int Y = y + ysrc[x] - 128;
139 int X = x + xsrc[x] - 128;
140
141 if (Y < 0)
142 Y = (-Y) % h;
143 if (X < 0)
144 X = (-X) % w;
145 if (Y >= h)
146 Y = h - (Y % h) - 1;
147 if (X >= w)
148 X = w - (X % w) - 1;
149 dst[x] = src[Y * slinesize + X];
150 }
151 break;
152 }
153
154 ysrc += ylinesize;
155 xsrc += xlinesize;
156 dst += dlinesize;
157 }
158 }
159 return 0;
160 }
161
162 static int displace_packed(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
163 {
164 DisplaceContext *s = ctx->priv;
165 const ThreadData *td = arg;
166 const AVFrame *in = td->in;
167 const AVFrame *xin = td->xin;
168 const AVFrame *yin = td->yin;
169 const AVFrame *out = td->out;
170 const int step = s->step;
171 const int h = s->height[0];
172 const int w = s->width[0];
173 const int slice_start = (h * jobnr ) / nb_jobs;
174 const int slice_end = (h * (jobnr+1)) / nb_jobs;
175 const int dlinesize = out->linesize[0];
176 const int slinesize = in->linesize[0];
177 const int xlinesize = xin->linesize[0];
178 const int ylinesize = yin->linesize[0];
179 const uint8_t *src = in->data[0];
180 const uint8_t *ysrc = yin->data[0] + slice_start * ylinesize;
181 const uint8_t *xsrc = xin->data[0] + slice_start * xlinesize;
182 uint8_t *dst = out->data[0] + slice_start * dlinesize;
183 const uint8_t *blank = s->blank;
184
185 for (int y = slice_start; y < slice_end; y++) {
186 switch (s->edge) {
187 case EDGE_BLANK:
188 for (int x = 0; x < w; x++) {
189 for (int c = 0; c < s->nb_components; c++) {
190 int Y = y + (ysrc[x * step + c] - 128);
191 int X = x + (xsrc[x * step + c] - 128);
192
193 if (Y < 0 || Y >= h || X < 0 || X >= w)
194 dst[x * step + c] = blank[c];
195 else
196 dst[x * step + c] = src[Y * slinesize + X * step + c];
197 }
198 }
199 break;
200 case EDGE_SMEAR:
201 for (int x = 0; x < w; x++) {
202 for (int c = 0; c < s->nb_components; c++) {
203 int Y = av_clip(y + (ysrc[x * step + c] - 128), 0, h - 1);
204 int X = av_clip(x + (xsrc[x * step + c] - 128), 0, w - 1);
205
206 dst[x * step + c] = src[Y * slinesize + X * step + c];
207 }
208 }
209 break;
210 case EDGE_WRAP:
211 for (int x = 0; x < w; x++) {
212 for (int c = 0; c < s->nb_components; c++) {
213 int Y = (y + (ysrc[x * step + c] - 128)) % h;
214 int X = (x + (xsrc[x * step + c] - 128)) % w;
215
216 if (Y < 0)
217 Y += h;
218 if (X < 0)
219 X += w;
220 dst[x * step + c] = src[Y * slinesize + X * step + c];
221 }
222 }
223 break;
224 case EDGE_MIRROR:
225 for (int x = 0; x < w; x++) {
226 for (int c = 0; c < s->nb_components; c++) {
227 int Y = y + ysrc[x * step + c] - 128;
228 int X = x + xsrc[x * step + c] - 128;
229
230 if (Y < 0)
231 Y = (-Y) % h;
232 if (X < 0)
233 X = (-X) % w;
234 if (Y >= h)
235 Y = h - (Y % h) - 1;
236 if (X >= w)
237 X = w - (X % w) - 1;
238 dst[x * step + c] = src[Y * slinesize + X * step + c];
239 }
240 }
241 break;
242 }
243
244 ysrc += ylinesize;
245 xsrc += xlinesize;
246 dst += dlinesize;
247 }
248 return 0;
249 }
250
251 static int process_frame(FFFrameSync *fs)
252 {
253 AVFilterContext *ctx = fs->parent;
254 DisplaceContext *s = fs->opaque;
255 AVFilterLink *outlink = ctx->outputs[0];
256 AVFrame *out, *in, *xin, *yin;
257 int ret;
258
259 if ((ret = ff_framesync_get_frame(&s->fs, 0, &in, 0)) < 0 ||
260 (ret = ff_framesync_get_frame(&s->fs, 1, &xin, 0)) < 0 ||
261 (ret = ff_framesync_get_frame(&s->fs, 2, &yin, 0)) < 0)
262 return ret;
263
264 if (ctx->is_disabled) {
265 out = av_frame_clone(in);
266 if (!out)
267 return AVERROR(ENOMEM);
268 } else {
269 ThreadData td;
270
271 out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
272 if (!out)
273 return AVERROR(ENOMEM);
274 av_frame_copy_props(out, in);
275
276 td.in = in;
277 td.xin = xin;
278 td.yin = yin;
279 td.out = out;
280 ff_filter_execute(ctx, s->displace_slice, &td, NULL,
281 FFMIN(outlink->h, ff_filter_get_nb_threads(ctx)));
282 }
283 out->pts = av_rescale_q(s->fs.pts, s->fs.time_base, outlink->time_base);
284
285 return ff_filter_frame(outlink, out);
286 }
287
288 static int config_input(AVFilterLink *inlink)
289 {
290 AVFilterContext *ctx = inlink->dst;
291 DisplaceContext *s = ctx->priv;
292 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
293 int vsub, hsub;
294
295 s->nb_planes = av_pix_fmt_count_planes(inlink->format);
296 s->nb_components = desc->nb_components;
297
298 if (s->nb_planes > 1 || s->nb_components == 1)
299 s->displace_slice = displace_planar;
300 else
301 s->displace_slice = displace_packed;
302
303 if (!(desc->flags & AV_PIX_FMT_FLAG_RGB)) {
304 s->blank[1] = s->blank[2] = 128;
305 s->blank[0] = 16;
306 }
307
308 s->step = av_get_padded_bits_per_pixel(desc) >> 3;
309 hsub = desc->log2_chroma_w;
310 vsub = desc->log2_chroma_h;
311 s->height[1] = s->height[2] = AV_CEIL_RSHIFT(inlink->h, vsub);
312 s->height[0] = s->height[3] = inlink->h;
313 s->width[1] = s->width[2] = AV_CEIL_RSHIFT(inlink->w, hsub);
314 s->width[0] = s->width[3] = inlink->w;
315
316 return 0;
317 }
318
319 static int config_output(AVFilterLink *outlink)
320 {
321 FilterLink *outl = ff_filter_link(outlink);
322 AVFilterContext *ctx = outlink->src;
323 DisplaceContext *s = ctx->priv;
324 AVFilterLink *srclink = ctx->inputs[0];
325 FilterLink *sl = ff_filter_link(srclink);
326 AVFilterLink *xlink = ctx->inputs[1];
327 AVFilterLink *ylink = ctx->inputs[2];
328 FFFrameSyncIn *in;
329 int ret;
330
331 if (srclink->w != xlink->w ||
332 srclink->h != xlink->h ||
333 srclink->w != ylink->w ||
334 srclink->h != ylink->h) {
335 av_log(ctx, AV_LOG_ERROR, "First input link %s parameters "
336 "(size %dx%d) do not match the corresponding "
337 "second input link %s parameters (%dx%d) "
338 "and/or third input link %s parameters (%dx%d)\n",
339 ctx->input_pads[0].name, srclink->w, srclink->h,
340 ctx->input_pads[1].name, xlink->w, xlink->h,
341 ctx->input_pads[2].name, ylink->w, ylink->h);
342 return AVERROR(EINVAL);
343 }
344
345 outlink->w = srclink->w;
346 outlink->h = srclink->h;
347 outlink->sample_aspect_ratio = srclink->sample_aspect_ratio;
348 outl->frame_rate = sl->frame_rate;
349
350 ret = ff_framesync_init(&s->fs, ctx, 3);
351 if (ret < 0)
352 return ret;
353
354 in = s->fs.in;
355 in[0].time_base = srclink->time_base;
356 in[1].time_base = xlink->time_base;
357 in[2].time_base = ylink->time_base;
358 in[0].sync = 2;
359 in[0].before = EXT_STOP;
360 in[0].after = EXT_STOP;
361 in[1].sync = 1;
362 in[1].before = EXT_NULL;
363 in[1].after = EXT_INFINITY;
364 in[2].sync = 1;
365 in[2].before = EXT_NULL;
366 in[2].after = EXT_INFINITY;
367 s->fs.opaque = s;
368 s->fs.on_event = process_frame;
369
370 ret = ff_framesync_configure(&s->fs);
371 outlink->time_base = s->fs.time_base;
372
373 return ret;
374 }
375
376 static int activate(AVFilterContext *ctx)
377 {
378 DisplaceContext *s = ctx->priv;
379 return ff_framesync_activate(&s->fs);
380 }
381
382 static av_cold void uninit(AVFilterContext *ctx)
383 {
384 DisplaceContext *s = ctx->priv;
385
386 ff_framesync_uninit(&s->fs);
387 }
388
389 static const AVFilterPad displace_inputs[] = {
390 {
391 .name = "source",
392 .type = AVMEDIA_TYPE_VIDEO,
393 .config_props = config_input,
394 },
395 {
396 .name = "xmap",
397 .type = AVMEDIA_TYPE_VIDEO,
398 },
399 {
400 .name = "ymap",
401 .type = AVMEDIA_TYPE_VIDEO,
402 },
403 };
404
405 static const AVFilterPad displace_outputs[] = {
406 {
407 .name = "default",
408 .type = AVMEDIA_TYPE_VIDEO,
409 .config_props = config_output,
410 },
411 };
412
413 const FFFilter ff_vf_displace = {
414 .p.name = "displace",
415 .p.description = NULL_IF_CONFIG_SMALL("Displace pixels."),
416 .p.priv_class = &displace_class,
417 .p.flags = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
418 AVFILTER_FLAG_SLICE_THREADS,
419 .priv_size = sizeof(DisplaceContext),
420 .uninit = uninit,
421 .activate = activate,
422 FILTER_INPUTS(displace_inputs),
423 FILTER_OUTPUTS(displace_outputs),
424 FILTER_PIXFMTS_ARRAY(pix_fmts),
425 .process_command = ff_filter_process_command,
426 };
427

mbi是什么意思 道貌岸然是什么生肖 繁花似锦什么意思 子宫病变有什么症状 丹凤朝阳什么意思
心有戚戚焉什么意思 舌头开裂吃什么药 眼睛充血用什么药 枸杞泡茶喝有什么功效 m什么意思
为什么突然就得肝炎了 鹿加几念什么 胆囊息肉是什么 续集是什么意思 什么是玄学
地中海是什么意思 大便隐血阴性是什么意思 骨头咔咔响是什么原因 什么叫做犯太岁 茶叶蛋用什么茶叶
鲜字五行属什么gangsutong.com cn是什么helloaicloud.com 腿脚酸软无力是什么原因hcv8jop9ns4r.cn 老年人睡眠多是什么原因hcv8jop5ns4r.cn 我一言难尽忍不住伤心是什么歌hcv8jop7ns4r.cn
19年属什么hcv9jop6ns6r.cn o型血和o型血生的孩子是什么血型travellingsim.com 小猫吃什么东西hcv9jop8ns1r.cn 口疮反复发作什么原因hcv9jop3ns1r.cn 寒冷的反义词是什么hcv8jop6ns4r.cn
你从什么时候不再爱我hcv8jop2ns6r.cn 道德制高点什么意思hcv7jop5ns6r.cn 二个月不来月经是什么原因hcv7jop6ns0r.cn 高项是什么hcv9jop1ns3r.cn 秦二世为什么姓胡hcv7jop9ns7r.cn
腰椎退行性变是什么病kuyehao.com 脚背发麻是什么原因引起的hcv9jop6ns8r.cn 肚脐左侧是什么器官hcv9jop3ns5r.cn 汽车点火线圈坏了有什么症状hcv9jop2ns7r.cn 草果在炖肉起什么作用hcv8jop2ns1r.cn
百度