HM学习笔记_来自博客
HM笔记

2.几何模型的修复与清理2.1面的修复与清理2.1.1面的清理在进行面的清理时可以直接进入Delete面板删除多余的面。
还有一种方法就是通过公差控制删除所有符合条件的面。
步骤如下:(1)通过菜单Geometry > Defeature > Duplicates进入Duplicates面板;(2)选择所有显示的面,并将公差设置为0.01;(3)单击Find查找重复的面,单击Delete删除重复的面2.1.2面的修复通过Surface面板可以进行各种面的创建,从而重新创建丢失的面。
例如:(1)进入Surfaces面板,选择Spline/Filler标签。
(2)为创建平滑的表面,可勾选Keep tangency选项。
(3)创建丢失的面:如果勾选了Auto create (free edges)选项,当选择一条边时系统会自动搜索闭环自由边进行面的创建,否则需手动创建面。
2.2 边的修复与清理进行边的清理时常用的工具有equivalence、toggle和replace,下面分别对这三个工具给出相应的使用实例。
2.2.1 equivalence使用equivalence工具,一次清理所有重复的自由边:(1)通过菜单Geometry > Edit > Surface Edges > Equivalence进入Equivalence 面板;(2)勾选equiv free edges only选项,并选择所有的面;(3)将清理公差设置为0.01,点击Equivalence进行清理。
使用toggle工具清理自由边:(1)通过菜单Geometry > Edit > Surface Edges > Toggle进入Toggle面板;(2)将清理公差设置为0.1;(3)在图形上点选红色的自由边进行清理。
当被选择的自由边公差不大于0.1时,系统会自动对其进行清理,当公差大于0.1时,系统将进行询问是否清理。
课堂笔记

课堂笔记一.Hypermesh 入门1.概述:功能:强大的CAD数据接口;完备的后处理功能;支持多种不同的求解器的输入与输出格式功能。
启动:设置初始的工作经验,右击HM图标——选Properties——设置shortcut 中的start in1)默认的HM文件:hmcfg 启动时读取的默认的配置文件2)Command cmf,Hmde 所有执行命令都被写入该文件中3)ASCLL文件(保存全局参数)4)【feinput transiator mane】Hmx 不支持卡片和注解5)Feinput . msg 包含有限元导入过程状态含消息错误和一般总结消息2.用户环境:窗口界面包括:下拉菜单、图形区、工具栏、标题栏、面板菜单、标签域、页面设置。
文件操作:文件打开,导入和导出3. 面板菜单的使用功能控制:switches(多选项) Toggles快捷键:F1:隐藏线(hidden line)F2:删除(delete)F3:替代(replace)F4:距离(distance)F5隐藏显示(mask)F6:单元编辑(element edit)F7:节点对齐(align node)F8:创建节点(create node F9编辑线(line edit):F10:检查单元(check element F11:几何清理(quick edit)F12自动划分网格(automesh)对象选择器:窗口选择、扩展选项选择4. 模型的组织:1)读取Hypermesh2)命名为Geometry3)创建两条线并放入Geometry4)将几何模型放入Geometry5)将所有单元格放入Geometry6)将centar重命名7)识别删除空组件8)删除模型中的几何线条9)将Geometry移到顶端10)组件重新编号11)创建包含Geometry的装配12)创建载合集13)约束移动14)浏览器的重组件5.文件的打开:By-open-选择文件直接打开二.几何清理1.模型的导入与下修复CAD模型:包含细小特征如孔,圈等FEA:用到单元非常小导致时间长,几何信息导入引起去面数震,解除CAD模型的导入与修复:导入几何模型:IMPORT CUP *prt;CATIA.*model;PROE.*prt,*asm;IGES:STEP.*stp几何模型的修复:几何模型的拓扑显示、拓扑修复(工具:Autocleanup\Quickedit.\surface 三面板)示例:clip-repair.hm。
hm工程师工作总结

hm工程师工作总结
HM工程师工作总结。
作为一名HM(硬件和机械)工程师,我在过去的一年中积累了丰富的工作经验。
在这篇文章中,我将总结我在工作中所做的工作,以及我对未来工作的展望。
在过去的一年中,我主要负责设计和开发新的硬件和机械产品。
我参与了从概
念设计到生产制造的整个过程。
在这个过程中,我学到了很多关于产品设计、材料选择、制造工艺等方面的知识。
我还参与了产品测试和改进的工作,确保产品的质量和性能达到客户的要求。
除了产品设计和开发,我还负责解决生产中的技术问题。
在生产过程中,经常
会出现各种各样的技术难题,需要及时解决。
我通过与生产团队密切合作,及时调整生产工艺和工装,解决了许多生产中的技术问题,确保了产品的质量和交付进度。
在未来的工作中,我希望能够继续深入学习和研究新的技术和工艺。
随着科技
的不断发展,新的材料和工艺不断涌现,我希望能够不断跟进,并将其运用到实际的产品设计和生产中。
我还希望能够在团队中发挥更大的作用,帮助团队解决更多的技术难题,提高团队的整体技术水平。
总的来说,作为一名HM工程师,我在过去的一年中取得了一定的成绩,但我
也清楚地意识到自己还有很多需要提高的地方。
我将继续努力学习和提高自己的技术水平,为公司的发展贡献自己的力量。
希望在未来的工作中,能够取得更好的成绩,为公司带来更多的价值。
HyperMesh经验

HyperMesh经验1)导出选择ANSYS.tpl模板,在HyperMesh中,导出文件为*.prp;2)然后用写字板打开它,进行编辑:(1)删除掉定义单元类型,材料,实常数的句子,只保留生成节点和单元的语句;(TYPE,MAT,REAL等全部删除)(2)添加自己想定义的单元类型,材料,实常数的句子。
*这样做实际上只利用了HM中的节点和单元信息。
3)在ANSYS中INPUT这个*.prp文件就可以了。
你这个问题我也遇到过,不过现在解决了,我听我做汽车碰撞的同学说,盗版的HM与ANSYS接口是有问题的。
不过,你可以通过手工进行修改HM导出的文件,添加单元类型语句,ET,1,45,再删除多余没用的语句,就可以导入进去了我学HYPERMESH采用了以下步骤:1、找来一本ANSYS中文的基础教程,看一下有限元分析的基础:单元类型,定义实常数,划分网格的基本规则,材料属性,加载(载荷定义,载荷步,约束),后处理。
在没有HYPERMESH中文教材时,这不失为入门的好办法。
2、安装HYPERMESH,按照培训教程day1,day2,advanced training从头做一遍(打开金山词霸,可以屏幕取词的)。
3、休息一天,太累了。
4、这次是正式学习,买个笔记本,在把三个培训教程边看边练,主要是做笔记,把重要的地方记下来(我记了27页)5、自己练习建几个简单模型,练习一下,会找问题。
6、进入我们这个论坛,跳至48页,从论坛建立时的帖子看起,在一页页的往前翻,把有价值的帖子存下来,有些帖子可以整理成word形式的就直接复制,粘贴成问题集。
当然,看帖子不是件容易的事,到现在大约有1500条帖子,要合理安排自己的时间才能有精力,有毅力看下去。
看帖子确实是个学习的好办法,而且论坛里高手也是很多地。
看帖子的过程渐渐感受到了一种互助的精神,初学者可以找到学习中需要的资料,高手互相交流经验,特别是斑竹,感觉能在工作之余这么耐心地在板上答疑解惑真的不易。
Windchill高级查询感悟笔记

Windchill高级查询感悟笔记首先从这个例子来开始我们的“高级查询”之旅{QuerySpec queryspec = new QuerySpec();queryspec.appendClassList(WTPart.class, true);queryspec.appendClassList(WTDocument.class, true);PersistenceManagerSvr pms = (PersistenceManagerSvr)InvocationHandlerFwd.getInterfaceObject(PersistenceManagerSvr.class);QueryResult qr = pms.query(queryspec);}QuerySpec对象是用来指定查询表达式的,queryspec.appendClassList()是用来指定From子句的,如果有多个这样的表达式而没有其他条件,那么就是对相应的被查询对象“求笛卡儿积”;例如上面的例子就会形成下面的Form子句:From WTPART,WTDOCUMENT指定From子句有两种方式:queryspec.appendClassList(WTPart.class, false);//指定具体的对象qs.appendFrom(new ExternalTableExpression("GZMTRECR")); //指定具体的表在appendClassList()中有两个参数,第一个参数是用来指定被查询对象,第二个参数用来指定查询的返回形式:true以对象的形式返回,false以属性的方式返回;如果是用appendClassList()来指定查询对象,那么查询结果QueryResult qr对象qr.nextElement()得到的是Object数组,具体的结果保存在这个数组中;为Select子句中指定返回字段不管queryspec.appendClassList()方法的第二个参数是true还是false,结果都会返回整个对象或者所有的字段;要想过滤返回的字段,需要增加下面的代码{QuerySpec queryspec = new QuerySpec();int a = queryspec.appendClassList(WTPart.class, false);int b = queryspec.appendClassList(WTDocument.class, true);//--------------------------------------------------------------------ClassAttribute ca = new ClassAttribute(WTPart.class, "master>number"); //µÚ¶þ¸ö²ÎÊý±ØÐëʱÏàÓ¦ÒµÎñ¶ÔÏóµÄÊôÐÔqueryspec.appendSelect(ca, false);//--------------------------------------------------------------------CompositeWhereExpression andExpression = new CompositeWhereExpression(LogicalOperator.AND);andExpression.append(new SearchCondition(ca, "=", new ConstantExpression("TEST_PRODUCT_ONE")), null);queryspec.appendWhere(andExpression);//--------------------------------------------------------------------} SELECT A1.NUMBER FROM WTPART A0, WTPARTMASTER A1 WHEREA0.IDA3MASTERREFERENCE = A1.IDA2A2;通过TableColumn指定查询条件{QuerySpec queryspec = new QuerySpec();int classIndex = queryspec.appendClassList(WTPart.class, false);ClassAttribute classAttr = new ClassAttribute(WTPart.class, "partType");queryspec.appendSelect(classAttr, new int[] { classIndex }, false);TableColumn tc = new TableColumn(null, "IDA2A2");queryspec.appendWhere(new SearchCondition(tc, "=", new ConstantExpression(new Long(4638))), new int[] { classIndex });PersistenceManagerSvr pms = (PersistenceManagerSvr) InvocationHandlerFwd.getInterfaceObject(PersistenceManagerSvr.class);QueryResult qr = pms.query(queryspec);} SELECT PARTTYPE FROM WTPART WHERE IDA2A2 = 4638;================================================================================ ========================================================Column Expression ClassAttribute SQLFunction ConstantExpression KeywordExpression TableColumnTable Expression ClassTableExpression ClassViewExpression SubSelectExpression ExternalTableExpressionWHERE Clause SearchCondition ExistsExpression CompositeWhereExpression NegatedExpression================================================================================ ========================================================多对象多条件查询{QuerySpec queryspec = new QuerySpec();int a = queryspec.appendClassList(WTPart.class, true);int b = queryspec.appendClassList(WTPartMaster.class, true);//TableExpression[] tables = new TableExpression[2];//tables[0] = queryspec.getFromClause().getTableExpressionAt(a);//tables[1] = queryspec.getFromClause().getTableExpressionAt(b);String[] aliases = new String[2];aliases[0] = queryspec.getFromClause().getAliasAt(a);aliases[1] = queryspec.getFromClause().getAliasAt(b);TableColumn tc1 = new TableColumn(aliases[0],"IDA2A2");TableColumn tc2 = new TableColumn(aliases[0],"IDA3MASTERREFERENCE");TableColumn tc3 = new TableColumn(aliases[1],"IDA2A2");CompositeWhereExpression andExpression = newCompositeWhereExpression(LogicalOperator.AND);andExpression.append(new SearchCondition(tc1, "=", newConstantExpression(new Long(4638))));andExpression.append(new SearchCondition(tc2, "=", tc3));queryspec.appendWhere(andExpression, null);PersistenceManagerSvr pms = (PersistenceManagerSvr) InvocationHandlerFwd.getInterfaceObject(PersistenceManagerSvr.class);QueryResult qr = pms.query(queryspec);} SELECT A0.*, A1.* FROM WTPART A0, WTPARTMASTER A1 WHERE (A0.IDA2A2 = 4638)AND(A1.IDA2A2 = A0.IDA3MASTERREFERENCE);说明[one]:用SQL语句写查询语句时,可以为被查询的表、视图指定别名。
浅析博客在教学的应用

计算机教 学与教育信息化 C m u e D S f w r n p l c t o s o p t r C o ta e a d A p ia in 2 1 年第 1 期 00 6
浅析博客在教学的应用
李 宁 ( 家庄经济 学院信 息工程学院 ,石 家庄 石
K e wo d Blg; ogta hi gAuxla y y r s: o Bl e c n ; iir
博 客代 表着 新 的生 活 、学 习方 式 ,工作 交流 方 式 。博客 作 为 网络 时代 一种 快捷 易用 的个 人知 识 管理系 统 ,也 越 来越 受到 教 育 工作 者 的关注 并逐 步被 引入到 教育 教 学领 域 。 2 0 年 国内教育 当 03 工作者 尝试 把 B o l g应用 于 教育 领域 短 短几 年后 ,各 类 教育 B o lg 雨后春 笋般 地 涌现 出来 。随着 各地 教师 和学 生 运用 B o lg的普及 , 人 们开 始探 索 教育 B o l g应 用 的规律 , 总结 和反 思 目前 教育 B o lg 的应用 状况 ,并研 究教 育 B o 的下 一 步发 展 。 lg 什 么是 “ 博客 ” 中文 “ 博客 ”一词 ,源 于英 文 单词 B o/ lge 。B o , lg Bo gr lg 是 Wbo e l g的简称 。W bo ,其 实是 W b L g的组合 词 。W b elg e和 o e, 指 W r d W d e ,即互 联 网;L g的原 义则 是 “ o l ieW b o 航海 日志 ” , 后指 任 何类 型 的流水 记 录 。合起 来 理解 , e lg就 是在 网络上 的 Wbo 种 流水 记录 形式 或 简称 “ 网络 日志 ” 。B o gr或 W bo gr l ge el ge , 是指 习 惯于 日常记 录 并使 用 W b o e lg工 具的人 。 二 、博 客与其 他 网络 工具 的 区别 与传 统 的 E m i 、B S和 IQ这三 种互 联 网交 流沟 通方 式 相 al B C 比 ,博客 是一 种较 严肃 ,相对 沉 淀 的沟通 工 具 。博 客 由于是 “ 个 人 日志 ”的链 接 ,它 在 时间 维度 上持 续 ,并 且可 以回溯 ,因而 表 现 的 是一 个较 为完 整 的个 体 ,或 者是 一个 方 面 的完 整形 态 ,因 此 它 是一 种 网络 生存 ,是 个 人性 和公 共性 的 结合 三 、博客 在 网络教 育 中 的应用 网络 教育 指 的是 在 网络 环境 下 , 以现 代 教育 思 想和 学 习 理 论 为指 导 ,充 分发 挥 网络 的各 种 教育 功能 和 丰 富的 网络 教育 资源 优势 , 向教育 者和 学 习者提 供 一种 网络 教 和学 的环 境 ,传 递数 字 化 内容 , 开展 以学 习者 为 中心 的非 面授 教 育 活动 。 网络 教育 教 学 过程 包 括 了教师 , 学生 , 资源三 个 要素 , 其 中学 习资 源 的提供 , 学 习支 持服 务 到位 以及 学 习效 果 的及 时反 馈直 接 影 响着 网络 教育
CMS学习笔记

[field:pubdate function="Mydate('m-d',@me)"/] 或者m月d日
m:%Y:年 %m:月 %d:日 %H:小时 %m:分钟 %s:秒数
可以去掉%
小写y只取年份的后两位 分 秒 大写的则为英文
别的页面(列表页,封面页,内容页):typeid不可以少,要整站调用typeid应包括所有的频道ID
{dede:arclist row=10 typeid='1,2,3,4'}
.<a href="[field:arcurl/]">[field:title/]</a>
{/dede:arclist}
[field:pubdate function="GetDateTimeMK(@me)"/]
列表分页标记调用方式:
{dede:pagelist listitem="index,pre,pageno,next,end" listsize='5' /}
listsize 表示 [1][2][3] 这些项的长度 x 2
config.cahe.inc.php:系统基本参数
config.cache.bak.php:系统基本参数的备份,可以用于恢复系统
dede:后台管理页面
a:静态文件目录,我们自己添加的文章之类的东西存放的地方,可以删除,通过在后台修改
images:图片目录
调用方法同上
3.引入”顶一下“这些插件
把所要添加的插件所在的默认模板中的相关JavaScript及HTML代码进入自定义模板中
G4学习——精选推荐

G4学习G4学习笔记ZhangJie1.数据库1.1.G4数据库表说明1)Code这个是代码对照表,将其他表中字段的可能取值以及取值表⽰的意义填写在这⾥,这样也算是⼀层分层设计吧,数据库开发⼈员可以将数据库中的信息提前设计好,程序开发⼈员则⽆需关⼼数据库的设计,如数据库中表中字段sex的值取0时表⽰什么意思,取1时表⽰什么意思,程序开发⼈员只需在查询数据库时,将sex和0在code表中进⾏⼀次查询就可以了。
这样做还有⼀个好处,就是,在不同的表中都有sex字段,不同的数据库设计⼈员可能设定的取值与取值的意义不同,如果将所有的sex提取到码表中进⾏定义,则使得数据库的设置更加像⼀个整体、有条理。
2)dept这个是部门信息表,其中定义了部门的id、名称、上级部门等信息,上级部门为0的部门表⽰是公司的最上级部门,也就是公司的总部,上下级部门的id⽣成遵循这样的关系,如果上级部门的id为001,则直接下级部门的id为001001~001999,也就是每次在后⾯追加3位数字。
如果部门有下级部门则该部门不是叶节点,如果没有下级部门,则是叶节点。
为什么要定义叶⼦节点leaf这个字段,这主要是考虑到,ext中树控件⾃动装载数据,⽣成所有的部门节点。
⽐如,001下有⼦节点001001,、001002,则展开001时,将请求001的直接下属节点,获得001001、001002节点信息将其作为001的⼦节点。
如果001001、001002不是叶节点,则当展开该节点时,将请求对应的直接下属节点;如果001001、001002是叶⼦节点,则不会展开该节点。
3)event这个是事件表,⽤来记录每⼀个登录⽤户的操作事件,这个表真的是⾮常的重要。
它可以记录每个员⼯在什么时间请求了什么路径,请求的action操作是什么,以及该操作耗费的时间等。
4)exception这个是系统异常监控表,可以记录异常类型、⽅法名、异常信息,它这⾥说监控系统异常,应该指的是G4Studio的异常信息,⽽不是对容器的监控,因为它可以记录⽅法名,应该是我们写的java类中的⽅法名。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
HEVC学习(二)—— HM的整体结构及一些基本概念7个工程1. TAppCommon2. TAppDecoder3. TAppEncoder4. TlibCommon5. TLibDecoder6. TLibEncoder7. TLibVideoIO'T'代表'Test'(这一个的理解可能有误),'App'代表'Application',表明该工程主要包含一些应用函数'Lib'代表'Library',表明该工程主要包含一些库函数。
'Common'表明该工程包含的一些函数是编码器和解码器共用的,'Decoder'表明该工程包含的函数是解码器使用的,而'Encoder'表明该工程包含的函数是编码器使用的。
'VideoIO'工程主要是实现对YUV文件的读写操作。
编码器和解码器的主函数分别在encmain.cpp和decmain.cpp中,相信光看源文件名都能看出来了。
(1)类的命名:(2)变量的命名:(3)函数的命名:HEVC学习(三)——帧内预测系列之一fillReferenceSamples函数(填补当前PU周围相关的样本值)——Void TComPattern::fillReferenceSamples——图像2(左上角为4个像素点,如无强调则以块为单位计算长度等?)PS:此处有两块图像:重建的YUV的大图像1、相对应的专用于预测的PU及其周边的参考样点图像2Pel* piRoiTemp——指向重建Yuv图像1 的位置(临时使用,指向可随意变动)Pel* piRoiOrigin——指向重建Yuv图像1对应于当前PU所在位置的首地址(对当前PU固定)Int* piAdiTemp——图像2 的感兴趣位置(变动的,用于赋值)iPicStride ——重建YUV图像1的宽iNumIntraNeighbor——指示PU周边可用邻块数uiWidth= uiCuWidth*2+1——图像2的宽,uiHeight= uiCuHeight*2+1——图像2的高uiCuWidth ——图像2的CurrentPU部分的宽,uiCuHeight——图像2的CurrentPU部分的高iTotalSamples——总样点数iTotalUnits——以4x4块为单位的块数iUnitSize——块的大小主要功能是在真正进行帧内预测之前,使用重建后的Yuv图像对当前PU(Predict Unit预测单元)的相邻样点进行赋值,为接下来进行的角度预测提供参考样点值。
PS:关于一个PU的相邻点,以及它的相邻点的可用性如何判断的问题,是一个细节问题,并不会影响我们对这个函数实现功能的理解。
PS:reference samples are partially available 部分没看,也看不懂每个4x4块里的4个样点分别被赋值为对应位置的重建Yuv的样点值?(4*4块中不是16个样点吗)HEVC学习(四)——帧内预测系列之二CU、PU地址计算方法光栅扫描,即从左往右,由上往下,先扫描完一行,再移至下一行起始位置继续扫描。
H.264使用的主要就是光栅扫描顺序。
HEVC里同样也有光栅扫描顺序,但是,由于它对CU采用的是递归划分的方式,如果仍是采用光栅扫描顺序,对CU的寻址会很不方便。
HEVC定义了Z扫描顺序Z扫描是针对一个CU来说的,它是用于递归扫描CU的分割。
定位一幅图像中的一个CU (或其分割)大致是这么个过程,首先,由于CU的尺寸的最大值是已知的,会根据这个定位到该CU左上角相对于图像左上角的位置,即得到它的坐标,接着,才是对当前块进行Z 扫描,单位是4x4块,换句话说,Z扫描地址是对一个CU有效的,不能直接使用这个地址来确定它在图像中的位置。
HEVC学习(五)——帧内预测系列之三initAdiPattern函数(预测的前期准备,得到PU的过程)——Void TComPattern::initAdiPattern获得iNumIntraNeighbor、bNeighborFlags等——将参数传入(一)中的fillReferenceSamples 函数赋值——对周围样点进行3抽头的平滑滤波主要功能有三个(1)检测当前PU的相邻样点包括左上、上、右上、左、左下邻域样点值的可用性,或者说检查这些点是否存在;(2)参考样点的替换过程;(二)中已介绍过(3)相邻样点即参考样点的平滑滤波。
Bool bNeighborFlags[4 * MAX_NUM_SPU_W + 1]——指示4个方向上相邻样点值的可用性piAdiBuf= piAdiTempiNumUnitsInCu = uiCuWidth / iUnitSize; ——CurrentPU宽(以块为单位,暂时理解4*4块宽4)iTotalUnits = (iNumUnitsInCu << 2) + 1——左下、左、上、右上、1左上角isAboveAvailable函数——计算返回左边可用邻块数Int iBufSize =uiCuHeight2 + uiCuWidth2 + 1;——滤波缓存区的大小,相邻块的个数UInt uiWH= uiWidth * uiHeight——一个缓存区中的元素个数,图像2中块的总总个数piAdiBuf——指向滤波前的参考样点的首地址piFilterBuf——将piAdiBuf所有参考样点拷贝到此区域——经过滤波后所得值保存在piFilterBufN中——存放滤波后样点值的区域piFilterBuf1 ——经过滤波的样点值(与piAdiBuf相差uiWH,因为滤波前后的值顺序存放)存放顺序:piAdiBuf—大小uiWH—piFilterBuf1—uiWH—piFilteredBuf2—uiWH—piFilterBuf—iBufSize(周边样本块数,只有这些才参与滤波)—piFilterBufNPS:piAdiBuf、piFilterBuf1 按照图像顺序存放,piFilterBuf、piFilterBufN将周边样点顺序存放,方便滤波Q:获取当前PU左上角LT,右上角RT以及左下角LB 以4x4块为单位的Zorder ?不懂HEVC参考软件代码总结1.编码器程序从"TAppEncoder"工程中的encmain.cpp文件开始的,此文件中包含程序运行的入口函数"main",在main函数中主要做了编码器对象的创建、分析配置文件,初始化配置参数,和编码器最重要的功能"encode"。
2.在"encode"函数中,主要实现了读取YUV文件的数据、初始化工具对象例如:GOPEncoder、SliceEncoder、CUEncder……。
在此函数里,还包括一个encode函数,调用CompressGOP 函数来具体执行编码任务。
3.在CompressGOP函数中,完成了以下的功能:一,InitGOP将文件的码流分成若干GOP以便后续程序能够顺利执行。
二,InitEncSlice创建编码的Slice。
三,在此函数中,还包括preCompressSlice和CompressSlice两个函数,前者的作用是选择不同的lamuda进行编码(编码是调用了CompressCU函数,后续介绍),后者是在最好的lamuda下进行编码。
四,循环滤波五,……(熵编码等,还没看)。
4.在xCompressCU函数中(CompressCU函数的主体也是调用xComprssCU函数),先进行帧间预测xCheckRDCostMerge2Nx2N,xCheckRDCostInter等。
在做完帧间预测后进行阵内预测,这是调用的函数是xCheckRDCostIntra,在xCompressCU函数的后续部分,还递归调用自身以实现对每个CU的编码。
变换编码在encodeCoeff中实现,量化在xCheckIntraPCM完成。
5.xCheckRDCostIntra函数,主要完成帧内预测的任务,对亮度的预测使用estIntraPredQT,对色度使用estIntraPredChromaQT。
6.estIntraPredQT函数,在思想对亮度的处理和色度的处理是一样的,所以只介绍亮度的处理函数。
在estIntraPredQT函数中,主要完成了RDCost的选择,在其中predIntraLumaAng 函数实现了方向的预测;calcHAD函数计算了SATD;xModeBitsIntra函数计算编码的码率;xUpdateCandList更新了最好的RDCost所使用的模式。
HEVC学习(六)——帧内预测系列之四实现亮度分量帧内预测的主函数的大体框架estIntraPredQT函数(实现亮度分量帧内预测)——HEVC学习(七)——帧内预测系列之五predIntraLumaAng函数——Void TComPrediction::predIntraLumaAng 帧内预测的最为重要的函数之一predIntraLumaAng1.getPreditorPtr函数——Int* TComPattern::getPredictorPtrInt *ptrSrc——获得指向参考样点首地址的指针数组m_aucIntraFilter——里面存放了不同PU尺寸下滤波的阈值getAdiOrgBuf函数——返回指向未经滤波的参考样点的首地址sw = 2 * iWidth + 1?(ptrSrc指向的是当前PU的左上邻点,故加上2*iWidth指向下一行即当前PU的左邻点,加1指向当前PU的首地址)PS:若帧内预测模式满足滤波的条件,则返回的指针要加上uiWH(详见(五))2.根据帧内预测模式调用以下函数xPredIntraPlanar函数——进行Intra_Planar模式预测xPredIntraAng函数——进行Intra_DC、Intra_Angular(有角度的)模式预测3.xDCPredFiltering函数——Void TComPrediction::xDCPredFilteringxDCPredFiltering( ptrSrc+sw+1, sw, pDst, uiStride, iWidth, iHeight)——sw = 2 * iWidth + 1?xDCPredFiltering( Int* pSrc, Int iSrcStride, Pel*& rpDst, Int iDstStride, Int iWidth, Int iHeight )对Intra_DC模式的边界进行平滑滤波处理。