JPEG的帧起始(SOF)标题中组件标识符的用途是什么?

时间:2017-04-10 22:24:54

标签: opencl jpeg lossless

我目前正在为无损JPEG(DNG,CR2等)开发OpenCL-Decoder。该标准对组件的布局方式(交错与平面)的限制很少,这与相当不灵活的OpenCL内核相冲突。

特别是组件标识符的概念似乎不必要地复杂,所以我想知道我是否正确:

SOF3标头(第3帧开始,非差分,霍夫曼编码,无损(顺序))包含有关每个组件的一些信息。那些是:

  • i(隐式):组件索引
  • C_i:组件标识符
  • H_i / V_i:水平/垂直采样系数
  • Tq_i:量化表目标选择器

每个帧可以由包含至少一个颜色分量的编码图像数据的若干扫描组成。每个SOS标头(扫描开始)声明哪个组件将成为特定扫描的一部分。对于每个组件,先前声明的标识符之一(C_i)用作反向引用(Cs_j,扫描组件选择器)。标准中的限制很少(B.2.3扫描头语法):

规则1:

  

每个Cs_j应匹配帧头中指定的C_i值之一,并且扫描头中的排序应遵循帧头中的排序。如果Ns> 1,MCU中交错组件的顺序为Cs_1首先,Cs_2秒等。

规则2:

  

Cs_j的值应与Cs_1Cs_j-1的值不同。

我的问题是:

  1. 规则1不允许重新排序组件(例如,帧中的R | G | B,但扫描中的B | G | R)。是否允许创建多个扫描,每个扫描包含一个组件(平面配置),同时使用扫描-B,扫描-G,扫描-R,而不是扫描-R,扫描-G,扫描-B的排序?
  2. 是否可以跳过扫描中的组件?例如R | G | B在Frame中声明,然后是scan-R | B,然后是scan_G?
  3. 为什么扫描中的组件由其标识符(C_i)引用而不是其标题中的索引(i)?是否存在对唯一性标识符的限制,或者声明R是否真有效:C_0 = 255,G:C_1 = 3,B:C_2 = 250?

0 个答案:

没有答案