自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 资源 (4)
  • 收藏
  • 关注

原创 Windows编译x264

1、下载安装MSYS2官网下载64位的安装包,下载完之后进行安装,安装目录自行决定,我这里安装在C盘,我的安装目录是C:\msys642、编辑msys2_shell.cmd安装完之后找到msys2_shell.cmd脚本文件,将rem set MSYS2_PATH_TYPE=inherit 改为set MSYS2_PATH_TYPE=inherit ,修改的目的是为了MSYS2继承vs的环境.3、下载yasm官网下载yasm,我的电脑是64位,所以下载的是64位的将下载好的yasm重命名为y

2022-02-17 10:31:37 1674 2

原创 在Mac中执行x264的configure命令,异常 bad interpreter: /bin/bash^M: no such file or directory解决方法

在Mac中执行x264的configure命令或.sh脚本,异常bad interpreter: /bin/bash^M: no such file or directory分析:这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Mac系统下执行会报以上异常信息。解决方法:1、在Mac下转换首先要确保文件有可执行权限,若出现提示:permission denied: ./yourFileName,则执行下面命令chmod a+x yourFileName

2022-02-11 19:23:23 597

原创 关于x265编码器的命令行选项

X265编码器的命令行选项解释

2021-12-26 13:25:36 698

原创 反转单链表

力扣206题反转一个单链表。解题思路:具体代码:ListNode* reverseList(ListNode* head) { ListNode* prev=nullptr; ListNode* curr=head; while(curr) { ListNode* next=curr->next; curr->next=prev; prev=curr

2021-04-15 20:11:54 89

原创 旋转链表

力扣61题给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。解题思路-----闭合为环:1、计算出链表的长度n;2、找到链表的最后一个节点,使其指向链表的头节点;3、向右移动k个位置,当k>=n时,相当于移动k%n个位置,计算断开的位置-----在原链表第n-k%n个节点后面断开,新链表的最后一个节点就是原链表的第n-k%n个节点4、当k为0,或者原链表的头节点为空,或者原链表只有一个节点,直接返回原链表具体代码:ListNode* rotateRig

2021-04-15 19:43:16 65

原创 搜索旋转排序数组

力扣33题整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一

2021-04-13 11:24:52 95

原创 x264中关于编码帧存取lookahead的操作

编码帧的输入顺序是I B B B B P,设置4个B帧。这里假设每次最多能缓存5帧图像,即lookahead的列表中能存5帧图像。编码的第一帧图像是I帧或者IDR帧,首先将第一帧图像存入h->lookahead->next->list中,它的size加1,接着依次存入四帧图像,它的size为5,此时h->lookahead->next->list中的图像是:接着对列表中的图像进行依次编码,首先取索引为0的帧,确定帧类型为IDR帧,然后将此帧赋值给h-&g

2021-01-13 21:23:05 2070 4

原创 mac下用vscode调试x264出现的问题--Unable to start debugging. LLDB exited unexpectedly with exit code 137(0x89)

之前在launch.json配置文件中"type"设置的是"cppdbg",之前这样设置可以正常调试,这次不知道为啥,这样设置就不行了,出现这个错误:Unable to start debugging. LLDB exited unexpectedly with exit code 137 (0x89).百度也没有找到好方法,把"type"的值改成"lldb"就好了,很奇怪。。。...

2021-01-12 17:13:18 1416

原创 openh264帧间预测过程之skip模式的判定

openh264在做运动估计之前是要先check一下skip模式,判断当前宏块是否为skip模式首先要判断两个条件:(1)当前帧的参考图片是P帧,并且当前宏块在参考图片中的同位块是skip模式或者Background模式;(2)当前宏块相邻的左边、上边、左上和右上宏块至少有一个存在并且是skip模式。若满足这两个条件中的一个就继续向下执行,否则当前宏块一定不会是skip模式。接下来的过程为:1、预测skip模式的SAD值(iSadPredSkip):根据左边、上边、左上、右上相邻宏块是否存在、是否

2020-10-17 20:17:38 1234 1

原创 openh264帧间预测过程

openh264的帧间预测过程分为低复杂度过程和高复杂度过程。在高复杂度下,预测过程如下:这些过程的调用都是在WelsMdInterMb函数中。

2020-10-17 19:00:42 382

原创 openh264帧间预测之WelsMdInterMbLoop

openh264的帧间预测过程分为基本层和增强层,基本层预测在WelsMdInterMb函数中实现,增强层预测在WelsMdInterMbEnhancelayer函数中实现。这两个函数的调用都在WelsMdInterMbLoop函数中通过函数指针来调用。WelsMdInterMbLoop函数的过程如下:int32_t WelsMdInterMbLoop (sWelsEncCtx* pEncCtx, SSlice* pSlice, void* pWelsMd, const int32_t kiSlice

2020-10-14 21:05:29 310

原创 openH264帧类型的确定

在openh264中帧类型只有IDR帧和P帧,IDR帧的确定根据三个条件进行判定:1、关键帧的间隔——intraPeriod,这个值在编码配置文件中进行设置;2、是否有场景切换;3、是否将当前帧作为IDR帧的标志,第一帧肯定是IDR帧。只要满足三个条件中的一个就可以将该帧定位IDR帧。针对条件1:如果编码当前帧的索引编号FrameIndex大于等于intraPeriod,即将bIdrPeriodFlag设为true,否则为false。针对条件2:a. 场景切换检测出场景为LARGE_CHAN

2020-10-12 20:39:36 670

原创 C++指针

文章目录声明和初始化指针使用new分配内存使用delete释放内存使用new创建动态数组数组和指针声明和初始化指针声明指针:方式一:typeName * pName;int* ptr;用这种方式声明指针后必须要对指针进行初始化后才能使用。方式二:int higgens = 5;int* pt = &higgens;这种情况初始化的是指针,pt和higgens指的同一个地址。使用new分配内存通用格式:typeName* pointer_name = new typeNa

2020-09-26 23:51:06 215

原创 C++字符串

字符串常量C风格的字符串是将一系列用单引号引起来的字符常量存储在char数组中,以空字符“\0"结尾,用来标记字符串的结尾。例如:char a[5] = {'a','s','d','w','\0'};C++中的字符串是用双引号括起来的一串字符,不需要显示地写出空字符"\0"来标记字符串的结尾,但是在计算字符串的字节数时要加上末尾的空字符。例如:char fish[] = "Bubbles";这种字符串成为字符串常量。字符串常量不能与字符常量互换。字符串输入从键盘输入字符串可以用cin,但是ci

2020-08-10 00:10:52 158

原创 C++数组的初始化

只有在定义数组时才能使用初始化,以后就不能使用了,也不能将一个数组赋值给另一个数组。初始化数组时,值可以少于数组的元素数目,即对一部分元素赋值,另一部编译器会设置为0.例如:int cards[4] = {3,6,8,10};int hand[4];hand[4] = {5,6,7,9}; //错误hand = cards;//错误float h[5] = {5.0, 2.5};//只对前两个元素赋值,后三个元素初始化为0long totals[500] = {0};如果初始化数组时方括号为

2020-08-09 23:34:24 2570

原创 C++数据类型转换

C++程序运行过程中某些情况下会自动进行类型转换,如:将一种算术类型的值赋值给另一个算术类型的变量时;表达式中包含不同的类型时;将参数传递给函数时。一、初始化和赋值时进行的转换long so_long;short thirty = 10;so_long = thirty;在这个程序中,thirty的值扩展为long值,扩展后得到一个新值,这个值被存储在so_long中,而thirty的内容不变。这样做并不会改变这个值,只是占用更多的字节。低精度的值赋值给高精度的变量时不会出现转换问题,

2020-08-09 23:08:33 1782

原创 openh264中关于SVC的编码结构

openh264中的SVC包括时域可伸缩、空域可伸缩编码。时域可伸缩编码时域可伸缩编码是通过调节图像的帧率,在基本层帧率和最高帧率之间提供帧率的可伸缩性。当网络带宽较窄时,接收端只需接收基本层帧率f_BL帧图像就可以恢复出基本视频;当网络带宽较宽时,接收端可以接收到f_BL+f_EL帧图像,这样解码后的视频更流畅。时域可伸缩在编码的时候根据一个时间ID分成基本层和增强层进行编码,先编基本层,再编增强层,增强层可以有一个,也可以有多个。增强层可以参考基本层。一个基本层和增强层组织成一个GOP。openh

2020-08-09 18:50:47 2550 7

原创 openh264中函数WelsCodeOneSlice解析

WelsCodeOneSlice函数包含预测、变换等过程的入口函数,入口函数包含在一个二维数组中,该数组如下:// 1st index: 0: for P pSlice; 1: for I pSlice;// 2nd index: 0: for non-dynamic pSlice; 1: for dynamic I pSlice;static const PWelsCodingSliceFunc g_pWelsSliceCoding[2][2] = { { WelsCodePSlice, Wel

2020-08-09 17:16:40 766 1

原创 openh264编码器执行过程

openh264中主要的编码过程在函数WelsEncoderEncodeExt中,这个函数主要调用以下几个:BuildSpatialPicList (pCtx, pSrcPic):确定空间层数,如果是多层,则进行下采样确定每层的像素值。PrepareEncodeFrame (pCtx, pLayerBsInfo, iSpatialNum, iCurDid, iCurTid, iLayerNum, iFrameSize, pFbi->uiTimeStamp):确定帧类型,这里只有IDR帧和P帧、Sk

2020-08-09 16:19:42 1352

原创 Windows10下编译运行openh264

1、安装VS20152、安装MinGW3、将包含bash.exe文件的路径加入到环境变量path中,我这里是C:\MinGW\msys\1.0\bin4、将C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin和C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE加入到环境变量path中5、创建LIB变量,并将C:\Program Files (x86)\Windo

2020-08-09 15:42:14 1428

原创 HEVC-SCC中打印CU的IBC和Palette的分布

对于屏幕内容图像编码,帧内预测包括普通帧内预测模式Intra、帧内块复制IntraBlockCopy、调色板Palette模式。这里介绍CTU划分为CU和标记CU的最佳模式。xCompressCU( m_ppcBestCU[0], m_ppcTempCU[0], 0 DEBUG_STRING_PASS_INTO(sDebug) );函数是对一个CU进行编码,编码完之后最佳模式的信息保存在m_pp...

2019-11-22 16:12:29 1058 8

原创 HEVC-SCC中打印CU的深度

HEVC-SCC中打印CU的深度HEVC-SCC是HEVC的扩展,用于编码屏幕内容图像,在这里CTU的划分和HEVC一样,都是四叉树划分,和HEVC的编码流程一样。要打印出编码后的CU的深度值,就需要先知道最佳CU的信息保存在哪里。函数 xCompressCU( m_ppcBestCU[0], m_ppcTempCU[0], 0 DEBUG_STRING_PASS_INTO(sDebug) );...

2019-11-22 11:27:30 568 8

原创 打印奇数行的*菱形

输入整数n,打印高度为2n-1的菱形int main(){ int i, j, n, k, m = 0; scanf("%d", &n); //打印高度为2*n-1 的*菱形 //先打印上半部分 for (j = 1; j <= n ; j++, m++) { for (i = 0; i < n - 1 - m; i++) printf(" ");//...

2019-10-20 11:32:07 1143

原创 C++中指向不同数据类型的指针的地址变化情况

定义一个指向char类型的指针p1和一个指向int型的指针p2,char占一个字节,int 占4个字节,%lx是输出的16进制的数 unsigned char* p1; int *p2; p1 = (unsigned char*)0x801000; p2 = (int *)0x810000; printf("%lx,%lx\n", p1 + 5, p2 + 5);根据上述程序,p1的...

2019-10-20 11:04:54 674

原创 C++中子类基类的构造函数和析构函数的调用

构造函数C++中通常用构造函数来对对象中的数据成员进行初始化,构造函数与类名同名。构造函数没有返回值,只对对象进行初始化。在建立对象时自动调用构造函数,每建立一个对象就调用一次构造函数。析构函数析构函数的作用与构造函数相反。名字也与类名相同,只是在类名前加一个“~”符号。当对象的生命周期结束时,释放对象前自动调用析构函数。静态局部变量在main函数结束时或者调用exit()函数结束程序时,...

2019-10-20 10:48:06 4065

原创 C++中的虚函数和子类基类指针的相互转换

C++中的虚函数和子类基类指针的相互转换虚函数虚函数是用来动态实现多态机制的一种方式,用基类指针指向子类对象,调用子类中的成员函数,实现多态。在基类中声明成员函数时,在前面加上virtual关键字,例如:virtual void print()定义基类class A{public: virtual void print() { cout << 'A' &lt...

2019-10-19 21:58:25 749

原创 x264大致编码流程

只写了主要函数的功能大概是什么,详细代码还需要自己细看研究。x264中主要的函数调用关系如下:main()—>main_internal()main_internal()调用parse()函数解析输入的参数,调用encode()函数编码parse()函数调用以下函数:x264_param_default():给保存参数的结构体x264_param_t中的变量赋默认值getopt...

2019-08-20 16:54:35 664

原创 在Mac中使用vscode来编译调试x264

此配置文件是在Mac下设置的。1、添加配置文件Launch.jsonLaunch.json{“version”: “0.2.0”,“configurations”: [{“name”: “(lldb) Launch”,“type”: “cppdbg”,“request”: “launch”,“program”: " ${workspaceFolder}/x264",//x264...

2019-08-20 15:55:45 866 1

原创 HM+SCM中IBC的编码流程

本文是基于HM-16.9+SCM-8.0写的1、解析cfg中的参数;2、初始化SPS、PPS;3、读取YUV文件;4、进入compressGOP函数,这个函数的功能是将视频序列分为图像组,对每组图像编码。在这个函数中,设置当前图像为长期参考图像,调用setRefPicList()函数设置参考图片列表list0和list1,然后调用compressSlice()函数编码一帧图像;5、调用c...

2019-07-31 14:24:40 2197 3

原创 图像质量的主客观评价准则

客观评价标准1、PSNR:峰值信噪比,两幅图像间的psnr越大,则越相似。psnr是最普遍和使用最广泛的一种图像客观评价指标,未考虑到人眼视觉特性。MAX:图像颜色的最大数值,8bit为255;MSE:均方差其中K(i,j)与I(i,j)表示失真图像与原始图像对应像素点的灰度值;i、j表示图像的行和列;m、n表示mn的图像尺寸。主观评价标准1、BD-rate:表示在同样的客观质量下,较...

2019-07-25 18:50:37 5763

原创 提高屏幕内容图像编码质量的几个方法

一、屏幕内容编码背景屏幕内容图像与传统摄像头采集到的图像有很大不同,屏幕内容图像是电子设备生成的图像,一般包括计算机图形文本、自然图像与图形文本结合的混合图像以及计算机生成的动画。摄像头采集到的图像中通常情况下都包含传感器的噪声,且色调一般连续并且纹理复杂。而屏幕内容图像不包含噪声,色调离散而颜色数少,除此之外,屏幕内容图像的线条更细腻,边缘也较为锐利,同时大部分屏幕内容图像的均匀平坦区域较...

2019-07-25 18:43:07 3556

原创 Mac下使用ffplay播放YUV视频的命令

1、安装HomeBrew,输入xcode-select --install 再输入/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”2、安装ffmpeg ,输入brew install ffmpeg3、播放视频:例如ffplay -s 1920x1...

2019-07-25 18:33:09 2087

openh264编码知识.pdf

文档描述了I帧、P帧和B帧的区别,I帧和IDR帧的区别与联系,参考帧列表的创建和重排序、长期参考帧和短期参考帧的标记

2020-08-09

SCC中CU划分和Palette分布

对于屏幕内容图像编码,在SCC编码器中,常用的除了普通帧内预测模式和IBC模式之外,还有Palette调色板模式。在一帧图像中,CU是如何划分的,一个CU最优的模式是哪个,在解码出来的图像并不能看出来。这里结合MATLAB,给出CU的划分,以及CU使用的哪个模式。用不同颜色标记出来,可以直观的看到IBC和Palette的分布以及CU的划分。

2019-11-22

HEVC-SCC中使用IBC的CU分布

在屏幕内容图像编码中,不仅有普通帧内预测模式,还有IntraBlockCopy(帧内块复制)模式,对于一个CU是用哪个模式,在图像中看不到。在这里将CU使用的模式用不同颜色给标记出来,这样就可以看到CU的划分和CU使用的是哪个模式。

2019-11-22

H264与H265的区别.docx

H264与H265的编码流程、块划分、帧内预测、帧间预测的区别,H264的划分是宏块,H265的划分是CU

2019-11-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除