GIF解码器
简介
gif解码
特点
仅支持GIF89a版本,不支持GIF87a
最低每行像素输出,每个像素使用RGB888表示
API说明
-
struct gifdec_init_pramater_t
解码器初始化参数结构体
-
void *file_info
解码gif文件名
-
int16_t dis_width
显示图像宽度
-
int16_t dis_higth
显示图像高度,暂时无效
-
int16_t dis_offsetx
显示宽度偏移,暂时无效,
-
int16_t dis_offsety
显示高度偏移,暂时无效
-
void *file_info
-
int32_t gifdec_init(gifdec_init_pramater_t *init_pramater)
解码初始化
- 参数
init_pramater – gifdec_init_pramater_t类型指针。详细信息参看 gifdec_init_pramater_t
- 返回
解码器初始化后的SRAM空间已使用的总量(字节数)。
- 返回值
>0 – 解码器使用到sram的等高线
-1 – SRAM不足,初始化失败。
-2 – gif文件打开失败。
-3 – gif解析失败,非gif文件。
-
enum gifdec_cmd_t
解码器控制命令
Gifdec_CMD_Stop: 值为0,解码停止,暂无效
Gifdec_CMD_Start: 值为1,解码开始,
Gifdec_CMD_Pause: 值为2,解码暂停,暂无效
Gifdec_CMD_Resume: 值为3,恢复解码暂停,暂无效
-
int32_t gifdec_cmd(gifdec_cmd_t cmd)
解码初始化,行解码完成后,需要再次调用此函数,才会继续解码
- 参数
cmd – gifdec_cmd_t枚举定义。详细信息参看 gifdec_cmd_t
- 返回值
0 – 成功
其它 – 失败。
-
int32_t gifdec_set_frame_row_hook(void (*frme_row_hook)())
可选配钩子函数,每行解码完成钩子函数。此函数调用,代表可调用gifdec_get_rgbrow()读取行像素信息
- 参数
frme_row_hook – 钩子函数,要求无参无返回值。
- 返回值
0 – 钩子函数设置成功。
-1 – 失败
-
int32_t gifdec_set_frame_hook(void (*frme_hook)())
可选配钩子函数,每帧解码完成钩子函数
- 参数
frme_row_hook – 钩子函数,要求无参无返回值。
- 返回值
0 – 钩子函数设置成功。
-1 – 失败
-
int32_t gifdec_set_end_hook(void (*end_hook)())
可选配钩子函数,所有帧图像解码完成
- 参数
frme_row_hook – 钩子函数,要求无参有返回。返回值 :非0停止解码 ;返回0继续从头开始解码
- 返回值
0 – 钩子函数设置成功。
-1 – 失败
- Note
若不注册,根据图像保存次数重复
-
int32_t gifdec_get_rgbrow(uint8_t *buf_last_row, uint8_t *buf_row, int16_t *offset_x)
从解码器中获取一行rgb图像rgb888
- 参数
buf_last_row – 上一帧此一整行显示的图像, rgb888
buf_row – 解码行图像,带有行偏移 rgb888
offset_x – 行宽度上的偏移 in pixel
- 返回值
0 – 成功。
-1 – 失败
-
struct gifdec_info_t
解码器状态结构体
-
uint16_t width
解码显示图像宽度 in pixel
-
uint16_t height
解码显示图像高度
-
uint16_t fy
解码帧高度偏移
-
uint16_t fw
解码帧图像宽度
-
int16_t current_row
解码帧的当前行,未偏移fy
-
int16_t disposal
解码行处理方式
-
int32_t delay
解码帧延迟 in 10ms
-
uint16_t width
-
int32_t gifdec_get_status(gifdec_info_t *info)
获取解码器状态
- 参数
info – 解码器状态信息,参看gifdec_info_t
- 返回值
0 – 成功。
-1 – 失败
使用方法
![]()
调用函数gifdec_init()初始化解码,并开始获取gif基本信息.并注册行、帧、完成回调函数
调用函数gifdec_cmd()开始解码
行回调函数,可调用gifdec_get_rgbrow()获取行像素信息
帧回调函数,调用gifdec_get_status()获取帧延迟时间
结束回调函数,返回值非0停止解码,返回0可继续从头解码
再次调用ifdec_cmd()开始解码
demo工程
SDk中demo工程gifdec