过敏吃什么| 心慌意乱是什么意思| 内膜厚是什么原因| 白羊男喜欢什么样的女生| 什么是精神分裂| 身上有红色的小红点是什么原因| 非议是什么意思| 兔肉和什么相克| 什么药补肾最好| 1月10号是什么星座| 藤茶有什么功效| 多囊不能吃什么食物| 六月初三是什么日子| 京剧红色脸谱代表什么| 等闲识得东风面下一句是什么| 三个火是什么字| 念珠菌性阴道炎用什么药| 皮肤感染吃什么消炎药| 为什么针灸后越来越痛| 印度阿三是什么意思| 印度是什么制度的国家| 缺钙会导致什么| coa是什么意思| 切诺是什么药| 活性炭和木炭有什么区别| 菠菜不能和什么食物一起吃| 马标志的车是什么牌子| 四大名著是什么| 桃胶有什么作用| 转氨酶高是什么原因造成的| 镀金什么意思| 生殖细胞瘤是什么病| 什么是毛囊炎及症状图片| 泄气是什么意思| 大腿根内侧发黑是什么原因| 丰五行属什么| 秋天有什么水果| 老师家访的目的是什么| 高血压需要注意些什么| 前列腺增大钙化是什么意思| 什么的滋味| 女朋友生日送什么礼物| 结扎对男的有什么影响| 腹泻吃什么食物好| 土土念什么| 眼睛充血吃什么药| 商字五行属什么| 门可罗雀什么意思| 风寒感冒吃什么药最快| 梦见骂人是什么意思| 2005年什么年| 夕阳朝乾是什么意思| 稷是什么农作物| iron是什么意思| 疱疹性咽峡炎吃什么药最管用| 一月十号是什么星座| 为什么闰月| 在屋顶唱着你的歌是什么歌| 鸭子吃什么食物| 才高八斗什么生肖| 牙齿出血是什么病表现出来的症状| 梦见别人结婚是什么征兆| 太古里是什么意思| 遮羞布是什么意思| 梦到借钱给别人什么意思| 长水痘可以吃什么菜| 幽门螺杆菌阳性吃什么药| 16588a是什么尺码女装| 半胱氨酸是什么| 腰椎退行性变什么意思| 胆囊肌腺症是什么病| 碳酸钙俗称什么| bid是什么意思啊| rv医学上是什么意思| 什么交加| 蛋白粉什么时候喝效果最好| 脾切除后有什么影响| 电解质氯高是什么原因| 缺少电解质有什么症状| 中午吃什么饭| 趾高气昂是什么意思| 征求是什么意思| 什么是热辐射| 什么食物养胃| 三聚净戒是指什么戒| 义五行属什么| 蛇字五行属什么| 投资公司是做什么的| 女人梦见烧纸什么预兆| NG是什么| 小号避孕套是什么尺寸| 下午3点是什么时辰| 糖尿病什么原因引起的| 五月十二是什么星座| 小熊是什么牌子| 拉屎的时候拉出血来是什么原因| 辅助什么意思| 什么是梦想| 理性是什么意思| 为什么会长火疖子| hitachi是什么品牌| 黑蓝色是什么颜色| 原研药是什么意思| 为什么出汗特别多| 孕检唐筛是检查什么的| 心率过快挂什么科| 令坦是对方什么人的尊称| 什么体质容易长结石| 下肢动脉硬化吃什么药| 血沉低是什么意思| 11月18号是什么星座的| 科学家是干什么的| 小河虾吃什么| 专项变应原筛查是什么| 射手座跟什么星座最配| 病符是什么意思| 一生一世是什么生肖| 莆田系是什么意思啊| 什么的杏花| 28岁属相是什么生肖| 前呼后拥是什么意思| 溃疡用什么药| 口苦口干吃什么药最好| 转念是什么意思| 一九九二年属什么生肖| 头胀痛吃什么药| 家慈是什么意思| 吃南瓜有什么好处和坏处| 冠状沟有白色分泌物是什么原因| 尿分叉是什么原因| 睡不着觉是什么原因引起的| 祖师爷是什么意思| 航班是什么意思| 尿分叉是什么原因| 随诊什么意思| 遗传是什么意思| 什么样的手相最有福气| boss是什么意思| 西安有什么山| 反应迟钝是什么原因造成的| 为什么明明很困就是睡不着| 湛江有什么好吃的| 一物降一物前面一句是什么| 什么药是消炎药| 免疫五项能查出什么病| 什么的陪伴| 4月15号是什么星座| 乳房变大是什么原因| 梦见怀孕的女人是什么意思| 口什么舌什么| 井是什么生肖| 白猫来家里有什么预兆| 传教士是什么意思| 女人细菌感染什么原因引起的| 事业编制是什么意思| 牙龈发炎用什么药| 什么是极差| 间接喉镜检查能检查出什么| 应景是什么意思| 尿酸高吃什么水果| 夜卧早起是什么意思| 黄酒有什么功效与作用| 干咳无痰吃什么药| 石千读什么| 胆量是什么意思| 美人尖是什么意思| 婴儿打嗝是什么原因| 亵玩是什么意思| 观字五行属什么| 什么就是什么造句| 什么情况啊这是| 化名是什么意思| 进贡是什么意思| 孩子不说话挂什么科| 全糖是什么意思| 伏天是什么意思| 封闭抗体是什么意思| 双肺局限性气肿是什么病| 什么叫酮症酸中毒| 可卡因是什么| 脚热是什么原因引起的| 什么是智商| 血脂高吃什么油| 军校毕业是什么军衔| 腰椎间盘突出挂什么科| 三月底是什么星座| 白热化阶段是什么意思| 爱长闭口用什么护肤品| 什么是血压高| domyos是什么牌子| 舌苔厚黄是怎么回事吃什么药| 海虾不能和什么一起吃| 12305是什么电话| 总恶心是什么病的前兆| 附件炎是什么原因引起的| 懵的意思是什么| 白介素6升高说明什么| 什么水果可以减肥刮油脂| 子宫肌瘤伴钙化是什么意思| 桦树茸的功效主治什么病| 为什么会胸闷| 润月是什么意思| 庆大霉素治疗鱼什么病| 什么人会得胆囊炎| 牡丹是什么季节开的| fox是什么意思| 北京为什么叫四九城| 爵是什么器皿| 发烧是什么症状| 酉是什么字| 鸡胸是什么病| 西瓜又什么又什么填空| 两只小船儿孤孤零零是什么歌| 仓鼠是什么科动物| 儿童弱视是什么原因引起的| 绣眼鸟吃什么| 西楚霸王是什么生肖| 什么是太监| 雪糕是什么做的| 脑利钠肽前体值高预示什么| 张的五行属性是什么| 怀孕嗜睡什么时候开始| s.m什么意思| 血癌是什么病| 电脑一体机什么牌子好| 肚子痛看什么科| 臀纹不对称有什么影响| 太阳筋疼是什么原因| 自然流产是什么症状| 父亲生日送什么礼物| 子宫憩室有什么症状| 感冒吃什么水果好得快| 2001年属蛇的是什么命| 哮喘吃什么药最有效| 绝无仅有的绝什么意思| 梦见死了人是什么征兆| 为什么锻炼后体重反而增加了| 魔芋是什么东西做的| 调和油是什么油| 头晕呕吐吃什么药| 看喉咙挂什么科| 大致是什么意思| 乙酰胆碱的作用是什么| 干什么一天能挣1000元| 上环后同房要注意什么| 李小龙是什么生肖| 夫复何求什么意思| 固执的人是什么性格| 复山是什么意思| 什么猪没有嘴| 宫颈口大是什么原因| 襁褓是什么意思| 吃什么补营养最快| 梗阻性黄疸是什么病| 妞字五行属什么| 经常自言自语是什么原因| sf什么意思| 支气管扩张什么症状| 5月9号是什么星座| 尿路感染吃什么药效果最好| 浑身出汗是什么原因| 你是什么意思| 一个六一个允念什么| 脸红是什么大病的前兆| 百度

跨境电商如何推动高质量发展——专访商务部研究院电子商务研究所所长张莉


Directory: ../../../ffmpeg/
File: src/libavformat/microdvddec.c
Date: 2025-08-05 11:35:17
Exec Total Coverage
Lines: 73 85 85.9%
Functions: 6 7 85.7%
Branches: 40 56 71.4%

Line Branch Exec Source
1 /*
2 * MicroDVD subtitle demuxer
3 * Copyright (c) 2010 Aurelien Jacobs <aurel@gnuage.org>
4 * Copyright (c) 2012 Clément B?sch <u pkh me>
5 *
6 * This file is part of FFmpeg.
7 *
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 */
22
23 #include "avformat.h"
24 #include "demux.h"
25 #include "internal.h"
26 #include "subtitles.h"
27 #include "libavutil/intreadwrite.h"
28 #include "libavutil/opt.h"
29
30 #define MAX_LINESIZE 2048
31
32
33 typedef struct {
34 const AVClass *class;
35 FFDemuxSubtitlesQueue q;
36 AVRational frame_rate;
37 } MicroDVDContext;
38
39
40 7252 static int microdvd_probe(const AVProbeData *p)
41 {
42 unsigned char c;
43 7252 const uint8_t *ptr = p->buf;
44 int i;
45
46
2/2
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 7243 times.
7252 if (AV_RB24(ptr) == 0xEFBBBF)
47 9 ptr += 3; /* skip UTF-8 BOM */
48
49
2/2
✓ Branch 0 taken 7258 times.
✓ Branch 1 taken 3 times.
7261 for (i=0; i<3; i++) {
50
2/2
✓ Branch 0 taken 7254 times.
✓ Branch 1 taken 4 times.
7258 if (sscanf(ptr, "{%*d}{}%c", &c) != 1 &&
51
2/2
✓ Branch 0 taken 7251 times.
✓ Branch 1 taken 3 times.
7254 sscanf(ptr, "{%*d}{%*d}%c", &c) != 1 &&
52
2/2
✓ Branch 0 taken 7249 times.
✓ Branch 1 taken 2 times.
7251 sscanf(ptr, "{DEFAULT}{}%c", &c) != 1)
53 7249 return 0;
54 9 ptr += ff_subtitles_next_line(ptr);
55 }
56 3 return AVPROBE_SCORE_MAX;
57 }
58
59 70 static int64_t get_pts(const char *buf)
60 {
61 int frame;
62 char c;
63
64
1/2
✓ Branch 0 taken 70 times.
✗ Branch 1 not taken.
70 if (sscanf(buf, "{%d}{%c", &frame, &c) == 2)
65 70 return frame;
66 return AV_NOPTS_VALUE;
67 }
68
69 70 static int64_t get_duration(const char *buf)
70 {
71 int frame_start, frame_end;
72
73
2/2
✓ Branch 0 taken 60 times.
✓ Branch 1 taken 10 times.
70 if (sscanf(buf, "{%d}{%d}", &frame_start, &frame_end) == 2)
74 60 return frame_end - (int64_t)frame_start;
75 10 return -1;
76 }
77
78 static const char *bom = "\xEF\xBB\xBF";
79
80 3 static int microdvd_read_header(AVFormatContext *s)
81 {
82 3 AVRational pts_info = (AVRational){ 2997, 125 }; /* default: 23.976 fps */
83 3 MicroDVDContext *microdvd = s->priv_data;
84 3 AVStream *st = avformat_new_stream(s, NULL);
85 3 int i = 0, ret;
86 char line_buf[MAX_LINESIZE];
87 3 int has_real_fps = 0;
88
89
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3 times.
3 if (!st)
90 return AVERROR(ENOMEM);
91
92
1/2
✓ Branch 1 taken 77 times.
✗ Branch 2 not taken.
77 while (!avio_feof(s->pb)) {
93 char *p;
94 AVPacket *sub;
95 77 int64_t pos = avio_tell(s->pb);
96 77 int len = ff_get_line(s->pb, line_buf, sizeof(line_buf));
97 77 char *line = line_buf;
98 int64_t pts;
99
100
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 77 times.
77 if (!strncmp(line, bom, 3))
101 line += 3;
102 77 p = line;
103
104
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 74 times.
77 if (!len)
105 3 break;
106 74 line[strcspn(line, "\r\n")] = 0;
107
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 74 times.
74 if (!*p)
108 continue;
109
2/2
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 65 times.
74 if (i++ < 3) {
110 int frame;
111 double fps;
112 char c;
113
114
2/2
✓ Branch 0 taken 7 times.
✓ Branch 1 taken 2 times.
9 if ((sscanf(line, "{%d}{}%6lf", &frame, &fps) == 2 ||
115
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 7 times.
7 sscanf(line, "{%d}{%*d}%6lf", &frame, &fps) == 2)
116
3/6
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
2 && frame <= 1 && fps > 3 && fps < 100) {
117 2 pts_info = av_d2q(fps, 100000);
118 2 has_real_fps = 1;
119 4 continue;
120 }
121
4/4
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 3 times.
7 if (!st->codecpar->extradata && sscanf(line, "{DEFAULT}{}%c", &c) == 1) {
122 2 int size = strlen(line + 11);
123 2 ret = ff_alloc_extradata(st->codecpar, size);
124
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if (ret < 0)
125 return ret;
126 2 memcpy(st->codecpar->extradata, line + 11, size);
127 2 continue;
128 }
129 }
130 #define SKIP_FRAME_ID \
131 p = strchr(p, '}'); \
132 if (!p) { \
133 av_log(s, AV_LOG_WARNING, "Invalid event \"%s\"" \
134 " at line %d\n", line, i); \
135 continue; \
136 } \
137 p++
138
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 70 times.
70 SKIP_FRAME_ID;
139
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 70 times.
70 SKIP_FRAME_ID;
140
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 70 times.
70 if (!*p)
141 continue;
142 70 pts = get_pts(line);
143
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 70 times.
70 if (pts == AV_NOPTS_VALUE)
144 continue;
145 70 sub = ff_subtitles_queue_insert(&microdvd->q, p, strlen(p), 0);
146
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 70 times.
70 if (!sub)
147 return AVERROR(ENOMEM);
148 70 sub->pos = pos;
149 70 sub->pts = pts;
150 70 sub->duration = get_duration(line);
151 }
152 3 ff_subtitles_queue_finalize(s, &microdvd->q);
153
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 1 times.
3 if (has_real_fps) {
154 /* export the FPS info only if set in the file */
155 2 microdvd->frame_rate = pts_info;
156
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 } else if (microdvd->frame_rate.num) {
157 /* fallback on user specified frame rate */
158 pts_info = microdvd->frame_rate;
159 }
160 3 avpriv_set_pts_info(st, 64, pts_info.den, pts_info.num);
161 3 st->codecpar->codec_type = AVMEDIA_TYPE_SUBTITLE;
162 3 st->codecpar->codec_id = AV_CODEC_ID_MICRODVD;
163 3 return 0;
164 }
165
166 73 static int microdvd_read_packet(AVFormatContext *s, AVPacket *pkt)
167 {
168 73 MicroDVDContext *microdvd = s->priv_data;
169 73 return ff_subtitles_queue_read_packet(&microdvd->q, pkt);
170 }
171
172 static int microdvd_read_seek(AVFormatContext *s, int stream_index,
173 int64_t min_ts, int64_t ts, int64_t max_ts, int flags)
174 {
175 MicroDVDContext *microdvd = s->priv_data;
176 return ff_subtitles_queue_seek(&microdvd->q, s, stream_index,
177 min_ts, ts, max_ts, flags);
178 }
179
180 3 static int microdvd_read_close(AVFormatContext *s)
181 {
182 3 MicroDVDContext *microdvd = s->priv_data;
183 3 ff_subtitles_queue_clean(&microdvd->q);
184 3 return 0;
185 }
186
187
188 #define OFFSET(x) offsetof(MicroDVDContext, x)
189 #define SD AV_OPT_FLAG_SUBTITLE_PARAM|AV_OPT_FLAG_DECODING_PARAM
190 static const AVOption microdvd_options[] = {
191 { "subfps", "set the movie frame rate fallback", OFFSET(frame_rate), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, INT_MAX, SD },
192 { NULL }
193 };
194
195 static const AVClass microdvd_class = {
196 .class_name = "microdvddec",
197 .item_name = av_default_item_name,
198 .option = microdvd_options,
199 .version = LIBAVUTIL_VERSION_INT,
200 };
201
202 const FFInputFormat ff_microdvd_demuxer = {
203 .p.name = "microdvd",
204 .p.long_name = NULL_IF_CONFIG_SMALL("MicroDVD subtitle format"),
205 .p.priv_class = &microdvd_class,
206 .priv_data_size = sizeof(MicroDVDContext),
207 .flags_internal = FF_INFMT_FLAG_INIT_CLEANUP,
208 .read_probe = microdvd_probe,
209 .read_header = microdvd_read_header,
210 .read_packet = microdvd_read_packet,
211 .read_seek2 = microdvd_read_seek,
212 .read_close = microdvd_read_close,
213 };
214

渣滓是什么意思 妇乐颗粒的功效能治什么病 孕妇吃什么水果好 扁桃体切除对身体有什么影响 90年是什么年
印第安纹是什么 三月份是什么星座 一个土一个阜念什么 阿耨多罗三藐三菩提是什么意思 睡眠障碍应该挂什么科室
13层楼房有什么说法吗 漂流是什么 91年属什么生肖 hpv检查挂什么科 逆时针揉肚子起什么作用
梦见金项链是什么意思 腺病是什么意思 刘强东开什么车 先明后不争什么意思 什么是偏印
看乳腺挂什么科gysmod.com 大佐相当于中国的什么军衔hcv8jop6ns9r.cn 八仙过海是什么生肖hcv7jop6ns4r.cn 雪菜是什么菜hcv8jop4ns7r.cn 大保健是什么意思mmeoe.com
colorful是什么牌子hcv8jop1ns0r.cn philips是什么品牌hcv8jop6ns4r.cn 汉武帝属什么生肖hcv9jop1ns1r.cn 爱而不得是什么感觉hcv8jop4ns6r.cn 胆汁是由什么分泌的hcv8jop6ns7r.cn
累的什么hcv7jop5ns5r.cn 月亮是什么星hcv9jop5ns6r.cn 脑膜炎有什么症状hcv8jop8ns3r.cn 葫芦为什么会苦hcv9jop8ns0r.cn 1月9号是什么星座hcv9jop5ns4r.cn
海绵体是什么hcv9jop2ns0r.cn 甲状腺功能减退是什么意思hcv7jop5ns5r.cn 3月21号是什么星座hcv8jop6ns2r.cn 炸酱面用的什么酱huizhijixie.com 全组副鼻窦炎什么意思hcv9jop3ns4r.cn
百度