什么人容易得白塞氏病| 被跳蚤咬了涂什么药膏| 润月是什么意思| 呼吸有异味是什么原因| click什么意思| 动态心电图能检查出什么病| 吃什么最补钙| 什么样的女人最旺夫| 毛重是什么| 抗宫炎软胶囊主要治什么| 痛经吃什么水果能缓解疼痛| 过期红酒有什么用途| 水瓶男和什么星座最配| 白头发吃什么维生素能变黑| 拉肚子发热是什么情况| 讣告是什么意思| 新西兰移民需要什么条件| 为什么要小心AB型血的人| 皮肤黄的人适合穿什么颜色的衣服| 黄梅时节是什么季节| 肾结石吃什么药止疼| 女攻是什么意思| 吃什么能增强性功能| 紫米是什么米| 飞刃是什么意思| 肝功能2项是指什么| 怀孕日期是从什么时候开始算| 蔓字五行属什么| 白脖什么意思| 伊人什么意思| 荞麦和苦荞有什么区别| 乳腺结节是什么症状| 肉瘤是什么| 后遗症是什么意思| 头孢和什么不能一起吃| 河南什么烟出名| 竖中指什么意思| 可乐不能和什么一起吃| 浓绿的什么| 抽烟对女生有什么危害| 字读什么| 右胸上部隐痛什么原因| 肝火旺吃什么中药| 女人喜欢什么样的男人| 心脏不舒服吃什么药| 乌龙茶适合什么季节喝| 嘴发麻是什么原因引起的| 宰相和丞相有什么区别| 白气是什么物态变化| 什么生花| 梦到蛇预示着什么意思| 血口喷人是什么意思| 梦见大蛇是什么意思| 怀孕初期应该注意什么| 随性是什么意思| 四肢肌力5级什么意思| 阴虚内热是什么意思| 小名是什么意思| 舌头痒是什么原因| 什么叫轻断食| 喝可乐有什么危害| 繁花似锦是什么意思| 深度睡眠是什么状态| 精神恍惚是什么意思| 脐带血能治疗什么病| 6.15是什么日子| mlb是什么意思| 621什么星座| 宁字五行属什么的| 不什么好什么| 1104是什么星座| 风暴是什么意思| 干咳吃什么药| 唯女子与小人难养也什么意思| 老年人出虚汗是什么原因引起的| 1月23号什么星座| 7月27日什么星座| 欲望是什么意思| 痔疮什么样子| 沸去掉三点水念什么| 梦见牙掉了一颗是什么意思| 高粱是什么| 什么样的人不容易怀孕| 什么是痰湿| 晚上9点到10点是什么时辰| 什么是潮喷| 住院送什么花好| 胃炎吃什么中药效果好| 男模什么意思| 阴阳二气是什么意思| 指甲变空是什么原因| 什么食物养肝护肝最好| 口腔苔藓用什么药| 双侧乳腺小叶增生是什么意思| 草口耳是什么字| 碘是什么东西| 脚痛挂什么科| 送日子是什么意思| 动脉夹层是什么病| 颈部淋巴结肿大是什么原因| 安门是什么意思| 梦见自己穿孝衣有什么征兆| 86年属什么的生肖| 歆是什么意思| 820是什么意思| 手足口是什么| 后会无期什么意思| 贵气是什么意思| 胃属于什么科室| 检查肚子挂什么科| 吃桃子有什么好处| 老人生日送什么礼物好| 7月28号是什么星座| 烤瓷牙是什么意思| 乙肝核心抗体高是什么意思| 漏尿女性吃什么药最好| 春天可以干什么| 耳朵后面是什么穴位| 四面受敌是什么动物| 福建有什么特产| 06是什么生肖| 徒孙是什么意思| 绿茶是什么| 12月21号是什么星座| 消化道出血吃什么药| 伤口愈合为什么会痒| 脚底疼痛是什么原因| 2.10是什么星座| 胃不消化吃什么药效果最好| 贪慕虚荣是什么意思| 善莫大焉是什么意思| 脉弱是什么意思| 肚子容易胀气是什么原因| 天蝎座和什么星座不合| 中药什么时间喝效果最好| 地贫是什么病| 苹果a1661是什么型号| 戊型肝炎是什么病| 感恩节为什么要吃火鸡| 月经期间喝酒会有什么影响| 正常精液是什么颜色| 帕金森吃什么药好得快| 小茴香是什么| 不遗余力什么意思| 梦见种玉米是什么意思| 7.14是什么日子| 男怕穿靴女怕戴帽什么意思| mds医学上是什么意思| 胸口长痘痘是什么原因| 气虚血虚吃什么中成药| 什么是垃圾食品| palladium是什么牌子| 孟子叫什么名字| 释迦牟尼是什么意思| vintage是什么牌子| 女性尿路感染有什么症状| 顾名思义的顾什么意思| 腰肌劳损用什么药| peg是什么意思| 奶油色是什么颜色| 阳气不足吃什么药| 恶心头晕是什么症状| 狗取什么名字好| 尿发黄是什么原因男性| 六月是什么季节| 腹股沟疝气挂什么科| 菜心又叫什么菜| 天干是什么意思| 猕猴桃什么季节成熟| 骨龄是什么意思| 没学历可以学什么技术| 什么水果补充维生素c| 圣灵是什么意思| 什么的小鸡| 安徽有什么土特产| 应无所住而生其心什么意思| 口咸是什么原因引起的| 婴儿为什么老吐奶| 角是什么意思| 装修都包括什么| 珀莱雅属于什么档次| 唾液有臭味是什么原因| 乙丑是什么生肖| 早上打嗝是什么原因呢| 如法炮制是什么意思| 脸上长斑吃什么药调理| 根管治疗后要注意什么| 早上起来口苦吃什么药| 喝中药不能吃什么| 火龙果吃了有什么好处| 什么是辛辣刺激性食物| 为什么会梦到蛇| cosplay是什么意思| 911是什么电话| 为什么要小心吉普赛人| 茶走是什么意思| 系带割掉了有什么影响| 止血敏又叫什么名| 元宝是什么意思| 学是什么偏旁| 控评是什么意思| 猪和什么属相最配| 排暖期是什么时候| 胸闷气短看什么科| 内透声差是什么意思| 例假颜色发黑是什么原因| 胸闷是什么病的前兆| 灵芝什么人不能吃| 宝宝拉肚子能吃什么| 2007年是什么命| spo2是什么意思| 什么是eb病毒| 馒头配什么菜好吃| 二大爷是什么意思| 益生菌不能和什么一起吃| 经常干咳是什么原因| 苹果什么时候成熟| 农业户口和非农业户口有什么区别| 什么叫遗精| 故人是什么意思| 梦见打人是什么意思| 亚硝酸钠是什么东西| 新店开业送什么好| 穿匡威的都是什么人| 草龟吃什么食物| 打呼噜挂什么科| 甲状腺属于什么科| 女性多吃什么滋补卵巢| 桐字属于五行属什么| st什么意思| 3月25号是什么星座| 甲状腺3类是什么意思| 宽粉是什么做的| police是什么意思| 做狐臭手术挂什么科| 女人吃当归有什么好处| 芦芽是什么| 高烧后拉稀说明什么| 电气火灾用什么灭火器| 牙齿痒是什么原因| 昧是什么意思| 什么叫变应性鼻炎| edsheeran为什么叫黄老板| 佛灯火命是什么意思| 点状血流信号是什么意思| 吃什么降三高最好| 为什么总是睡不着| 缪斯什么意思| 高考三百多分能上什么学校| 杨梅有什么功效和作用| 皮肤感染吃什么消炎药| 二便是什么意思| 朝九晚五是什么意思| sorona是什么面料| 洁颜油是干什么用的| 什么是细菌感染| 咸鸭蛋为什么会出油| 通草是什么| hp医学上是什么意思| 医院五行属什么| 义眼是什么意思| 胆囊炎属于什么科| 吃什么东西补血| 檄文是什么意思| 百度

港星赢得金像奖 内地影人却在着装搭配上完胜


Directory: ../../../ffmpeg/
File: src/libavcodec/bsf/av1_frame_split.c
Date: 2025-08-04 00:43:16
Exec Total Coverage
Lines: 0 119 0.0%
Functions: 0 4 0.0%
Branches: 0 66 0.0%

Line Branch Exec Source
1 /*
2 * Copyright (c) 2019 James Almer <jamrial@gmail.com>
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 /**
22 * @file
23 * This bitstream filter splits AV1 Temporal Units into packets containing
24 * just one frame, plus any leading and trailing OBUs that may be present at
25 * the beginning or end, respectively.
26 *
27 * Temporal Units already containing only one frame will be passed through
28 * unchanged. When splitting can't be performed, the Temporal Unit will be
29 * passed through containing only the remaining OBUs starting from the first
30 * one after the last successfully split frame.
31 */
32
33 #include "libavutil/avassert.h"
34
35 #include "bsf.h"
36 #include "bsf_internal.h"
37 #include "cbs.h"
38 #include "cbs_av1.h"
39
40 typedef struct AV1FSplitContext {
41 AVPacket *buffer_pkt;
42 CodedBitstreamContext *cbc;
43 CodedBitstreamFragment temporal_unit;
44
45 int nb_frames;
46 int cur_frame;
47 int cur_frame_idx;
48 int last_frame_idx;
49 } AV1FSplitContext;
50
51 static int av1_frame_split_filter(AVBSFContext *ctx, AVPacket *out)
52 {
53 AV1FSplitContext *s = ctx->priv_data;
54 CodedBitstreamFragment *td = &s->temporal_unit;
55 int i, ret;
56 int split = !!s->buffer_pkt->data;
57
58 if (!s->buffer_pkt->data) {
59 int nb_frames = 0;
60
61 ret = ff_bsf_get_packet_ref(ctx, s->buffer_pkt);
62 if (ret < 0)
63 return ret;
64
65 ret = ff_cbs_read_packet(s->cbc, td, s->buffer_pkt);
66 if (ret < 0) {
67 av_log(ctx, AV_LOG_WARNING, "Failed to parse temporal unit.\n");
68 goto passthrough;
69 }
70
71 for (i = 0; i < td->nb_units; i++) {
72 CodedBitstreamUnit *unit = &td->units[i];
73
74 if (unit->type == AV1_OBU_FRAME ||
75 unit->type == AV1_OBU_FRAME_HEADER)
76 nb_frames++;
77 else if (unit->type == AV1_OBU_TILE_LIST) {
78 av_log(ctx, AV_LOG_VERBOSE, "Large scale tiles are unsupported.\n");
79 goto passthrough;
80 }
81 }
82 if (nb_frames > 1) {
83 s->cur_frame = 0;
84 s->cur_frame_idx = s->last_frame_idx = 0;
85 s->nb_frames = nb_frames;
86 split = 1;
87 }
88 }
89
90 if (split) {
91 AV1RawFrameHeader *frame = NULL;
92 int cur_frame_type = -1, size = 0;
93
94 for (i = s->cur_frame_idx; i < td->nb_units; i++) {
95 CodedBitstreamUnit *unit = &td->units[i];
96
97 size += unit->data_size;
98 if (unit->type == AV1_OBU_FRAME) {
99 AV1RawOBU *obu = unit->content;
100
101 if (frame) {
102 av_log(ctx, AV_LOG_WARNING, "Frame OBU found when Tile data for a "
103 "previous frame was expected.\n");
104 goto passthrough;
105 }
106
107 frame = &obu->obu.frame.header;
108 cur_frame_type = obu->header.obu_type;
109 s->last_frame_idx = s->cur_frame_idx;
110 s->cur_frame_idx = i + 1;
111 s->cur_frame++;
112
113 // split here unless it's the last frame, in which case
114 // include every trailing OBU
115 if (s->cur_frame < s->nb_frames)
116 break;
117 } else if (unit->type == AV1_OBU_FRAME_HEADER) {
118 AV1RawOBU *obu = unit->content;
119
120 if (frame) {
121 av_log(ctx, AV_LOG_WARNING, "Frame Header OBU found when Tile data for a "
122 "previous frame was expected.\n");
123 goto passthrough;
124 }
125
126 frame = &obu->obu.frame_header;
127 cur_frame_type = obu->header.obu_type;
128 s->last_frame_idx = s->cur_frame_idx;
129 s->cur_frame++;
130
131 // split here if show_existing_frame unless it's the last
132 // frame, in which case include every trailing OBU
133 if (frame->show_existing_frame &&
134 s->cur_frame < s->nb_frames) {
135 s->cur_frame_idx = i + 1;
136 break;
137 }
138 } else if (unit->type == AV1_OBU_TILE_GROUP) {
139 AV1RawOBU *obu = unit->content;
140 AV1RawTileGroup *group = &obu->obu.tile_group;
141
142 if (!frame || cur_frame_type != AV1_OBU_FRAME_HEADER) {
143 av_log(ctx, AV_LOG_WARNING, "Unexpected Tile Group OBU found before a "
144 "Frame Header.\n");
145 goto passthrough;
146 }
147
148 if ((group->tg_end == (frame->tile_cols * frame->tile_rows) - 1) &&
149 // include every trailing OBU with the last frame
150 s->cur_frame < s->nb_frames) {
151 s->cur_frame_idx = i + 1;
152 break;
153 }
154 }
155 }
156 av_assert0(frame && s->cur_frame <= s->nb_frames);
157
158 ret = av_packet_ref(out, s->buffer_pkt);
159 if (ret < 0)
160 goto fail;
161
162 out->data = (uint8_t *)td->units[s->last_frame_idx].data;
163 out->size = size;
164
165 // skip the frame in the buffer packet if it's split successfully, so it's not present
166 // if the packet is passed through in case of failure when splitting another frame.
167 s->buffer_pkt->data += size;
168 s->buffer_pkt->size -= size;
169
170 if (!frame->show_existing_frame && !frame->show_frame)
171 out->pts = AV_NOPTS_VALUE;
172
173 if (s->cur_frame == s->nb_frames) {
174 av_packet_unref(s->buffer_pkt);
175 ff_cbs_fragment_reset(td);
176 }
177
178 return 0;
179 }
180
181 passthrough:
182 av_packet_move_ref(out, s->buffer_pkt);
183
184 ret = 0;
185 fail:
186 if (ret < 0) {
187 av_packet_unref(out);
188 av_packet_unref(s->buffer_pkt);
189 }
190 ff_cbs_fragment_reset(td);
191
192 return ret;
193 }
194
195 static const CodedBitstreamUnitType decompose_unit_types[] = {
196 AV1_OBU_TEMPORAL_DELIMITER,
197 AV1_OBU_SEQUENCE_HEADER,
198 AV1_OBU_FRAME_HEADER,
199 AV1_OBU_TILE_GROUP,
200 AV1_OBU_FRAME,
201 };
202
203 static int av1_frame_split_init(AVBSFContext *ctx)
204 {
205 AV1FSplitContext *s = ctx->priv_data;
206 CodedBitstreamFragment *td = &s->temporal_unit;
207 int ret;
208
209 s->buffer_pkt = av_packet_alloc();
210 if (!s->buffer_pkt)
211 return AVERROR(ENOMEM);
212
213 ret = ff_cbs_init(&s->cbc, AV_CODEC_ID_AV1, ctx);
214 if (ret < 0)
215 return ret;
216
217 s->cbc->decompose_unit_types = decompose_unit_types;
218 s->cbc->nb_decompose_unit_types = FF_ARRAY_ELEMS(decompose_unit_types);
219
220 if (!ctx->par_in->extradata_size)
221 return 0;
222
223 ret = ff_cbs_read_extradata(s->cbc, td, ctx->par_in);
224 if (ret < 0)
225 av_log(ctx, AV_LOG_WARNING, "Failed to parse extradata.\n");
226
227 ff_cbs_fragment_reset(td);
228
229 return 0;
230 }
231
232 static void av1_frame_split_flush(AVBSFContext *ctx)
233 {
234 AV1FSplitContext *s = ctx->priv_data;
235
236 av_packet_unref(s->buffer_pkt);
237 ff_cbs_fragment_reset(&s->temporal_unit);
238 }
239
240 static void av1_frame_split_close(AVBSFContext *ctx)
241 {
242 AV1FSplitContext *s = ctx->priv_data;
243
244 av_packet_free(&s->buffer_pkt);
245 ff_cbs_fragment_free(&s->temporal_unit);
246 ff_cbs_close(&s->cbc);
247 }
248
249 static const enum AVCodecID av1_frame_split_codec_ids[] = {
250 AV_CODEC_ID_AV1, AV_CODEC_ID_NONE,
251 };
252
253 const FFBitStreamFilter ff_av1_frame_split_bsf = {
254 .p.name = "av1_frame_split",
255 .p.codec_ids = av1_frame_split_codec_ids,
256 .priv_data_size = sizeof(AV1FSplitContext),
257 .init = av1_frame_split_init,
258 .flush = av1_frame_split_flush,
259 .close = av1_frame_split_close,
260 .filter = av1_frame_split_filter,
261 };
262

10.17是什么星座 充饥是什么意思 什么是精神 甲状腺实性结节什么意思 经常打嗝是什么原因引起的
颈椎病去医院挂什么科 狮子长什么样 2.22是什么星座 寅时五行属什么 动脉抽血为什么这么疼
us是什么意思 鸡胗是什么器官 什么是黄体 体重除以身高的平方是什么指数 水为什么会结冰
守夜是什么意思 mrv是什么检查 姓丁的女孩起什么名字好 996是什么意思 胃炎是什么原因引起的
胆囊手术后不能吃什么hcv8jop8ns1r.cn 桃子有什么营养价值hcv8jop1ns3r.cn 棱角是什么意思hcv8jop0ns7r.cn 确认是什么意思hcv8jop3ns3r.cn 费神是什么意思hcv7jop5ns3r.cn
偏财代表什么hcv8jop9ns0r.cn 不宁腿综合症吃什么药hcv9jop2ns6r.cn 指压是什么意思hcv8jop6ns6r.cn 七月十二是什么星座hcv7jop5ns5r.cn 验血能查出什么hcv9jop7ns1r.cn
什么的流水hcv9jop3ns4r.cn 我是什么星座hcv8jop2ns4r.cn 喜大普奔什么意思hcv8jop3ns5r.cn 脉濡是什么意思hcv9jop8ns3r.cn 基友是什么意思hcv8jop1ns4r.cn
面瘫吃什么药mmeoe.com 莘莘学子是什么意思hcv9jop8ns0r.cn 遇见是什么意思hcv9jop7ns5r.cn 甲状腺分泌什么激素hcv9jop2ns1r.cn 头汗特别多是什么原因hcv9jop6ns1r.cn
百度