5_9 ___2 mc函数
同样追本朔源上面那个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函数相关推荐
- Linux mc命令
Linux mc命令用于提供一个菜单式的文件管理程序. 执行mc之后,将会看到菜单式的文件管理程序,共分成4个部分. 语法 mc [-abcdfhkPstuUVx][-C <参数>][-l ...
- 瑞数(裁判文书)js的加密分析
抓了半年多的裁判文书突然停了,查看log发现HTTP响应码全是202,分析页面发现原网站在cookie上做了加密.经分析正确的请求流程如下 1. 请求首页,返回两个set-cookie响应头,cook ...
- angularJS1.6.3个人理解(后续更新4.4.7)
AngularJS AngularJS基础 AngularJS简介 AngularJS是一个用于构建单页面应用的前端JS框架,在前端践行了MVC设计模式. AngularJS是一个前端JS框架,或者叫 ...
- Clojure 学习入门(8)- 连接mongodb
clojure 连接 mongodb示例 project.clj 文件添加monger依赖: [com.novemberain/monger "1.5.0"] [css] view ...
- Clojure 学习入门(8)—— 连接mongodb
clojure 连接 mongodb示例 project.clj 文件添加monger依赖: [com.novemberain/monger "1.5.0"] (defprojec ...
- linux中将文本中的单词换掉的指令_干货:Linux常用命令全称及讲解
从事IT行业的很多人都会使用Linux常用命令,但是知道这些常用命令全称的人并不多,让我们来看看这些常用命令对应的全称吧!小编精心整理了一下,毕竟常用命令比较多,如果没有你常用的还望海涵,可以评论区补 ...
- Linux命令大全总结(看这一篇就够了)
Linux命令大全总结 1.操作系统基础知识 1.1.操作系统 在了解linux命令之前,我们先了解一点基本概念. 1.1.1.概念 操作系统(operating system 简称OS)是一 ...
- LTspice基础教程-025.电路容差分析,蒙特卡罗分析(Monte Carlo)
容差分析技术是一种预测电路性能参数稳定性的方法.它主要研究电路组成部分参数偏差,在规定的使用条件范围内,对电路性能容差的影响. 电路容差分析包括如下几种方法: 最坏情况实验法 最坏情况分析法(包括 ...
- Linux文件管理命令大全
1.cat命令 cat 命令用于连接文件并打印到标准输出设备上. 使用权限 所有使用者 语法格式 cat [-AbeEnstTuv] [--help] [--version] fileName 参数说 ...
最新文章
- 诺基亚:IMPACT智能管理平台已安全管理超过15亿部物联网设备
- 最新:2022校友会中国大学排名发布!
- 基于消息的分布式架构设计
- boost::coroutine模块实现对称协程的测试程序
- C语言宏与单井号(#)和双井号(##)
- 用DDA Convolution和Perlin Noise来模拟水粉画笔触
- matlab仿真习题,(MATlab仿真部分习题答案.doc
- Java加密与解密的艺术~DES实现
- 本地远程连接阿里云Windows服务器并上传文件的方法
- 循环计数_倒计数器:CountDownLatch | 循环栅栏:CyclicBarrier
- python基础篇——列表与列表算法(上)
- user32.dll 函数说明
- java快捷键和快捷指令(基于scode)
- 《正念领导力》承诺14:创造共赢
- ESP32内部ADC最大采样率真的能达到2MSPS吗?答案是不能。
- 【Photoshop实用教程】如何用魔术棒工具替换背景?
- 一文了解如何使用移动应用安全组件Soot和Flowdroid
- 证据理论(3)—— 计算两个证据体的距离
- 基于Python Flask框架+jquery Ajax技术实现的增删改查(CRUD)+Ajax的异步文件上传
- html简单垂直时间轴,简单的响应式垂直时间轴效果