我是靠谱客的博主 成就水池,最近开发中收集的这篇文章主要介绍X264的x264_scan8变量,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

对于x264中的x264_scan8结构不是很理解,看到了一个很好的介绍文章,转载如下,从其中可以看到在x264中用到的一些结构的内部数据排序,如Intra4*4_pred_mode_cache[],Non_zero_count_cache[48]等,也就理解了x264_scan8的用途,是作为一个数据的映射表而存在,见下面的内容

 

int8_t intra4x4_pred_mode_cache[40]; //5*8
int8_t (*intra4x4_pred_mode)[8];

uint8_t non_zero_count_cache[48]; //6*8
uint8_t (*non_zero_count)[16];
的理解,关键:当前MB 处理完后,仅仅其右、下4*4 宽度的边界对于后续MB 有参考价
值。
Juanny Wang

 

 x264-04【关于scan8】 - 秋冬 - 秋冬的博客

Intra4*4_pred_mode_cache[40]:如图1 所示,其中40=5*8,黄色区域为当前MB的16个4*4
块,主要根据上、左8 个4*4块的预测模式来预测当前MB的16 个模式。当前MB处理完,
其右、下边界(红色框)相对于后续MB 而言,分别是左、上边预测边界,所以要对当前
MB的右、下边界4*4预测模式进行保存,以便后用。

 

x264-04【关于scan8】 - 秋冬 - 秋冬的博客

 

Intra4*4_pred_mode[8]如图2 所示,把当前MB的右、下边界4*4预测模式进行保存。
程序如下:
h->intra4x4_pred_mode[mb_xy][0]= h->intra4x4_pred_mode_cache[15];
h->intra4x4_pred_mode[mb_xy][1]= h->intra4x4_pred_mode_cache[23];
h->intra4x4_pred_mode[mb_xy][2]= h->intra4x4_pred_mode_cache[31];

h->intra4x4_pred_mode[mb_xy][3]= h->intra4x4_pred_mode_cache[39];
h->intra4x4_pred_mode[mb_xy][4]= h->intra4x4_pred_mode_cache[36];
h->intra4x4_pred_mode[mb_xy][5]= h->intra4x4_pred_mode_cache[37];
h->intra4x4_pred_mode[mb_xy][6]= h->intra4x4_pred_mode_cache[38];
39 号4*4块比较特殊,只保存到Intra4*4_pred_mod 数组(白色区域中的0、1、2、3、4、5、
6)中的[3],[7]空缺,这也就解释了程序中的
h->intra4x4_pred_mode_cache[4]= h->intra4x4_pred_mode[top_xy][4];
h->intra4x4_pred_mode_cache[5]= h->intra4x4_pred_mode[top_xy][5];
h->intra4x4_pred_mode_cache[6]= h->intra4x4_pred_mode[top_xy][6];
h->intra4x4_pred_mode_cache[7]= h->intra4x4_pred_mode[top_xy][3];

 

x264-04【关于scan8】 - 秋冬 - 秋冬的博客

 

 

Non_zero_count_cache[48]:non_zeor_count 缓存如图3 所示,其中48=6*8。黄色区域为当
前MB 的16 个4*4 块的非零数;绿色区域分别为两个色度块的非零数。红色框为当前MB
亮度、两个色度的右、下边界。

x264-04【关于scan8】 - 秋冬 - 秋冬的博客

 

Non_zero_count[16]:当前MB 处理完后,原理同图1,也是对MB 的右、下4*4 宽度的边
界进行保存,保存到non_zero_count[16]供后续使用。由图4 可清楚明了,白色区域(0、1、
2、3、4、5、6、7、8、9、10、11、12)为数组non_zero_count[16]。
程序如下:
h->non_zero_count[mb_xy][0]= h->non_zero_count_cache[36];
h->non_zero_count[mb_xy][1]= h->non_zero_count_cache[37];
h->non_zero_count[mb_xy][2]= h->non_zero_count_cache[38];
h->non_zero_count[mb_xy][3]= h->non_zero_count_cache[39];
h->non_zero_count[mb_xy][4]= h->non_zero_count_cache[31];
h->non_zero_count[mb_xy][5]= h->non_zero_count_cache[23];
h->non_zero_count[mb_xy][6]= h->non_zero_count_cache[15];
h->non_zero_count[mb_xy][7]= h->non_zero_count_cache[17];
h->non_zero_count[mb_xy][8]= h->non_zero_count_cache[18];
h->non_zero_count[mb_xy][9]= h->non_zero_count_cache[10];
h->non_zero_count[mb_xy][10]=h->non_zero_count_cache[41];
h->non_zero_count[mb_xy][11]=h->non_zero_count_cache[42];
h->non_zero_count[mb_xy][12]=h->non_zero_count_cache[34];

最后

以上就是成就水池为你收集整理的X264的x264_scan8变量的全部内容,希望文章能够帮你解决X264的x264_scan8变量所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部