功能:完成将已编码数据参数和待编码数据装入到h->mb.cache中,下图是BUF中存储的数据在以MB为单位的时候的存储顺序

x264_macroblock_cache_load( h, i_mb_x, i_mb_y );//是把当前宏块的up宏块和left宏块的intra4x4_pred_mode,non_zero_count加载进来,放到一个数组里面,这个数组用来直接得到当前宏块的左侧和上面宏块的相关值.要想得到当前块的预测值,要先知道上面,左面的预测值,它的目的是替代getneighbour函数

----------------------计算各种类型宏块的位置-------------------------------

int i_mb_xy = i_mb_y * h->mb.i_mb_stride + i_mb_x;

--得到MB位置,其中h->mb.i_mb_stride为原始数据以MB为单位的宽度

int i_mb_4x4 = 4*(i_mb_y * h->mb.i_b4_stride + i_mb_x);

--得到4x4MB位置,其中h->mb.i_b4_stride为原始数据以4x4MB为单位的宽度

int i_mb_8x8 = 2*(i_mb_y * h->mb.i_b8_stride + i_mb_x);

----得到8x8MB位置,其中h->mb.i_b8_stride为原始数据以8x8MB为单位的宽度

int i_top_y = i_mb_y - (1 << h->mb.b_interlaced);

--得到当前MB上一个MB的Y坐标

int i_top_xy = i_top_y * h->mb.i_mb_stride + i_mb_x;

--得到当前MB上面一个MB的位置

int i_top_4x4 = (4*i_top_y+3) * h->mb.i_b4_stride + 4*i_mb_x;

--得到当前4x4MB上面一个4x4MB的位置

int i_top_8x8 = (2*i_top_y+1) * h->mb.i_b8_stride + 2*i_mb_x;

--得到当前8x8MB上面一个8x8MB的位置

----------------------------装入周围宏块的参数---------------------------------

--装入TOP-MB的相关参数

h->mb.i_mb_type_top = i_top_type= h->mb.type[i_top_xy];

--得到TOP-MB的类型

h->mb.cache.i_cbp_top = h->mb.cbp[i_top_xy];

--得到TOP-MB的CBP

h->mb.i_neighbour |= MB_TOP;

--标注当前MB的TOP-MB可用

MEM4(&h->mb.cache.intra4x4_pred_mode[x264_scan8[0] - 8]) = MEM4(&h->mb.intra4x4_pred_mode[i_top_xy][0]);

--装入TOP-MB临近当前MB的4个4X4子块的预测模式

MEM4(&h->mb.cache.non_zero_count[x264_scan8[0] - 8]) = MEM4(&h->mb.non_zero_count[i_top_xy][12]);

--装入TOP-MB临近当前MB的nzc编码值

}

else

{--没有有效的TOP-MB,则相关参数设置为不可用

h->mb.i_mb_type_top = -1;

h->mb.cache.i_cbp_top = -1;

/* load intra4x4 */

h->mb.cache.intra4x4_pred_mode[x264_scan8[0] - 8] =

h->mb.cache.intra4x4_pred_mode[x264_scan8[1] - 8] =

h->mb.cache.intra4x4_pred_mode[x264_scan8[4] - 8] =

h->mb.cache.intra4x4_pred_mode[x264_scan8[5] - 8] = -1;

/* load non_zero_count */

h->mb.cache.non_zero_count[x264_scan8[0] - 8] =

h->mb.cache.non_zero_count[x264_scan8[1] - 8] =

h->mb.cache.non_zero_count[x264_scan8[4] - 8] =

h->mb.cache.non_zero_count[x264_scan8[5] - 8] =

h->mb.cache.non_zero_count[x264_scan8[16+0] - 8] =

h->mb.cache.non_zero_count[x264_scan8[16+1] - 8] =

h->mb.cache.non_zero_count[x264_scan8[16+4+0] - 8] =

h->mb.cache.non_zero_count[x264_scan8[16+4+1] - 8] = 0x80;

}

--装入LEFT-MB相关参数

--装入MB_TOPRIGHT相邻MB的信

--装入MB_TOPLEFT相邻MB的信

--------------------------装入编码图像块和参考图像数据----------------------------------

--搬移重建数据到参考数据位置,见《宏块的原始编码数据和重建数据的存储结构》中的说明

行方向的参考数据未搬移

--调用x264_macroblock_load_pic_pointers()函数

完成以下功能:

1    设置象素分量行宽度,指扩展之后的宽度

2   从h->fenc->plane[i][i_pix_offset]中将原始数据读到h->mb.pic.p_fenc[i]中

3、   将行参考数据搬移到h->mb.pic.p_fdec[i]数组中,在数组中的偏移量将《宏块的原始编码数据和重建数据的存储结构》中的说明

4、   从参考图像中得到对应于当前MB的参考宏块数据指针,存储到h->mb.pic.p_fref[0][j][k]中,其中0表示为前向参考图像,J表示是第几个参考图像,K表示为不同的象素分量,推测[0]->Y,[1/2/3]为滤波后的,[4]->cr,[5]->cb;

------------------------运动向量、参考图像装入---------

x264_macroblock_cache_load()相关推荐

  1. 学习笔记(一)(x264编码流程)

    学习笔记(一)(x264编码流程) 作者 张士辉 11月 2, 2007 <script type=text/javascript></script> <script s ...

  2. 基于DM642的X264开源代码实现的研究

    基于DM642的X264开源代码实现的研究 文章发表于:2008-09-08 11:24 作者:谭超 王库 傅颖 来源:微计算机信息 摘要:本文概述了H.264视频压缩编码标准的主要特性,简要介绍了当 ...

  3. x264 的 cache详解

    在这里和下一级别的分析中有必要先讲一下这个h->mb.cache(没法讲,就是cache!). x264_macroblock_cache_load将参考帧中某位置的(重建后)数据保存进cach ...

  4. x264里的2pass指的是什么意思? x264源代码分析2.encode()

    A:x264里的2pass指的是什么意思?另外stat是什么意思, 比如有个参数--stats <string>        Filename for 2 pass stats [/&q ...

  5. x264源代码简单分析:x264_slice_write()

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  6. x264代码阅读笔记——非常详细

    (一)common/set.h的注释 #ifndef _SET_H #define _SET_H 1 enum profile_e {     PROFILE_BASELINE = 66,     P ...

  7. x264源码分析与应用示例(一)——视频编码基本流程

    本文包含以下内容 1.H.264编码流程详述与对应x264源码解析 首先简单介绍一下x264源码调试与修改的基本方法.就是基本的conifigure和make,configure命令使用最简单的就可以 ...

  8. x264中重要结构体参数解释,参数设置,函数说明

    x264中重要结构体参数解释 http://www.usr.cc/thread-51995-1-3.html x264参数设置 http://www.usr.cc/thread-51996-1-3.h ...

  9. x264源代码简单分析:概述

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

最新文章

  1. Mdnice 简洁主题
  2. 在wamp 2.0环境下面安装Zend Optimizer的方法
  3. nohup 不生成日志_js页面触发chargeRequest事件和Nginx获取日志信息
  4. vscode 上刷leetcode算法题(含配置)
  5. E20170626-gg
  6. ubuntu 16.04 usb转串口
  7. 为啥用redis解决会话呢?
  8. centOS7忘记密码重置方法
  9. python yiled
  10. ELK 学习笔记之 elasticsearch Bulk操作
  11. Java开源博客系统汇总(持续更新)
  12. linux计划任务详解(附演示)
  13. 读书笔记:自动控制原理
  14. PLC调试这几步都不知道
  15. 音频处理——音频编码原理简介
  16. android 9 qq登录,天天练qq登录版
  17. java myeclipse下载_MyEclipse,myeclipse 8.5 下载,myeclipse官网下载_多特软件站
  18. 批量修改文件夹中文件的后缀名
  19. 拒绝面试造火箭,工作拧螺丝——Java经典面试题分享『带答案』
  20. 【php】php语法基础

热门文章

  1. 敏捷项目管理过程改进
  2. jquery mysql实现加入购物车_jQuery实现加入购物车飞入动画效果
  3. 【HRBUST - 1623】Relation(思维模拟,拆解字符串)
  4. 【POJ - 1698】Alice's Chance(网络流最大流,建图)
  5. 【2018山东省赛 - A】Anagram(贪心,费用流,KM算法)
  6. 【HDU - 1754】I Hate It (线段树模板 单点覆盖更新+区间最大值查询)
  7. html 按钮 按下 状态_第一次按下是启动,第二次按下是停止,俵哥分享2种接线方法...
  8. python 深copy_python中的深copy和浅copy
  9. Eclipse 中修改java编译版本
  10. python代码测试 vim_用 Hypothesis 快速测试你的 Python 代码