脖子下面是什么部位| 眼底检查主要查什么| 香槟是什么酒| faleda是什么牌子的手表| 狼烟是什么意思| 3月28号是什么星座| 狗狗犬窝咳吃什么药| 脱发看什么科| 甘油是什么东西| 火龙果什么时候开花| 什么叫丹凤眼| 牛是什么意思| 什么水果补钙| 黑木耳是什么意思| 下巴出汗多是什么原因| 12月20日什么星座| 1992年属什么生肖| 1968年什么时候退休| 打了麻药有什么副作用| 腿有淤青是什么原因| 气虚便秘吃什么中成药| fic是什么意思| 睡眠质量不好挂什么科| 人中深浅代表什么| 锌是补什么的| 银耳什么时候吃最好| 历久弥新什么意思| 血钾查什么项目| 飞花令是什么| 泌尿外科主要看什么病| 生殖器疱疹用什么药最好| 皮肤暗黄是什么原因| 核桃补什么| 沅字五行属什么| pos什么意思| 活性印染是什么意思| 中校军衔是什么级别| 北极熊的毛是什么颜色| 信的拼音是什么| 肚子痛是什么原因| 奔豚是什么意思| 3月10日什么星座| 嗓子疼发烧吃什么药| sco是什么意思| 疾厄宫是什么意思| 门庭冷落是什么意思| 屁多什么原因| 可乐定是什么药| 牛初乳是什么| 河豚是什么| 继承衣钵是什么意思| 副处是什么级别| 拔罐之后要注意什么| 惹是什么意思| 骨灰盒什么材质的好| 粘假牙用什么胶| 三本是什么| 今年26岁属什么生肖| dady是什么意思| 头疼按什么穴位| 大器晚成什么意思| 真我是什么意思| 全身皮肤痒是什么原因| 儿童风寒感冒吃什么药| 海员是干什么的| 喜欢吃什么| 生粉是什么| 8月7日什么星座| 什么是辐照食品| 血小板吃什么补得快点| 脑动脉硬化是什么意思| 白羊男喜欢什么样的女生| 欢愉是什么意思| 衣原体感染是什么意思| 德五行属什么| 磷酸是什么| 女人细菌感染什么原因引起的| 看病人买什么水果| 尖牙什么时候换| 厦门有什么区| gucci是什么意思| 敕令是什么意思| 脂肪是什么意思| 安全监察是一种带有什么的监督| 高抬腿运动有什么好处| 食指戴戒指代表什么| 黄河里有什么鱼| 飞蚊症是什么引起的| 五黄煞是什么意思| 一个黑一个出读什么| 身在其位必谋其职是什么意思| 手麻挂什么科| 伤口消毒用什么| 陈皮起什么作用| gas是什么意思| 眼睛有点模糊是什么原因| 芒果与什么食物相克| 感冒发烧不能吃什么食物| 晚上十点多是什么时辰| 六月九号什么星座| 什么什么为什么| 胃溃疡吃什么药| 骨盆前倾挂什么科| 皮肤痒吃什么药| 荨麻疹吃什么药效果好| 白化病是什么遗传| 肝脾不和吃什么中成药| 夏枯草长什么样子| 什么茶最好喝| 鼠冲什么生肖| 不为良相便为良医是什么意思| lsa是什么意思| 亦字五行属什么| 什么的灵魂| 红曲粉是什么东西| 脂溢性脱发是什么意思| 霉菌性阴道炎用什么药好得快| 人各有命是什么意思| 寒湿重吃什么药| 奇货可居是什么意思| lch是什么病| 为什么头皮总是很痒| 肚子有腹水是什么症状| 9.25是什么星座| bu是什么颜色| 撑台脚是什么意思| 塔罗是什么意思| 什么是呼吸性碱中毒| 瑶浴是什么意思| 气血不通吃什么药| 海藻糖是什么| 辛弃疾字什么号什么| 对眼是什么意思| 见多识广什么意思| 败血症是什么| 黑壳虾吃什么食物| 接吻是什么感觉| 男士阴囊湿疹用什么药膏| 无语凝噎是什么意思| 虎配什么生肖最好| 吃人参对身体有什么好处| 臭氧有什么作用| cap医学上是什么意思| 叶酸是什么维生素| 合肥有什么玩的| look是什么意思| 白花花的什么| 肝是起什么作用的| 西布曲明是什么| 什么意思啊| 梦见已故母亲预示什么| 二月底是什么星座| 腿上有白点是什么原因| 神经衰弱吃什么好| 胡汉三回来了什么意思| 黄色搭配什么颜色| 老九门讲的是什么故事| 潭柘寺求什么最灵验| 怀孕挂什么科| 礼五行属什么| 38妇女节送老婆什么礼物| 空调病吃什么药| 相顾无言是什么意思| 东施效颦的意思是什么| 一颗什么| 大什么一什么| 检查前列腺需要做什么检查| 白细胞减少有什么症状| 淋巴吃什么药好| 月经期间肚子疼是什么原因| 急救物品五定是什么| 医学上pi是什么意思| hpv是什么病毒| 精囊炎吃什么药最有效| 反流性食管炎不能吃什么食物| 首发是什么意思| ards是什么病的简称| 阴虱是什么样子图片| 头疼应该挂什么科| 塑料是什么垃圾| b2b是什么意思| 肠胃不好吃什么水果比较好| 心疼是什么原因| 胆毒是什么原因引起的| 生粉是什么粉| 什么的雪花| 皮肤黄是什么原因引起的| 水疱疹什么药最快能治好| 牙疼买什么药| 多字五行属什么| 傻狍子为什么叫傻狍子| 头晕有点恶心是什么原因| 什么叫佛| 罴是什么动物| 薄荷泡水喝有什么好处| 石斤读什么| 阴道吹气是什么原因| 家里狗死了预示着什么| 长期便秘喝什么茶好| 什么叫台风| 脾肾气虚的症状是什么| 医学是什么| 五月二十九是什么日子| 些几是什么意思| 眼角发黄是什么原因| 过敏性结膜炎用什么眼药水最好| 送男朋友什么礼物合适| lad是什么意思| 西瓜为什么是红色的| 慢性鼻炎吃什么药| 人少了一魄什么反应| 妇科活检是什么意思| 上报是什么意思| 1月份是什么星座| 6月22号是什么星座| 胃疼发烧是什么原因| 晚上睡觉盗汗是什么原因| 喝茶水对身体有什么好处| cep是什么意思| 狗可以吃什么| 娣什么意思| 思想包袱是什么意思| 流鼻涕吃什么药好| 利口酒是什么酒| 血压高是什么原因| 太原有什么特产| 为什么会打雷| 低烧是什么原因| 去痛片又叫什么名| 梦到妈妈怀孕什么预兆| 生理盐水敷脸有什么作用| 三观不正是什么意思| 戒奶涨奶痛有什么缓解方法| 什么是承兑| ira是什么品牌| 浑浑噩噩是什么意思| 叶公好龙是什么故事| 食道炎症吃什么药最好| 留守儿童什么意思| tct和hpv有什么区别| 82年属什么的| da是什么单位| 木丑念什么| 在屋顶唱着你的歌是什么歌| 电解质水是什么| cps是什么单位| 眉毛上的痣代表什么| 晶莹剔透是什么意思| 眼皮跳是什么原因| 越来越什么| 亭字五行属什么| 莎字五行属什么| 老公工作劳累炖什么汤| 下午六点是什么时辰| 水洗标是什么| 情分是什么意思| 类风湿有什么症状| rp是什么意思| 牛子什么意思| 火可念什么| 苦瓜有什么功效| 自私自利是什么意思| 焗油是什么意思| 花椒水泡脚有什么好处| 百度

排骨是什么肉


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

Line Branch Exec Source
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 "libavutil/buffer.h"
20 #include "libavutil/hwcontext.h"
21 #include "libavutil/log.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 "formats.h"
29 #include "video.h"
30
31 typedef struct HWDownloadContext {
32 const AVClass *class;
33
34 AVBufferRef *hwframes_ref;
35 AVHWFramesContext *hwframes;
36 } HWDownloadContext;
37
38 static int hwdownload_query_formats(const AVFilterContext *avctx,
39 AVFilterFormatsConfig **cfg_in,
40 AVFilterFormatsConfig **cfg_out)
41 {
42 int err;
43
44 if ((err = ff_formats_ref(ff_formats_pixdesc_filter(AV_PIX_FMT_FLAG_HWACCEL, 0),
45 &cfg_in[0]->formats)) ||
46 (err = ff_formats_ref(ff_formats_pixdesc_filter(0, AV_PIX_FMT_FLAG_HWACCEL),
47 &cfg_out[0]->formats)))
48 return err;
49
50 return 0;
51 }
52
53 static int hwdownload_config_input(AVFilterLink *inlink)
54 {
55 FilterLink *l = ff_filter_link(inlink);
56 AVFilterContext *avctx = inlink->dst;
57 HWDownloadContext *ctx = avctx->priv;
58
59 av_buffer_unref(&ctx->hwframes_ref);
60
61 if (!l->hw_frames_ctx) {
62 av_log(ctx, AV_LOG_ERROR, "The input must have a hardware frame "
63 "reference.\n");
64 return AVERROR(EINVAL);
65 }
66
67 ctx->hwframes_ref = av_buffer_ref(l->hw_frames_ctx);
68 if (!ctx->hwframes_ref)
69 return AVERROR(ENOMEM);
70
71 ctx->hwframes = (AVHWFramesContext*)ctx->hwframes_ref->data;
72
73 return 0;
74 }
75
76 static int hwdownload_config_output(AVFilterLink *outlink)
77 {
78 AVFilterContext *avctx = outlink->src;
79 AVFilterLink *inlink = avctx->inputs[0];
80 HWDownloadContext *ctx = avctx->priv;
81 enum AVPixelFormat *formats;
82 int err, i, found;
83
84 if (!ctx->hwframes_ref)
85 return AVERROR(EINVAL);
86
87 err = av_hwframe_transfer_get_formats(ctx->hwframes_ref,
88 AV_HWFRAME_TRANSFER_DIRECTION_FROM,
89 &formats, 0);
90 if (err < 0)
91 return err;
92
93 found = 0;
94 for (i = 0; formats[i] != AV_PIX_FMT_NONE; i++) {
95 if (formats[i] == outlink->format) {
96 found = 1;
97 break;
98 }
99 }
100 av_freep(&formats);
101
102 if (!found) {
103 av_log(ctx, AV_LOG_ERROR, "Invalid output format %s for hwframe "
104 "download.\n", av_get_pix_fmt_name(outlink->format));
105 return AVERROR(EINVAL);
106 }
107
108 outlink->w = inlink->w;
109 outlink->h = inlink->h;
110
111 return 0;
112 }
113
114 static int hwdownload_filter_frame(AVFilterLink *link, AVFrame *input)
115 {
116 AVFilterContext *avctx = link->dst;
117 AVFilterLink *outlink = avctx->outputs[0];
118 HWDownloadContext *ctx = avctx->priv;
119 AVFrame *output = NULL;
120 int err;
121
122 if (!ctx->hwframes_ref || !input->hw_frames_ctx) {
123 av_log(ctx, AV_LOG_ERROR, "Input frames must have hardware context.\n");
124 err = AVERROR(EINVAL);
125 goto fail;
126 }
127 if ((void*)ctx->hwframes != input->hw_frames_ctx->data) {
128 av_log(ctx, AV_LOG_ERROR, "Input frame is not the in the configured "
129 "hwframe context.\n");
130 err = AVERROR(EINVAL);
131 goto fail;
132 }
133
134 output = ff_get_video_buffer(outlink, ctx->hwframes->width,
135 ctx->hwframes->height);
136 if (!output) {
137 err = AVERROR(ENOMEM);
138 goto fail;
139 }
140
141 err = av_hwframe_transfer_data(output, input, 0);
142 if (err < 0) {
143 av_log(ctx, AV_LOG_ERROR, "Failed to download frame: %d.\n", err);
144 goto fail;
145 }
146
147 output->width = outlink->w;
148 output->height = outlink->h;
149
150 err = av_frame_copy_props(output, input);
151 if (err < 0)
152 goto fail;
153
154 av_frame_free(&input);
155
156 return ff_filter_frame(avctx->outputs[0], output);
157
158 fail:
159 av_frame_free(&input);
160 av_frame_free(&output);
161 return err;
162 }
163
164 static av_cold void hwdownload_uninit(AVFilterContext *avctx)
165 {
166 HWDownloadContext *ctx = avctx->priv;
167
168 av_buffer_unref(&ctx->hwframes_ref);
169 }
170
171 static const AVClass hwdownload_class = {
172 .class_name = "hwdownload",
173 .item_name = av_default_item_name,
174 .option = NULL,
175 .version = LIBAVUTIL_VERSION_INT,
176 };
177
178 static const AVFilterPad hwdownload_inputs[] = {
179 {
180 .name = "default",
181 .type = AVMEDIA_TYPE_VIDEO,
182 .config_props = hwdownload_config_input,
183 .filter_frame = hwdownload_filter_frame,
184 },
185 };
186
187 static const AVFilterPad hwdownload_outputs[] = {
188 {
189 .name = "default",
190 .type = AVMEDIA_TYPE_VIDEO,
191 .config_props = hwdownload_config_output,
192 },
193 };
194
195 const FFFilter ff_vf_hwdownload = {
196 .p.name = "hwdownload",
197 .p.description = NULL_IF_CONFIG_SMALL("Download a hardware frame to a normal frame"),
198 .p.priv_class = &hwdownload_class,
199 .uninit = hwdownload_uninit,
200 .priv_size = sizeof(HWDownloadContext),
201 FILTER_INPUTS(hwdownload_inputs),
202 FILTER_OUTPUTS(hwdownload_outputs),
203 FILTER_QUERY_FUNC2(hwdownload_query_formats),
204 .flags_internal = FF_FILTER_FLAG_HWFRAME_AWARE,
205 };
206

灼口综合症吃什么药 巫是什么意思 什么物流寄大件便宜 什么时候需要打破伤风针 梦见生娃娃是什么意思
风流是什么意思 弱点是什么意思 尽虚空遍法界什么意思 肚子疼吃什么药 吃什么养肝护肝最好
什么的雷雨 神经性耳鸣有什么症状 内分泌紊乱有什么症状表现 大姨妈量多是什么原因 角化棘皮瘤是什么病
baby是什么意思 士多啤梨是什么水果 吃什么可以补气血 1979年是什么命 superstar是什么意思
太阳像什么的比喻句hcv9jop1ns6r.cn 山合念什么hcv9jop5ns3r.cn 积家手表什么档次hcv9jop1ns3r.cn 吃六味地黄丸有什么好处beikeqingting.com 细菌感染发烧吃什么药hcv8jop0ns5r.cn
小节是什么意思hcv8jop6ns9r.cn 抓鱼的鸟叫什么cl108k.com 打喷嚏流清鼻涕属于什么感冒xinjiangjialails.com 15朵玫瑰花代表什么意思hcv7jop9ns9r.cn 马牙是什么原因引起的hcv9jop0ns1r.cn
非布司他片是什么药hcv8jop9ns6r.cn 良善是什么意思hcv9jop4ns5r.cn 乘的部首是什么hcv8jop8ns4r.cn 梦见小孩子是什么意思bysq.com 什么叫代孕hcv8jop1ns0r.cn
睡眠不好吃什么药最有效hcv8jop8ns3r.cn 今年是什么生肖hcv9jop3ns5r.cn 省略号的作用是什么hkuteam.com 伤寒是什么病hcv8jop7ns6r.cn ur是什么意思hcv7jop6ns7r.cn
百度