1月3日是什么星座| 脚底板疼是什么原因| 复学需要什么手续| 食道癌有什么症状| 什么样的伤口算开放性| 为什么一吹空调就鼻塞| 孕酮低吃什么补得快| 胰腺癌有什么症状| 虫草什么时候吃最好| 慢性胰腺炎有什么症状| 酒不醉人人自醉是什么意思| 送葬后回家注意什么| 尿酸高吃什么肉| tdi是什么意思| gln是什么氨基酸| 中指和无名指一样长代表什么| 总流口水是什么原因| 发烧不退烧是什么原因| 炖牛肉放什么容易烂| 桑葚是什么季节的| 豆包是什么| 258是什么意思| 逆光是什么意思| 吃什么东西越吃越饿| 遁形是什么意思| 山东的简称是什么| 樱桃红是什么颜色| 牙疼吃什么药管用| lv属于什么档次| 胆囊炎是什么| 汗毛重的女人意味着什么| 什么才是真正的情人| 一什么小狗| 袖珍是什么意思| 红军为什么要长征| r一谷氨酰转移酶高说明什么| 请柬写伉俪什么意思| 刷牙时牙龈出血是什么原因| 高血压挂号要挂什么科| 胆固醇高不能吃什么水果| 叉烧是什么意思| 月经不来又没怀孕是什么原因| 脚上有痣代表什么| 十一月一日是什么星座| 尾盘放量拉升意味着什么| 什么老什么老| 胸口闷闷的有点疼是什么原因| 生肖鼠和什么生肖相冲| mlb是什么牌子中文名| 蛋白粉适合什么人吃| 奶冻是什么| 木瓜和什么不能一起吃| 高反吃什么药| 馐什么意思| 辄的意思是什么| 干眼症吃什么药好| 人丁兴旺是什么意思| 减张缝合是什么意思| 2014年什么年| pretty是什么意思| 腊八蒜为什么是绿色的| 什么叫染色体| 冰粉籽是什么植物| 五彩斑斓的意思是什么| 嗓子干痒吃什么药| 说什么道什么| 报考护士资格证需要什么条件| 海绵是什么材料做的| 尿失禁是什么症状| 孕妇为什么要左侧睡不能右侧睡| 闺蜜是什么意思| 社保指的是什么| 头热手脚冰凉什么原因| 医学五行属什么| 阳性是什么意思| 祛斑去医院挂什么科| 雅诗兰黛是什么档次| 3月份出生是什么星座| 桑黄是什么东西| 梦见别人开车翻车是什么预兆| 一月十八是什么星座| 取什么网名好听| 耽美是什么| pe医学上是什么意思| 1966年属马的是什么命| 9月12日是什么星座| 慢性宫颈炎用什么药| 做梦梦到蜈蚣是什么意思| 肺大泡用什么药| lsp是什么| 痛风吃什么药好| 什么的蘑菇| 深海鱼油有什么作用| 淋球菌是什么病| 高血钙有什么症状| 钙片什么时候吃效果最好| 双肺索条灶是什么意思| 冒虚汗是什么原因| 血氧低吃什么药| 老是口干舌燥是什么原因| 一个人在家无聊可以做什么| 大便出血是什么原因引起的| 狗刨坑是什么征兆| 孕妇为什么不能吃山楂| 为什么电脑| 灵芝有什么功效和作用| 支气管炎咳嗽吃什么药| 痔核是什么样子图片| 脑梗吃什么食物| 闲情雅致是什么意思| laura是什么意思| 异国他乡的异是什么意思| 祛斑产品什么好| 色纸是什么| 属鼠的守护神是什么菩萨| 可字属于五行属什么| 梨的功效与作用是什么| 肠梗阻是什么原因引起的| 吨位是什么意思| 困是什么原因| 眼睛的晶体是什么| 跖疣是什么样子图片| 小孩子眼睛眨得很频繁是什么原因| 龙筋是什么| qs是什么意思| 第二聚体高什么意思| 什么颜色衣服显白| 汴去掉三点水念什么| 梦见蛇是什么意思| 天天喝啤酒对身体有什么危害| female什么意思| 维生素e有什么功效| 玥是什么意思| 蜂蜜有什么功效和作用| 肾衰竭吃什么好| 属什么生肖| 为什么会斑秃| 后羿射日告诉我们什么道理| 小肚子鼓鼓的什么原因| 突破性出血是什么意思| 水马是什么| 两个克念什么| 劲酒加红牛有什么功能| 指甲月牙代表什么意思| 血常规什么颜色的管子| 胎盘成熟度1级是什么意思| 随餐服用什么意思| 什么花在什么时间开| 治烫伤最好的药膏是什么| 兑卦代表什么| 正部级是什么级别| 日值上朔是什么意思| 舌边有齿痕是什么原因| 葳蕤是什么意思| 空代表什么生肖| 为什么疤痕会增生| 太五行属什么| 乙肝表面抗原阴性是什么意思| 家里出现蜈蚣是什么预兆| 祥林嫂是什么样的人| 吃桑葚有什么好处| 尿酸高有什么症状| 箱涵是什么| 右肾盂分离是什么意思| 羊胡子疮用什么药膏| 做造影什么时候做最好| 皮炎是什么症状| 什么案件才会出动便衣| 流口水是什么病| 属猪的护身佛是什么佛| 人民检察院是国家的什么机关| 右肺中叶少许纤维灶是什么意思| 党工委书记是什么级别| 古埃及是什么人种| 皮肤痒是什么原因| 电母是什么意思| 胃疼可以吃什么食物| 什么动| 悲伤是什么意思| 鲜章是什么意思| 强迫症是什么意思| 空气炸锅可以做什么| 尿微量白蛋白高吃什么药| 偏执什么意思| 礼金是什么意思| 龙的五行属性是什么| 白细胞高是什么病| 指甲上有竖纹是什么原因| 帕金森吃什么药最好| renewal什么意思| u熊是什么意思| 每天尿都是黄的是什么原因| 12年义务教育什么时候开始| 玟是什么意思| 手上起倒刺是缺什么| 什么病不能吃豆制品| 欧巴桑什么意思| 甯是什么意思| 埋伏牙是什么意思| 星期三打喷嚏代表什么| 前列腺肿瘤有什么症状| 正方形体积公式是什么| 25年是什么婚| 吃什么去湿气最好最快| 伤元气是什么意思| 咳嗽吃什么食物好得最快最有效| 金字旁乐读什么| 血色病是什么病| 为什么怀孕了还会来月经| 阴道骚痒是什么原因| 顺势而为什么意思| 孕妇吃红薯对胎儿有什么好处| 嘴巴长溃疡是什么原因| 庚字五行属什么| 吃什么容易长胖| 紫砂壶泡什么茶最好| 药吃多了会有什么后果| 吲哚美辛是什么药| 301医院院长什么级别| 眼睛红是什么原因引起的| 寒热往来什么意思| 晚上睡觉容易醒是什么原因| 走路不稳是什么原因| 梦见大蛇是什么预兆| 吃蛋白粉有什么好处和坏处| 更年期出汗吃什么药好| 白蜜是什么| 梦到迁坟是什么意思| 霾是什么意思| 山竹什么味道| 梨和什么一起榨汁好喝| 瓜子脸剪什么发型好看| 女性生活疼痛什么原因| 九头身是什么意思| 小便发黄是什么症状| 吴亦凡为什么退出exo| 粉色是什么颜色| 鼻炎吃什么| 血糖高吃什么药最好| 代糖是什么东西| 什么是腹式呼吸| 吃什么补血效果最好| 尿发红什么原因| 放的偏旁是什么| 男人遗精是什么原因| 枇杷不能和什么一起吃| 梧桐树长什么样子| 减肥吃什么| 破伤风什么情况需要打| 手热脚热是什么原因| 为什么一躺下就头晕目眩| 癞皮狗是什么意思| 缺钾吃什么食物补得最快| 12月7号是什么星座| 长期口腔溃疡挂什么科| 右后背疼什么原因| 人体最大器官是什么| 犹豫的反义词是什么| 青光眼有什么症状| 铁皮石斛有什么作用| 血用什么能洗掉| 一个木一个寿念什么| 中签是什么意思| 痛风可以吃什么食物表| 百度

日竞走悍将里约前景存疑 日本田联:他没特权


Directory: ../../../ffmpeg/
File: src/libavcodec/bintext.c
Date: 2025-08-04 00:43:16
Exec Total Coverage
Lines: 0 113 0.0%
Functions: 0 4 0.0%
Branches: 0 70 0.0%

Line Branch Exec Source
1 /*
2 * Binary text decoder
3 * eXtended BINary text (XBIN) decoder
4 * iCEDraw File decoder
5 * Copyright (c) 2010 Peter Ross (pross@xvid.org)
6 *
7 * This file is part of FFmpeg.
8 *
9 * FFmpeg is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
13 *
14 * FFmpeg is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with FFmpeg; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 */
23
24 /**
25 * @file
26 * Binary text decoder
27 * eXtended BINary text (XBIN) decoder
28 * iCEDraw File decoder
29 */
30
31 #include "config_components.h"
32
33 #include "libavutil/intreadwrite.h"
34 #include "libavutil/xga_font_data.h"
35 #include "avcodec.h"
36 #include "cga_data.h"
37 #include "bintext.h"
38 #include "codec_internal.h"
39 #include "decode.h"
40
41 #define FONT_WIDTH 8
42
43 typedef struct XbinContext {
44 AVFrame *frame;
45 int palette[16];
46 int flags;
47 int font_height;
48 const uint8_t *font;
49 int x, y;
50 } XbinContext;
51
52 static av_cold int decode_init(AVCodecContext *avctx)
53 {
54 XbinContext *s = avctx->priv_data;
55 uint8_t *p;
56 int i;
57
58 avctx->pix_fmt = AV_PIX_FMT_PAL8;
59 p = avctx->extradata;
60 if (p) {
61 s->font_height = p[0];
62 s->flags = p[1];
63 p += 2;
64 if(avctx->extradata_size < 2 + (!!(s->flags & BINTEXT_PALETTE))*3*16
65 + (!!(s->flags & BINTEXT_FONT))*s->font_height*256) {
66 av_log(avctx, AV_LOG_ERROR, "not enough extradata\n");
67 return AVERROR_INVALIDDATA;
68 }
69 if (!s->font_height) {
70 av_log(avctx, AV_LOG_ERROR, "invalid font height\n");
71 return AVERROR_INVALIDDATA;
72 }
73 } else {
74 s->font_height = 8;
75 s->flags = 0;
76 }
77
78 if ((s->flags & BINTEXT_PALETTE)) {
79 for (i = 0; i < 16; i++) {
80 s->palette[i] = 0xFF000000 | (AV_RB24(p) << 2) | ((AV_RB24(p) >> 4) & 0x30303);
81 p += 3;
82 }
83 } else {
84 for (i = 0; i < 16; i++)
85 s->palette[i] = 0xFF000000 | ff_cga_palette[i];
86 }
87
88 if ((s->flags & BINTEXT_FONT)) {
89 s->font = p;
90 } else {
91 switch(s->font_height) {
92 default:
93 av_log(avctx, AV_LOG_WARNING, "font height %i not supported\n", s->font_height);
94 s->font_height = 8;
95 case 8:
96 s->font = avpriv_cga_font_get();
97 break;
98 case 16:
99 s->font = avpriv_vga16_font_get();
100 break;
101 }
102 }
103 if (avctx->width < FONT_WIDTH || avctx->height < s->font_height) {
104 av_log(avctx, AV_LOG_ERROR, "Resolution too small for font.\n");
105 return AVERROR_INVALIDDATA;
106 }
107
108 return 0;
109 }
110
111 #define DEFAULT_BG_COLOR 0
112 av_unused static void hscroll(AVCodecContext *avctx)
113 {
114 XbinContext *s = avctx->priv_data;
115 if (s->y < avctx->height - s->font_height) {
116 s->y += s->font_height;
117 } else {
118 memmove(s->frame->data[0], s->frame->data[0] + s->font_height*s->frame->linesize[0],
119 (avctx->height - s->font_height)*s->frame->linesize[0]);
120 memset(s->frame->data[0] + (avctx->height - s->font_height)*s->frame->linesize[0],
121 DEFAULT_BG_COLOR, s->font_height * s->frame->linesize[0]);
122 }
123 }
124
125 /**
126 * Draw character to screen
127 */
128 static void draw_char(AVCodecContext *avctx, int c, int a)
129 {
130 XbinContext *s = avctx->priv_data;
131 if (s->y > avctx->height - s->font_height)
132 return;
133 ff_draw_pc_font(s->frame->data[0] + s->y * s->frame->linesize[0] + s->x,
134 s->frame->linesize[0], s->font, s->font_height, c,
135 a & 0x0F, a >> 4);
136 s->x += FONT_WIDTH;
137 if (s->x > avctx->width - FONT_WIDTH) {
138 s->x = 0;
139 s->y += s->font_height;
140 }
141 }
142
143 static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
144 int *got_frame, AVPacket *avpkt)
145 {
146 XbinContext *s = avctx->priv_data;
147 const uint8_t *buf = avpkt->data;
148 int buf_size = avpkt->size;
149 const uint8_t *buf_end = buf+buf_size;
150 int ret;
151
152 if ((avctx->width / FONT_WIDTH) * (avctx->height / s->font_height) / 256 > buf_size)
153 return AVERROR_INVALIDDATA;
154
155 s->frame = frame;
156 s->x = s->y = 0;
157 if ((ret = ff_get_buffer(avctx, s->frame, 0)) < 0)
158 return ret;
159 s->frame->pict_type = AV_PICTURE_TYPE_I;
160 memcpy(s->frame->data[1], s->palette, 16 * 4);
161
162 if (avctx->codec_id == AV_CODEC_ID_XBIN) {
163 while (buf + 2 < buf_end) {
164 int i,c,a;
165 int type = *buf >> 6;
166 int count = (*buf & 0x3F) + 1;
167 buf++;
168 switch (type) {
169 case 0: //no compression
170 for (i = 0; i < count && buf + 1 < buf_end; i++) {
171 draw_char(avctx, buf[0], buf[1]);
172 buf += 2;
173 }
174 break;
175 case 1: //character compression
176 c = *buf++;
177 for (i = 0; i < count && buf < buf_end; i++)
178 draw_char(avctx, c, *buf++);
179 break;
180 case 2: //attribute compression
181 a = *buf++;
182 for (i = 0; i < count && buf < buf_end; i++)
183 draw_char(avctx, *buf++, a);
184 break;
185 case 3: //character/attribute compression
186 c = *buf++;
187 a = *buf++;
188 for (i = 0; i < count && buf < buf_end; i++)
189 draw_char(avctx, c, a);
190 break;
191 }
192 }
193 } else if (avctx->codec_id == AV_CODEC_ID_IDF) {
194 while (buf + 2 < buf_end) {
195 if (AV_RL16(buf) == 1) {
196 int i;
197 if (buf + 6 > buf_end)
198 break;
199 for (i = 0; i < buf[2]; i++)
200 draw_char(avctx, buf[4], buf[5]);
201 buf += 6;
202 } else {
203 draw_char(avctx, buf[0], buf[1]);
204 buf += 2;
205 }
206 }
207 } else {
208 while (buf + 1 < buf_end) {
209 draw_char(avctx, buf[0], buf[1]);
210 buf += 2;
211 }
212 }
213
214 *got_frame = 1;
215 return buf_size;
216 }
217
218 #if CONFIG_BINTEXT_DECODER
219 const FFCodec ff_bintext_decoder = {
220 .p.name = "bintext",
221 CODEC_LONG_NAME("Binary text"),
222 .p.type = AVMEDIA_TYPE_VIDEO,
223 .p.id = AV_CODEC_ID_BINTEXT,
224 .priv_data_size = sizeof(XbinContext),
225 .init = decode_init,
226 FF_CODEC_DECODE_CB(decode_frame),
227 .p.capabilities = AV_CODEC_CAP_DR1,
228 };
229 #endif
230 #if CONFIG_XBIN_DECODER
231 const FFCodec ff_xbin_decoder = {
232 .p.name = "xbin",
233 CODEC_LONG_NAME("eXtended BINary text"),
234 .p.type = AVMEDIA_TYPE_VIDEO,
235 .p.id = AV_CODEC_ID_XBIN,
236 .priv_data_size = sizeof(XbinContext),
237 .init = decode_init,
238 FF_CODEC_DECODE_CB(decode_frame),
239 .p.capabilities = AV_CODEC_CAP_DR1,
240 };
241 #endif
242 #if CONFIG_IDF_DECODER
243 const FFCodec ff_idf_decoder = {
244 .p.name = "idf",
245 CODEC_LONG_NAME("iCEDraw text"),
246 .p.type = AVMEDIA_TYPE_VIDEO,
247 .p.id = AV_CODEC_ID_IDF,
248 .priv_data_size = sizeof(XbinContext),
249 .init = decode_init,
250 FF_CODEC_DECODE_CB(decode_frame),
251 .p.capabilities = AV_CODEC_CAP_DR1,
252 };
253 #endif
254

胃腺息肉什么意思 一什么一什么 去医院点痣挂什么科 网络绿茶是什么意思 八婆是什么意思
宫颈炎吃什么药 噬是什么意思 碧字五行属什么 早晨六点是什么时辰 秃鹫是什么动物
计数单位是什么意思 腰脱什么症状 小肚子疼是什么情况 银行卡销户是什么意思 为什么拉屎会有血
签证是什么 母字是什么结构 bmo是什么意思 神经痛吃什么药 车厘子什么季节成熟
毋庸置疑什么意思hcv7jop9ns1r.cn 孔子是什么家hcv9jop6ns6r.cn 米咖色是什么颜色hcv7jop6ns5r.cn 眼皮为什么会跳hcv9jop4ns5r.cn 什么水果有助于减肥hcv9jop6ns3r.cn
牛栏坑肉桂属于什么茶hcv8jop4ns4r.cn 唯女子与小人难养也是什么意思hcv9jop2ns7r.cn 斯里兰卡说什么语言hcv9jop6ns8r.cn 恨嫁什么意思hcv9jop8ns2r.cn 87岁属什么hcv8jop9ns5r.cn
什么是占有欲hcv9jop7ns4r.cn chanel是什么牌子hcv7jop6ns1r.cn 平日是什么意思dayuxmw.com 肾上腺素是什么东西hcv8jop0ns5r.cn 炙热是什么意思hcv8jop1ns0r.cn
处暑吃什么传统食物hcv8jop5ns2r.cn 铝中毒有什么症状hcv8jop9ns4r.cn psc是什么病hcv7jop5ns6r.cn 什么时候开始孕吐jasonfriends.com 焦虑症吃什么中成药hcv8jop4ns9r.cn
百度