Decompress
该示例演示使用 IDU 对各种不同压缩算法和颜色格式的压缩文件的解压缩功能。
环境需求
该示例的环境需求,可参考 环境需求。
硬件连线
在此示例工程的演示中,无需进行额外的物理连线。
配置选项
以下宏可以配置选择目标压缩算法和颜色格式。注意:以下这些宏中只能有一个被设置为1。
#if 0 /*< RGB888, RLE stage 1, Run Length in stage1 = 1 */ #if 0 /*< RGBA8888, RLE stage 1, Run Length in stage1 = 1 */ #if 0 /*< RGBA8888, RLE stage 1, Run Length in stage1 = 2 */ #if 0 /*< RGBA8888, RLE stage 2, Run Length in stage1 = 1, Run Length in stage2 = 1 */ #if 0 /*< RGBA8888, RLE stage 2, Run Length in stage1 = 1, Run Length in stage2 = 2 */ #if 0 /*< RGBA8888, RLE stage 2, Run Length in stage1 = 2, Run Length in stage2 = 1 */ #if 0 /*< RGBA8888, RLE stage 2, Run Length in stage1 = 2, Run Length in stage2 = 2 */ #if 0 /*< RGBA8888, FastLZ */ #if 0 /*< RGB888, YUV411 sampling, No bit blur */ #if 0 /*< RGB888, YUV411 sampling, Blur 1 bit */ #if 0 /*< RGB888, YUV411 sampling, Blur 2 bits */ #if 0 /*< RGB888, YUV411 sampling, Blur 4 bits */ #if 0 /*< RGB888, YUV422 sampling, No bit blur */ #if 0 /*< RGB888, YUV422 sampling, Blur 1 bit */ #if 0 /*< RGB888, YUV422 sampling, Blur 2 bits */ #if 0 /*< RGB888, YUV422 sampling, Blur 4 bits */ #if 0 /*< RGB888, YUV444 sampling, No bit blur */ #if 0 /*< RGB888, YUV444 sampling, Blur 1 bit */ #if 0 /*< RGB888, YUV444 sampling, Blur 2 bits */ #if 0 /*< RGB888, YUV444 sampling, Blur 4 bits */ #if 0 /*< RGB888, YUV411 sampling, No bit blur, FastLZ applied on sampled data */ #if 0 /*< RGB888, YUV411 sampling, Blur 1 bit, FastLZ applied on sampled data */ #if 0 /*< RGB888, YUV411 sampling, Blur 2 bits, FastLZ applied on sampled data */ #if 0 /*< RGB888, YUV411 sampling, Blur 4 bits, FastLZ applied on sampled data */ #if 0 /*< RGB888, YUV422 sampling, No bit blur, FastLZ applied on sampled data */ #if 0 /*< RGB888, YUV422 sampling, Blur 1 bit, FastLZ applied on sampled data */ #if 0 /*< RGB888, YUV422 sampling, Blur 2 bits, FastLZ applied on sampled data */ #if 0 /*< RGB888, YUV422 sampling, Blur 4 bits, FastLZ applied on sampled data */ #if 0 /*< RGB888, YUV444 sampling, No bit blur, FastLZ applied on sampled data */ #if 0 /*< RGB888, YUV444 sampling, Blur 1 bit, FastLZ applied on sampled data */ #if 0 /*< RGB888, YUV444 sampling, Blur 2 bits, FastLZ applied on sampled data */ #if 0 /*< RGB888, YUV444 sampling, Blur 4 bits, FastLZ applied on sampled data */
编译和下载
该示例的编译和下载流程,可参考 编译和下载。
测试验证
解压数据成功
当该示例运行在EVB上后,DebugAnalyzer窗口中会打印以下信息,表明IDU解压缩成功,所有解压后的数据都与标准数据相符。
decompress procedure succeeded
解压数据失败
当该示例运行在EVB上后,DebugAnalyzer窗口中会打印以下信息,表明IDU解压缩失败,解压后的数据与标准数据不符。错误的数据与正确的数据都会进行展示,并告知产生错误数据的位置。例如:
错误的数据与正确的数据都会进行展示,并告知产生错误数据的位置。例如:
Received word is 0xABCDEF00
Golden word is 0x12345678
[ERROR] occurs during decompress procedure at offset 172
代码介绍
该章节主要介绍示例中的初始化和相应功能实现的代码和流程说明。
源码路径
工程文件和源码路径如下:
工程路径:
sdk\samples\peripheral\idu\decompress\proj
源码路径:
sdk\samples\peripheral\idu\decompress\src
初始化
初始化流程包含在 IDU_test()
中。
根据 配置选项 中的介绍选择待测试的压缩算法和颜色格式.
从压缩数据的头部读取信息。算法,像素大小和图像大小信息存储在
IDU_file_header
中。
IDU_file_header *header = (IDU_file_header *)file_data;
在结构体
IDU_decode_range
中填充需要解压的范围。
IDU_decode_range range;
range.start_column = 0;
range.end_column = header->raw_pic_width - 1;
range.start_line = 0;
range.end_line = header->raw_pic_height - 1;
在结构体
IDU_DMA_config
指定使用的DMA通道和存放解压后数据的地址。
IDU_DMA_config dma_cfg;
dma_cfg.output_buf = (uint32_t *)buf;
dma_cfg.RX_DMA_channel_num = 0;
dma_cfg.TX_DMA_channel_num = 1;
功能实现
执行 IDU_Decode()
后,解压完成的数据会与标准数据进行比对。如果产生错误,能够观察到产生错误的地址和数据。如果在此操作中产生错误,错误数据会如 测试验证 章节中展示,在DebugAnalyzer中显示。