啄木鸟为什么不会脑震荡| 人文是什么意思| 眼下长斑是什么原因| 耳朵外面痒是什么原因| 镶牙用什么材料好| 鸡蛋炒什么菜好吃| 放疗期间吃什么食物最好| 腰痛应该挂什么科| 榴莲树长什么样| 专员是什么职位| 2月24是什么星座| 血友病是什么遗传方式| 手指僵硬暗示什么疾病| sy是什么意思| 抑郁到什么程度要吃氟西汀| 焦是什么意思| 种牙好还是镶牙好区别是什么| a型血的人容易得什么病| 胸腔里面像岔气了的疼是什么原因| 当演员有什么要求| 肠道菌群失调吃什么药| 狗是什么生肖| eos是什么意思| 天网是什么意思| 血小板低有什么危险| 泌尿外科是看什么的| 枕头太低了有什么危害| 韭菜有什么功效| 胃反酸水吃什么药| 肺部肿瘤切除后吃什么| 掉睫毛是什么原因| 胰腺炎为什么血糖高| 一个虫一个合读什么| 空调抽湿是什么意思| 泉字五行属什么| 早泄是什么原因引起的| 方阵是什么意思| 金火是什么生肖| 隐翅虫咬到擦什么药膏| 骨质疏松是什么意思| puma是什么意思| 胸部正侧位片检查什么| hbv是什么| 手痒是什么原因| 双币信用卡是什么意思| 威海是什么海| 咳嗽背部疼是什么原因| 百雀羚属于什么档次| 心跳加快是什么病| 南京大屠杀是什么时候| 早期唐筛是检查什么| 七月七是什么节| 入木三分是什么生肖| 抢沙发是什么意思| 336是什么意思| 为什么睡觉后鱼刺没了| 什么数字最听话| 代谢不好吃什么药| 检查贫血做什么检查| 女人脾虚吃什么最好| 5月22日什么星座| 包租婆是什么意思| 河北有什么市| 全职是什么意思| sey什么意思| 生日送百合花代表什么| 扁桃体有什么用| 性格好的女生是什么样| kids是什么牌子| 胪是什么意思| 身体缺钾会有什么症状| 武则天是什么星座的| 睡觉中途总醒什么原因| 大哥是什么生肖| 灵芝是什么| 月经期间不能吃什么水果| 凝血酶原时间是什么意思| 神经痛吃什么药好| 羊肉与什么食物相克| 甲基蓝治疗什么鱼病| 亟是什么意思| 双源ct主要检查什么| 诱惑是什么意思| 胡人是什么民族| jhs空调是什么牌子| 地包天是什么意思| 为什么纯牛奶容易爆痘| 恶心是什么原因| 尿素氮肌酐比值偏高是什么原因| 上火喝什么药| 庄周梦蝶什么意思| 户籍地址填什么| 一意孤行是什么意思| 需要透析的是什么病| 2017年属什么生肖| 五四运动的精神是什么| 胃阴虚有什么症状| 梦见剪指甲是什么意思| 梦见蛇咬别人是什么意思| 三月是什么星座| 什么样的人容易高反| 茹毛饮血什么意思| 神经质是什么意思| 椴树是什么树| 缺钾吃什么补得最快| 膝盖疼痛用什么药| 头疼是什么引起的| 梦见穿新衣服是什么意思| 羊水是什么颜色的| 水溶性是什么意思| 双侧胸膜局限性增厚是什么意思| 嗓子肿痛吃什么药| 巨人观什么意思| 肝脏不好吃什么食物才能养肝护肝| 芒果是什么意思| 属马是什么命| 什么叫几何图形| 这是什么字| 呼吸不畅是什么原因| 什么斗艳| 白板是什么意思| 王代表什么生肖| 40不惑是什么意思| 香茅是什么东西| 左肾积水是什么意思| 男性性功能障碍吃什么药| 了解是什么意思| 四个月念什么字| 气管炎吃什么药好| 大败毒胶囊主治什么病| 心机女是什么意思| 胸腔积液是什么原因引起的| 类风湿什么症状| 痘痘挤出来的白色东西是什么| 女右上眼皮跳是什么预兆| 中国什么武器世界第一| 俄罗斯是什么洲| 下嫁是什么意思| 全会是什么意思| 孙尚香字什么| 庹是什么意思| 拉不出来屎是什么原因| 有什么好的赚钱方法| 圻字五行属什么| 腹部痛挂什么科| sku是什么| 豌豆什么时候种最好| 心病科主要看什么病| 胰腺检查做什么检查| 心情沉重是什么意思| 喉咙干痒是什么原因| 刺史相当于现在的什么官| 子宫回声欠均匀是什么意思| 肚子咕咕叫是什么原因| 食道反流吃什么药| 北京有什么特产| 子宫小有什么影响| 梦见鸡是什么意思| nylon是什么面料成分| 三角梅什么时候换盆| 羊下面是什么生肖| 发膜什么牌子效果最好| 吃什么排宿便清肠彻底| 6月18日什么星座| 马克华菲属于什么档次| 铁塔公司是干什么的| 葡萄不能和什么一起吃| 幽门螺杆菌用什么药| 龙鱼吃什么| 阶段性是什么意思| 喇叭裤配什么鞋子好看| 7月7日是什么日子| 伯母是什么意思| 辽宁古代叫什么| shy是什么意思| 尿肌酐高是什么原因引起的| 请佛像回家有什么讲究| 腱鞘炎用什么药最好| 治飞蚊症用什么眼药水| 拉水便是什么原因| 当归炖鸡有什么功效| 振五行属什么| 鸡蛋不能和什么食物一起吃| 战狼三什么时候上映| 举足轻重是什么生肖| 8月17号是什么星座| 窦骁父母是干什么的| 后会无期什么意思| 肚子胀气吃什么食物| 左旋是什么| 尿路感染挂什么科| 什么叫生酮| 嘴皮发白是什么原因| 04属什么生肖| 心包隐窝是什么意思| white是什么意思颜色| 可人是什么意思| 亥时属什么生肖| 十1是什么意思| pa66是什么材料| 为什么恐龙会灭绝| queen是什么意思| 目鱼和墨鱼有什么区别| 25周岁属什么生肖| 万里长城是什么生肖| 红薯什么季节成熟| 什么的海风| 小孩嗓子哑了吃什么药| 自闭症是什么人投胎| 为什么会得肾结石| 疱疹长什么样子图片| 液基薄层细胞检测是什么| 失而复得什么意思| 上不来气吃什么药好使| 1956年是什么年| 肃穆是什么意思| 苏州为什么不建机场| 大道无为是什么意思| 高筋面粉适合做什么| 什么可以代替人体润滑油| 燕子每年从什么方飞往什么方过冬| 做梦梦见自己生孩子是什么意思| 宫颈管积液什么意思| 震卦代表什么| 神经纤维由什么组成| 蜘蛛的血液是什么颜色| 梦见摘辣椒是什么意思| 黄辣丁吃什么| 歇斯底里什么意思| 3月31号什么星座| 突兀什么意思| 梦见老公怀孕什么预兆| ecmo是什么| 停胎是什么原因造成的| 脸容易红是什么原因| 脑出血有什么后遗症| 呼吸性碱中毒吃什么药| 早孕试纸什么时候测最准| 血糖高的人应该吃什么食物最好| 经信局是干什么的| 为什么早上起来血压高| 纪梵希为什么不娶赫本| 雷锋是什么生肖| 早上醒来嘴苦是什么原因| 陈皮起什么作用| 丘疹是什么| 没落是什么意思| 创伤性湿肺是什么意思| 卖剑买牛是什么动物| 孕妇腿抽筋是什么原因| 孤单是什么意思| 嘴唇为什么会变黑| 梧桐树的叶子像什么| 悠悠岁月什么意思| 什么的猴子| 食管裂孔疝是什么原因造成的| 爱妃是什么意思| 天麻有什么作用| 风骚什么意思| 早餐吃什么最好| 金字旁加全字念什么| 1.8号是什么星座| 梦到自己拔牙齿是什么预兆| 儿女情长是什么意思| 百度

安吉白茶属于什么茶


Directory: ../../../ffmpeg/
File: src/libavfilter/vf_cover_rect.c
Date: 2025-08-04 00:43:16
Exec Total Coverage
Lines: 0 111 0.0%
Functions: 0 6 0.0%
Branches: 0 82 0.0%

Line Branch Exec Source
1 /*
2 * Copyright (c) 2014-2015 Michael Niedermayer <michaelni@gmx.at>
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 /**
22 * @todo switch to dualinput
23 */
24
25 #include "libavutil/mem.h"
26 #include "libavutil/opt.h"
27 #include "filters.h"
28 #include "video.h"
29
30 #include "lavfutils.h"
31
32 enum mode {
33 MODE_COVER,
34 MODE_BLUR,
35 NB_MODES
36 };
37
38 typedef struct CoverContext {
39 AVClass *class;
40 int mode;
41 char *cover_filename;
42 AVFrame *cover_frame;
43 int width, height;
44 } CoverContext;
45
46 #define OFFSET(x) offsetof(CoverContext, x)
47 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
48 static const AVOption cover_rect_options[] = {
49 { "cover", "cover bitmap filename", OFFSET(cover_filename), AV_OPT_TYPE_STRING, {.str = NULL}, .flags = FLAGS },
50 { "mode", "set removal mode", OFFSET(mode), AV_OPT_TYPE_INT, {.i64 = MODE_BLUR}, 0, NB_MODES - 1, FLAGS, .unit = "mode" },
51 { "cover", "cover area with bitmap", 0, AV_OPT_TYPE_CONST, {.i64 = MODE_COVER}, INT_MIN, INT_MAX, FLAGS, .unit = "mode" },
52 { "blur", "blur area", 0, AV_OPT_TYPE_CONST, {.i64 = MODE_BLUR}, INT_MIN, INT_MAX, FLAGS, .unit = "mode" },
53 { NULL }
54 };
55
56 AVFILTER_DEFINE_CLASS(cover_rect);
57
58 static int config_input(AVFilterLink *inlink)
59 {
60 return 0;
61 }
62
63 static void cover_rect(CoverContext *cover, AVFrame *in, int offx, int offy)
64 {
65 int x, y, p;
66
67 for (p = 0; p < 3; p++) {
68 uint8_t *data = in->data[p] + (offx>>!!p) + (offy>>!!p) * in->linesize[p];
69 const uint8_t *src = cover->cover_frame->data[p];
70 int w = AV_CEIL_RSHIFT(cover->cover_frame->width , !!p);
71 int h = AV_CEIL_RSHIFT(cover->cover_frame->height, !!p);
72 for (y = 0; y < h; y++) {
73 for (x = 0; x < w; x++) {
74 data[x] = src[x];
75 }
76 data += in->linesize[p];
77 src += cover->cover_frame->linesize[p];
78 }
79 }
80 }
81 static void blur(CoverContext *cover, AVFrame *in, int offx, int offy)
82 {
83 int x, y, p;
84
85 for (p=0; p<3; p++) {
86 int ox = offx>>!!p;
87 int oy = offy>>!!p;
88 int stride = in->linesize[p];
89 uint8_t *data = in->data[p] + ox + oy * stride;
90 int w = AV_CEIL_RSHIFT(cover->width , !!p);
91 int h = AV_CEIL_RSHIFT(cover->height, !!p);
92 int iw = AV_CEIL_RSHIFT(in->width , !!p);
93 int ih = AV_CEIL_RSHIFT(in->height, !!p);
94 for (y = 0; y < h; y++) {
95 for (x = 0; x < w; x++) {
96 int c = 0;
97 int s = 0;
98 if (ox) {
99 int scale = 65536 / (x + 1);
100 s += data[-1 + y*stride] * scale;
101 c += scale;
102 }
103 if (oy) {
104 int scale = 65536 / (y + 1);
105 s += data[x - stride] * scale;
106 c += scale;
107 }
108 if (ox + w < iw) {
109 int scale = 65536 / (w - x);
110 s += data[w + y*stride] * scale;
111 c += scale;
112 }
113 if (oy + h < ih) {
114 int scale = 65536 / (h - y);
115 s += data[x + h*stride] * scale;
116 c += scale;
117 }
118 data[x + y*stride] = c ? (s + (c>>1)) / c : 0;
119 }
120 }
121 }
122 }
123
124 static int filter_frame(AVFilterLink *inlink, AVFrame *in)
125 {
126 AVFilterContext *ctx = inlink->dst;
127 CoverContext *cover = ctx->priv;
128 AVDictionaryEntry *ex, *ey, *ew, *eh;
129 int ret, x = -1, y = -1, w = -1, h = -1;
130 char *xendptr = NULL, *yendptr = NULL, *wendptr = NULL, *hendptr = NULL;
131
132 ex = av_dict_get(in->metadata, "lavfi.rect.x", NULL, AV_DICT_MATCH_CASE);
133 ey = av_dict_get(in->metadata, "lavfi.rect.y", NULL, AV_DICT_MATCH_CASE);
134 ew = av_dict_get(in->metadata, "lavfi.rect.w", NULL, AV_DICT_MATCH_CASE);
135 eh = av_dict_get(in->metadata, "lavfi.rect.h", NULL, AV_DICT_MATCH_CASE);
136 if (ex && ey && ew && eh) {
137 x = strtol(ex->value, &xendptr, 10);
138 y = strtol(ey->value, &yendptr, 10);
139 w = strtol(ew->value, &wendptr, 10);
140 h = strtol(eh->value, &hendptr, 10);
141 }
142
143 if (!xendptr || *xendptr || !yendptr || *yendptr ||
144 !wendptr || *wendptr || !hendptr || *hendptr
145 ) {
146 return ff_filter_frame(ctx->outputs[0], in);
147 }
148
149 if (x < 0) {
150 w += x;
151 x = 0;
152 }
153 if (y < 0) {
154 h += y;
155 y = 0;
156 }
157 w = FFMIN(w, in->width - x);
158 h = FFMIN(h, in->height - y);
159
160 if (w > in->width || h > in->height || w <= 0 || h <= 0)
161 return AVERROR(EINVAL);
162
163 if (cover->cover_frame) {
164 if (w != cover->cover_frame->width || h != cover->cover_frame->height)
165 return AVERROR(EINVAL);
166 }
167
168 cover->width = w;
169 cover->height = h;
170
171 x = av_clip(x, 0, in->width - w);
172 y = av_clip(y, 0, in->height - h);
173
174 ret = ff_inlink_make_frame_writable(inlink, &in);
175 if (ret < 0) {
176 av_frame_free(&in);
177 return ret;
178 }
179
180 if (cover->mode == MODE_BLUR) {
181 blur (cover, in, x, y);
182 } else {
183 cover_rect(cover, in, x, y);
184 }
185 return ff_filter_frame(ctx->outputs[0], in);
186 }
187
188 static av_cold void uninit(AVFilterContext *ctx)
189 {
190 CoverContext *cover = ctx->priv;
191
192 if (cover->cover_frame)
193 av_freep(&cover->cover_frame->data[0]);
194 av_frame_free(&cover->cover_frame);
195 }
196
197 static av_cold int init(AVFilterContext *ctx)
198 {
199 CoverContext *cover = ctx->priv;
200 int ret;
201
202 if (cover->mode == MODE_COVER) {
203 if (!cover->cover_filename) {
204 av_log(ctx, AV_LOG_ERROR, "cover filename not set\n");
205 return AVERROR(EINVAL);
206 }
207
208 cover->cover_frame = av_frame_alloc();
209 if (!cover->cover_frame)
210 return AVERROR(ENOMEM);
211
212 if ((ret = ff_load_image(cover->cover_frame->data, cover->cover_frame->linesize,
213 &cover->cover_frame->width, &cover->cover_frame->height,
214 &cover->cover_frame->format, cover->cover_filename, ctx)) < 0)
215 return ret;
216
217 if (cover->cover_frame->format != AV_PIX_FMT_YUV420P && cover->cover_frame->format != AV_PIX_FMT_YUVJ420P) {
218 av_log(ctx, AV_LOG_ERROR, "cover image is not a YUV420 image\n");
219 return AVERROR(EINVAL);
220 }
221 }
222
223 return 0;
224 }
225
226 static const AVFilterPad cover_rect_inputs[] = {
227 {
228 .name = "default",
229 .type = AVMEDIA_TYPE_VIDEO,
230 .config_props = config_input,
231 .filter_frame = filter_frame,
232 },
233 };
234
235 const FFFilter ff_vf_cover_rect = {
236 .p.name = "cover_rect",
237 .p.description = NULL_IF_CONFIG_SMALL("Find and cover a user specified object."),
238 .p.priv_class = &cover_rect_class,
239 .priv_size = sizeof(CoverContext),
240 .init = init,
241 .uninit = uninit,
242 FILTER_INPUTS(cover_rect_inputs),
243 FILTER_OUTPUTS(ff_video_default_filterpad),
244 FILTER_PIXFMTS(AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVJ420P),
245 };
246

柠字五行属什么 男生射精什么感觉 急性湿疹用什么药膏 擦伤用什么药好得快 五月二十是什么星座
什么云见日 示数是什么意思 知性是什么意思 为什么会有狐臭 用什么点豆腐最健康
胃胀想吐吃什么药 文爱是什么意思 盐水洗脸有什么好处与坏处 凤仙花什么时候开花 拉肚子能吃什么菜
color是什么意思 手作是什么意思 凌晨两点是什么时辰 leep术是什么手术 头晕在医院挂什么科
包皮过长是什么样的hcv9jop6ns7r.cn 02年属什么hcv9jop7ns0r.cn 吃什么有饱腹感还减肥luyiluode.com 八面玲珑是什么数字bjhyzcsm.com 有福气是什么意思hcv9jop0ns4r.cn
爱迪生发明什么hcv9jop0ns4r.cn 拜忏是什么意思hlguo.com 醛固酮高吃什么降压药gysmod.com 肚子一直响是什么原因hkuteam.com 11月份生日是什么星座hkuteam.com
灰度是什么意思hcv8jop3ns8r.cn 林伽是什么hcv8jop6ns3r.cn 活泼开朗是什么意思hcv9jop4ns1r.cn 锦纶氨纶是什么面料hcv9jop1ns3r.cn edenbo是什么牌子hcv9jop7ns3r.cn
怀孕了不想要最好的办法是什么hcv8jop3ns6r.cn 为什么耳屎是湿的hcv9jop1ns9r.cn 阴茎插入阴道什么感觉hcv8jop1ns1r.cn 卡西欧属于什么档次chuanglingweilai.com 牙龈一直肿不消什么原因hcv8jop2ns4r.cn
百度