`
xpp02
  • 浏览: 1071106 次
社区版块
存档分类
最新评论

scan8[16+2*4]的内容

 
阅读更多

scan8确实不好理解,解答如下:

static const int x264_scan8[16+2*4] =
{

/* Luma */
4+1*8, 5+1*8, 4+2*8, 5+2*8,
6+1*8, 7+1*8, 6+2*8, 7+2*8,
4+3*8, 5+3*8, 4+4*8, 5+4*8,
6+3*8, 7+3*8, 6+4*8, 7+4*8,

/* Cb */
1+1*8, 2+1*8,
1+2*8, 2+2*8,

/* Cr */
1+4*8, 2+4*8,
1+5*8, 2+5*8,
};


/*
0 1 2 3 4 5 6 7
0
1 B B L L L L
2 B B L L L L
3 L L L L
4 R R L L L L
5 R R
*/
上面这两个对应起来看就可以了。

scan8是为了便于访问 诸如mv_cache, ref_cache, non_zero_count_cache以及mvd_cache等内存,而填充好的一个数组,里面放置的都是上述内存中特定的索引序号
比如scan8[0]=12,这个12就是上述内存中,一般针对macroblock而言的左上角数值,无论是mv,还是non_zero_count,所以只有充分搞懂上述内存结构,那么所有问题就迎刃而解了

attachment中是以前针对某个问题,分析后的笔记
ffmepg中,几个比较重要的cache,大致都是按照此思路进行设置的
希望对于cache理解有帮助!

1.请问色度为什么和Luma度是同一矩阵值?
2.h->block_offset是求什么的值?
  1. for(i=0; i<16; i++){
  2. h->block_offset[i]= 4*((scan8[i] - scan8[0])&7) + 4*s->linesize*((scan8[i] - scan8[0])>>3);
  3. h->block_offset[24+i]= 4*((scan8[i] - scan8[0])&7) + 8*s->linesize*((scan8[i] - scan8[0])>>3);
  4. }
  5. for(i=0; i<4; i++){
  6. h->block_offset[16+i]=
  7. h->block_offset[20+i]= 4*((scan8[i] - scan8[0])&7) + 4*s->uvlinesize*((scan8[i] - scan8[0])>>3);
  8. h->block_offset[24+16+i]=
  9. h->block_offset[24+20+i]= 4*((scan8[i] - scan8[0])&7) + 8*s->uvlinesize*((scan8[i] - scan8[0])>>3);
  10. }
复制代码
1、应该是为了节约内存,同时方便在一个数组中索引同一个MB的亮色度的预测模式。不知这样解释是否正确,希望高人指正
2、block_offset,看名字就知道是block的偏移量啊 16+8,就更加明显啦,16个亮度,两个(8,各为4)色度
如果没记错的话,这个偏移应该是用在yuv像素存储索引的

感谢Juanny 的文档,对于理解x264_scan8中的元素值很有帮组,这主要是一个中间的寻址矩阵,通过它可以很方便的找到MB的色度、亮度4x4块在对应的cache,zero_count中的位置

scan8[]实际上是4x4块的扫描顺序及存储的位置,把scan8放在8x8的矩阵中就能看出其作用了,其中T表示当前块的上面的块,L表示当前块左边的块,它们是用来预测当前块的帧内预测模式(Intra prediction mode)和运动向量之类的,起到一个缓存的作用。可以看到这种设计比JM节约内存,而且非常巧妙。程序中的其他缓存设计都与此类似。

T

T

T

T

T

T

L

16

17

L

0

1

4

5

L

18

19

L

2

3

6

7

T

T

L

8

9

12

13

L

20

21

L

10

11

14

15

L

22

23

分享到:
评论

相关推荐

    scancodes键盘扫描码

    ### scancodes键盘扫描码详解 #### 一、概述 在计算机硬件领域,特别是键盘设计与制造中,**scancodes(扫描码)**扮演着至关重要的角色。简单来说,扫描码是计算机用来识别按键被按下或释放的一种内部代码。不同...

    编译原理词法分析与语法分析实验报告

    * 十进制整数:0 | (1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)* * 运算符和分隔符:+ - * / &gt; ( ) ; 我们的词法分析器使用状态图来描述词法分析过程。状态图是一种有限状态机,它可以识别单词的边界和类型。我们的...

    建伍tk79a 置频资料

    根据提供的标题、描述以及部分内容,我们可以总结出关于建伍TK-79A对讲机的一系列设置和操作方法。建伍TK-79A是一款专业级别的手持无线电对讲机,适用于业余无线电通信等多种应用场景。以下将详细介绍该设备的部分...

    建伍th-f7e中文操作说明

    2. **M.GRP LINK**:将记忆频道分为8组后,选择其中数组链接。 3. **MR METHOD**:记忆频道范围。 4. **AUTO OFFSET**:自动差频。 5. **OFFSET**:改变自动差频数值。 6. **TUNE ENABLE**:频率微调功能。 7. **TX ...

    单片机原理及应用试卷和答案.doc

    - **DPTR的内容**: 根据题目给定的数据,应该是`6030H`。 - **SP的内容**: `3FH`。 #### 二、选择题解析 1. **特殊功能寄存器** - **8051单片机**包含两个16位的特殊功能寄存器:DPTR和ACC。 - **答案**: B. ...

    dos命令行命令

    2. **cls (Clear Screen)** - **用途**:清除屏幕上的所有显示内容。 - **语法**: ``` cls ``` - **示例**: ``` cls ``` 3. **copy (Copy)** - **用途**:复制一个或多个文件到同一目录或另一个目录。 ...

    16×16点阵设计程序

    - `SCAN8` 循环8次,处理一个字节的点阵数据。 - `SCANTAB` 是8x8点阵扫描表,用于获取当前行的偏移地址。 - `WORDTAB` 包含每个字符的16字节点阵数据,每行8字节。 4. **显示逻辑**: - `MOVC A,@A+DPTR` 从...

    2021-2022计算机二级等级考试试题及答案No.13138.docx

    根据给定文件的部分内容,我们可以总结出以下计算机二级等级考试中的关键知识点: ### 1. 集合运算 **知识点:** 在关系数据库中,集合运算是处理多个关系(通常为两个)的一种方法,主要涉及到交集、并集、差集等...

    key_scan.rar_矩阵键盘_键盘检测

    4x4矩阵键盘由16个按键组成,通过4行和4列的交叉点连接,形成一个4x4的矩阵。这种布局方式可以有效地减少所需的I/O端口数量,使得硬件设计更为简洁。 本资源"key_scan.rar"是关于4x4矩阵键盘的扫描检测及其数码管...

    uboott移植实验手册及技术文档

    #define NFADDR __REGb(NF_BASE + 0x8) #define NFDATA __REGb(NF_BASE + 0xc) #define NFSTAT __REGb(NF_BASE + 0x10) #define BUSY 1 inline void wait_idle(void) { int i; while(!(NFSTAT & BUSY)) ...

    B-SQUARE_码表中文说明书.doc

    根据"B-SQUARE_码表中文说明书"的内容,可以总结出以下关键知识点: ### 一、产品基本信息 **品名:** B-SQUARE 自行车码表 **颜色:** 如说明书中的图片所示 **重量:** 大约 80 克 **感应线长度:** 大约 80 厘米...

    2009计算机考研408真题和答案.pdf

    **题目内容:** 给出了一系列磁盘请求,并要求按照SCAN算法进行调度。 **解析:** SCAN算法是一种常用的磁盘调度算法,它类似于电梯的工作方式,在磁道之间来回扫描。题目中的数字为磁盘请求的磁道号,需要按照SCAN...

    南航829计算机专业基础2013到2018年真题.pdf

    - 再按行重新构建得到((1,1,12),(1,2,45),(1,3,26),(2,1,8),(3,1,68),(3,2,52),(3,3,3)) **5. 单链表交集** - **算法思想**: 先遍历两个链表,记录所有结点的值,再遍历其中一个链表,删除不在另一个链表中的结点...

    2021-2022计算机二级等级考试试题及答案No.16655.docx

    - **知识点**: 使用**+**可以打开“开始”菜单。 - **解释**: 在Windows操作系统中,使用键盘上的Windows徽标键加上任意键(通常是字母键),可以快速打开“开始”菜单。 ### 14. 建立表之间临时关系的要求 - **...

    tkbook.pdf

    set x [expr 2 * (3 + 4)] puts $x ``` **12. 变量替换** 了解如何在不同的上下文中正确地使用变量替换对于编写有效的TCL脚本至关重要: ``` set x 10 set y "[$x]" puts $y ``` **13. 替换与组合总结** 组合...

    6.3 jenkins+sonar_代码检查1

    - 在 SonarQube 管理员界面生成一个 Token,例如 `7a4ee23f4dc52b16cb625021efd151d1a8e15fdb`,用于 Jenkins 集成。 8. **取消匿名访问** - 在 SonarQube 的权限设置中启用强制用户身份验证。 **第三章 ...

    操作系统练习

    (2)位示图需要的存储空间为(10*100*16)/8=2000字节,因为每扇区用1位表示。(3)当空白文件目录项超过2000/5=400个时,其占用的空间会超过位示图。 5. **磁盘调度算法**: - **FCFS(先来先服务)**:按照请求的...

    grub4dos-V0.4.6a-2017-02-04更新

    2.ntfs 文件系统支持 8Kb 以内的非常驻属性列表。 3.修正了 udf 格式光盘驱动 bug。 4.修正了 iso9600_Joliet 文件格式转义符显示问题。 2014-01-16(yaya) 1.当 FDD 模式的 u 盘(有 BPB,没有分区表)被 BIOS ...

    夏普AR158维修手册

    - **模拟代码详细内容**:提供每个模拟代码的具体说明。 - **故障代码**:列出可能出现的故障代码及其含义。 #### [11] 维护保养 - **维护保养明细表**:提供维护保养的具体计划和步骤。 - **维护保养显示系统**:...

    2021-2022计算机二级等级考试试题及答案No.2475.docx

    以下是根据题目内容解析的相关知识点: 1. **二叉树遍历**:二叉树的遍历分为前序遍历、中序遍历和后序遍历。给定前序和中序遍历序列,可以唯一确定一棵二叉树,但无法直接得出后序遍历序列。题目中的答案D....

Global site tag (gtag.js) - Google Analytics