GIF解码器

简介

gif解码

特点

  1. 仅支持GIF89a版本,不支持GIF87a

  2. 最低每行像素输出,每个像素使用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

显示高度偏移,暂时无效

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

int32_t gifdec_get_status(gifdec_info_t *info)

获取解码器状态

参数
  • info – 解码器状态信息,参看gifdec_info_t

返回值
  • 0 – 成功。

  • -1 – 失败

使用方法

../../_images/gifdec-fsm.png
  1. 调用函数gifdec_init()初始化解码,并开始获取gif基本信息.并注册行、帧、完成回调函数

  2. 调用函数gifdec_cmd()开始解码

  3. 行回调函数,可调用gifdec_get_rgbrow()获取行像素信息

  4. 帧回调函数,调用gifdec_get_status()获取帧延迟时间

  5. 结束回调函数,返回值非0停止解码,返回0可继续从头解码

  6. 再次调用ifdec_cmd()开始解码

demo工程

SDk中demo工程gifdec