同样追本朔源上面那个load里面有一个mc的拷贝函数这里进行分析

x264_mc_init( h->param.cpu, &h->mc );

//函数声明以及要找的函数  mc_copy_w16是以宏定义方式来声明的

void x264_mc_init( int cpu, x264_mc_functions_t *pf )

pf->copy[PIXEL_16x16] = mc_copy_w16;

宏定义

#define MC_COPY(W) \

static void mc_copy_w##W( pixel *dst, intptr_t i_dst, pixel *src, intptr_t i_src, int i_height ) \

{ \

mc_copy( src, i_src, dst, i_dst, W, i_height ); \

}

MC_COPY( 16 )

展开  可以用函数名字中的字符作为函数体中参数,貌似就宏定义可以

Static void mc_copy_w16()

{

Mc_copy(src, i_src, dst, i_dst, W, i_height);

}

第一个是源地址,第二个是偏移步长,上一次函数名字中的字符是为了分配空间,高度是为了循环赋值,第一个参数是原本像素指针,然后加上第二个参数作为步长,来进行循环的赋值

Memcpy将 src赋值到dst  p_fenc是src stride是16  dst是p_fenc_plane,stride 1984

static void mc_copy( pixel *src, intptr_t i_src_stride, pixel *dst, intptr_t i_dst_stride, int i_width, int i_height )

{

for( int y = 0; y < i_height; y++ )

{

memcpy( dst, src, i_width * sizeof(pixel) );

src += i_src_stride;

dst += i_dst_stride;

}

}

h->mc.copy[PIXEL_16x16]( h->mb.pic.p_fenc[i], FENC_STRIDE, h->mb.pic.p_fenc_plane[i], i_stride2, 16 );

回到这个最开始的调用函数,这里有点不明白,的步长竟然不一样,以前一直以为一样的

FENC_STRIDE 16  FDEC_STRIDE 32

接上面一个分析,将刚才fenc_plane中偏移好的地址复制到p_fenc中。这是初始地址,然后宏块高度是16,可以想到就是将方形宏块变成了线性宏块,一次复制了16个像素。

至此编码部分指针偏移完全结束

转载于:https://www.cnblogs.com/hatreds/archive/2012/05/09/2491582.html

5_9 ___2 mc函数相关推荐

  1. Linux mc命令

    Linux mc命令用于提供一个菜单式的文件管理程序. 执行mc之后,将会看到菜单式的文件管理程序,共分成4个部分. 语法 mc [-abcdfhkPstuUVx][-C <参数>][-l ...

  2. 瑞数(裁判文书)js的加密分析

    抓了半年多的裁判文书突然停了,查看log发现HTTP响应码全是202,分析页面发现原网站在cookie上做了加密.经分析正确的请求流程如下 1. 请求首页,返回两个set-cookie响应头,cook ...

  3. angularJS1.6.3个人理解(后续更新4.4.7)

    AngularJS AngularJS基础 AngularJS简介 AngularJS是一个用于构建单页面应用的前端JS框架,在前端践行了MVC设计模式. AngularJS是一个前端JS框架,或者叫 ...

  4. Clojure 学习入门(8)- 连接mongodb

    clojure 连接 mongodb示例 project.clj 文件添加monger依赖: [com.novemberain/monger "1.5.0"] [css] view ...

  5. Clojure 学习入门(8)—— 连接mongodb

    clojure 连接 mongodb示例 project.clj 文件添加monger依赖: [com.novemberain/monger "1.5.0"] (defprojec ...

  6. linux中将文本中的单词换掉的指令_干货:Linux常用命令全称及讲解

    从事IT行业的很多人都会使用Linux常用命令,但是知道这些常用命令全称的人并不多,让我们来看看这些常用命令对应的全称吧!小编精心整理了一下,毕竟常用命令比较多,如果没有你常用的还望海涵,可以评论区补 ...

  7. Linux命令大全总结(看这一篇就够了)

    Linux命令大全总结 1.操作系统基础知识 1.1.操作系统     在了解linux命令之前,我们先了解一点基本概念. 1.1.1.概念 操作系统(operating system 简称OS)是一 ...

  8. LTspice基础教程-025.电路容差分析,蒙特卡罗分析(Monte Carlo)

      容差分析技术是一种预测电路性能参数稳定性的方法.它主要研究电路组成部分参数偏差,在规定的使用条件范围内,对电路性能容差的影响. 电路容差分析包括如下几种方法: 最坏情况实验法 最坏情况分析法(包括 ...

  9. Linux文件管理命令大全

    1.cat命令 cat 命令用于连接文件并打印到标准输出设备上. 使用权限 所有使用者 语法格式 cat [-AbeEnstTuv] [--help] [--version] fileName 参数说 ...

最新文章

  1. 诺基亚:IMPACT智能管理平台已安全管理超过15亿部物联网设备
  2. 最新:2022校友会中国大学排名发布!
  3. 基于消息的分布式架构设计
  4. boost::coroutine模块实现对称协程的测试程序
  5. C语言宏与单井号(#)和双井号(##)
  6. 用DDA Convolution和Perlin Noise来模拟水粉画笔触
  7. matlab仿真习题,(MATlab仿真部分习题答案.doc
  8. Java加密与解密的艺术~DES实现
  9. 本地远程连接阿里云Windows服务器并上传文件的方法
  10. 循环计数_倒计数器:CountDownLatch | 循环栅栏:CyclicBarrier
  11. python基础篇——列表与列表算法(上)
  12. user32.dll 函数说明
  13. java快捷键和快捷指令(基于scode)
  14. 《正念领导力》承诺14:创造共赢
  15. ESP32内部ADC最大采样率真的能达到2MSPS吗?答案是不能。
  16. 【Photoshop实用教程】如何用魔术棒工具替换背景?
  17. 一文了解如何使用移动应用安全组件Soot和Flowdroid
  18. 证据理论(3)—— 计算两个证据体的距离
  19. 基于Python Flask框架+jquery Ajax技术实现的增删改查(CRUD)+Ajax的异步文件上传
  20. html简单垂直时间轴,简单的响应式垂直时间轴效果

热门文章

  1. C语言能实现汇编语言的大部分功能,C语言并不能实现汇编语言的大部分功能
  2. UG模具全3D设计,模具结构零件的命名规则,让工作更清晰明了
  3. 泛播云服务器,什么是泛播技术?
  4. DM8168_DVR_RDK 环境配置
  5. 【C语言】判断1999-2599年中的每一年是否是闰年并将结果输出
  6. 三层交换技术的理论与实现
  7. activiti审批历史查询
  8. react 实现banner轮播效果
  9. 电磁兼容试验项目之辐射发射(三)
  10. 中控屏成智能家居新宠?