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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456211.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React 产品实现 -任务管理工具“氢”

原文地址&#xff1a;https://zhuanlan.zhihu.com/p/...&#xff0c;欢迎转载 &#xff1a;-&#xff09;? 关于 其实对于这个专栏的订阅用户感到非常抱歉&#xff0c;已经停更很久了&#xff0c;也没啥特别的理由就是懒 orz&#xff01;不对&#xff0c;画风不能这样开头&…

通过curl获取网页访问时间

curl -w %{time_namelookup}:%{time_connect}:%{time_starttransfer}:%{time_total}:%{speed_download}"\n" "https://www.google.com" 转载于:https://www.cnblogs.com/fanxuanhui-linux/p/6581292.html

【numpy】20道numpy题目

1、创建一个长度为10的一维全为0的ndarray对象&#xff0c;然后让第5个元素等于1 import numpy as npndarry np.zeros(10) ndarryarray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])ndarry[4]1 ndarryarray([0., 0., 0., 0., 1., 0., 0., 0., 0., 0.])2、创建一个元素为从10到4…

ffmpeg_intra_pred_mode问题.pdf

ffmpeg_intra_pred_mode问题.pdf文章

【R】语言第一课-----安装

安装R和Rstuido软件 R语言是用于统计分析&#xff0c;图形表示和报告的编程语言和软件环境&#xff1b;Rstudio是编辑、运行R语言的最为理想的工具之一。 1、官网下载R安装包 下载地址为&#xff1a;https://cran.r-project.org 进入链接&#xff0c;如下图所示&#xff0c…

面向对象基础知识整理

1、什么是对象&#xff1f; 什么是类&#xff1f; 对象是可以看的见摸得着的&#xff0c;对象可以是任何东西&#xff0c;比如水杯&#xff0c;书&#xff0c;手机等。准确的说&#xff0c;对象是一个自包含的实体&#xff0c;用一组可识别的特性和行为标识的。 类就是具有相同…

Binary Tree Level Order Traversal

Given a binary tree, return the level order traversal of its nodes values. (ie, from left to right, level by level). For example: Given binary tree {3,9,20,#,#,15,7}, 3/ \9 20/ \15 7return its level order traversal as: [[3],[9,20],[15,7] ] 解题思路:能够…

键盘事件相关

转自下面两个链接&#xff1a;http://www.cnblogs.com/starof/p/6558581.html http://www.cnblogs.com/cathsfz/archive/2011/05/29/2062382.html 在 JavaScript 中监听 IME 键盘输入事件 在 JavaScript 中监听用户的键盘输入是很容易的事情&#xff0c;但用户一旦使用了输入…

【R】语言第二课----- 变量的使用方法

num1<-c(9.1,8.2,7.3) num2<-1:10 char<-c(a,b,c) #单引号or双引号都可以 logit<-c(TRUE,FALSE,T,F) c(1,a,TRUE) sex<-c(F,M,F,M) sex sexf<-factor(sex) sexf num1[1]<-100 #索引一定要加方括号 num1[c(1,3)]<-c(99.9,77.7) num1[c(T,F,T)] num1[-2]…

Petuum - Careers

Petuum - CareersCloudformation

【R】语言第三课----矩阵

#矩阵 ?matrix m<-matrix(1:6,nrow 2,ncol3,dimnames list(c(r1,r2),c(c1,c2,c3))) m#默认按列排列 m<-matrix(1:6,nrow 2,ncol3,byrow T,dimnames list(c(r1,r2),c(c1,c2,c3)))m class(m) m[1,1] m[1,]# 相当于 m[c(T,F),] m[,1] m[r1,]m[1,] <- c(100,99,98…

谁说菜鸟不会数据分析--读书笔记

如果看不清可以下载下来&#xff0c;打开&#xff0c;放大。仅供参考。 转载于:https://www.cnblogs.com/sunshinewang/p/6591772.html

[MySQL 5.6优化] --order by limit x,x 优化

简介&#xff1a;order by limit x ,x 在实际工作中有各种业务需求要有order by的排序&#xff0c;有时候处理不好则会造成系统宕机&#xff01;原理&#xff1a;a.通过索引来获取排序b.通过内部算法获取排序&#xff1a; 案例具体SQL&#xff1a; SELECT c.order_price orderP…

【R】语言第四课----读取文件

install.packages("readxl") getwd() setwd("E:/作业4") library(readxl) tianmao<-read_excel(tianmaoTV.xlsx,skip1)#把第一行跳过&#xff0c;直接从第二行开始读取 #创建新变量 tianmao[total_sales]<-tianmao$current_price*tianmao$month_sale…

Html.Partial和Html. RenderPartial用法

Html.Partial和Html. RenderPartial用法Html.partial和RenderPartial的用法与区别Html.partial和RenderPartial都是输出html片段&#xff0c;区别在于Partial是将视图内容直接生成一个字符串并返回&#xff08;相当于有个转义的过程&#xff09;&#xff0c;RenderPartial方法是…

算术编码简单研究

算术编码 是一种无损数据压缩方法&#xff0c;也是一种熵编码的方法。和其它熵编码方法不同的地方在于&#xff0c;其他的熵编码方法通常是把输入的消息分割为符号&#xff0c;然后对每个符号进行编码&#xff0c;而算术编码是直接把整个输入的消息编码为一个数&#xff0c;一个…

Thinkphp5 还有这种操作?

2019独角兽企业重金招聘Python工程师标准>>> 在 _initialize 中取出 控制器名和方法名 define(CONTROLLER_NAME,Request::instance()->controller()); define(MODULE_NAME,Request::instance()->module()); define(ACTION_NAME,Request::instance()->actio…

【R】语言第五课----画图

?plot#高级绘图函数 可以完整地绘制出一张图 ?mtcars plot(mtcars$wt) plot(mtcars[,1:2]) plot(mtcars) plot(mtcars$wt,mtcars$disp) plot(mtcars$wt,mtcars$disp,typep) plot(mtcars$wt,mtcars$disp,typel) plot(mtcars$wt,mtcars$disp,typeb) plot(mtcars$wt,mtcars$disp…

Solidworks如何将参考平面的图形投影到某曲面上

1 画好草图&#xff0c;点击曲线-分割线 2 选择要投影的草图和被投影的面&#xff08;那个球面&#xff09;&#xff0c;最后效果如下图所示 3 为了获取连续的轨迹&#xff0c;我们可以再次选择这个草图&#xff0c;然后在投影面中选择平面&#xff0c;最后得到的图形如下图所示…

向极限挑战:算术编码 (转)

向极限挑战&#xff1a;算术编码 (转) http://blog.csdn.net/hhf383530895/archive/2009/08/24/4478605.aspx 我们在上一章中已经明白&#xff0c;Huffman 编码使用整数个二进制位对符号进行编码&#xff0c;这种方法在许多情况下无法得到最优的压缩 效果。假设某个字符的出…