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

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

分享到:
评论

相关推荐

    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)) ...

    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 ...

    oracle asm rac

    修改/etc/hosts文件添加以上内容 # vi /etc/hosts 192.168.10.10 node1 192.168.10.20 node2 #vip 192.168.10.100 node1vip 192.168.10.200 node2vip #private 192.168.20.10 node1priv 192.168.20.20 node2priv #...

    Ant 1.9.2 API (CHM格式)

    4. scan.scan(); 5. String dirs[]=scan.getIncludedDirectories(); 6. scan.setIncludes(new String[]); //查找文件 7. scan.scan(); 8. String files[]=scan.getIncludedFiles(); 从之前发布其他chm文件下载用户...

    PCI协议中文版

    PCI局部总线规范 2 文档约定 2 第1章 简介 3 规范的内容 3 规范的动机 3 PCI局部总线的应用 3 PCI局部总线的架构 4 PCI局部总线的特性和益处 5 第2章 信号定义 7 2.1 信号类型的定义 7 2.2 引脚功能分组 8 2.2.1...

    《新手学黑客攻防》┊神龙工作室[.PDF]

    2. 按协议类型分类 8 1.3.3 查看电脑端口的命令 9 1.3.4 怎样关闭端口 9 1. 关闭相应服务阻止访问端口 10 2. 限制端口的方法 11 1.4 木马藏身之处——系统进程 14 .1.4.1 认识系统进程 14 1.4.2 打开系统进程 14 ...

    网络安全实验.doc

    " "指导教师: "曹传东老师 " "完成日期: " " 目录 1 实验环境 3 2 实验目的 3 3 实验步骤 3 4 实验内容 4 DOS窗口中常用网络命令的操作使用及IPCS攻击实践 4 DOS窗口中ping 命令及其常见带参数子命令的用法实践 4 ...

    TCP/IP详解part_2

    第16章 BOOTP: 引导程序协议 163 16.1 引言 163 16.2 BOOTP的分组格式 163 16.3 一个例子 164 16.4 BOOTP服务器的设计 165 16.5 BOOTP穿越路由器 167 16.6 特定厂商信息 167 16.7 小结 168 第17章 TCP:传输控制协议...

    跟我学汉化(含gif动画)汉化新世纪官方作品

     (1)Radialix (2)UltraEdit (3)Athena-A (4)Resscope (5)UPXShell  (6)NSIS (7)StringManager (8)Passlo (9)AutoFontSet (10)Sisulizer  (11)灵便汉化编辑器 (12)VBLocalize (13)FreeRes (14)PE-scan (15)...

    icom_ic7600_sm.pdf

    频道数目 101 (99 regular, 2 scan edges) 天线阻抗 50Ω unbalanced (Tuner off) 天线接口 SO-239×2 and RCA ×1 (RX only) 电源 13.8V DC±15% 工作温度 0℃ to +50℃; +32°F to +122°F 频率稳定度 Less than ...

    BeoPlayer完美版3.0 汉化版

    SHA1: F0EE03B9EA9788BC796C2A69FC14363FBAC2BF8FGateway论坛,是一个提供Gateway技术问题讨论,Gateway问题解决,使用心得、最新报价、最新测评的中文站8 v/ r) i% u, c" J% \ Visual C++ 2005 SP1 Redistributable...

    cmd操作命令和linux命令大全收集

    copy 1st.jpg/b+2st.txt/a 3st.jpg 将2st.txt的内容藏身到1st.jpg中生成3st.jpg新的文件,注:2st.txt文件头要空三排,参数:/b指二进制文件,/a指ASCLL格式文件 copy ipadmin$svv.exe c: 或:copyipadmin$*.* 复制...

    TCP_IP详解卷1

    第16章 BOOTP: 引导程序协议 163 16.1 引言 163 16.2 BOOTP的分组格式 163 16.3 一个例子 164 16.4 BOOTP服务器的设计 165 16.5 BOOTP穿越路由器 167 16.6 特定厂商信息 167 16.7 小结 168 第17章 TCP:传输控制协议...

    TCPIP详解卷[1].part04

    第16章 BOOTP: 引导程序协议 163 16.1 引言 163 16.2 BOOTP的分组格式 163 16.3 一个例子 164 16.4 BOOTP服务器的设计 165 16.5 BOOTP穿越路由器 167 16.6 特定厂商信息 167 16.7 小结 168 第17章 TCP:传输控制协议...

    TCPIP详解卷[1].part09

    第16章 BOOTP: 引导程序协议 163 16.1 引言 163 16.2 BOOTP的分组格式 163 16.3 一个例子 164 16.4 BOOTP服务器的设计 165 16.5 BOOTP穿越路由器 167 16.6 特定厂商信息 167 16.7 小结 168 第17章 TCP:传输控制协议...

    TCPIP详解卷[1].part05

    第16章 BOOTP: 引导程序协议 163 16.1 引言 163 16.2 BOOTP的分组格式 163 16.3 一个例子 164 16.4 BOOTP服务器的设计 165 16.5 BOOTP穿越路由器 167 16.6 特定厂商信息 167 16.7 小结 168 第17章 TCP:传输控制协议...

    TCPIP详解卷[1].part03

    第16章 BOOTP: 引导程序协议 163 16.1 引言 163 16.2 BOOTP的分组格式 163 16.3 一个例子 164 16.4 BOOTP服务器的设计 165 16.5 BOOTP穿越路由器 167 16.6 特定厂商信息 167 16.7 小结 168 第17章 TCP:传输控制协议...

    TCPIP详解卷[1].part06

    第16章 BOOTP: 引导程序协议 163 16.1 引言 163 16.2 BOOTP的分组格式 163 16.3 一个例子 164 16.4 BOOTP服务器的设计 165 16.5 BOOTP穿越路由器 167 16.6 特定厂商信息 167 16.7 小结 168 第17章 TCP:传输控制协议...

    TCPIP详解卷[1].part08

    第16章 BOOTP: 引导程序协议 163 16.1 引言 163 16.2 BOOTP的分组格式 163 16.3 一个例子 164 16.4 BOOTP服务器的设计 165 16.5 BOOTP穿越路由器 167 16.6 特定厂商信息 167 16.7 小结 168 第17章 TCP:传输控制协议...

Global site tag (gtag.js) - Google Analytics