![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
视频编解码hevc/avs/h264
文章平均质量分 69
candice廷
做一位出色的算法工程师
展开
-
HEVC-I帧中CU,TU,PU之间的关系
这里主要是结合HEVC的解码端I帧进行讲解的,其中P,B帧基本上没有太大的出入,主要是PU还存在不规则的情况,因为我现在刚做完I帧,对P帧还没有把握之后清楚解析后,再进行补充在之前的博文中提到了编码树结构的相关概念,这里主要结合代码进行进一步的讲解在帧内模式中:35中预测模式是在PU的基础上进行定义的,但是在具体的帧内预测过程中是以TU为单位的,标准规定PU可以四叉树的形式划分为T原创 2015-01-08 16:14:25 · 7327 阅读 · 3 评论 -
AVS解码-MV预测流程
帧间预测是利用先前已编码帧的图像作为参考图像对当前图像进行预测的一种方式。它把参考图像的抽样点通过运动矢量的补偿作为当前图像抽样值的参考值。原创 2014-10-13 20:47:32 · 891 阅读 · 0 评论 -
h264POC概念
H264码流的输出顺序是编码顺序,所以在编码B帧的时候,由于B是双向预测,需要先编码后面编码帧P/I,这时候先输出I/P,后面才有B帧,我们在解码段拿到相应的I/P帧后,不能马上丢到buffer list里面,还需要等待后面的B帧,解码B帧后再reorder.所以相应产生了两个参数。poc,frame_num,这两个元素在slice级输出 POC,和frame_num的概念: POC原创 2014-09-23 19:56:39 · 3359 阅读 · 0 评论 -
AVS具体代码优化_熵解码
之前讲了很多的理论,之后会结合一些代码讲解一些优化的原创 2014-09-23 17:09:00 · 1169 阅读 · 0 评论 -
h264—CABAC算法原理简介1
Context-Based Adaptive Binary Arithmetic Coding in the H.264/AVC简称Cabac,H264中的一种熵编码方式:基于上下文的自适应二进制算术编码原创 2014-09-23 14:55:49 · 3062 阅读 · 0 评论 -
h264编解码结构框图
H264和以前的标准(如H261、H263、MPEG-1、MPEG-4)的编解码器实现流程没有太大区别,主要的不同在于各功能块的细节。原创 2014-09-16 09:55:04 · 5963 阅读 · 0 评论 -
h264序列头,帧头信息
对h264不是很了解他的序列头和原创 2014-09-15 21:40:20 · 3616 阅读 · 0 评论 -
h264基础知识 宏块,片
在这里h264和AVS在概念上会有一些出入,我会1、宏块(Macro Block):一个编码图像首先要划分成多个块(4x4 像素)才能进行处理,显然宏块应该是整数个块组成,通常宏块大小为16x16个像素。宏块分为I、P、B宏块,I宏块只能利用当前片中已解码的像素作为参考进行帧内预测;P宏块可以利用前面已解码的图像作为参考图像进行帧内预测;B宏块则是利用前后向的参考图形进行帧内预测;原创 2014-09-15 21:06:41 · 4466 阅读 · 0 评论 -
h264基本概念采样,帧,场,色彩空间
上一篇大概介绍了一下264和AVS所涉及的核心技术,后面将更加细致地介绍每一部分的内容,并且在原创 2014-09-15 20:44:46 · 3167 阅读 · 1 评论 -
h264基础知识梳理
回想现在做的这个项目已经有大半年了,最近开始做平台相关的原创 2014-09-15 20:25:04 · 3050 阅读 · 0 评论 -
DSP优化经验一
restrict的作用就是限制一个指针对一块内存的访问,进一步说就是如果一块内存区域通过一个受限制指针访问,那么它就不能通过另一个受限指针访问。引入restrict的目的是确保同一块内存上没有其它引用,让编译器更好地优化指令,生成更有效的汇编代码。把#pragma MUST_ITERATE( , , )放在循环体之前,告知开发板循环次数,改善软件流水MUST原创 2014-04-23 11:44:54 · 901 阅读 · 0 评论 -
C6000的C语言优化
l TMS320C6000处理器介绍 TMS320C6000是TMS320系列产品中的新一代高性能DSP芯片,共分为两大系列。其中定点系列为TMS320C62xx和TMS320C64xx;浮点系列为TMS320C67xx。由于TMS320C6000的开发主要面向数据密集型算法,它有着丰富的内部资源和强大的运算能力,所以被广泛地应用于数字通信和图像处理等领域。 C6000系列CP原创 2014-04-14 15:36:10 · 2297 阅读 · 0 评论 -
dsp C优化-(四)
最后还要知道:第三级优化(-O3),效率不高(经验),还有一些诸如用一条读32位的指令读两个相邻的16位数据等,具体情况可以看看C优化手册。但这些效率都不高(虽然ti的宣传说能达到80%,我自己做的时候发现绝对没有这个效率!65%还差不多),如果要提高效率只能用汇编来做了。还有要看看你的c程序是怎么编的,如果里面有很多中断的话,6000可以说没什么优势。还有,profiler的数据也是不准确的转载 2014-04-14 15:26:18 · 827 阅读 · 0 评论 -
dsp C语言优化-(三)
方法一 把浮点运算改成定点运算因为C6x DSP板并不支持浮点运算,但我们的原始程序代码是浮点运算的格式,所以必须改成定点运算,而其修改后的执行速度也会加快很多。我们采用 Q-format 规格来表示浮点运算。以下将介绍其相关原理。定点DSP使用固定的小数点来表示小数部份的数字,这也造成了使用上的限制,而为了要分类不同范围的小数点,我们必须使用Q-format的格式。不同的Q-format转载 2014-04-14 15:23:46 · 873 阅读 · 0 评论 -
DSP C语言优化-(二)
工作流程一般分为三个阶段。 阶段一:直接按照需要用C语言实现功能。在实际的DSP应用中,许多算法都是非常复杂,直接用汇编代码编写,虽然优化效率很高,可是实现的难度却很大,所以一般都采用先用C语言来实现,然后编译运行,利用C64X开发环境的profile?clock工具测试程序运行时间,若不能满足要求,则进行第二阶段。 阶段二:C语言级的优化。选择C64X开发环境提供的优化方式以及充分运用其转载 2014-04-14 15:18:49 · 1956 阅读 · 0 评论 -
dsp中C优化-(一)
DSP程序优化方法(1)选择一种合适的数据结构很重要,如果在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多,数组与指针语句具有十分密切的关系,一般来说,指针比较灵活简洁,而数组则比较直观,容易理解对于大部分的编译器,使用指针比使用数组生成的代码更短,执行效率更高在许多种情况下,可以用指针运算代替数组索引,这样做常常能产生又快又短的代码与数组索引相比,指针一般能使代转载 2014-04-14 14:53:34 · 1543 阅读 · 0 评论 -
h264算数编码CABAC
由三个部分组成: 一. 二进制化 (主要是将非二制的各语法元素转换成二进制的比特序列,也可以称为对输入流的预编码,经它编码后的输出是MPS概率极高的比特流。)MPS(高概率符号0或1) 、LPS(低概率符号1 或0) 在算术编码流程中必须的记录状态为: L 当前区间的下限 R 当前区间的大小长度 Binval 当前字符,即二进制的符号1或0 各字符的概率Px 当原创 2013-11-20 15:32:30 · 2283 阅读 · 0 评论 -
h264-运动估计和运动补偿理论
MPEG-4采用I-VOP、P-VOP、B-VOP三种帧格式来表征不同的运动补偿类型。它采用了H.263中的半像素搜索(half pixel searching)技术和重叠运动补偿(overlapped motion compensation)技术,同时又引入重复填充(repetitive padding)技术和修改的块(多边形)匹配(modified block (polygon)match原创 2014-10-13 21:19:58 · 14094 阅读 · 0 评论 -
AVS—解码DSP8个核进行处理
在项目中,为了硬件TI6467板子上能够实时编解码1080p高清码流,我们原创 2014-10-20 20:47:58 · 810 阅读 · 0 评论 -
HEVC残差系数解码代码详解
上一篇中主要介绍了编码中的原理,这里主要是结合HM中的代码介绍读残差系数的方法HM变换系数熵解码简介: 初始一个TU对象成员变量介绍: public: typedef enum TU_SPLIT_MODE { DONT_SPLIT=0, VERTICAL_SPLIT=1, QUAD_SPLIT=2, NUMBER_OF_SPLIT_MODES=3 } SPLI原创 2015-01-05 18:03:26 · 3096 阅读 · 6 评论 -
HEVC变换后残差系数编码原理
变换系数熵编码简介:变换系数的扫描是基于4*4大小的子块进行的,子块和子块内部递归扫描。较大的TB首先被分割为多个4*4子块,扫描一般起始于最后一个系数,终止于DC系数,扫描包括子块的扫描和子块内部的扫描。每一个子块内的扫描方式都是一样的。三种扫描方式:对角,水平,垂直 编码过程:非零系数位置信息编码:1 最后一个非零系数的位置:扫描最后一个非零系数在TB中的位原创 2015-01-05 17:48:55 · 4593 阅读 · 1 评论 -
HEVC 调试技巧
这两天在写HEVC中读CTU的部分,包括PartMode,partSize,PredInfo还有特别重要的扫描表和残差系数的几个函数,经过调试已经没有问题,但是在调试过程中因为涉及到码字等相关问题,调试的复杂度比较大,后来根据写TRACE文件的方法,调试基本就是流程性的工作了,不再会出现没有头绪的情况在HM代码模型中,在/** \file TComRom.h原创 2014-12-30 15:11:52 · 1652 阅读 · 0 评论 -
HEVC—编码树结构
HEVC中有CU,TU,PU概念就不多说了,这里主要说一下在具体实现时他们之间大小的关系在HEVC中亮度 CU 最大为 64*64,最小为8*8 色度CU最大为 32*32,最小为4*4在编码配置文档之中可以配置初始的LCU的大小也就是初始根节点CTU的大小 假设这里为64*64在确定是否进行劈分的过程中利用一个CU_split_flag进行标识,同时结合四叉树的深度信息。获原创 2014-12-25 21:41:42 · 1529 阅读 · 0 评论 -
HEVC—参数GOP,SLICE,TILE解疑
一直不是很理解GOP的概念视频序列由若干时间连续的图像构成,在对其压缩的时候,先将该视频分割为若干个小的图像组,GOP。在视频编码中有两种GOP类型封闭式GOP,每一个GOP以IDR图像开始,各个GOP之间独立编码开发式GOP中第一个GOP 为IDR图像,后续的GOP中第一个为non-IDR图像,即帧间预测的时候后面GOP的图像可以参考一面GOP图像的信息SS(slice原创 2014-12-25 20:42:02 · 4789 阅读 · 0 评论 -
HEVC中CTU递归代码分析
CU递归的算法,那么就是xDecodeCU这个函数里面首先对其中一些比较难以理解的部分进行相应的整理UInt uiCurNumParts = pcPic->getNumPartitionsInCtu() >> (uiDepthpcPic->getNumPartitionsInCtu() 获得的数据就是LCU中也就是根节点中CTU对应的按照最小TU进行划分得到的数量,后原创 2014-12-24 19:10:08 · 3480 阅读 · 1 评论 -
HEVC熵解码代码分析—代码解码流程(2)
虽然熵解码的过程并不是很复杂,但是因为涉及太多的文档和函数比较让人心烦,所以稍微进行一下整理熵解码一般一开始就是需要对上下文模式进行一定得初始化在HEVC中因为是类结构,所以在声明对象的时候,基本就完成了一般的初始化工作,下面详细介绍一下:在类TDecSbac当中包含所有的上下文模式,但是在HM中有两个对应的结构 ContextModel m_contextMo原创 2014-12-23 18:55:39 · 2114 阅读 · 0 评论 -
HEVC熵解码代码分析—类结构(1)
最近开始做HEVC了,其中熵解码作为最底层的部分,因为和h264差不多,难度系数不是很大,主要是一些查表的操作具体的实现原理就不细说了,主要从代码来进行解释首先分析HM工程当中的熵解码的部分作为引导,因为最终要在DSP上进行运行,之后会重写为C代码,流程性更强代码分析首先介绍熵解码中比较重要的几个结构体和设计到的函数一进入main函数,最主要的就是对应的解码类TAppD原创 2014-12-23 17:44:46 · 2115 阅读 · 1 评论 -
CABAC整体讲解1
参考的博客http://blog.sina.com.cn/s/blog_520811730101ljiw.html1、CABAC熵编码熵编码是视频编码的最后一步和解码的第一步所使用的一种无损编码。熵编码所处理的对象,是在前期的预测、变换阶段所产生的一系列语法元素(Syntax Elements),包括预测模式和残差数据等。这些语法元素描述了CU,PU,TU和LF等多种语法元素的特性。对原创 2014-12-12 15:38:02 · 3261 阅读 · 0 评论 -
H264—POC
有 B 图像的场合。POC 表示的是图像显示顺序。由于POC对于参考序列的初始化,重排序及标记关系重大,所以做了如下的分析,以下讨论情况是针对帧编码。pic_order_cnt_type=0的时候: poc与frame_num没有直接的关系,是显式地出现在bit流中为pic_order_cnt_lsb(PicOderCntMsb 和 PicOderCntLsb分别代原创 2014-12-01 13:49:23 · 4518 阅读 · 0 评论 -
H264易混淆概念—I_PCM模式 ,跳过模式和直接模式
H.264中的I_PCM模式 I_PCM是一种帧内编码模式,在该模式下,编码器直接传输图像的像素值,而不经过预测和变换。在一些特殊的情况下,特别是图像内容不规则或者量化参数非常低时,该模式比常规的操作(帧内预测--变换--量化--编码)效率更高。 I_PCM模式用于以下目的:1.允许编码器精确地表示像素值2.提供表示不规则图像内容的准原创 2014-12-01 13:45:35 · 4617 阅读 · 0 评论 -
H.265:网络视频的高清时代
去年八月,爱立信公司推出了首款H.265编解码器,而在仅仅六个月之后,国际电联(ITU)就正式批准通过了HEVC/H.265标准,标准全称为高效视频编码(High Efficiency Video Coding),相较于目前的H.264标准有了相当大的改善。H.265旨在在有限带宽下传输更高质量的网络视频,仅需原先的一半带宽,即可播放相同质量的视频。这也意味着我们的移动设备(手机、平板电脑)将能够转载 2014-12-01 13:31:38 · 884 阅读 · 0 评论 -
h264CAVLC编码实例
再来一个例子:原创 2014-11-18 16:33:35 · 783 阅读 · 0 评论 -
h264CAVLC自适应上下文变长编码原理
熵编码是无损压缩编码方法,它生成的码流可以经解码无失真地恢复出原数据。熵编码是建立在随机过程的统计特性基础上的。称H(X )为信息源 X的熵(entropy),单位为 bit/符号, 通常也称为 X的一阶熵,它可以理解为信息源X 发任意一个符号的平均信息量。由信息论的基本概念可以知道,一阶熵是无记忆信息源(在无失真编码时)所需数码率的下界。熵的大小与信源的概率模型有着密切的关系,各个符号出原创 2014-11-18 16:31:53 · 3512 阅读 · 0 评论 -
DSP-Cache优化
对于一般的CPU信号处理加上外围设备的DMA数据读写情况,处理方法是在内存中开辟pingpong缓冲区。inbufa,outbufa,inbufb,outbufb四块内存区,当CPU处理inbufa的数据并将产生的结果放到outbufa,这是外围器件DMA搬移数据到inbufb,另一外围设备将数据从outbufb搬出;同理当CPU处理inbufb并将产生的结果放到outbufb时,外围设备利用DM原创 2014-10-31 13:39:48 · 2511 阅读 · 0 评论 -
AVS解码—环路滤波
在解码框架中最后是做滤波处理原创 2014-10-27 19:19:26 · 946 阅读 · 0 评论 -
双线性插值算法
图像的缩放很好理解,就是图像的放大和缩小。传统的绘画工具中,有一种叫做“放大尺”的绘画工具,画家常用它来放大图画。当然,在计算机上,我们不再需要用放大尺去放大或缩小图像了,把这个工作交给程序来完成就可以了。下面就来讲讲计算机怎么来放大缩小图象;在本文中,我们所说的图像都是指点阵图,也就是用一个像素矩阵来描述图像的方法,对于另一种图像:用函数来描述图像的矢量图,不在本文讨论之列。越是简单的模型越转载 2013-09-10 16:37:05 · 1391 阅读 · 0 评论