- 博客(47)
- 收藏
- 关注
原创 补码的理解,想明白了觉得还挺有趣的
最后的符号,设计的目的,就是为了表示一下,在反方向拨钟表时,是否会拨过0点?如果拨不到0点,就是负数,如果拨的过0点,就是正数。所以什么时候拨的过呢?拨过之后,就会发生加法溢出,就会向前冲一位,就会把负数第一位的符号位冲掉。
2024-06-27 15:17:02
420
原创 x265的DCT
文章目录DCT相关背景知识DCT变换系数矩阵32x32变换矩阵系数其他尺寸变换矩阵系数变换计算过程流程图代码实现数据残差变换系数对应残差我的简单实现实现细节实现代码x265对应代码实现openHEVC代码实现DCT相关背景知识DCT变换系数矩阵标准提供了32x32的系数矩阵,4x4、8x8、16x16的矩阵都可以从中提取出来32x32变换矩阵系数其他尺寸变换矩阵系数从上面来看,4x4的变换矩阵,系数为:[646464648336−36−8364−64−646436−8383−36]\b
2023-06-07 17:04:54
715
原创 HEVC中,mvd怎么写进码流的?
等于1,表示MvdL1[ x0 ][ y0 ][ compIdx ] =0。等于0,表示需要mvd_coding( x0, y0, 1 )来求解。这样的设计,其实还是和熵模型有关。0出现的概率最高,所以码长最短。x0,y0 表示亮度快左上角坐标。compIdx =0表示水平。compIdx =0表示垂直。可以看到传输的码流中。
2023-05-29 21:26:09
792
原创 HEVC Transform
本文介绍内容包括:x265的系数熵编码模块、TU的划分原理、HEVC中Transform模块相关的语法元素我们知道,在AVC中采用的是zigzag扫描,这样的做法是尽可能地增加相关性,从而使得游程编码的时候能采用更少的比特数先不考虑基于模式的扫描,在HEVC采用的扫描顺序是对角扫描,而且是从右下角开始扫描,扫描到左上角。我们知道,视频编码时,编码的context一直在不停地切换,在每个bin之间都一直在切换,所以如何确定每个bin的context很重要,另外,如何能设计简单的context选择方法也很重要
2023-03-29 16:58:21
461
原创 X265的多线程 -- ThreadSafeInteger
如果没有线程同步,则消费者线程和生产者线程都是使用while(true)各自保持全速待命状态。这样就存在一个问题,CPU占用率过高。这个时候的解决方法就是根据条件变量阻塞线程,消费者没提出需求之前,就把条件变量置0,生产者线程一直等待,直到他变成了1才开始执行。对多个线程经常访问的同一个变量m_val,对应建立一个临界变量。消费者线程和生产者线程之间的关系,消费者线程需要消费时向商店发出申请,生产者线程生产完了放进商店给他拿走。条件变量m_cv处于等待,等待时间是INFINITE,同时为m_cs上锁。
2023-03-15 10:21:00
395
原创 Verification Test Report on the Compression Performance of LCEVC (ISO/IEC JTC 1/SC 29/WG 04 N0076)
Verification Test Report on the Compression Performance of LCEVC (ISO/IEC JTC 1/SC 29/WG 04 N0076)
2022-11-21 13:44:07
258
2
原创 Overview of the Low Complexity Enhancement Video Coding (LCEVC) Standard
Overview of the Low Complexity Enhancement Video Coding (LCEVC) Standard
2022-11-21 09:45:18
791
3
原创 A Mathematical Analysis of the DCT Coefficient Distributions for Images
A Mathematical Analysis of the DCT Coefficient Distributions for Images
2022-11-19 19:59:07
186
原创 VS: base path arguement is not fully qualified
VS: base path arguement is not fully qualified
2022-03-05 10:35:40
1615
原创 关于Z扫描和光栅扫描
问题描述一直没太理解Z扫描。感觉有了光栅扫描,每次存信息不就是找到位置挨个填不就行了。但是,为什么说因为HEVC对CU是迭代划分,Z扫描就更方便了呢?解释仔细看光栅扫描,可以看到,如果对LCU划分一次,也就是4个32*32的CU,那么每个CU的所有Z地址是连续的,可以一次存储完成。同理,在此基础上迭代,再次划分后,4个16*16的CU,也是每个CU的Z地址也是连续的。这样的话,也就是每次划分后一句话就在内存修改CU的模式信息。用光栅扫描的话,就需要很麻烦的分情况一行一行的写信息。...
2022-02-09 13:21:46
472
原创 从视频到01(码流的组成)
1. 编码的分层编码结构视频->GOP->slice->SS(slice segment)->CTU->CU1.1 GOP图像组,由slice组成GOP结构分为开放式GOP和封闭式GOP。封闭式GOP中,每个GOP的第一帧是IDR帧,并且每个GOP独立编解码。开放式GOP只有第一个GOP的第一帧为IDR帧,而后续GOP的第一帧为non-IDR帧,于是后一GOP可以参考前一GOP中的帧。1.2 sliceslice为了并行处理,一帧图像可以是一个slice,也可
2022-02-05 10:25:25
2468
原创 关于Time dependence
Time dependence实验:只编码两帧,第一帧I帧,第二帧P帧。I,QP=m时,测试P帧QP=22、27、32、37,得到帧的率失真曲线I,QP=m-5时,测试P帧QP=22、27、32、37,得到帧的率失真曲线结论:I帧QP降低(量化误差减少),对后续P帧的码率®影响不大,但是会使后续P帧编码质量提高质量提高程度会在临近P帧体现较大,随着P帧距离变远,影响快速衰减原因帧间预测时,参考帧的量化误差会传播到下一个编码块中。但是由于量化步长以及传播特性的限制,有效传播距离是很短的。
2021-04-16 16:03:30
335
原创 dct4x4dc
%if HIGH_BIT_DEPTH; void dct4x4dc( dctcoef d[4][4] )%macro DCT4x4_DC 0;X64的汇编程序;%macro是NASM的写法;将汇编代码变成机器代码的程序和软件叫做汇编程序;常用的有NASM和MASM。MASM是微软的,Microsoft Assembler;定义一个叫做 DCT4X4_DC 的宏;宏的参数个数是0个;宏的作用:会有一些程序段被大量重复的调用,想当于定义了函数;但是宏是重复多行调用;而%define是单行
2021-04-15 20:56:24
212
原创 HEVC-based Adaptive Quantization for Screecn Content Videos
AbstractIn general, quality of compressed videos for screen contents is not as good as those for natural videos with the conventional video compression standards due to different properties of textures. In this paper, we present an adaptive quantization
2021-04-15 17:35:33
202
原创 x264_adaptive_quant_frame
x264_adaptive_quant_frame结构体x264_image_properties_tx264_image_properties_t结构体存放的图像性质包括:该图像中每个宏块的qp偏移量该图像中每个宏块的标记信息(例如:是否改变)该帧图像的质量指标:SSIM、PSNR该帧图像的平均有效CRF(Average effective CRF)typedef struct x264_image_properties_t{ All arrays of data here ar
2021-04-15 13:21:25
443
原创 C++漫谈
数据类型变量的数据类型,就相当于我们在进行的类定义。定义了他的数据是什么以及可以在数据上进行的合法操作有哪些。所以,例如:定义了const int x,就是定义了存储4字节空间的数据,数据存储格式是整数,可以做的操作有…,不可以做的操作有…(值改变等等)。所以,如果实际上我们进行:int x=32;const int &y=x使不可变的数据y指向了可变的数据x,那么y上可做的操作是不可值改变。但是x上的操作是值可改变。然后int数据类型和const int数据类型对应的数据成员都是一
2021-04-14 20:21:03
117
原创 auto、const
auto1.C++11引入。2.auto让编译器替我们去分析表达式所属的类型。因为是编译器替我们分析后进行替换,所以auto不会增加运行时间。3.auto定义的变量必须有初始值,因为编译器要根据初始值去分析所属类型。4.auto可以一条语句声明多个变量。一条声明语句只能有一个基本类型,所以不能一条语句声明两个不同的类型。比如:auto x=1,y=1.2 就是错的5.会忽略顶层const,而保留底层const。会忽略引用。int i=5;const int ci=i, &c
2021-04-14 20:14:48
599
原创 编码漫谈
2021-4-13今天和任课老师进行了短暂的交谈,对我的一些疑惑进行了解答为什么研究AVS?一方面我们要形成自己的视频编码专利,另一方面,视频编码很多技术还可以继续提升,继续研究更好的方法。不同的编码框架都有不同的优势以及应用场景。应该研究什么?变换和量化实际上只是之后的一个小处理,编码的大部分时间都在预测部分。编码宏块的确定,运动搜索,运动估计。可以在这些上进行进一步的研究。并且,编码应该有其不同的应用场景的考虑,针对不同场景也应该进行不同的研究,可能整体框架类似,但是具体应用技术会有很大改变。
2021-04-13 20:17:10
146
原创 X264代码理解记录
2021-4-12关于typedef定义的函数指针类型//DJ: 函数指针的定义,相当于是 void (*x264_predict_t)( uint8_t *src, int i_stride )//DJ: 但是用typedef和直接这样定义是有很大区别的,区别在于//DJ: typedef是定义了一个指向该函数的指针的类型//DJ: 而前者是直接定义了一个指针//DJ: 注意:一个是类型,一个是指针。定义了类型之后可以用来声明更多的指针变量。typedef void (*x2
2021-04-12 16:29:58
162
原创 void指针
意义对象的多态性有一个对象是picture_t,他的某一个成员函数的作用是读入一帧图像并保存成固定的格式但是,图像种类有很多种,YUV420,YUV422等等,或者压缩方式不同(JPEG,PNG等等)对于不同的种类(压缩方式不同的图像)读入时,操作的函数是不同的,用函数指针就使对象具有了多态性回调回头补充,还没弄透3.函数名过于傻逼比如,你的程序要适应不同系统的不同字节等等那么你的函数名必然冗长又傻逼找一个简单的函数名代替,然后预处理时再指定简单函数名指向谁注意指
2021-04-01 16:46:09
145
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人