离岸是什么意思| 松垮是什么意思| 风信子的花语是什么| mmhg是什么单位| 熳是什么意思| 垂直同步有什么用| 伯伯的老婆叫什么| tct检查什么| 吃什么提高记忆力| 抽烟为什么会头晕| 厨房墙砖什么颜色好看| 孔雀的尾巴像什么| 高血压可以吃什么水果| 姚晨为什么不红了| 经常性偏头疼是什么原因| 大便溏泄是什么意思| 左手臂发麻是什么原因| 安康鱼长什么样| 稀料对人体有什么危害| 陆陆续续是什么意思| 生化流产是什么原因造成的| gly是什么氨基酸| 尿素氮肌酐比值偏高是什么原因| 情趣内衣是什么意思| 烧心吃什么马上能缓解| 锌是补什么的| 静脉曲张是什么病| 绿茶是什么| 天津为什么叫天津卫| id医学上是什么意思| 梗概什么意思| 三花五罗都是什么鱼| 同心同德是什么意思| 腰间盘突出睡觉什么姿势好| 艮为什么读yin| 至是什么意思| 别致是什么意思| 吐血是什么病| 邪魅是什么意思| 脊髓病变是什么病| 28岁属什么生肖| 125是什么意思| 女人肾阴虚吃什么药| 眼睛长结石是什么原因引起的| 怀孕前壁和后壁有什么区别| 白细胞偏低是什么病| 紧张手抖是什么原因| 吃什么食物养肝| 梦见蜘蛛网是什么意思| 喝什么补肾| 伟哥是什么| owl是什么意思| 2月11号是什么星座| 三唑磷主要打什么虫| 高危型hpv52阳性是什么意思| 男孩什么时候开始发育| 西元前是什么意思| CRL是胎儿的什么意思| 复印病历需要什么证件| 尿路感染吃什么药效果最好| ppi是什么| 肚脐上面疼是什么原因| 3.22什么星座| 富察氏是什么旗| 寒露是什么季节| 文殊菩萨是保佑什么的| 发烧感冒吃什么药| 什么牌助听器好| 腔调是什么意思| 过敏性鼻炎喷什么药| 血管炎不能吃什么食物| 眼睛长眼屎是什么原因| 血脂高胆固醇高吃什么好| 什么可以代替润滑油| 血癌是什么原因造成的| 什么样的小鸟| 天德合是什么意思| 五月一号什么星座| 什么什么的天空| 湖北古代叫什么| 积食内热吃什么药| 卡路里是什么意思| 慢性宫颈炎是什么意思| 女生适合什么工作| 小孩出汗多是什么原因造成的| 青枝骨折是什么意思| 颈部淋巴结挂什么科| 阿司匹林和阿莫西林有什么区别| 打飞机是什么意思| 1972年出生属什么生肖| 大小便失禁是什么意思| 许莫氏结节是什么| 什么是心理学| 海鲜和什么不能一起吃| 1990是什么生肖| 黑什么| 大卡是什么意思| 高光是什么意思| 肌肉疼痛挂什么科| 红曲是什么| 为什么会有癌症| 起薪是什么意思| 登革热是什么症状| 台湾什么时候收回| 冚家铲是什么意思| 黄精能治什么病| 起死回生是什么生肖| 低频是什么意思| 手掌痒是什么原因| 阴火是什么意思| 胃胀打嗝吃什么药| 属马的和什么属相最配| v1是什么意思| 孕妇多吃什么水果比较好| 吃什么食物补钙最快| 鄙人什么意思| 益母草长什么样子图片| 姜红枣红糖一起煮有什么效果| 一九六七年属什么生肖| 83岁属什么生肖| 707是什么意思| 炒菜用什么油好| ip地址是什么意思| 梦到下雨是什么意思| 先祖是什么意思| 茯苓生长在什么地方| ldpe是什么材料| 一听是什么意思| 男孩什么时辰出生最好| 紫菜吃多了有什么坏处| 扩招是什么意思| 脚痛挂什么科| 护士资格证什么时候考| 岑岑是什么意思| alienware是什么牌子| 脸麻是什么原因| 梦见补的牙齿掉了是什么意思| 居住证是什么| 舌中间有裂纹是什么原因| 神经纤维瘤挂什么科| 为什么心率过快| 尿道感染吃什么药| nbr是什么材料| 睡觉头出汗是什么原因| 脚踝疼挂什么科| 麦麸是什么意思| 芬太尼是什么| 公历和农历有什么区别| 为什么有白头发| 11月23日是什么星座| 三下乡是什么意思| 血浆是什么颜色| 肋骨疼是什么原因| 晚上尿次数多什么原因| 6月18号是什么星座| 蛇瓜是什么| 缺维生素a吃什么食物| 上海虹桥医院属于什么医院| 卦不走空是什么意思| 蝉长什么样| 什么地摇动| 骨折吃什么好| 无情无义什么意思| 什么叫平年什么叫闰年| 左肾窦分离是什么意思| 梦见摘桃子是什么意思| 什么牌子的大米好吃| kfc是什么| 肚子疼想吐是什么原因| 心电轴右偏是什么意思| 白血病是什么症状| 交警中队长是什么级别| 宝宝低烧吃什么药| 破釜沉舟是什么意思| 什么的花蕾| 一什么网| 什么是适度水解奶粉| 改良剂是什么| 脚面疼痛什么原因| 特斯拉发明了什么| 那天午后我站在你家门口什么歌| 钱是什么单位| 老班章是什么茶| 经常手麻是什么原因| 什么人不适合吃海参| 小孩体质差吃什么能增强抵抗力| o型血的父母是什么血型| 心影增大是什么意思| 有什么聚会玩的游戏| 为什么小腿皮肤瘙痒| 甲减是什么病| 胸口闷挂什么科| 什么面粉最好| 一个山一个空念什么| 三头六臂是什么意思| 龙龟适合什么属相人| 血小板低是什么意思| 无性恋什么意思| 1995属什么生肖| 罗字五行属什么| 2岁属什么生肖| 减胎对另一个胎儿有什么影响| hpv什么病| 检查是否怀孕挂什么科| 硬性要求是什么意思| 狐臭什么味| 月经推迟什么原因引起的| 11月2号是什么星座| 荔枝代表什么寓意| 为什么会无缘无故长痣| 漂洋过海是什么生肖| 80年属什么| 痰盂是什么意思| 白带异常吃什么药| 补充镁有什么好处| 杨利伟什么军衔| 月经期间喝红糖水有什么好处| 黄原胶是什么| 胡言乱语是什么意思| 什么食物含维生素d| 口臭是什么原因导致的呢| 倍他乐克是什么药| 月桂酸是什么| 1952年属什么生肖| 火为什么没有影子| 南乳和腐乳有什么区别| 2月8号什么星座| 一龙一什么填十二生肖| 1989年是什么年| 没晨勃说明什么问题| 渗湿是什么意思| 夏至该吃什么| 456什么意思| 什么叫管状腺瘤| 腰酸胀是什么原因男性| hr是什么意思医学| 眼球内容物包括什么| 7月23号是什么星座| 贵姓是什么意思| 狗篮子什么意思| 梦见陌生人死了是什么意思| 口苦口臭口干吃什么药| 刘备代表什么生肖| 抽烟为什么会头晕| 余事勿取什么意思| 什么是外心| 空调漏水是什么原因| 心五行属什么| 夕阳无限好是什么意思| 吃什么容易排便| 查生育能力挂什么科| mv是什么意思| 朝对什么| 匹夫是什么意思| 一个三点水一个令念什么| 异什么意思| 21三体综合征是指什么| 温字五行属什么| 什么叫人彘| castle什么意思| 肝癌有什么症状| 虎鼠不结亲是什么意思| 邹的左边读什么| 嬴稷和嬴政是什么关系| 百度

精英夫妇打造高端质感家 开放式设计大气又实用


Directory: ../../../ffmpeg/
File: src/libavformat/rsd.c
Date: 2025-08-04 11:35:17
Exec Total Coverage
Lines: 61 123 49.6%
Functions: 3 3 100.0%
Branches: 31 88 35.2%

Line Branch Exec Source
1 /*
2 * RSD demuxer
3 * Copyright (c) 2013 James Almer
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/intreadwrite.h"
23 #include "avformat.h"
24 #include "avio.h"
25 #include "demux.h"
26 #include "internal.h"
27
28 static const AVCodecTag rsd_tags[] = {
29 { AV_CODEC_ID_ADPCM_PSX, MKTAG('V','A','G',' ') },
30 { AV_CODEC_ID_ADPCM_THP_LE, MKTAG('G','A','D','P') },
31 { AV_CODEC_ID_ADPCM_THP, MKTAG('W','A','D','P') },
32 { AV_CODEC_ID_ADPCM_IMA_RAD, MKTAG('R','A','D','P') },
33 { AV_CODEC_ID_ADPCM_IMA_WAV, MKTAG('X','A','D','P') },
34 { AV_CODEC_ID_PCM_S16BE, MKTAG('P','C','M','B') },
35 { AV_CODEC_ID_PCM_S16LE, MKTAG('P','C','M',' ') },
36 { AV_CODEC_ID_XMA2, MKTAG('X','M','A',' ') },
37 { AV_CODEC_ID_NONE, 0 },
38 };
39
40 static const uint32_t rsd_unsupported_tags[] = {
41 MKTAG('O','G','G',' '),
42 };
43
44 7252 static int rsd_probe(const AVProbeData *p)
45 {
46
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 7250 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
7252 if (memcmp(p->buf, "RSD", 3) || p->buf[3] - '0' < 2 || p->buf[3] - '0' > 6)
47 7250 return 0;
48
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
2 if (AV_RL32(p->buf + 8) > 256 || !AV_RL32(p->buf + 8))
49 return AVPROBE_SCORE_MAX / 8;
50
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
2 if (AV_RL32(p->buf + 16) > 8*48000 || !AV_RL32(p->buf + 16))
51 return AVPROBE_SCORE_MAX / 8;
52 2 return AVPROBE_SCORE_MAX;
53 }
54
55 2 static int rsd_read_header(AVFormatContext *s)
56 {
57 2 AVIOContext *pb = s->pb;
58 2 int i, ret, version, start = 0x800;
59 AVCodecParameters *par;
60 2 AVStream *st = avformat_new_stream(s, NULL);
61
62
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if (!st)
63 return AVERROR(ENOMEM);
64
65 2 avio_skip(pb, 3); // "RSD"
66 2 version = avio_r8(pb) - '0';
67
68 2 par = st->codecpar;
69 2 par->codec_type = AVMEDIA_TYPE_AUDIO;
70 2 par->codec_tag = avio_rl32(pb);
71 2 par->codec_id = ff_codec_get_id(rsd_tags, par->codec_tag);
72
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if (!par->codec_id) {
73 const char *tag_buf = av_fourcc2str(par->codec_tag);
74 for (i=0; i < FF_ARRAY_ELEMS(rsd_unsupported_tags); i++) {
75 if (par->codec_tag == rsd_unsupported_tags[i]) {
76 avpriv_request_sample(s, "Codec tag: %s", tag_buf);
77 return AVERROR_PATCHWELCOME;
78 }
79 }
80 av_log(s, AV_LOG_ERROR, "Unknown codec tag: %s\n", tag_buf);
81 return AVERROR_INVALIDDATA;
82 }
83
84 2 par->ch_layout.nb_channels = avio_rl32(pb);
85
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
2 if (par->ch_layout.nb_channels <= 0 || par->ch_layout.nb_channels > INT_MAX / 36) {
86 av_log(s, AV_LOG_ERROR, "Invalid number of channels: %d\n", par->ch_layout.nb_channels);
87 return AVERROR_INVALIDDATA;
88 }
89
90 2 avio_skip(pb, 4); // Bit depth
91 2 par->sample_rate = avio_rl32(pb);
92
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if (!par->sample_rate)
93 return AVERROR_INVALIDDATA;
94
95 2 avio_skip(pb, 4); // Unknown
96
97
2/8
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
2 switch (par->codec_id) {
98 case AV_CODEC_ID_XMA2:
99 par->block_align = 2048;
100 if ((ret = ff_alloc_extradata(par, 34)) < 0)
101 return ret;
102 memset(par->extradata, 0, 34);
103 break;
104 case AV_CODEC_ID_ADPCM_PSX:
105 par->block_align = 16 * par->ch_layout.nb_channels;
106 break;
107 1 case AV_CODEC_ID_ADPCM_IMA_RAD:
108 1 par->block_align = 20 * par->ch_layout.nb_channels;
109 1 break;
110 case AV_CODEC_ID_ADPCM_IMA_WAV:
111 if (version == 2)
112 start = avio_rl32(pb);
113
114 par->bits_per_coded_sample = 4;
115 par->block_align = 36 * par->ch_layout.nb_channels;
116 break;
117 1 case AV_CODEC_ID_ADPCM_THP_LE:
118 /* RSD3GADP is mono, so only alloc enough memory
119 to store the coeff table for a single channel. */
120
121 1 start = avio_rl32(pb);
122
123
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
1 if ((ret = ff_get_extradata(s, par, s->pb, 32)) < 0)
124 return ret;
125 1 break;
126 case AV_CODEC_ID_ADPCM_THP:
127 par->block_align = 8 * par->ch_layout.nb_channels;
128 avio_skip(s->pb, 0x1A4 - avio_tell(s->pb));
129
130 if ((ret = ff_alloc_extradata(st->codecpar, 32 * par->ch_layout.nb_channels)) < 0)
131 return ret;
132
133 for (i = 0; i < par->ch_layout.nb_channels; i++) {
134 if (avio_feof(pb))
135 return AVERROR_EOF;
136 avio_read(s->pb, st->codecpar->extradata + 32 * i, 32);
137 avio_skip(s->pb, 8);
138 }
139 break;
140 case AV_CODEC_ID_PCM_S16LE:
141 case AV_CODEC_ID_PCM_S16BE:
142 if (version != 4)
143 start = avio_rl32(pb);
144
145 break;
146 }
147
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if (start < 0)
148 return AVERROR_INVALIDDATA;
149
150
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 if (pb->seekable & AVIO_SEEKABLE_NORMAL) {
151 2 int64_t remaining = avio_size(pb);
152
153
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
2 if (remaining >= start && remaining - start <= INT_MAX)
154
1/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
2 switch (par->codec_id) {
155 2 case AV_CODEC_ID_ADPCM_PSX:
156 case AV_CODEC_ID_ADPCM_IMA_RAD:
157 case AV_CODEC_ID_ADPCM_IMA_WAV:
158 case AV_CODEC_ID_ADPCM_THP_LE:
159 2 st->duration = av_get_audio_frame_duration2(par, remaining - start);
160 2 break;
161 case AV_CODEC_ID_ADPCM_THP:
162 st->duration = (remaining - start) / (8 * par->ch_layout.nb_channels) * 14;
163 break;
164 case AV_CODEC_ID_PCM_S16LE:
165 case AV_CODEC_ID_PCM_S16BE:
166 st->duration = (remaining - start) / 2 / par->ch_layout.nb_channels;
167 }
168 }
169
170 2 avio_skip(pb, start - avio_tell(pb));
171
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 if (par->codec_id == AV_CODEC_ID_XMA2) {
172 avio_skip(pb, avio_rb32(pb) + avio_rb32(pb));
173 st->duration = avio_rb32(pb);
174 }
175
176 2 avpriv_set_pts_info(st, 64, 1, par->sample_rate);
177
178 2 return 0;
179 }
180
181 1006 static int rsd_read_packet(AVFormatContext *s, AVPacket *pkt)
182 {
183 1006 AVCodecParameters *par = s->streams[0]->codecpar;
184 1006 int ret, size = 1024;
185 int64_t pos;
186
187
2/2
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1004 times.
1006 if (avio_feof(s->pb))
188 2 return AVERROR_EOF;
189
190 1004 pos = avio_tell(s->pb);
191
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 1001 times.
1004 if (par->codec_id == AV_CODEC_ID_ADPCM_IMA_RAD ||
192
1/2
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
3 par->codec_id == AV_CODEC_ID_ADPCM_PSX ||
193
1/2
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
3 par->codec_id == AV_CODEC_ID_ADPCM_IMA_WAV ||
194
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3 times.
3 par->codec_id == AV_CODEC_ID_XMA2) {
195 1001 ret = av_get_packet(s->pb, pkt, par->block_align);
196
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3 times.
3 } else if (par->codec_tag == MKTAG('W','A','D','P') &&
197 par->ch_layout.nb_channels > 1) {
198 int i, ch;
199
200 ret = av_new_packet(pkt, par->block_align);
201 if (ret < 0)
202 return ret;
203 for (i = 0; i < 4; i++) {
204 for (ch = 0; ch < par->ch_layout.nb_channels; ch++) {
205 pkt->data[ch * 8 + i * 2 + 0] = avio_r8(s->pb);
206 pkt->data[ch * 8 + i * 2 + 1] = avio_r8(s->pb);
207 }
208 }
209 ret = 0;
210 } else {
211 3 ret = av_get_packet(s->pb, pkt, size);
212 }
213
214
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 1004 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1004 if (par->codec_id == AV_CODEC_ID_XMA2 && pkt->size >= 1)
215 pkt->duration = (pkt->data[0] >> 2) * 512;
216
217 1004 pkt->pos = pos;
218 1004 pkt->stream_index = 0;
219
220 1004 return ret;
221 }
222
223 const FFInputFormat ff_rsd_demuxer = {
224 .p.name = "rsd",
225 .p.long_name = NULL_IF_CONFIG_SMALL("GameCube RSD"),
226 .p.extensions = "rsd",
227 .p.codec_tag = (const AVCodecTag* const []){rsd_tags, 0},
228 .p.flags = AVFMT_GENERIC_INDEX,
229 .read_probe = rsd_probe,
230 .read_header = rsd_read_header,
231 .read_packet = rsd_read_packet,
232 };
233

肠胃炎可以吃什么药 什么叫支原体阳性 结婚30年是什么婚姻 肝火旺盛是什么原因引起的 淋巴结节什么症状
女人梦见龙是什么征兆 11月8日是什么星座 5.6是什么星座 孕妇吃冰的东西对胎儿有什么影响 砂舞是什么意思
结肠炎吃什么药治疗效果好 网状的蘑菇叫什么 颇负盛名的颇是什么意思 hbcab偏高是什么意思 判处死刑缓期二年执行是什么意思
甲辰是什么意思 湿气重去医院挂什么科 松脂是什么 去海边穿什么衣服拍照好看 肝功高是什么原因引起的
头层牛皮除牛反绒是什么意思hcv8jop5ns5r.cn 眼压高用什么药hcv7jop7ns0r.cn 精液发黄是什么原因hcv9jop1ns4r.cn 睡觉头出汗是什么原因hcv8jop3ns0r.cn 看颈椎挂什么科hcv9jop6ns0r.cn
阴茎不硬吃什么药hcv8jop5ns4r.cn 肝病不能吃什么hcv8jop9ns8r.cn cheblo空调是什么牌子hcv7jop6ns5r.cn 肛塞有什么作用hcv8jop4ns5r.cn 王加申念什么zhongyiyatai.com
hx是什么hcv8jop0ns6r.cn 乌龙茶适合什么季节喝hcv9jop5ns4r.cn 睾丸是什么hcv8jop6ns1r.cn 六味地黄丸吃多了有什么副作用hcv8jop4ns0r.cn 荷花是什么生肖hcv8jop9ns3r.cn
父母都没有狐臭为什么孩子会有呢hcv7jop9ns1r.cn 攻心翻是什么病96micro.com 9点是什么时辰fenrenren.com 什么而不什么成语hcv8jop8ns8r.cn 旺盛是什么意思hcv8jop0ns0r.cn
百度