JPEG2000的Kakadu源代码浅析之四:码流解码(二)

本文详细探讨了JPEG2000解码过程,重点在于kdu_decoder类及其kd_decoder对象,阐述了码块的解码流程,包括open_block函数和decode_row_of_blocks的运作,以及码块在JPEG2000体系中的重要地位。解码过程中涉及到码块的初始化、EBCOT解码和数据处理。同时,介绍了结构组成,如拼接块、分量、分辨率、分区等概念,以及kd_block的创建和kd_block::build_tree函数的作用。
摘要由CSDN通过智能技术生成

  解码过程的最关键部分由与kdu_decoder类一一对应的实体类kd_decoder对象完成。每个kd_decoder对应一个分量的一个子带(subband)。在kd_decoder构造的时候,主要工作是从字带对象band中获取关于码块的信息:
  nominal_block_size——码块大小
  first_block_size——实际(在子带中的)首码块大小
  block_indices——码块组的索引
  kdu_decoder的主要运算在虚函数实现pull中完成。而这个函数的主要工作在decode_row_of_blocks中进行。该过程对一个字带中的一行码块逐个进行解码:
  1 调用kdu_block_decoder::open_block(kdu_coords block_idx, int *)打开并初始化码块,详情在本章介绍。
  2 调用kdu_block_decoder::decode(kdu_block *)进行EBCOT块解码,其解码具体过程将在后续章节介绍;
  3 根据解码返回的num_passes信息,决定EBCOT解码系数的处置方案,如果num_passes为0,则说明系数全0,否则将系数复制到kd_decoder的缓冲区中,此后这个缓冲区内容再由pull函数复制到函数参数指定的缓冲区中,这些数据将被用于小波逆变换。

  kdu_subband::open_block(...)函数里涉及码块在JPEG2000体系中的地位的所有论题。由于码块是JPEG2000体系中最基本的单元,所以比较重要。
  open_block函数的基本流程是:
  1 根据block_idx计算出precinct_idx,precinct_idx = block_idx / <blocks_p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值