JSVM9_15_Encoder函数结构
- 格式:xls
- 大小:93.50 KB
- 文档页数:65
泛微oa e9前端开发常用函数及方法泛微OA E9是一款常用的企业办公系统,前端开发在使用过程中会经常使用一些函数和方法来完成各种任务。
下面将介绍一些常用的函数和方法,并且给出一些实际的使用示例,希望能对初学者提供一些指导。
1. getElementById:根据元素的id获取对应的DOM对象。
示例代码:```javascriptvar element = document.getElementById("elementId");```2. querySelector:根据选择器选择对应的DOM对象。
示例代码:```javascriptvar element = document.querySelector("#elementId");```3. addEventListener:给DOM对象注册事件监听器。
示例代码:```javascriptelement.addEventListener("click", function(){// 操作});```4. fetch:用于发送网络请求并获取响应。
示例代码:```javascriptfetch(url).then(function(response) {return response.text();}).then(function(data) {console.log(data);});```5. JSON.parse:将JSON字符串解析为JavaScript对象。
示例代码:```javascriptvar jsonStr = '{"name":"John", "age":30, "city":"New York"}';var obj = JSON.parse(jsonStr);```6. JSON.stringify:将JavaScript对象转换为JSON字符串。
vysor原理以及Android同屏⽅案vysor是⼀个免root实现电脑控制⼿机的chrome插件,⽬前也有⼏款类似的通过电脑控制⼿机的软件,不过都需要root权限,并且流畅度并不⾼。
vysor没有多余的功能,流畅度也很⾼,刚接触到这款插件时我惊讶于它的流畅度以及免root,就⼀直对它的实现原理很感兴趣。
这款插件我⽤了⼤半年,最近在升级后我发现它居然开始收费了,终⽣版需要39.99美元,不过经过简单的分析后我很轻松的破解了它的pro版,在分析的过程中发现它的原理并不复杂,所以就打算⾃⼰也实现⼀个类似的软件。
截屏常见的⽅案在介绍vysor的原理前我先简单介绍⼀下⽬前公开的截屏⽅案。
View.getDrawingCache()这是最常见的应⽤内截屏⽅法,这个函数的原理就是通过view的Cache来获取⼀个bitmap对象,然后保存成图⽚⽂件,这种截屏⽅式⾮常的简单,但是局限⾏也很明显,⾸先它只能截取应⽤内部的界⾯,甚⾄连状态栏都不能截取到。
其次是对某些view的兼容性也不好,⽐如webview内的内容也⽆法截取。
读取/dev/graphics/fb0因为Android是基于linux内核,所以我们也能在android中找到framebuffer这个设备,我们可以通过读取/dev/graphics/fb0这个帧缓存⽂件中的数据来获取屏幕上的内容,但是这个⽂件是system权限的,所以只有通过root才能读取到其中的内容,并且直接通过framebuffer读取出来的画⾯还需要转换成rgb才能正常显⽰。
下⾯是通过adb读取这个⽂件内容的效果。
反射调⽤SurfaceControl.screenshot()/Surface.screenshot()SurfaceControl.screenshot()(低版本是Surface.screenshot())是系统内部提供的截屏函数,但是这个函数是@hide的,所以⽆法直接调⽤,需要反射调⽤。
2020年12月10日第4卷第23期现代信息科技Modern Information TechnologyDec.2020 Vol.4 No.231532020.12收稿日期:2020-11-15基于LSTM-AutoEncoder的水平越权漏洞检测李帅华,孙庆贺,赵明宇(国网电动汽车服务有限公司,北京 100053)摘 要:针对水平越权检测过程中,因无法识别越权场景页面带来的检测误报问题,提出了一种基于深度学习的LSTM-AutoEncoder 无监督预测模型。
该模型利用长短时记忆网络构建自动编码器,提取水平越权场景页面响应数据的文本特征并将其重建还原,统计还原结果与原始页面响应的误差,并根据未知页面的误差阈值判断水平越权的检测结果是否为误报。
通过与One-Class SVM 和AutoEncoder 两种算法的比较,在真实业务数据下进行模型效果测试其有效性,为企业网络业务安全提供了保障。
关键词:LSTM-AutoEncoder 模型;水平越权;深度学习;网络安全;漏洞检测中图分类号:TP393.08文献标识码:A文章编号:2096-4706(2020)23-0153-07Horizontal Privilege Escalation Vulnerability Detection Based onLSTM-AutoEncoderLI Shuaihua ,SUN Qinghe ,ZHAO Mingyu(State Grid Electric Vehicle Service Co.,Ltd.,Beijing 100053,China )Abstract :Aiming at the problem of detecting false positives caused by one ’s inability to identify the page of the unauthorizedscene in the horizon privilege escalation detection process ,an unsupervised prediction model of LSTM-AutoEncoder based on deeplearning is proposed. This model uses LSTM (Long Short-Term Memory )to construct an autoencoder ,which extracts the response data ’s text features of the horizontal privilege escalation scene page and reconstructs it. Then calculates the error between the restored result and the original page response ,and judges whether the horizontal privilege escalation detection result is a false positive based on the error threshold of the unknown page. By comparing the two algorithms of One-Class SVM and AutoEncoder ,the effectiveness of the model is tested under real business data ,which provides a guarantee for the security of corporate network services.Keywords :LSTM-AutoEncoder model ;horizontal privilege escalation ;deep learning ;cyber security ;vulnerability detection0 引 言越权漏洞属于业务逻辑漏洞中的一种,在目前的Web 应用中十分常见。
$vm js写法JavaScript是一种脚本语言,最初是为了给网页添加动态交互效果而设计的。
它是一种高级、解释型的语言,可以直接嵌入到HTML中,也可以作为独立的脚本文件使用。
JavaScript的语法比较简单,但是它具有非常强大的功能。
下面是一些常见的JavaScript写法和最佳实践。
1.使用严格模式(use strict)严格模式可以帮助我们避免一些常见的错误,并且使代码更加规范。
在JavaScript的代码开头添加"use strict"即可开启严格模式。
2.使用块级作用域在ES6之前,JavaScript只有函数作用域,没有块级作用域。
使用let和const关键字可以创建块级作用域,避免变量污染和意外的变量覆盖。
3.使用箭头函数箭头函数是ES6引入的一种新的函数写法,它可以简化函数的定义并且自动绑定this指向。
4.使用模板字符串模板字符串是一种更加灵活和简洁的字符串拼接方式,可以在字符串中插入变量和表达式,使用反引号(`)来定义。
5.使用解构赋值解构赋值是一种快速获取和赋值对象或数组的方式,可以减少代码的冗余和提高可读性。
6.使用Promise和async/await处理异步操作JavaScript是一种单线程语言,但是通过Promise和async/await 可以更好地处理异步操作,避免回调地狱和提高代码的可读性。
7.使用模块化模块化是一种将代码分割成可重用的模块的方式,可以减少代码的复杂度和提高代码的可维护性。
在ES6之后,JavaScript原生支持了模块化的写法,可以使用import和export关键字来导入和导出模块。
8.使用合理的命名和注释良好的命名和注释可以使代码更易于理解和维护。
命名应该具有描述性,注释应该清晰明了,解释代码的用途和逻辑。
9.使用缩进和代码格式化良好的缩进和代码格式化可以提高代码的可读性。
使用合适的缩进和换行,遵循一致的代码风格。
jsvmp动态混淆方案JSVMP(JavaScript Virtual Machine Protection)是一种用于保护JavaScript虚拟机的动态混淆方案。
它通过混淆和加密源代码,防止反向工程和代码破解。
以下是JSVMP动态混淆方案的详细介绍。
1.代码不可读性:JSVMP通过将源代码转换为控制流图(CFG)来混淆代码。
然后,它使用变异技术,如条件分裂和代码展开,将控制流图中的基本块转换为不可读的形式。
这使得反向工程师很难理解和重建原始代码的逻辑。
2.函数重命名:JSVMP采用函数重命名技术来混淆代码。
它将函数名称替换为随机生成的字符串,并使用引用重定向来确保代码的正确执行。
这种方式防止了通过查找和分析特定函数名称来理解代码的尝试。
3.字符串加密:JSVMP通过字符串加密来保护敏感信息。
它使用加密算法对字符串进行加密,并将其存储在加密的形式下。
在运行时,代码会根据需要解密字符串,以避免直接暴露敏感信息。
4.控制流混淆:JSVMP通过改变代码的控制流来混淆代码逻辑。
它使用条件分裂、循环展开、插入虚假代码等技术,使代码的控制流变得复杂和困惑。
这样做可以使反向工程师难以跟踪代码的执行路径和逻辑。
5.数据混淆:JSVMP通过数据混淆技术来保护敏感数据。
它使用加密算法对数据进行加密,并在运行时根据需要进行解密。
这样可以防止敏感数据在代码中的明文形式被泄露。
6.运行时检测:JSVMP在代码中插入运行时检测代码,以便在代码被篡改或非法使用时发出警报。
这可以帮助保护代码免受恶意攻击,并增加代码的安全性。
7.恶意代码检测:JSVMP使用静态和动态分析方法来检测和阻止恶意代码的执行。
它使用模式匹配和行为分析等技术来识别恶意代码,并在运行时阻止其执行,以保护系统免受恶意软件的侵害。
总之,JSVMP动态混淆方案采用了多种技术来保护JavaScript虚拟机。
它通过混淆和加密源代码、改变代码的控制流和保护敏感数据等方式来防止反向工程和代码破解。
jsvmp动态混淆方案JSVMP(JavaScript Virtual Machine Protection)是一种动态混淆方案,旨在保护JavaScript代码的安全性和保密性。
JSVMP通过对JavaScript代码进行混淆和加密,使其难以被逆向工程师和黑客理解和修改,从而提高JavaScript程序的安全性。
动态混淆是指在代码运行时对代码进行混淆处理,使代码在运行时动态地解密和执行。
与静态混淆不同,动态混淆方案在代码执行过程中会根据一定的规则和算法对代码进行解密和重组,使代码逻辑变得更加复杂和难以理解。
JSVMP的核心思想是将JavaScript代码分为多个函数模块,并对每个函数模块进行加密和混淆处理。
在代码运行时,JSVMP会根据一定的解密算法将加密的函数模块解密出来,并按照一定的规则进行动态重组和执行。
这样,即使黑客获取了加密后的代码,也很难理解其逻辑和进行修改。
JSVMP采用了多种加密和混淆技术,包括字符串加密、代码重组、变量重命名、函数内联等。
字符串加密是将JavaScript代码中的字符串进行加密处理,使其在运行时动态解密。
代码重组是将JavaScript代码中的函数模块进行重组,使其执行顺序变得随机和混乱,增加了代码的复杂性。
变量重命名是将JavaScript代码中的变量名进行随机化处理,使其难以被理解和修改。
函数内联是将小函数内联到调用处,减少函数调用的开销和代码的可读性。
JSVMP的优点是能够有效地保护JavaScript代码的安全性和保密性。
通过动态混淆和加密,JSVMP使JavaScript代码在运行时变得复杂和难以理解,从而增加了逆向工程的难度。
同时,JSVMP还提供了多种配置选项,可以根据实际需求对代码进行定制化的混淆和加密处理。
然而,JSVMP也存在一些局限性。
首先,由于动态混淆需要在代码运行时进行解密和重组,会增加代码的执行时间和资源消耗。
其次,由于动态混淆是一种运行时的处理方式,无法完全避免代码被逆向工程师进行动态调试和分析。
js中escape的⽤法----前端页⾯简单加密escape() ⽅法,它⽤于转义不能⽤明⽂正确发送的任何字符。
⽐如,电话号码中的空格将被转换成字符 %20,从⽽能够在 URL 中传递这些字符。
alert(s);js对⽂字进⾏编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent1、传递参数时需要使⽤encodeURIComponent,这样组合的url才不会被#等特殊字符截断。
2、进⾏url跳转时可以整体使⽤encodeURI3、 js使⽤数据时可以使⽤escape例如:搜藏中history纪录。
4、 escape对0-255以外的unicode值进⾏编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。
最多使⽤的应为encodeURIComponent,它是将中⽂、韩⽂等特殊字符转换成utf-8格式的url编码,所以如果给后台传递参数需要使⽤encodeURIComponent时需要后台解码对utf-8⽀持(form中的编码⽅式和当前页⾯编码⽅式相同)escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-ZencodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-ZencodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Zescape(str) ⽅法,它⽤于转义不能⽤明⽂正确发送的任何字符。
⽐如,电话号码中的空格将被转换成字符 %20,从⽽能够在 URL 中传递这些字符如果需要发送安全信息或 XML,可能要考虑使⽤ send() 发送内容(本系列的后续⽂章中将讨论安全数据和 XML 消息)。
encoder-decoder结构
Encoder-Decoder结构是一种深度学习架构,用于机器学习中的自然语言处理(NLP)。
它利用一个独特的架构,将不同语义层次编码并解码到另一种语言。
Encoder-Decoder结构由两个主要组件组成:编码器和解码器。
编码器是一个神经网络,用来将一段句子或文本从一种语言编码为一系列向量,这些向量代表了句子中的语义层次。
解码器再次使用神经网络,将这些向量解码成另一种语言的句子。
由于句子的不同抽象层次,语义中的模糊之处也会在向量中反映出来,因此,解码器被授予灵活性,以便根据上下文和其他信息来选择最佳的输出结果。
Encoder-Decoder结构的优势之一在于,它可以很好地处理嵌入式或注意力数据,而不需要手动提供特征或进行特征工程。
它也可以有效地处理不定长序列问题,如自动文摘生成、对话系统和机器翻译。
Encoder-Decoder结构也可以扩展到多个任务中,如,使用混合模型包括编码器在计算图像描述、情感分类和词性标注等任务时,可能会取得更好的结果。
总的来说,Encoder-Decoder 结构是一种非常有效的深度学习架构,可以有效地处理NLP问题,并且它还可以扩展到多个任务中。
JSJSPJava中URL参数的转义
1、
URLEncoder.encode
URLDecoder.decode
2、
2.1、encodeURIComponent :
返回值
URIstring 的副本,其中的某些字符将被⼗六进制的转义序列进⾏替换。
说明
该⽅法不会对 ASCII 字母和数字进⾏编码,也不会对这些 ASCII 标点符号进⾏编码: - _ . ! ~ * ' ( ) 。
其他字符(⽐如:;/?:@&=+$,# 这些⽤于分隔 URI 组件的标点符号),都是由⼀个或多个⼗六进制的转义序列替换的。
提⽰和注释
提⽰:请注意 encodeURIComponent() 函数与 encodeURI() 函数的区别之处,前者假定它的参数是 URI 的⼀部分(⽐如协议、主机名、路径或查询字符串)。
因此 encodeURIComponent() 函数将转义⽤于分隔 URI 各个部分的标点符号。
2.2、encodeURI :
返回值
URIstring 的副本,其中的某些字符将被⼗六进制的转义序列进⾏替换。
说明
该⽅法不会对 ASCII 字母和数字进⾏编码,也不会对这些 ASCII 标点符号进⾏编码: - _ . ! ~ * ' ( ) 。
该⽅法的⽬的是对 URI 进⾏完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进⾏转义的:;/?:@&=+$,#
提⽰和注释
提⽰:如果 URI 组件中含有分隔符,⽐如 ? 和 #,则应当使⽤ encodeURIComponent() ⽅法分别对各组件进⾏编码。
3、。
在深度学习领域中,encoder-decoder结构是一种常见的神经网络架构,它在进行序列到序列的学习和生成任务上具有很好的效果。
在本文中,我们将深入探讨encoder-decoder结构的原理、应用和优点,以便更全面地理解这一重要的神经网络架构。
1. 原理在encoder-decoder结构中,encoder和decoder是两个独立的神经网络模块,它们分别负责将输入序列编码成一个固定长度的向量表示,以及将这个向量表示解码为输出序列。
通常,encoder使用循环神经网络(RNN)或者长短时记忆网络(LSTM)来处理输入序列,而decoder也使用相似的结构来生成输出序列。
这种结构可以很好地处理不定长的输入输出序列,例如机器翻译和对话系统等任务。
2. 应用encoder-decoder结构在机器翻译、问答系统、语音识别和图像描述等任务中都得到了广泛的应用。
在机器翻译中,encoder负责将源语言句子编码成一个语义表示,而decoder则将这个表示解码为目标语言句子。
类似地,在问答系统中,encoder将问题编码成一个向量表示,decoder将这个向量表示解码为答案。
这种结构简洁高效,能够很好地捕捉序列数据的信息。
3. 优点相比传统的n-gram语言模型和统计机器翻译等方法,encoder-decoder结构具有很多优点。
它可以端到端地进行端到端的训练和端到端的生成,避免了传统方法中的串行处理和人工特征设计。
通过使用深度学习模型,encoder-decoder结构能够学习到更复杂的语言和语义表示,具有更好的泛化能力。
另外,由于encoder和decoder是独立的模块,因此可以方便地对它们进行优化和改进,使得整个网络更加灵活和高效。
总结与展望encoder-decoder结构是一种非常有用的深度学习架构,它在序列到序列的学习和生成任务中具有很好的效果。
通过将输入序列编码成一个固定长度的向量表示,再将这个表示解码为输出序列,encoder-decoder结构能够很好地处理序列数据。
main( int argc, char** argv)H264AVCEncoderTest::create( pcH264AVCEncoderTest )pcH264AVCEncoderTest->init( argc, argv )pcH264AVCEncoderTest->go()===== initialization =====编码参数初始化===== write parameter sets =====写序列参数集,在没有写SPS和===== determine parameters for required frame buffers =====for( uiLayer = 0; uiLayer < uiNumLayers; uiLayer++ ){}===== loop over frames =====for( uiFrame = 0; uiFrame < uiMaxFrame; uiFrame++ )===== get picture buffers and read original picturfor( uiLayer = 0; uiLayer < uiNumLayers; uiLayer++===== call encoder =====//每两个图像调用一次,但是m_pcH264AVCEncoder->process( cOutExtBinDataAccessoapcOriginalPicBuffer,apcReconstructPicBuffacPicBufferOutputListacPicBufferUnusedList//分AVC和SVC两种模式//SVC模式下有:m_pcH264AVCEncoder->process( rcExapcOapcRapcPapcP===== fill lists =====uiHighestLayer = m_pcCfor( UInt uiLayer = 0;{}===== encoding of GOif ( m_acOr{主要编码函数---->> RNOK( x}===== update data accessor listm_cAccessUnitDataList.到此m_pcH264AVCEncoder->process结束===== write and release NAL unit buffers =====xWrite ( acPicBufferOutputList[uiLayer], uiLayerxRelease( acPicBufferUnusedList[uiLayer], uiLayer===== write and release reconstructed pictures ===循环完uiMaxFrame后往下跳===== finish encoding =====//===== encode GOP =====xProcessGOP( apcPicBuff//===== update data accessor list =====//===== finish encoding =====m_apcLayerEncoder[uiLayer-1]-===== write and release NAL unit buffers ========== write and release reconstructed pictures ========== set parameters and output summary =====//到此go()函数结束以下为第38行的函数另起一行H264AVCEncoder::xProcessGOP( apcPicBufferOutputList, apcPicBufferUnusedLis===== init GOP =====//分层设置LayerCGSSNR,QualityLevelCGSSNR,BaseLayerCGSSNR,for( uiLayer = 0; uiLayer < m_pcCodingParameter->getNumberOfLayers(); uiLayer++ )===== loop over access units in GOP, and layers inside access units =====分图像,分层处for( uiAUIndex = 0; uiAUIndex <= 64; uiAUIndex++ ){for( uiLayer = 0; uiLayer < m_pcCodingParameter->getNu{LayerEncoder::m_apcLayerEncoder[uiLayer]->process(m_cAccessUnm_acOrgPicBm_acRecPicBapcPicBuffem_pcParamet到此for( uiAUIndex = 0; uiAUIndex <= 64; uiAUIndex++ )结束xCalMaxBitrate(uiLayer)//1140行===== update pic buffer lists =====分层更新图像缓存//1145行----- set output list ---------- update unused list ---------- reset lists -----到此xProcessGOP函数结束以下为第147行的函数另起一行m_pcSliceEncoder->encodeIntraPicture ( uiBits,rcControlData,pcFrame,pcResidual,pcBaseLayerFrame,pcPredSignal,m_uiFrameWidthInMb,rcControlData.getLambda(),ePicType )====== initialization ============ initialization =========== loop over macroblocks =====pcMbDataCtrl ->initMb ( pcMbDataAccess, uiMbY, uiMbX )----- get co-located MbIndex -----m_pcMbEncoder ->encodeIntra ( *pcMbDataAccess,pcMbDataAccessBase,pcFrame ->getPic( ePicType )pcFrame ->getPic( ePicType )pcRecSubband ->getPic( ePicTdLambda,dCost)===== INTRA_BL ========== spatial intra modes ========== check normal intra modes (if base layer or axEstimateMbIntra16( m_pcIntMbTempData, m_pcIntMbBe----- init intra prediction -----// Make sure the uiPredMode is equal to tm_pcIntraPrediction->predictSLumaMb( rpcMm_pcTransform->transformMb16x16( m_pcIntOxForTransform4x4Blk( pucOrg + iOxForTransformLumaDc( aiCoeff )xQuantDequantNonUniformLuma( &piinvTransformDcCoeff( aiCoeff, iQxInvTransform4x4Blk( pucRec + iOMbCoder::xScanLumaIntra16x16( *rpcMbTempDxEstimateMbIntra8 ( m_pcIntMbTempData, m_pcIntMbBe----- init intra prediction -----xEncode8x8IntraBlock( *rpcMbTempData, c8xm_pcIntraPrediction-m_pcTransform->transform8x8Blk(xForTransform8x8BlkxQuantDequantUniform8x8invTransform8x8Blkm_pcIntraPrediction->predictSLumm_pcTransform->transform8x8Blk(xForTransform8x8BlkxQuantDequantUniform8x8invTransform8x8BlkxEncodeChromaIntra( *rpcMbTempData, uiExt----- store estimated parameters -----RNOK( xEstimateMbIntra4 ( rcMbDataAccess, m_pcIntMxEncode4x4IntraBlock( *rpcMbTempData, cIdm_pcIntraPrediction->predictSLumm_pcTransform->transform4x4Blk(xForTransform4x4Blk( pOxQuantDequantUniform4x4xInvTransform4x4Blk( pRMbCoder::xScanLumaBlock( rcMbTemm_pcMbSymbolWriteIf->rexEncodeChromaIntra( *rpcMbTempData, uiExt--- store estimated parameters ---xEstimateMbPCM ( m_pcIntMbTempData, m_pcIntMbBexStoreEstimation( rcMbDataAccess, *m_pcIntMbBestDa m_pcMbCoder ->encode ( *pcMbDataAccess,pcMbDataAccessBase ( uiMbAddress == uiLastMbAddress ), true )===== skip flag ========== base layer mode flag and base layer refineme===== macroblock mode =====m_pcMbSymbolWriteIf->mbMode( rcMbDataAccess )--- reset motion pred flags ---===== prediction info =====m_pcMbSymbolWriteIf->transformSize8x8Flag( rcMbDatm_pcMbSymbolWriteIf->intraPredModeLuma( rcMbDataAc===== TEXTURE =====xWriteTextureInfo( rcMbDataAccess,pcMbDataAccessBase,rcMbDataAccess.getMbTCoeffs(),bTrafo8x8Flag,rcMbDataAccess.getSH().getSPS()rcMbDataAccess.getSH().getSPS()uiMGSFragment )xScanLumaBlock( rcMbDataAccess, rcMbTCoefxScanChromaBlocks( rcMbDataAccess, rcMbTC--- write terminating bit ---m_pcMbSymbolWriteIf->terminatingBit ( bTerminateSluiMbAddress = rcSliceHeader.getFMO()->getNextMBNr(uiMbAddre //===== encode non-key pictures =====编码非关键帧,都是一次xMotionEstimationFrame( iLevel, uiFrame, ePicType )//===== get reference frame lists =====得到参考帧列表xGetPredictionLists ( rcRefFrameList0, rcRefFrameList1,//===== list 0 =====----- create half-pel buffer -----xFillAndUpsampleFrame ( pcFrame, FRAME, bFrameMbsOpcFrame->initHalfPel( pHPData )pcFrame->extendFrame( m_pcQuarterPelFiltegetFullPelYuvBuffer()->fillMargixFillPlaneMargin( getMbxFillPlaneMargin( getMbxFillPlaneMargin( getMbpcQuarterPelFilter->filterFrame(===== list 1 =====//===== set lambda and QP =====初始化拉格朗日优化参数和QPxInitControlDataMotion ( uiBaseLevel, uiFrame, true, ePicTm_pcSliceEncoder->xSetPredWeights( *pcSliceHeader,pcFrame,rcRefFrameList0,//===== motion estimation =====是否为宏块自适应帧场xMotionEstimation ( &rcRefFrameList0,&rcRefFrameList1,pcFrame,pcIntraRecFrame,rcControlData,m_bBiPredOnly,m_uiNumMaxIter,m_uiIterSearchRange,uiFrameIdInGOP ,ePicType )//===== copy motion if non-adaptive prediction ===//===== loop over macroblocks =====//===== init macroblock =====得到宏块pcMbEncoder->estimatePrediction ( *pcMbDataAccess, pcMbDataAccessB *pcRefFrameList0 *pcRefFrameList1 pcBaseLayerFram pcBaseLayerResi *pcOrigFrame *pcIntraRecFrame bBiPredOnly,uiNumMaxIter, uiIterSearchRan m_bBLSkipEnable rcControlData.g dCost,true )//===== P_SKIP ====跳帧//===== inter modes with residual predict//===== intra base layer mode =====基层层//===== inter modes without residual predxEstimateMbDirect ( m_pcIntMbTempData,//===== H.264/AVC compatible dirrcMbDataAccess.getMvPredictorDirxSpatialDirectMode ( ePxSetRdCostInterMb ( *rpcMbTemp//===== set forward / b//===== get predictionm_pcMotionEstimation->cxGetBgetTaxPredxPred//===== encode residual//--- LUMA ---xEncode4x4InterBlock( r//--- CHROMA ---xEncodeChromaTexture( rxCheckSkipSliceMb( rcMb//===== get distortion//===== get rate =====速MbCoder::m_pcMbSymbolWrMbCoder::m_pcMbSymbolWrMbCoder::m_pcMbSymbolWrMbCoder::xWriteMotionPrMbCoder::xWriteReferencMbCoder::xWriteMotionVe//===== set rd-cost ===m_pcRateDistortionIf->g xCheckBestEstimation( rpcMbTemp//----- switch data obj xCheckInterMbMode8x8( rpcMbTempxSetRdCost8x8InterMb( *xCheckBestE//----- switch data objxEstimateMbDirect ( m_pcIntMbTempData,在下面会有解释xEstimateMb16x16 ( m_pcIntMbTempData,在下面会有解释xEstimateMb16x8 ( m_pcIntMbTempData,在下面会有解释xEstimateMb8x16 ( m_pcIntMbTempData,在下面会有解释xEstimateMb8x8 ( m_pcIntMbTempData,在下面会有解释xEstimateMb8x8Frext ( m_pcIntMbTempData,//===== normal intra mode =====xEstimateMbIntra16 ( m_pcIntMbTempData,xEstimateMbIntra8 ( m_pcIntMbTempData,xEstimateMbIntra4 ( rcMbDataAccess, m_pxEstimateMbIntra4 ( rcMbDataAccess, m_pxStoreEstimation( rcMbDataAccess, *m_pcIn//===== reset parameters: IMPORT xDecompositionFrame ( iLevel, uiFrame,ePicType )在下面会有解释xEncodeNonKeyPicture ( iLevel, uiFrame, rcAccessUnitData, cPicOutputDataList, ePi xCompositionFrame ( iLevel, uiFrame, rcPicBufferInputList, ePi xCalculateAndAddPSNR ( iLevel, uiFrame, rcPicBufferInputList, cPicOutputDataList ) xCalculateTiming(cPicOutputDataList, uiFrame )xOutputPicData ( cPicOutputDataList ) xClearBufferExtensions()以下为第434行的函数另起一行xEstimateMb16x16 ( m_pcIntMbTempData, m_pcIntMbBestData, rcRefFrameList//===== LIST 0 PREDICTION ======rpcMbTempData->getMbDataAccess().getMvPredictor ( cMvPredxGetMvPredictor( rcMv, scRef, eListIdx, MEDIAN, B4m_pcMotionEstimation->estimateBlockWithStart( *rpcMbTempDatcMvLastEst[0]cMvPred [0]uiBitsTest, uPART_16x16, M&rpcMbTempDat//----- weighting -----//===== FULL-PEL ESTIMATION ======xTZSearch( pcRefPelData[0], cMv, uiMinSAD )// limit search range// set rcMv as start point anxTZSearchHelp( cStrukt, rcMv.getHor(), rc// test whether zerovektor is a better stxTZSearchHelp( cStrukt, 0, 0, 0, 0 )// start search// fist searchxTZ8PointDiamondSearch( cStrukt, cSearchR// test whether zerovektor is a better st// calculate only 2 missing points instea// raster search if distance is to big// raster refinement// star refinement// write out best match// test for errors in debug mode//===== SUB-PEL ESTIMATION =====xSubPelSearch( pcRefPelData[1], cMv, uiMinSAD, uiBxGetSizeFromMode ( uiXSize, uiYSize,xCompensateBlocksHalf ( m_aXHPelSearch, p//--- get best h-pel search posi//compute SAD for initial 1/2 pem_pcQuarterPelFilter->filterBloc//1/4 pel refinement around init //===== LIST 1 PREDICTION =====m_pcMotionEstimation->compensateBlock ( &cYuvMPART_xGetSizeFromMode( uiXSize, uiYSize, uiMod //===== BI PREDICTION =====//----- initialize with forward and backward estim//----- iterative search -----m_pcMotionEstimation->estimateBlockWithStart( *rpccMvcMvuiBPARuiI//----- standard weighting -----m_pcSampleWeighting->inverseLumaSamples//===== FULL-PEL ESTIMATION ======xPelBlockSearch ( pcRefPelData[0], cM//===== SUB-PEL ESTIMATION =====xSubPelSearch( pcRefPelData[1], cMv, uiMxGetSizeFromMode ( uiXSize,xCompensateBlocksHalf ( m_aXHPel//--- get best h-pel se//compute S//1/4 pel refinement arm_pcMotionEstimation->compensateBlock ( &cYuvMPART_1//===== chose parameters =====//----- list 1 prediction -----xSetRdCostInterMb ( *rpcMbTempData, pcMbDataAccessBase, rfalse, 0, false, 0, bLowComplexMbEnaxCheckBestEstimation( rpcMbTempData, rpcMbBestData )xCheckInterMbMode8x8( rpcMbTempData, rpcMbBestData, pcMbRe 以下为第435行的函数另起一行xEstimateMb16x8 ( m_pcIntMbTempData, m_pcIntMbBestData, rcRefFrameList//===== LIST 0 PREDICTION ======m_pcMotionEstimation->estimateBlockWithStart( *rpcMbTempDacMvLastEst[0cMvPred [0uiBitsTest,eParIdx, MOD&rpcMbTempDa//===== FULL-PEL ESTIMATION ====//===== SUB-PEL ESTIMATION =====//===== LIST 1 PREDICTION =====m_pcMotionEstimation->estimateBlockWithStart( *rpcMbTempDacMvLastEst[1cMvPred [1uiBitsTest,eParIdx, MOD&rpcMbTempDam_pcMotionEstimation->compensateBlock ( &cYuvMbBuffer[1//===== BI PREDICTION =====//----- initialize with forward and backward estimation ---//----- iterative search -----m_pcMotionEstimation->estimateBlockWithStart( *rpcMbTempDacMvLastEst[ucMvPred [uuiBitsTest,eParIdx, MODuiIterSearchm_pcMotionEstimation->compensateBlock ( &cYuvMbBuffer[ueParIdx, MODE_1//===== chose parameters =====xSetRdCostInterMb ( *rpcMbTempData, pcMbDataAfalse, 0, false, 0, bLowComplexMbEnaxCheckBestEstimation( rpcMbTempData, rpcMbBestData )xCheckInterMbMode8x8( rpcMbTempData, rpcMbBestData, pcMbRe 以下为第437行的函数另起一行xEstimateMb8x8 ( m_pcIntMbTempData, m_pcIntMbBestData, rcRefFrameListxEstimateSubMbDirect ( ePar8x8, m_pcIntMbTemp8x8Data, m_pcrcMbDataAccess.getMvPredictorDirect( eParIdx8x8, bxSetRdCostInterSubMb( *rpcMbTempData, rcRefFrameLixCheckBestEstimation( rpcMbTempData, rpcMbBestDatxEstimateSubMb8x8 ( ePar8x8, m_pcIntMbTemp8x8Data, m_pc//===== LIST 0 PREDICTION ======m_pcMotionEstimation->estimateBlockWithStart( *rpcMvcMvuiBePa&r//===== LIST 1 PREDICTION =====m_pcMotionEstimation->estimateBlockWithStart( *rpcMvcMvuiBePa&rpm_pcMotionEstimation->compensateBlock ( &cYuvMeParId//===== BI PREDICTION =====m_pcMotionEstimation->estimateBlockWithStart( *rpcMvcMvuiBePauiIm_pcMotionEstimation->compensateBlock ( &cYuvePar//===== chose parameters =====xSetRdCostInterSubMb( *rpcMbTempData, rcRefFrameLixCheckBestEstimation( rpcMbTempData, rpcMbBestDatxEstimateSubMb8x4 ( ePar8x8, m_pcIntMbTemp8x8Data, m_pcIn//===== LIST 0 PREDICTION ======//===== LIST 1 PREDICTION =====//===== BI PREDICTION =====//===== chose parameters =====xSetRdCostInterSubMb( *rpcMbTempData, rcRefFrameLixCheckBestEstimation( rpcMbTempData, rpcMbBestDatxEstimateSubMb4x8 ( ePar8x8, m_pcIntMbTemp8x8Data, m_pcIn//===== LIST 0 PREDICTION ======//===== LIST 1 PREDICTION =====//===== BI PREDICTION =====//===== chose parameters =====//===== set parameters and compare =====xSetRdCostInterSubMb( *rpcMbTempData, rcRefFrameLixCheckBestEstimation( rpcMbTempData, rpcMbBestDatxEstimateSubMb4x4 ( ePar8x8, m_pcIntMbTemp8x8Data, m_pcIn//===== LIST 0 PREDICTION ======//===== LIST 1 PREDICTION =====//===== BI PREDICTION =====//===== chose parameters =====//===== set parameters and compare =====xSetRdCostInterSubMb( *rpcMbTempData, rcRefFrameLixCheckBestEstimation( rpcMbTempData, rpcMbBestDat//----- store parameters in MbTempData -----//----- set parameters in MbTemp8x8Data for prediction of nxSetRdCostInterMb ( *rpcMbTempData, pcMbDataAccessBase, rfalse, 0, false, 0, bLowComplexMbEnaxCheckBestEstimation( rpcMbTempData, rpcMbBestData )以下为第438行的函数另起一行xEstimateMb8x8Frext ( m_pcIntMbTempData, m_pcIntMbBestData, rcRefFrameListxEstimateSubMbDirect ( ePar8x8, m_pcIntMbTemp8x8Data, m_pcxSetRdCostInterSubMb( *rpcMbTempData, rcRefFrameLixCheckBestEstimation( rpcMbTempData, rpcMbBestDatxEstimateSubMb8x8 ( ePar8x8, m_pcIntMbTemp8x8Data, m_pc//===== LIST 0 PREDICTION ======m_pcMotionEstimation->estimateBlockWithStart( *rpcMvcMvuiBePa&rp//===== LIST 1 PREDICTION =====m_pcMotionEstimation->estimateBlockWithStart( *rpcMcMuieP&rm_pcMotionEstimation->compensateBlockeParI//===== BI PREDICTION =====m_pcMotionEstimation->estimateBlockWithStart( *rpcMcMuiePuim_pcMotionEstimation->compensateBlock ( &cYuvMeParId//===== chose parameters =====//===== set parameters and compare =====xSetRdCostInterSubMb( *rpcMbTempData, rcRefFrameLixCheckBestEstimation( rpcMbTempData, rpcMbBestDat//----- store parameters in MbTempData -----//----- set parameters in MbTemp8x8Data for prediction of nxCheckInterMbMode8x8( rpcMbTempData, rpcMbBestData, pcMbRe 以下为第446行的函数另起一行xDecompositionFrame ( iLevel, uiFrame,ePicType )//===== get reference frame lists =====xGetPredictionLists ( rcRefFrameList0, rcRefFrameList1,//===== set lambda and QP =====//===== prediction =====xMotionCompensation ( pcMCFrame, &rcRefFrameList0, &rcRefF//===== loop over macroblocks =====pcMbEncoder->compensatePrediction( *pcMbDataAccesspcMCFrame->get*apcRefFrameLis*apcRefFrameLisbCalcMv, bFaulpcFrame->prediction ( pcMCFrame, pcFrame, ePicType )getFullPelYuvBuffer()->prediction( pcSrcFrame->getpcMCPFrame->get//===== set residual =====pcResidual->copy ( pcFrame , ePicType 以下为第447行的函数另起一行xEncodeNonKeyPicture ( iLevel, uiFrame, rcAccessUnitData, cPicOutputD//===== base layer encoding =====pcBLRecFrame->copy ( pcFrame, ePicType ) xEncodeHighPassSignal ( rcOutputList,rcControlData,pcOrgFrame,pcBLRecFrame,pcResidual,pcPredSignal,uiBits,uiBitsRes, rcPicOutputDataList, ePicType )//----- Subsequence SEI -----//----- init NAL UNIT -----//---- write Slice Header -----m_pcNalUnitEncoder->write( *pcSliceHeader )//----- write slice data -----m_pcSliceEncoder->encodeHighPassPicture ( uiMbCodeuiBits,*pcSlicepcOrgFrpcFramepcResidpcPredSrcContrrcContrrcContrrcContrm_uiFrarcContrm_iMaxDePicTyp//====== initialization ======//===== loop over macroblocks =====m_pcMbEncoder ->encodeResidual ( *pcMbDpcOrgpcFrapcRespcBasbCodedLambiMaxD//----- encode luminance signalxEncode4x4InterBlock( *m_pcIntMb//----- encode chrominance signaxEncodeChromaTexture( *m_pcIntMb//----- set parameters ----//----- fix QP ------//--- set parameters//----- store parameters and rec//----- store "base layer" resid//----- set residual prediction// restore original residualm_pcMbCoder->encode( *pcMbDataAccess, pcM//===== skip flag =====//===== base layer mode flag and//===== macroblock mode =====//--- reset motion pred flags --//===== prediction info =====//===== MOTION INFORMATION =====//===== TEXTURE =====xWriteTextureInfo( rcMbDataAccespcMbDataAccesrcMbDataAccesbTrafo8x8FlagrcMbDataAccesrcMbDataAccesuiMGSFragmentxScanChromaBlocks( rcMb//--- write terminating bit ---//----- close NAL UNIT -----以下为第448行的函数另起一行xCompositionFrame ( iLevel, uiFrame, rcPicBufferInputList,//--- highest FGS reference for closed-loop coding ---//===== get reference frame lists =====xMotionCompensation ( pcMCFrame, &rcRefFrameList0,rcControlData.getMbDataCtrl()pcFrame ->inversePrediction ( pcMCFrame, pcFrame, ePicType//----- store non-deblocked signal for inter-layer predicti//===== de-blocking =====m_pcLoopFilter->process( *pcSliceHeader, pcFrame, pcResidua//===== filtering =====xFilterMb( *pcMbDataAccess, pcFrameBuffer, pcResid//===== check residual blocks and set "re//===== set mode parameters =====//===== determine boundary filter strengtxGetVerFilterStrength( rcMbDataAccess, cIxGetHorFilterStrength( rcMbDataAccess, cI//===== filtering =====滤波//--- highest FGS reference for closed-loop coding ---集,在没有写SPS和PPS时结束循环ired frame buffers =====yers; uiLayer++ )//uiNumLayers=2 是配置文件里的输入层数ame; uiFrame++ )//maxframe = FrameToBeEncodeand read original pictures =====< uiNumLayers; uiLayer++ )每两个图像调用一次,但是在函数内部是一个GOP处理一次s( cOutExtBinDataAccessorList,apcOriginalPicBuffer,apcReconstructPicBuffer,acPicBufferOutputList,acPicBufferUnusedList )r->process( rcExtBinDataAccessorList,apcOriginalPicBuffer,apcReconstructPicBuffer,apcPicBufferOutputList,apcPicBufferUnusedList )ll lists =====uiHighestLayer = m_pcCodingParameter->getNumberOfLayers() - 1;for( UInt uiLayer = 0; uiLayer <= uiHighestLayer; uiLayer++ )//循环numlayer次m_acOrgPicBufferList [ uiLayer ].push_back( apcOriginalPicBuffer [ uiLayer ] );m_acRecPicBufferList [ uiLayer ].push_back( apcReconstructPicBuffer[ uiLayer ] );of GOP =====//只有17帧都读进来后才会进入xProcessGOP函数if ( m_acOrgPicBufferList[uiHighestLayer].size() == uiTargetSize )//targetSize = 17 GOP+1 OK( xProcessGOP( apcPicBufferOutputList, apcPicBufferUnusedList ) );//17帧入buffer后才调date data accessor list =====m_cAccessUnitDataList.emptyNALULists( rcExtBinDataAccessorList );L unit buffers =====tList[uiLayer], uiLayer )dList[uiLayer], uiLayer )constructed pictures =====ssGOP( apcPicBufferOutputList, apcPicBufferUnusedList )?????or list =====r-1]->finish( ruiNumCodedFrames, rdHighestLayerOutputRate, m_aaadFinalFramerate, m_aaa====ed pictures =====mary =====ferUnusedList )CGSSNR,BaseLayerCGSSNR,BaseQualityLevelCGSSNR,initGOPayers(); uiLayer++ )units =====分图像,分层处理pcCodingParameter->getNumberOfLayers(); uiLayer ++ )ayer]->process( uiAUIndex,m_cAccessUnitDataList.getAccessUnitData( uiAUIndex ),m_acOrgPicBufferList [uiLayer],m_acRecPicBufferList [uiLayer],apcPicBufferUnusedList[uiLayer],m_pcParameterSetMng )===== init some parameters ========== update higher layer pictures ===== 分为16次//===== encode key pictures =====编码关键帧,都是一次?编码非关键帧见298新起一行LayerEncoder::xEncodeKeyPicture ( bPicCoded, uiKeyFrame, rcAccessUnit===== check for first GOP =====xSetBaseLayerData( uiFrameIdInGOP, ePicType )===== initialize =====xInitControlDataLowPass ( uiFrameIdInGOP, m_uiDecompositionStages-1, uiFxInitBaseLayerData( rcControlData,uiBaseLevel,uiFrame, false, &===== init ========== motion data ========== residual data ========= reconstructed (intra) data =====//xSetPredWeights===== base layer encoding ========== primary picture coding =====pcBLRecFrame->copy ( pcFrame, ePicType )getFullPelYuvBuffer()->copy( pcSrcFrame->getFullPelYuvBuffer())===== luminance ========== chrominance U ========== chrominance V =====LayerEncoder::xEncodeLowPassSignal(rcOutputList,rcControlData,pcFrame,pcBLRecFrame,pcResidual,pcPredSignal,uiBits,rcPicOutputDataList,ePicType )----- subsequence SEI -----LayerEncoder::xWriteSEI( rcOutExtBinDataAccespcSubSeqInfo->init( uiSubSeqLayer, 0m_pcNalUnitEncoder->write( cSEIMessaSEI::write( m_pcHeaderSymbo===== NAL unit heaxWrite( pcWriteIf,m_pcNalUnitEncoder->closeNalUnit( ui===== write trailing bits =xWriteTrailingBits()m_pcBitWriteBuffer->flushBu===== convert to payload anconvertRBSPToPayload( uiBit===== NAL unit hea===== NAL unit paym_pcBinDataAccessor->decrea==== reset parameters =====xWritePrefixUnit( rcOutExtBinDataAccessorListm_pcNalUnitEncoder->writePrefix( rcSrcSH.writePrefix( *m_pcHeadPrefixHeader::writm_pcNalUnitEncoder->closeNalUnit( ui----- init NAL UNIT --------- write Slice Header -----m_pcNalUnitEncoder->write ( *pc----- modify copy of slice he----- write copy of slice header ---cSH.write( *pcCurrWriteIf )----- update ---------- encode slice data -----m_pcSliceEncoder->encodeIntraPicture ( uiBitrcConpcFrapcRespcBaspcPrem_uiFrcConePicT----- close NAL UNIT -----m_pcNalUnitEncoder->closeAndAppendNalUnits( ar&mmmm ===== deblock and store picture for prediction of following low-pass fra----- store for inter-layer prediction (non-deblocked version) -----m_papcSubband[ uiFrameIdInGOP ]->copy( pcBLRecFrame, ePicType )----- de-blocking -----m_pcLoopFilter->process( *pcSliceHeader, pcBLRecFrame, pcResidual, pcMbD ===== filtering =====xFilterMb( *pcMbDataAccess, pcFrameBuffer, pcResidualBuffer, pc ----- store for prediction of following low-pass pictures -----m_pcLowPassBaseReconstruction->copy( pcBLRecFrame, ePicType )pcFrame->copy( pcBLRecFrame, ePicType )xUpdateLowPassRec()xCalculateAndAddPSNR ( m_uiDecompositionStages, uiKeyFrame, rcPicBufferInputList xCalculateTiming(cPicOutputDataList, uiKeyFrame )xOutputPicData ( cPicOutputDataList )//打印出结果//xClearBufferExtensions()到此LayerEncoder::m_apcLayerEncoder[uiLayer]->process结束uiMbY, uiMbX )DataAccess,DataAccessBase,ame ->getPic( ePicType ),ame ->getPic( ePicType ),cSubband ->getPic( ePicType ),pcBaseLayer ? pcBaseLayerpcPredSignal odes (if base layer or adaptive prediction) =====tMbTempData, m_pcIntMbBestData, false )prediction -----uiPredMode is equal to the baselayer when AVC rewriting is enabled.on->predictSLumaMb( rpcMbTempData, n, bValid )ansformMb16x16( m_pcIntOrgMbPelData, rpcMbTempData, rpcMbTempData->get( B4x4Idx(0) ), pucScale, uiDc sform4x4Blk( pucOrg + iOffsetBlk, pucRec + iOffsetBlk, iStride, &aiCoeff[uiBlk<<4]sformLumaDc( aiCoeff )quantNonUniformLuma( &piCoeff[n<<4], &aiCoeff[n<<4], m_cLumaQp, pucScale, ruiDcAbs, ruiAcAbs ) formDcCoeff( aiCoeff, iQpScale )sform4x4Blk( pucRec + iOffsetBlk, iStride, &aiCoeff[uiBlk<<4] )aIntra16x16( *rpcMbTempData, *rpcMbTempData, uiAcAbs != 0 )tMbTempData, m_pcIntMbBestData, false )prediction -----ock( *rpcMbTempData, c8x8Idx, uiMbBits, uiExtCbp )aPrediction->predictSLumaBlock8x8( rcMbTempData, iPredMode, c8x8Idx, bValid )sform->transform8x8Blk( m_pcIntOrgMbPelData, rcMbTempData, rcMbTempData.get8x8( c8x8Idx ), pucScale, xForTransform8x8Blk ( pOrg, pRec, iStride, aiTemp )xQuantDequantUniform8x8 ( piCoeff, aiTemp, m_cLumaQp, pucScale, ruiAbsSum )invTransform8x8Blk ( pRec, iStride, aiTemp )aPrediction->predictSLumaBlock8x8( rcMbTempData, uiBestMode, c8x8Idx, bValid )sform->transform8x8Blk( m_pcIntOrgMbPelData, rcMbTempData, rcMbTempData.get8x8( c8x8Idx ), pucScale, xForTransform8x8Blk ( pOrg, pRec, iStride, aiTemp )xQuantDequantUniform8x8 ( piCoeff, aiTemp, m_cLumaQp, pucScale, ruiAbsSum )invTransform8x8Blk ( pRec, iStride, aiTemp );a( *rpcMbTempData, uiExtCbp, uiMbBits )ated parameters -----rcMbDataAccess, m_pcIntMbTempData, m_pcIntMbBestData, false )ock( *rpcMbTempData, cIdx, uiBits, uiCbp, 0, 0, false )aPrediction->predictSLumaBlock( rcMbTempData, iPredMode, cIdx, bValid )sform->transform4x4Blk( m_pcIntOrgMbPelData, rcMbTempData, rcMbTempData.get( cIdx ), pucScale, uiAbs xForTransform4x4Blk( pOrg, pRec, iStride, aiTemp )xQuantDequantUniform4x4( piCoeff, aiTemp, m_cLumaQp, pucScale, ruiAbsSum )xInvTransform4x4Blk( pRec, iStride, aiTemp ):xScanLumaBlock( rcMbTempData, rcMbTempData, cIdx )m_pcMbSymbolWriteIf->residualBlock( rcMbDataAccess, cIdx, LUMA_SCAN, uiStart, uiStop )a( *rpcMbTempData, uiExtCbp, uiMbBits, bLowComplexMbEnable )ed parameters ---tMbTempData, m_pcIntMbBestData, false )Access, *m_pcIntMbBestData, pcRecSubband, pcPredSignal, 0, 0, false, NULL )ccess,pcMbDataAccessBase,s == uiLastMbAddress ),and base layer refinement flag =====e( rcMbDataAccess )formSize8x8Flag( rcMbDataAccess )PredModeLuma( rcMbDataAccess, cIdx )aAccessBase,aAccess.getMbTCoeffs(),aAccess.getSH().getSPS().getMGSCoeffStart( uiMGSFragment ),aAccess.getSH().getSPS().getMGSCoeffStop( uiMGSFragment ),cMbDataAccess, rcMbTCoeff, cIdx, uiStart, uiStop )( rcMbDataAccess, rcMbTCoeff, uiCbp >> 4, uiStart, uiStop )it ( bTerminateSlice ? 1:0 ))->getNextMBNr(uiMbAddress )====得到参考帧列表eList0, rcRefFrameList1, uiBaseLevel, uiFrame, RLU_MOTION_ESTIMATION, true )Frame, FRAME, bFrameMbsOnlyFlag )Pel( pHPData )ame( m_pcQuarterPelFilter, ePicType, bFrameMbsOnlyFlag )elYuvBuffer()->fillMargin( )xFillPlaneMargin( getMbLumAddr(), getLHeight(), getLWidth(), getLStride(), getLXMargin(), getLYMarg xFillPlaneMargin( getMbCbAddr(), getCHeight(), getCWidth(), getCStride(), getCXMargin(), getCYMarg xFillPlaneMargin( getMbCrAddr(), getCHeight(), getCWidth(), getCStride(), getCXMargin(), getCYMarg rPelFilter->filterFrame( getFullPelYuvBuffer(), getHal 化拉格朗日优化参数和QPel, uiFrame, true, ePicType )*pcSliceHeader,rcRefFrameList0,为宏块自适应帧场archRange,-adaptive prediction =====非自适应预测直接复制。