纵容是什么意思| 为什么叫北洋政府| 27虚岁属什么生肖| 什么是bg| 阴道炎挂什么科| 高姓和什么姓是世仇| 感冒打什么针| 石女是什么意思| 儿童手足口病吃什么药| 金字旁和什么有关| 为什么叫黄牛| 章鱼的血是什么颜色| 李子为什么不能多吃| 怀孕甲减对孩子有什么影响| 崎胎瘤是什么| 入伏吃什么| 取保候审是什么意思还会判刑吗| 外耳炎用什么药| 芹菜和什么不能一起吃| 额头反复长痘是什么原因| ivory是什么意思| 朝鲜和韩国什么关系| 人得布病什么症状| 梦见被追杀是什么预兆| 辣椒红是什么| 肚子突然变大是什么原因| 风湿性关节炎用什么药| 办健康证需要检查什么| 音欠读什么| 孕妇晚餐吃什么比较好| 全青皮是什么皮| 骨质疏松吃什么好| 月经期体重增加是什么原因| 宝贝疙瘩是什么意思| 草字头加西读什么| 农历三月三是什么日子| 农历正月初一是什么节日| 西红柿含什么维生素| 煮牛骨头放什么调料| loser什么意思| 核苷酸是什么| 定点医院什么意思| 山大王是什么意思| 甲流是什么病| 冠军是什么意思| 什么原因得疱疹| 什么叫桑拿| 白眼狼是什么意思| 5月什么星座| 手发痒是什么原因| 什么炒肉好吃| 榴莲有什么作用| 狗肉和什么食物相克| 海鲜不能和什么食物一起吃| 梦见自己的车丢了是什么意思| 地球是什么星| 舌尖发麻是什么原因引起的| 甘油三酯高用什么药好| 得了阴虱用什么药能除根| 大便绿色什么原因| 珈字五行属什么| 茹什么饮什么| 腰闪了挂什么科| 大便成细条状是什么病| 一暴十寒什么意思| 梦见粽子是什么预兆| 与狼共舞男装什么档次| 被跳蚤咬了涂什么药膏| 梦见牙齿掉了是什么意思| 什么的镜子| 姨妈期间不能吃什么| 吃什么长指甲最快| 人生的意义到底是什么| 冰释前嫌的释是什么意思| 手臂发麻是什么原因引起的| 耳鸣有什么症状| diy是什么意思| 舞蹈症是什么病| 阿罗裤是什么意思| 眉毛上长痘是什么原因| 过敏性鼻炎挂什么科室| 脚板心发热是什么原因| 风湿因子高是什么原因引起的| 女贞子是什么| 门庭冷落是什么意思| 荷花是什么时候开的| 2024什么年| 为什么尽量抽混合型烟| dvt是什么意思| 一什么一什么| 眼睛不舒服是什么原因| 脾胃不好吃什么药效果好| 胆总管结石有什么症状| 什么什么天什么| 梦见和别人打架是什么意思| 子宫内膜6mm意味着什么| 吃什么药死的快| furk是什么意思| 刘少奇属什么生肖| 左脸长痘是什么原因| 喝杨梅酒对身体有什么好处| 英五行属什么| moncler是什么牌子| 岁月如歌下一句是什么| 天丝是什么成分| 3月22日什么星座| 梦见老公有外遇预示什么| 脚脖子疼是什么原因| 经常放屁吃什么药好| 大便干硬是什么原因| 燕窝适合什么人吃| 1922年属什么生肖| 小腹痛男性什么原因| 10月份是什么星座的| 过期药品是什么垃圾| 牙龈老是出血是什么原因引起的| 碳酸氢铵是什么东西| 高血压适合吃什么食物| 脚底干燥是什么原因| 胎儿fl是什么意思| 大姨妈推迟是什么原因| 积阴德是什么意思| 竹棉和纯棉有什么区别| 哺乳期可以喝什么饮料| 胎儿永存左上腔静脉是什么意思| 佝偻病缺少什么元素| 人爱出汗是什么原因| 一剪梅是什么意思| 女予念什么| 什么人不能吃海带| 再生纤维素纤维是什么| 什么茶去火| 太阳穴痛是什么原因| 吃黑豆有什么好处和坏处| xswl什么意思| 一班三检是指什么| 奶嚼口是什么| 子宫位于腹部什么位置| pp材质和ppsu材质有什么区别| 人授和试管有什么区别| 壮丁是什么意思| 75c是什么罩杯| 肺结核吃什么食物好| pray是什么意思| 辣椒是什么生肖| 大男子主义的男人喜欢什么样的女人| 荷兰猪是什么动物| 脖子上长癣是什么原因| 2019属什么| 尿急是什么症状| 大豆磷脂是什么| 炒熟的黑豆有什么功效| 眼睛浮肿什么原因| 霉菌性阴道炎用什么药最好| 今年为什么闰六月| 身份证有x代表什么| 安徽有什么好吃的| 尿酮体是什么| 化验血能查出什么项目| 黄瓜籽有什么功效| 6.17什么星座| 藕是什么季节的| hpv阳性是什么意思| 相破是什么意思| 子宫内膜6mm意味着什么| 无机磷测定是检查什么| 李子什么时候吃最好| 晟怎么读音是什么| 强的松又叫什么名字| 黄金是什么药材| 什么的海藻| ra医学上是什么意思| 胃胀气吃什么食物| 突然流鼻血是什么原因| 什么情况下做喉镜| 9月份是什么星座的| zzegna是什么牌子价格| abob是什么药| 死灰复燃是什么意思| 朝鲜韩国什么时候分开的| 高血压不能吃什么食物| 霍启刚家族做什么生意| 磋商是什么意思| 做梦吃饺子是什么意思| 玻璃是什么垃圾| er是什么元素| 打日本电话前面加什么| 什么人容易得尿毒症| 尿胆原是什么意思| 梦见狗熊是什么预兆| 天贵星是什么意思| 忌行丧是什么意思| bottle什么意思| 胎元是什么意思| 乳腺癌吃什么水果好| Mo什么元素| 无大碍是什么意思| 吃了避孕药后几天出血是什么原因| 梦到一个人意味着什么| 痤疮长什么样| 便秘看什么科| 青口是什么东西| dollars是什么意思| 什么叫管状腺瘤| 上传下达什么意思| 巾帼不让须眉是什么意思| 心尖尖是什么意思| 多巴胺是什么| giada是什么牌子| 脾肾阳虚吃什么药最好| 结婚九年是什么婚| 左耳长痣代表什么| 河南有什么美食| 五蕴皆空是什么意思| 心肌供血不足是什么原因造成的| 手术拆线挂什么科| 补气补血吃什么药| 紧张吃什么药| 怀孕梦到蛇预示着什么| 小孩低烧吃什么药| 急性肠胃炎可以吃什么| 手足口不能吃什么食物| 顾里为什么和席城睡了| 菲林是什么| 什么手机拍照效果最好| ct胸部平扫检查出什么| 什么叫修辞手法| 汕头有什么好玩的景点| 割包皮挂什么科室| 尿液茶色是什么原因| 干什么一天能挣1000元| 姜粉什么时候喝最好| 前戏是什么| 肩膀疼吃什么药| 5月5日什么星座| 睡觉起来口苦是什么原因| 年终奖一般什么时候发| 多喝白开水有什么好处| 法院起诉离婚需要什么材料| 思密达是什么药| 冰箱灯不亮是什么原因| 心慌气短吃什么药| 马的贵人是什么生肖| 猕猴桃什么时候上市| 蝙蝠飞进家里预示什么| 曹真和曹操什么关系| 肉痣长什么样子图片| 读书与吃药是什么生肖| 臭氧是什么东西| 万圣节为什么要送糖果| 手指关节疼痛是什么原因| 眼压高是什么原因| 仙人掌有什么功效| 喝桦树茸有什么好处| 洛五行属性是什么| 痱子吃什么药| 积劳成疾的疾是什么意思| 秋水长天什么意思| 查胆囊挂什么科| 小孩头发黄是什么原因| 臁疮是什么病| 下降头是什么意思| 来字五行属什么| 耷拉的近义词是什么| 百度

喝红牛有什么好处和坏处


Directory: ../../../ffmpeg/
File: src/libavformat/mpc8.c
Date: 2025-08-04 00:43:16
Exec Total Coverage
Lines: 146 204 71.6%
Functions: 8 9 88.9%
Branches: 64 122 52.5%

Line Branch Exec Source
1 /*
2 * Musepack SV8 demuxer
3 * Copyright (c) 2007 Konstantin Shishkov
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22 #include "libavutil/mem.h"
23 #include "libavcodec/get_bits.h"
24 #include "libavcodec/unary.h"
25 #include "apetag.h"
26 #include "avformat.h"
27 #include "demux.h"
28 #include "internal.h"
29 #include "avio_internal.h"
30
31 /// Two-byte MPC tag
32 #define MKMPCTAG(a, b) ((a) | ((b) << 8))
33
34 #define TAG_MPCK MKTAG('M','P','C','K')
35
36 /// Reserved MPC tags
37 enum MPCPacketTags{
38 TAG_STREAMHDR = MKMPCTAG('S','H'),
39 TAG_STREAMEND = MKMPCTAG('S','E'),
40
41 TAG_AUDIOPACKET = MKMPCTAG('A','P'),
42
43 TAG_SEEKTBLOFF = MKMPCTAG('S','O'),
44 TAG_SEEKTABLE = MKMPCTAG('S','T'),
45
46 TAG_REPLAYGAIN = MKMPCTAG('R','G'),
47 TAG_ENCINFO = MKMPCTAG('E','I'),
48 };
49
50 static const int mpc8_rate[8] = { 44100, 48000, 37800, 32000, -1, -1, -1, -1 };
51
52 typedef struct MPCContext {
53 int ver;
54 int64_t header_pos;
55 int64_t samples;
56
57 int64_t apetag_start;
58 } MPCContext;
59
60 2 static inline int64_t bs_get_v(const uint8_t **bs)
61 {
62 2 uint64_t v = 0;
63 2 int br = 0;
64 int c;
65
66 do {
67 2 c = **bs; (*bs)++;
68 2 v <<= 7;
69 2 v |= c & 0x7F;
70 2 br++;
71
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if (br > 10)
72 return -1;
73
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 } while (c & 0x80);
74
75 2 return v - br;
76 }
77
78 7241 static int mpc8_probe(const AVProbeData *p)
79 {
80 7241 const uint8_t *bs = p->buf + 4;
81 7241 const uint8_t *bs_end = bs + p->buf_size;
82 int64_t size;
83
84
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 7241 times.
7241 if (p->buf_size < 16)
85 return 0;
86
2/2
✓ Branch 0 taken 7239 times.
✓ Branch 1 taken 2 times.
7241 if (AV_RL32(p->buf) != TAG_MPCK)
87 7239 return 0;
88
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 while (bs < bs_end + 3) {
89
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
2 int header_found = (bs[0] == 'S' && bs[1] == 'H');
90
4/8
✓ 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.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
2 if (bs[0] < 'A' || bs[0] > 'Z' || bs[1] < 'A' || bs[1] > 'Z')
91 return 0;
92 2 bs += 2;
93 2 size = bs_get_v(&bs);
94
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if (size < 2)
95 return 0;
96
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if (size >= bs_end - bs + 2)
97 return AVPROBE_SCORE_EXTENSION - 1; // seems to be valid MPC but no header yet
98
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 if (header_found) {
99
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
2 if (size < 11 || size > 28)
100 return 0;
101
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if (!AV_RL32(bs)) //zero CRC is invalid
102 return 0;
103 2 return AVPROBE_SCORE_MAX;
104 } else {
105 bs += size - 2;
106 }
107 }
108 return 0;
109 }
110
111 6 static inline int64_t gb_get_v(GetBitContext *gb)
112 {
113 6 uint64_t v = 0;
114 6 int bits = 0;
115
3/4
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 6 times.
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
10 while(get_bits1(gb) && bits < 64-7){
116 4 v <<= 7;
117 4 v |= get_bits(gb, 7);
118 4 bits += 7;
119 }
120 6 v <<= 7;
121 6 v |= get_bits(gb, 7);
122
123 6 return v;
124 }
125
126 30 static void mpc8_get_chunk_header(AVIOContext *pb, int *tag, int64_t *size)
127 {
128 int64_t pos;
129 30 pos = avio_tell(pb);
130 30 *tag = avio_rl16(pb);
131 30 *size = ffio_read_varlen(pb);
132 30 pos -= avio_tell(pb);
133
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 30 times.
30 if (av_sat_add64(*size, pos) != (uint64_t)*size + pos) {
134 *size = -1;
135 } else
136 30 *size += pos;
137 30 }
138
139 2 static int mpc8_parse_seektable(AVFormatContext *s, int64_t off)
140 {
141 2 MPCContext *c = s->priv_data;
142 int tag;
143 int64_t size, pos, ppos[2];
144 uint8_t *buf;
145 int i, t, seekd, ret;
146 int64_t ret64;
147 GetBitContext gb;
148
149
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if (s->nb_streams == 0) {
150 av_log(s, AV_LOG_ERROR, "No stream added before parsing seek table\n");
151 return AVERROR_INVALIDDATA;
152 }
153
154 2 ret64 = avio_seek(s->pb, off, SEEK_SET);
155
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if (ret64 < 0)
156 return AVERROR_INVALIDDATA;
157 2 mpc8_get_chunk_header(s->pb, &tag, &size);
158
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
2 if(tag != TAG_SEEKTABLE || avio_feof(s->pb)){
159 av_log(s, AV_LOG_ERROR, "No seek table at given position\n");
160 return AVERROR_INVALIDDATA;
161 }
162
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
2 if (size > INT_MAX/10 || size<=0) {
163 av_log(s, AV_LOG_ERROR, "Bad seek table size\n");
164 return AVERROR_INVALIDDATA;
165 }
166
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
2 if(!(buf = av_malloc(size + AV_INPUT_BUFFER_PADDING_SIZE)))
167 return AVERROR(ENOMEM);
168 2 ret = avio_read(s->pb, buf, size);
169
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if (ret != size) {
170 av_log(s, AV_LOG_ERROR, "seek table truncated\n");
171 av_free(buf);
172 return AVERROR_INVALIDDATA;
173 }
174 2 memset(buf+size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
175
176 2 init_get_bits(&gb, buf, size * 8);
177 2 size = gb_get_v(&gb);
178
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
2 if(size > UINT_MAX/4 || size > c->samples/1152){
179 av_log(s, AV_LOG_ERROR, "Seek table is too big\n");
180 av_free(buf);
181 return AVERROR_INVALIDDATA;
182 }
183 2 seekd = get_bits(&gb, 4);
184
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 2 times.
6 for(i = 0; i < 2; i++){
185 4 pos = gb_get_v(&gb);
186
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
4 if (av_sat_add64(pos, c->header_pos) != pos + (uint64_t)c->header_pos) {
187 av_free(buf);
188 return AVERROR_INVALIDDATA;
189 }
190
191 4 pos += c->header_pos;
192 4 ppos[1 - i] = pos;
193 4 av_add_index_entry(s->streams[0], pos, i, 0, 0, AVINDEX_KEYFRAME);
194 }
195
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 2 times.
6 for(; i < size; i++){
196
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
4 if (get_bits_left(&gb) < 13) {
197 av_free(buf);
198 return AVERROR_INVALIDDATA;
199 }
200 4 t = get_unary(&gb, 1, 33) << 12;
201 4 t += get_bits(&gb, 12);
202
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 if(t & 1)
203 t = -(t & ~1);
204 4 pos = (t >> 1) + (uint64_t)ppos[0]*2 - ppos[1];
205 4 av_add_index_entry(s->streams[0], pos, (int64_t)i << seekd, 0, 0, AVINDEX_KEYFRAME);
206 4 ppos[1] = ppos[0];
207 4 ppos[0] = pos;
208 }
209 2 av_free(buf);
210 2 return 0;
211 }
212
213 8 static int mpc8_handle_chunk(AVFormatContext *s, int tag, int64_t chunk_pos, int64_t size)
214 {
215 8 AVIOContext *pb = s->pb;
216 int64_t pos, off;
217 int ret;
218
219
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
8 switch(tag){
220 2 case TAG_SEEKTBLOFF:
221 2 pos = avio_tell(pb);
222 2 off = ffio_read_varlen(pb);
223
3/6
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
2 if (pos > INT64_MAX - size || off < 0 || off > INT64_MAX - chunk_pos)
224 return AVERROR_INVALIDDATA;
225 2 pos += size;
226 2 ret = mpc8_parse_seektable(s, chunk_pos + off);
227
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if (ret < 0)
228 return AVERROR_INVALIDDATA;
229 2 avio_seek(pb, pos, SEEK_SET);
230 2 break;
231 6 default:
232 6 avio_skip(pb, size);
233 }
234 8 return 0;
235 }
236
237 2 static int mpc8_read_header(AVFormatContext *s)
238 {
239 2 MPCContext *c = s->priv_data;
240 2 AVIOContext *pb = s->pb;
241 AVStream *st;
242 2 int tag = 0, ret;
243 int channels;
244 int64_t size, pos;
245
246 2 c->header_pos = avio_tell(pb);
247
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
2 if(avio_rl32(pb) != TAG_MPCK){
248 av_log(s, AV_LOG_ERROR, "Not a Musepack8 file\n");
249 return AVERROR_INVALIDDATA;
250 }
251
252
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 while(!avio_feof(pb)){
253 2 pos = avio_tell(pb);
254 2 mpc8_get_chunk_header(pb, &tag, &size);
255
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if (size < 0) {
256 av_log(s, AV_LOG_ERROR, "Invalid chunk length\n");
257 return AVERROR_INVALIDDATA;
258 }
259
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 if(tag == TAG_STREAMHDR)
260 2 break;
261 ret = mpc8_handle_chunk(s, tag, pos, size);
262 if (ret < 0)
263 return ret;
264 }
265
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if(tag != TAG_STREAMHDR){
266 av_log(s, AV_LOG_ERROR, "Stream header not found\n");
267 return AVERROR_INVALIDDATA;
268 }
269 2 pos = avio_tell(pb);
270 2 avio_skip(pb, 4); //CRC
271 2 c->ver = avio_r8(pb);
272
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if(c->ver != 8){
273 avpriv_report_missing_feature(s, "Stream version %d", c->ver);
274 return AVERROR_PATCHWELCOME;
275 }
276 2 c->samples = ffio_read_varlen(pb);
277 2 ffio_read_varlen(pb); //silence samples at the beginning
278
279 2 st = avformat_new_stream(s, NULL);
280
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if (!st)
281 return AVERROR(ENOMEM);
282 2 st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO;
283 2 st->codecpar->codec_id = AV_CODEC_ID_MUSEPACK8;
284 2 st->codecpar->bits_per_coded_sample = 16;
285
286
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
2 if ((ret = ff_get_extradata(s, st->codecpar, pb, 2)) < 0)
287 return ret;
288
289 2 channels = (st->codecpar->extradata[1] >> 4) + 1;
290 2 st->codecpar->ch_layout.nb_channels = channels;
291 2 st->codecpar->sample_rate = mpc8_rate[st->codecpar->extradata[0] >> 5];
292 2 avpriv_set_pts_info(st, 64, 1152 << (st->codecpar->extradata[1]&3)*2, st->codecpar->sample_rate);
293 2 st->start_time = 0;
294 2 st->duration = c->samples / (1152 << (st->codecpar->extradata[1]&3)*2);
295 2 size -= avio_tell(pb) - pos;
296
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if (size > 0)
297 avio_skip(pb, size);
298
299
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 if (pb->seekable & AVIO_SEEKABLE_NORMAL) {
300 2 int64_t pos = avio_tell(s->pb);
301 2 c->apetag_start = ff_ape_parse_tag(s);
302 2 avio_seek(s->pb, pos, SEEK_SET);
303 }
304
305 2 return 0;
306 }
307
308 18 static int mpc8_read_packet(AVFormatContext *s, AVPacket *pkt)
309 {
310 18 MPCContext *c = s->priv_data;
311 int tag, ret;
312 int64_t pos, size;
313
314
1/2
✓ Branch 1 taken 26 times.
✗ Branch 2 not taken.
26 while(!avio_feof(s->pb)){
315 26 pos = avio_tell(s->pb);
316
317 /* don't return bogus packets with the ape tag data */
318
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 26 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
26 if (c->apetag_start && pos >= c->apetag_start)
319 return AVERROR_EOF;
320
321 26 mpc8_get_chunk_header(s->pb, &tag, &size);
322
2/4
✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 26 times.
26 if (size < 0 || size > INT_MAX)
323 return -1;
324
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 10 times.
26 if(tag == TAG_AUDIOPACKET){
325
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
16 if ((ret = av_get_packet(s->pb, pkt, size)) < 0)
326 return ret;
327 16 pkt->stream_index = 0;
328 16 pkt->duration = 1;
329 16 return 0;
330 }
331
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
10 if(tag == TAG_STREAMEND)
332 2 return AVERROR_EOF;
333 8 mpc8_handle_chunk(s, tag, pos, size);
334 }
335 return AVERROR_EOF;
336 }
337
338 static int mpc8_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
339 {
340 AVStream *st = s->streams[stream_index];
341 FFStream *const sti = ffstream(st);
342 int index = av_index_search_timestamp(st, timestamp, flags);
343
344 if(index < 0) return -1;
345 if (avio_seek(s->pb, sti->index_entries[index].pos, SEEK_SET) < 0)
346 return -1;
347 avpriv_update_cur_dts(s, st, sti->index_entries[index].timestamp);
348 return 0;
349 }
350
351
352 const FFInputFormat ff_mpc8_demuxer = {
353 .p.name = "mpc8",
354 .p.long_name = NULL_IF_CONFIG_SMALL("Musepack SV8"),
355 .priv_data_size = sizeof(MPCContext),
356 .read_probe = mpc8_probe,
357 .read_header = mpc8_read_header,
358 .read_packet = mpc8_read_packet,
359 .read_seek = mpc8_read_seek,
360 };
361

丹参滴丸和丹参片有什么区别 社论是什么 漏尿是什么原因造成的 为什么用英语怎么说 什么叫心脏早搏
恐龙是什么时代 什么是权力 尿潴留是什么症状 数据中心是什么 老鼠最怕什么
放疗期间吃什么食物最好 皮肤越抓越痒是什么原因 做梦梦见很多蛇是什么意思 榴莲什么人不适合吃 男人经常熬夜炖什么汤
西酞普兰为什么早晨吃 算力是什么 肠梗阻挂什么科 交警中队长是什么级别 吃什么能让肠道蠕动快
12月份是什么星座luyiluode.com 黄金是什么hcv7jop5ns2r.cn 黄体期什么意思huizhijixie.com rhd血型阳性是什么意思hcv9jop3ns2r.cn 三月二十三是什么星座hcv8jop3ns0r.cn
新生儿上户口需要什么资料gangsutong.com 梦见下雪了是什么意思hcv9jop5ns0r.cn 一直咳嗽吃什么药hcv8jop2ns6r.cn 做梦梦见火是什么意思hcv7jop7ns1r.cn 紫米是什么米hcv8jop3ns8r.cn
代糖是什么sanhestory.com 扑朔迷离什么意思adwl56.com 皮肤有白点是什么原因hcv8jop2ns0r.cn acer是什么牌子hcv9jop3ns3r.cn 920是什么意思hcv8jop6ns1r.cn
58年属什么今年多大zsyouku.com 姜子牙是什么神仙hcv8jop4ns1r.cn rhino是什么意思0297y7.com 世界上最多笔画的字是什么520myf.com 小孩咳嗽喝什么药hcv8jop8ns5r.cn
百度