zoukankan      html  css  js  c++  java
  • JM8.6中对cofAC及相关数组的探讨

    关于 int ****cofAC变量的理解

    对cofAC, cofAC8x8, cofDC, cofAC4x4, cofAC4x4intern的探讨

    我要在这儿解释一下红框内的一些变量的含义:

    我在JM86的代码中搜索了一下,发现cofAC4x4intern使用的地方没有几处:

    再看,我觉得貌似cofAC4x4intern没有什么用处, 只是为了通过get_memACcoeff来对cofAC4x4进行分配内存空间,可能懒得再写一个单独为cofAC4x4分配空间的函数了吧。

    对于cofAC4x4这个容易理解了,就是一个4x4小块的AC系数

    cofDC是包括色度块在内的6个8x8大小块(亮度有4个8x8,2个色度8x8)的DC系数

    cofAC与cofDC是对应的,应该是相应的AC系数

    201141017:36:37

    JM代码中几个变换系数数组

    下载 (11.62 KB)

    2011-3-23 09:22 AM

    上图中的这几个数组有什么区别?
    特别是cofAC4x4intern指的是什么东西啊?

    下面4幅是在Understand中的搜索结果:

    其实通过上面的4幅图, 我们可以发现这4AC系数数组的区别与联系.

    下面4幅是在VS2008中查找引用结果,比较来说下面的更精确:

    1. 首先对于int****cofAC这个数组, 作为rdopt.c的一个全局变量, 它是一个4维数组,它保存了一个宏块中的所有AC系数:16x16宏块分为48x8,然后将48x8块分为44x4,然后根据level/run的不同存储4x415AC系数的值. 这个数组主要是在函数store_macroblock_parameters过程中使用的, 由于img结构中有cofAC这个数组, 所以这儿,rodpt.c这个文件中cofAC主要是在中间过程中对img->cofAC进行一些保存.

    2. 对于int****cofAC8x8这个数组, 也是一个全局变量, 它和cofAC是一样的, 只不过它主要是在帧间的亚宏块模式选择中存储每一个8x8(48x8)的相应的AC系数, RDO和非RDO下都有应用, 其实主要的原因是因为模式选择中要进行编码,所以才有了要保存AC系数.

    3. 对于int**cofAC4x4这个数组很好理解, 它主要是保存一个4x4块的AC系数, 其中第一维是level/run, 第二维是scan_pos, 这个数组主要是在4x4块的9种帧内模式的选择时作为一个中间量使用, 保存AC系数, 然后进行编码

    4. int****cofAC4x4intern这个数组其实没有什么实质的用处, 通过看代码我们可以发现, 其实这个数组主要是为了给二维数组cofAC4x4服务的, 因为在代码中,利用函数get_mem_ACcoeff函数对cofAC4x4intern进行分配内存后, 我们把cofACintern[0][0]中的二维指针赋给了cofAC4x4, 仅此而已

    通过上面的比较我们可以发现其实前三个数组cofAC, cofAC8x8, cofAC4x4比较类似, 都是一个中间量, 由于需要进行帧间帧内模式选择的过程中需要进行编码, 所以为了保存编码过程中img->cofAc的值, 使用了上面的三个数组.

    cofAC是在store_macroblock_parameters函数中为了保存一下宏块参数时使用的.

    cofAC8x8是在帧间亚宏块模式进行选择的过程中为了保存48x8宏块的一些AC系数而使用的.

    cofAC4x4是在帧内9种模式间进行选择时为了保存一个4x4块的AC系数而使用的.

    总结:

    下面是在rdopt.c文件中定义,

    下面是在结构体ImageParameters中的定义:

    首先, cofAC4维数组, cofDC是三维数组, cofAC8x8也是4维数组,其实可以这样理解:

    ImageParameters结构体中的cofAC是用于保存一个宏块(亮度和色度)中所有的AC系数,是以游程编码的方式保存的,对应的cofDCyuvDC系数

    rdopt.c文件中的cofACcofAC8x8都是用于保存img->cofACimg->cofDC的变量, cofAC4x4则是一个4x4块的AC系数,用于保存img->cofAC的后两维(Mode_Decision_for_4x4IntraBlocks中的用法)

     

  • 相关阅读:
    hdu 1017 A Mathematical Curiosity 解题报告
    hdu 2069 Coin Change 解题报告
    hut 1574 组合问题 解题报告
    hdu 2111 Saving HDU 解题报
    hut 1054 Jesse's Code 解题报告
    hdu1131 Count the Trees解题报告
    hdu 2159 FATE 解题报告
    hdu 1879 继续畅通工程 解题报告
    oracle的系统和对象权限
    oracle 自定义函数 返回一个表类型
  • 原文地址:https://www.cnblogs.com/xkfz007/p/2612343.html
Copyright © 2011-2022 走看看