
视频编解码
文章平均质量分 92
shakingWaves
这个作者很懒,什么都没留下…
展开
-
cutree 算法
x265 x264 cutree lookahead原创 2023-09-19 11:13:08 · 742 阅读 · 0 评论 -
x265码控分析
x265码控分析原创 2023-05-06 21:15:16 · 925 阅读 · 0 评论 -
FFmpeg HEVC 环路滤波Bug分析一
和以往的视频编码标准类似,HEVC仍采用基于块的混合编码框架,一些失真效应仍然存在,如方块效应、振铃效应、颜色偏差以及图像模糊等等。为了解决这些问题,HEVC中采用了环路滤波技术,它其实是一种用于解码端的后处理滤波技术,主要包括去块滤波(Deblocking Filter,DBF)和样点自适应补偿(Sample Adaptive Offset,SAO)。DBF的作用与H.264类似,主要是去除方块...原创 2018-07-15 12:53:56 · 929 阅读 · 0 评论 -
JPEG解码原理详解
1. JPEGJPEG是众多常见的图像编码格式之一,主要分为无损压缩和有损压缩,无损压缩利用空域相关性进行预测,主要用于医学、卫星遥感等领域;有损压缩主要通过DCT变换,然后进行量化来压缩数据。本文将以一个简单的16×8灰度图像作为例子,简单讲述JPEG图像解码的主要过程。1.1.JPEG图片结构 图1(a)所示的图片是一个简单的16×8的JPEG灰度图片,是由图1(b)原创 2017-09-03 10:31:51 · 17634 阅读 · 1 评论 -
JPEG标准DCT优化实现
1. JPEG DCTJPEG是众多常见的图像编码格式之一,主要分为无损压缩和有损压缩,无损压缩主要利用空域相关性进行预测,主要用于医学、卫星遥感等领域;而有损压缩主要通过DCT变换,然后进行量化来压缩数据。与现有的H264和H265视频编码标准中的整数DCT变换不同,JPEG中的DCT是浮点变换。为了加快DCT运算速度,libjpeg使用了三种DCT算法:分别是浮点DCT变换、整数化的DC原创 2017-08-27 15:25:11 · 3799 阅读 · 2 评论 -
FFmpeg H264/H265边界填充一
在H264和H265编解码标准中,运动补偿的参考像素可越过参考图像的边界。图像边界之外的参考像素是不存在的,标准使用边界处的像素来填充处于边界之外的像素值。1. 标准填充标准对填充的算法做了如下的描述,如图1所示的两个图,分别描述了H264和H265亮度分量的标准填充算法(H265色度和亮度分量的填充算法是一致的,但是由于H264色度运动补偿和亮度补偿算法不一致,所以H264色度的填充方原创 2017-05-07 16:57:58 · 2779 阅读 · 0 评论 -
VLC二--H264/AVC中CAVLC的FFmpeg实现
static int decode_residual(const H264Context *h, H264SliceContext *sl, GetBitContext *gb, int16_t *block, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff){ static const int c原创 2016-12-04 16:31:32 · 2727 阅读 · 4 评论 -
VLC一--零阶指数哥伦布码解码原理和实现
指数哥伦布编码属于变长编码,其基本原理是用短码字表示出现频率较高的信息,用长码字表示出现频率较低的信息。 1.1. 指数哥伦布编解码原理指数哥伦布编码也是变长编码的一种,指数哥伦布编码也是由前缀和后缀组成。K阶指数哥伦布码的组成如图1(a)所示:分为m个前缀0,一个比特1和m+k个后缀。解析时首先从比特流当前位置开始寻找第一个非零比特,并将找到的0比特个数记为m,第一个非零比特原创 2016-12-18 09:51:59 · 5027 阅读 · 0 评论 -
CABAC基础四-CABAC熵解码算法FFmpeg实现
1. CABAC熵解码算法FFmpeg实现本章主要讲解FFmpeg中对CABAC熵解码算法的实现和优化思路。由于算术编码算术在H264和H265中没有发生变化,所以FFmpeg中H265的熵解码仍然采用了H264中的实现方式,所以,在H265的CABAC部分,仍然可以看到有的数组的定义中带有H264的名字,如ff_h264_lps_range和ff_h264_mlps_state等等。1原创 2016-11-06 13:37:41 · 5556 阅读 · 5 评论 -
CABAC 基础三-M Coder
1. CABAC上下文模型1.1. MCoder如第二章所述,算术编码一般采用区间递归分隔的方法来进行。在CABAC的二值化算术编码中,区间使用区间的左端点L和区间的长度R两个变量来表示。则:RLPS = pLPS* R (8)其中,pLPS表示LPS符号出现的概率,RLPS表示LPS符号对应的区间,与此相反MPS符号对应的区间大小为:原创 2016-10-07 21:51:46 · 4060 阅读 · 6 评论 -
CABAC 基础二-算术编码
1. 算术编码与变长编码不同,算术编码的本质是为整个输入序列分配一个码字,而不是给每个字符分别指定码字,因此平均意义上可以为单个字符分配码长小于1的码字。算术编码用到两个基本的参数:符号的概率和它的编码间隔。信源符号的概率决定压缩编码的效率,也决定编码过程中信源符号的间隔,而这些间隔包含在L到H之间。编码过程中的间隔决定了符号压缩后的输出。给定事件序列的算术编码步骤如下:1.原创 2016-09-03 23:18:04 · 9192 阅读 · 2 评论 -
CABAC基础一-二值化
1. 二值化在HEVC中主要包括截断莱斯编码(Truncated Rice),指数哥伦布编码(Exp-Golomb)和定长编码。 1.1. TRTR二值化需要输入三个参数:synVal表示将要进行TR二值化的值,cRiceParam表示莱斯参数,cMax表示门限值。TR二值化的结果由两部分组成:前缀prefixVal是一元码,后缀suffixVal是定长码,后缀长度为cRice原创 2016-08-28 17:28:12 · 4157 阅读 · 0 评论