怄气是什么意思| 辛辣的辛指什么| 小叶苦丁茶有什么作用和功效| 吃什么水果对子宫和卵巢好| 什么滔滔| 1946年属什么生肖| 胆固醇高挂什么科| 红枣泡水喝有什么好处| 公约是什么意思| 婴幼儿吃什么奶粉好| 尿路感染是什么引起的| 自汗恶风是什么意思| 旅长是什么军衔| 胃造影和胃镜有什么区别| 尿酸高是什么问题| 太阳像什么的比喻句| 1208是什么星座| 安宫牛黄丸治什么病| 小甲鱼吃什么| 白细胞低是什么原因引起的| 好色是什么意思| 咳嗽咳到吐是什么原因| 操逼是什么感觉| 为什么三文鱼可以生吃| 孩子鼻子出血什么原因造成的| 名落孙山是什么意思| 植物功能紊乱吃什么药| 刻章需要什么材料| 十九朵玫瑰花代表什么意思| 胆红素偏高有什么危害| 端午节吃什么菜呢| 钅读什么偏旁| 指甲盖凹凸不平是什么原因| 午门是什么意思| 浒苔是什么| 什么是慈悲| 天天喝啤酒对身体有什么危害| 心绪不宁的意思是什么| 倦怠期是什么意思| 双规是什么| 三伏是什么意思| 夏至喝什么汤| 伯恩光学是做什么的| 72年属什么的生肖| 什么叫变态| 尿酸检查什么项目| 凌波仙子是什么花| 蚁后长什么样| 癫疯病早期有什么症状| 直接胆红素偏高是什么原因| 降血脂吃什么药| 五月出生是什么星座| 皮上长小肉疙瘩是什么| 经常做梦是什么原因| 山楂泡水有什么好处| 气管炎挂什么科| 肺慢阻是什么情况| 吃什么食物对头发好| 乳腺无回声结节是什么意思| 十年婚姻是什么婚| 眼睛疼吃什么药| 口干是什么病的前兆| 逾期不候什么意思| 头发不长是什么原因| 工科和理科有什么区别| 吉尼斯是什么意思| 非经期少量出血是什么原因| 2019年出生属什么生肖| 不惑之年什么意思| 性激素六项检查是什么| 虾不能和什么东西一起吃| 一路长虹是什么意思| 梦到小男孩是什么意思| 头孢克肟和头孢拉定有什么区别| dr钻戒什么档次| 白薯是什么| 白敬亭原名叫什么| 肾不好会出现什么症状| 猫癣长什么样| 结婚13年是什么婚| 大汗淋漓什么意思| 什么水果对胃好| 胸腔积液是什么原因造成的| 眼压是什么意思| 水饮是什么意思| 肚子疼恶心想吐吃什么药| 80年属什么| 小211是什么意思| 扁桃体2度是什么意思| 人参果不能和什么一起吃| 胸透是查什么的| 陶渊明是什么朝代的| 99足银是什么意思| 什么是静脉| 尚可什么意思| 执业药师什么时候报名| 三级手术是什么意思| 金砖国家是什么意思| 深耕是什么意思| 行动派是什么意思| 皮肤痒挂什么科| 渐冻症是什么病| 手抖是什么原因导致的| 空调嗡嗡响是什么原因| 小孩疳积有什么症状| 输卵管堵塞是什么原因造成的| 吃什么增肥最快| 什么样的梦才算是胎梦| 尿道感染吃什么药好得快| 男孩学什么专业有前途| 猫咪能看到什么颜色| 小孩口腔溃疡吃什么药| 脑淤血是什么原因引起的| 女方什么人不能送亲| 霖五行属性是什么| 吴亦凡属什么生肖| lv什么牌子| 人为什么会近视| msm是什么药| 积食吃什么食物帮助消化| 哈喽是什么意思| 公卿是什么意思| 人属于什么界门纲目科属种| 桃子有什么功效| 嘴角裂口是什么原因| 弟妹是什么意思| 撬墙角是什么意思| 月子早餐吃什么好| 疝气是什么| 给医生送锦旗写什么| 备孕为什么要吃叶酸| 灌肠什么感觉| 糖尿病吃什么水果比较好| 什么相照| 索性是什么意思| 产妇吃什么水果| 人彘是什么意思| 追悔莫及什么意思| 山楂有什么功效和作用| 耳堵是什么| aj是什么牌子| 头出汗多是什么原因| 出汗太多会对身体造成什么伤害| 苦菜是什么菜| 小孩子记忆力差是什么原因| 梦见租房子住是什么意思| 九月24日是什么星座| 小腿疼痛挂什么科| 青睐什么意思| 手麻挂什么科| 炖猪蹄放什么调料| 鸽子咕咕叫是什么意思| 八字桃花是什么意思| a货翡翠是什么意思| 鲍温病是什么病| 鞠婧祎什么星座| 澳大利亚位于什么板块| 龟头炎什么症状| 心脏难受是什么原因| 身体出现白斑有可能患什么病| 内脏吃多了有什么危害| 什么是本科| 吃什么最补钙| 有龙则灵的灵是什么意思| 生育能力检查挂什么科| 肾亏吃什么好| 咦是什么意思| 绿卡有什么用| 智齿什么时候拔最好| 川普是什么意思| g18k金是什么意思| btc是什么意思| 2.4号是什么星座| 中考送什么礼物| jz是什么意思| 梦见怀孕了是什么意思| 五味杂陈什么意思| 流产后不能吃什么东西| 球拍状胎盘是什么意思| 经常头晕吃什么食物好| 今年78岁属什么生肖| 吃维生素e软胶囊有什么好处| 经常失眠是什么原因| 朱红色是什么颜色| 用牛奶敷脸有什么好处和坏处| 什么叫红肉| essence是什么意思| 莲子心有什么功效| 大黄是什么药| 濯清涟而不妖的濯是什么意思| 2是什么数| 口干口苦吃什么药最好| 抽脂有什么风险和后遗症| pap什么意思| 1月21号是什么星座| 婴儿黄疸母亲忌口什么| 月经期喝红糖水有什么好处| 轻奢什么意思| 里脊肉炒什么好吃| 鱼水之欢是什么意思| 肌肉萎缩有什么症状| 指滑是什么意思| 甲状腺肿大挂什么科| 痱子粉和爽身粉有什么区别| 吃什么下奶最快最多最有效| 肠胃炎可以吃什么水果| 什么是凯格尔运动| 左肖是什么生肖| 眼睛近视缺什么维生素| 积阴德是什么意思| 甲减和甲亢有什么区别| 剖腹产后能吃什么水果| 草字头下面一个高字读什么| 眼睛胀痛什么原因| 牛b克拉斯什么意思| 腋下臭是什么原因| 榴莲什么季节成熟| 办护照需要什么材料| 碱性磷酸酶高是什么病| 被香灰烫了预示着什么| 什么叫屈光不正| 两色富足间是什么生肖| 双鱼座是什么象星座| 水肿是什么病| 荠菜是什么菜| 炖鸡汤用什么鸡| journey是什么意思| 什么的大山| 很man是什么意思| 乏力是什么症状| 撸管是什么感觉| 绿色裤子配什么上衣| 献完血应该注意什么| 尖斌卡引是什么意思| 什么是导管| 贫血查什么| 蜈蚣吃什么食物| 男人趴着睡觉说明什么| 上将相当于什么级别| 生命线分叉代表什么| 8月24日是什么星座| 经常干呕是什么原因| 甲钴胺片是治什么病| 卤牛肉放什么调料| 什么人从来不看医生| 菠萝不能和什么一起吃| 化疗后恶心呕吐吃什么可以缓解| 孺子可教什么意思| 梦见自己在飞是什么征兆| 室内传导延迟什么意思| 月经不调是什么原因造成的| yxh是什么意思| 什么叫菩提| 药玉是什么| 放疗什么意思| GOLF是什么品牌| 血压低容易得什么病| 阿姨的老公叫什么| ect是什么检查| 男人的魅力是什么| 君子兰叶子发黄是什么原因| 十月七号什么星座| 立是什么结构的字| 故事情节是什么意思| 百度

媒体:得准备多少钱 才能竞拍官员收受的高档礼品?


Directory: ../../../ffmpeg/
File: src/libavformat/adtsenc.c
Date: 2025-08-04 11:35:17
Exec Total Coverage
Lines: 64 98 65.3%
Functions: 6 6 100.0%
Branches: 17 40 42.5%

Line Branch Exec Source
1 /*
2 * ADTS muxer.
3 * Copyright (c) 2006 Baptiste Coudurier <baptiste.coudurier@smartjog.com>
4 * Mans Rullgard <mans@mansr.com>
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 "libavcodec/get_bits.h"
24 #include "libavcodec/put_bits.h"
25 #include "libavcodec/codec_id.h"
26 #include "libavcodec/codec_par.h"
27 #include "libavcodec/packet.h"
28 #include "libavcodec/mpeg4audio.h"
29 #include "libavcodec/mpeg4audio_copy_pce.h"
30 #include "libavutil/opt.h"
31 #include "avformat.h"
32 #include "apetag.h"
33 #include "id3v2.h"
34 #include "mux.h"
35
36 #define ADTS_HEADER_SIZE 7
37
38 typedef struct ADTSContext {
39 AVClass *class;
40 int write_adts;
41 int objecttype;
42 int sample_rate_index;
43 int channel_conf;
44 int pce_size;
45 int apetag;
46 int id3v2tag;
47 int mpeg_id;
48 uint8_t pce_data[MAX_PCE_SIZE];
49 } ADTSContext;
50
51 #define ADTS_MAX_FRAME_BYTES ((1 << 14) - 1)
52
53 8 static int adts_decode_extradata(AVFormatContext *s, ADTSContext *adts, const uint8_t *buf, int size)
54 {
55 GetBitContext gb;
56 PutBitContext pb;
57 MPEG4AudioConfig m4ac;
58 int off, ret;
59
60 8 ret = init_get_bits8(&gb, buf, size);
61
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
8 if (ret < 0)
62 return ret;
63 8 off = avpriv_mpeg4audio_get_config2(&m4ac, buf, size, 1, s);
64
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
8 if (off < 0)
65 return off;
66 8 skip_bits_long(&gb, off);
67 8 adts->objecttype = m4ac.object_type - 1;
68 8 adts->sample_rate_index = m4ac.sampling_index;
69 8 adts->channel_conf = m4ac.chan_config;
70
71
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
8 if (adts->objecttype > 3U) {
72 av_log(s, AV_LOG_ERROR, "MPEG-4 AOT %d is not allowed in ADTS\n", adts->objecttype+1);
73 return AVERROR_INVALIDDATA;
74 }
75
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
8 if (adts->sample_rate_index == 15) {
76 av_log(s, AV_LOG_ERROR, "Escape sample rate index illegal in ADTS\n");
77 return AVERROR_INVALIDDATA;
78 }
79
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
8 if (get_bits(&gb, 1)) {
80 av_log(s, AV_LOG_ERROR, "960/120 MDCT window is not allowed in ADTS\n");
81 return AVERROR_INVALIDDATA;
82 }
83
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
8 if (get_bits(&gb, 1)) {
84 av_log(s, AV_LOG_ERROR, "Scalable configurations are not allowed in ADTS\n");
85 return AVERROR_INVALIDDATA;
86 }
87
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
8 if (get_bits(&gb, 1)) {
88 av_log(s, AV_LOG_ERROR, "Extension flag is not allowed in ADTS\n");
89 return AVERROR_INVALIDDATA;
90 }
91
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
8 if (!adts->channel_conf) {
92 init_put_bits(&pb, adts->pce_data, MAX_PCE_SIZE);
93
94 put_bits(&pb, 3, 5); //ID_PCE
95 adts->pce_size = (ff_copy_pce_data(&pb, &gb) + 3) / 8;
96 flush_put_bits(&pb);
97 }
98
99 8 adts->write_adts = 1;
100
101 8 return 0;
102 }
103
104 8 static int adts_init(AVFormatContext *s)
105 {
106 8 ADTSContext *adts = s->priv_data;
107 8 AVCodecParameters *par = s->streams[0]->codecpar;
108
109
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
8 if (par->extradata_size > 0)
110 8 return adts_decode_extradata(s, adts, par->extradata,
111 par->extradata_size);
112
113 return 0;
114 }
115
116 8 static int adts_write_header(AVFormatContext *s)
117 {
118 8 ADTSContext *adts = s->priv_data;
119
120
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
8 if (adts->id3v2tag)
121 ff_id3v2_write_simple(s, 4, ID3v2_DEFAULT_MAGIC);
122
123 8 return 0;
124 }
125
126 2774 static int adts_write_frame_header(AVFormatContext *s, ADTSContext *ctx,
127 uint8_t *buf, int size, int pce_size)
128 {
129 PutBitContext pb;
130
131 2774 unsigned full_frame_size = (unsigned)ADTS_HEADER_SIZE + size + pce_size;
132
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2774 times.
2774 if (full_frame_size > ADTS_MAX_FRAME_BYTES) {
133 av_log(s, AV_LOG_ERROR, "frame size too large: %u (max %d)\n",
134 full_frame_size, ADTS_MAX_FRAME_BYTES);
135 return AVERROR_INVALIDDATA;
136 }
137
138 2774 init_put_bits(&pb, buf, ADTS_HEADER_SIZE);
139
140 /* adts_fixed_header */
141 2774 put_bits(&pb, 12, 0xfff); /* syncword */
142 2774 put_bits(&pb, 1, ctx->mpeg_id); /* ID */
143 2774 put_bits(&pb, 2, 0); /* layer */
144 2774 put_bits(&pb, 1, 1); /* protection_absent */
145 2774 put_bits(&pb, 2, ctx->objecttype); /* profile_objecttype */
146 2774 put_bits(&pb, 4, ctx->sample_rate_index);
147 2774 put_bits(&pb, 1, 0); /* private_bit */
148 2774 put_bits(&pb, 3, ctx->channel_conf); /* channel_configuration */
149 2774 put_bits(&pb, 1, 0); /* original_copy */
150 2774 put_bits(&pb, 1, 0); /* home */
151
152 /* adts_variable_header */
153 2774 put_bits(&pb, 1, 0); /* copyright_identification_bit */
154 2774 put_bits(&pb, 1, 0); /* copyright_identification_start */
155 2774 put_bits(&pb, 13, full_frame_size); /* aac_frame_length */
156 2774 put_bits(&pb, 11, 0x7ff); /* adts_buffer_fullness */
157 2774 put_bits(&pb, 2, 0); /* number_of_raw_data_blocks_in_frame */
158
159 2774 flush_put_bits(&pb);
160
161 2774 return 0;
162 }
163
164 2774 static int adts_write_packet(AVFormatContext *s, AVPacket *pkt)
165 {
166 2774 ADTSContext *adts = s->priv_data;
167 2774 AVCodecParameters *par = s->streams[0]->codecpar;
168 2774 AVIOContext *pb = s->pb;
169 uint8_t buf[ADTS_HEADER_SIZE];
170
171
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2774 times.
2774 if (!pkt->size)
172 return 0;
173
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2774 times.
2774 if (!par->extradata_size) {
174 uint8_t *side_data;
175 size_t side_data_size;
176 int ret;
177
178 side_data = av_packet_get_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA,
179 &side_data_size);
180 if (side_data_size) {
181 ret = adts_decode_extradata(s, adts, side_data, side_data_size);
182 if (ret < 0)
183 return ret;
184 ret = ff_alloc_extradata(par, side_data_size);
185 if (ret < 0)
186 return ret;
187 memcpy(par->extradata, side_data, side_data_size);
188 }
189 }
190
1/2
✓ Branch 0 taken 2774 times.
✗ Branch 1 not taken.
2774 if (adts->write_adts) {
191 2774 int err = adts_write_frame_header(s, adts, buf, pkt->size,
192 adts->pce_size);
193
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2774 times.
2774 if (err < 0)
194 return err;
195 2774 avio_write(pb, buf, ADTS_HEADER_SIZE);
196
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2774 times.
2774 if (adts->pce_size) {
197 avio_write(pb, adts->pce_data, adts->pce_size);
198 adts->pce_size = 0;
199 }
200 }
201 2774 avio_write(pb, pkt->data, pkt->size);
202
203 2774 return 0;
204 }
205
206 8 static int adts_write_trailer(AVFormatContext *s)
207 {
208 8 ADTSContext *adts = s->priv_data;
209
210
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
8 if (adts->apetag)
211 ff_ape_write_tag(s);
212
213 8 return 0;
214 }
215
216 #define ENC AV_OPT_FLAG_ENCODING_PARAM
217 #define OFFSET(obj) offsetof(ADTSContext, obj)
218 static const AVOption options[] = {
219 { "write_id3v2", "Enable ID3v2 tag writing", OFFSET(id3v2tag), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, ENC},
220 { "write_apetag", "Enable APE tag writing", OFFSET(apetag), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, ENC},
221 { "write_mpeg2", "Set MPEG version to MPEG-2", OFFSET(mpeg_id), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, ENC},
222 { NULL },
223 };
224
225 static const AVClass adts_muxer_class = {
226 .class_name = "ADTS muxer",
227 .item_name = av_default_item_name,
228 .option = options,
229 .version = LIBAVUTIL_VERSION_INT,
230 };
231
232 const FFOutputFormat ff_adts_muxer = {
233 .p.name = "adts",
234 .p.long_name = NULL_IF_CONFIG_SMALL("ADTS AAC (Advanced Audio Coding)"),
235 .p.mime_type = "audio/aac",
236 .p.extensions = "aac,adts",
237 .priv_data_size = sizeof(ADTSContext),
238 .p.audio_codec = AV_CODEC_ID_AAC,
239 .p.video_codec = AV_CODEC_ID_NONE,
240 .p.subtitle_codec = AV_CODEC_ID_NONE,
241 .flags_internal = FF_OFMT_FLAG_MAX_ONE_OF_EACH |
242 FF_OFMT_FLAG_ONLY_DEFAULT_CODECS,
243 .init = adts_init,
244 .write_header = adts_write_header,
245 .write_packet = adts_write_packet,
246 .write_trailer = adts_write_trailer,
247 .p.priv_class = &adts_muxer_class,
248 .p.flags = AVFMT_NOTIMESTAMPS,
249 };
250

芭乐是什么水果 4月份是什么季节 女性肛门瘙痒用什么药 大米放什么不生虫子 中国国鸟是什么
海苔是什么做的 美美哒什么意思 桃子又什么又什么填空 房早有什么危害 吃什么代谢快有助于减肥
特长写什么 什么是气压 canon是什么牌子 脾胃虚寒吃什么食物好 七杀是什么
尿血最坏的病是什么病 亦木读什么 福五行属性是什么 折耳猫什么颜色最贵 rap是什么意思
嗝气是什么原因引起的bysq.com 切除子宫对身体有什么影响hcv8jop0ns3r.cn 明天是什么节日bjcbxg.com 金色搭配什么颜色好看hcv7jop9ns2r.cn 附子是什么hcv8jop3ns8r.cn
容易手麻脚麻是什么原因hcv9jop0ns1r.cn 入心是什么意思hcv9jop5ns3r.cn 蟾蜍属于什么动物hcv7jop9ns4r.cn 什么是浪漫主义hcv8jop0ns0r.cn 拉大便出血是什么原因hcv8jop1ns6r.cn
梦到跟人吵架是什么意思hcv8jop2ns6r.cn 0.8是什么意思hcv9jop5ns1r.cn 心肌酶高吃什么药hcv9jop5ns7r.cn 梦见监狱是什么意思hcv9jop8ns0r.cn 口腔溃疡是缺少什么维生素onlinewuye.com
九里香什么时候开花hcv9jop1ns4r.cn 12月28是什么星座hcv8jop9ns3r.cn 世界上最小的国家是什么hcv8jop0ns1r.cn 银耳为什么助湿气hcv8jop3ns6r.cn 禀赋是什么意思hcv9jop8ns3r.cn
百度