<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Lce的专栏]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/chanlp129</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; chanlp129]]></copyright><item><title><![CDATA[AvFrame和AvPacket]]></title><link>https://blog.csdn.net/chanlp129/article/details/128731049</link><guid>https://blog.csdn.net/chanlp129/article/details/128731049</guid><author>chanlp129</author><pubDate>Wed, 18 Jan 2023 22:36:36 +0800</pubDate><description><![CDATA[在FFmpeg中,未压缩的图像和压缩的视频码流分别使用AVFrame结构和AVPacket结构保存;针对视频编码器,其流程为从数据源获取图像格式的输入数据,保存为AVFrame对象并传入编码器,从编码器输出AVPacket结构。]]></description><category></category></item><item><title><![CDATA[ffmpeg时间戳相关函数]]></title><link>https://blog.csdn.net/chanlp129/article/details/128693437</link><guid>https://blog.csdn.net/chanlp129/article/details/128693437</guid><author>chanlp129</author><pubDate>Sun, 15 Jan 2023 12:38:06 +0800</pubDate><description><![CDATA[ffmpeg中与时间戳相关的函数主要有：av_rescale_q，av_rescale_q_rnd，av_compare_ts。= 4);a0 += r;for(i = 63;i >= 0;a1 -= c;t1 ++;1= 4);a0 += r;for(i = 63;i >= 0;]]></description><category></category></item><item><title><![CDATA[ffmpeg错误总结]]></title><link>https://blog.csdn.net/chanlp129/article/details/128688610</link><guid>https://blog.csdn.net/chanlp129/article/details/128688610</guid><author>chanlp129</author><pubDate>Sat, 14 Jan 2023 20:08:25 +0800</pubDate><description><![CDATA[chrono(201): error C2510: “_Duration”:“::”的左边必须是类/结构/联合。chrono(201): error C2061: 语法错误: 标识符“rep”在C++项目中，使用FFmpeg中的av_err2str函数时，报错。打开项目属性-> C/C++ -> 预处理器-> 预处理器定义。错误 C3861 “UINT64_C”: 找不到标识符。添加： __STDC_LIMIT_MACROS。“INTMAX_MAX”: 未声明的标识符。UINT64_C”: 找不到标识符。]]></description><category></category></item><item><title><![CDATA[FFmpeg之av_err2str、av_ts_buff、av_ts2str、av_ts2timestr报错解决方案]]></title><link>https://blog.csdn.net/chanlp129/article/details/128688565</link><guid>https://blog.csdn.net/chanlp129/article/details/128688565</guid><author>chanlp129</author><pubDate>Sat, 14 Jan 2023 20:03:55 +0800</pubDate><description><![CDATA[【代码】FFmpeg之av_err2str、av_ts_buff、av_ts2str、av_ts2timestr报错解决方案。]]></description><category></category></item><item><title><![CDATA[FFmpeg源码分析: avformat_alloc_output_context2()]]></title><link>https://blog.csdn.net/chanlp129/article/details/128637903</link><guid>https://blog.csdn.net/chanlp129/article/details/128637903</guid><author>chanlp129</author><pubDate>Tue, 10 Jan 2023 23:21:30 +0800</pubDate><description><![CDATA[从代码中可以看出，av_guess_format()中使用一个整型变量score记录每种输出格式的匹配程度。函数中包含了一个while()循环，该循环利用函数av_oformat_next()遍历FFmpeg中所有的AVOutputFormat，并逐一计算每个输出格式的score。oformat：指定AVFormatContext中的AVOutputFormat，用于确定输出格式。format_name：指定输出格式的名称。av_guess_format()的代码如下所示。filename：文件的名称。]]></description><category></category></item><item><title><![CDATA[视频的基本知识]]></title><link>https://blog.csdn.net/chanlp129/article/details/128475333</link><guid>https://blog.csdn.net/chanlp129/article/details/128475333</guid><author>chanlp129</author><pubDate>Wed, 28 Dec 2022 23:52:41 +0800</pubDate><description><![CDATA[还有一点注意的，对于 IDR 帧来说，在 IDR 帧之后的所有帧都不能引用任何 IDR 帧之前的帧的内容，与此相反，对于普通的 I 帧来说，位于其之后的 B- 和 P- 帧可以引用位于普通 I- 帧之前的 I- 帧。B帧记录的是本帧与前后帧的差别（具体比较复杂，有4种情况），换言之，要解码B帧，不仅要取得之前的缓存画面，还要解码之后的画面，通过前后画面的与本帧数据的叠加取得最终的画面。P帧表示的是这一帧跟之前的一个关键帧（或P帧）的差别，解码时需要用之前缓存的画面叠加上本帧定义的差别，生成最终画面。]]></description><category></category></item><item><title><![CDATA[VAO, VBO, EBO的创建顺序和解绑顺序]]></title><link>https://blog.csdn.net/chanlp129/article/details/127798461</link><guid>https://blog.csdn.net/chanlp129/article/details/127798461</guid><author>chanlp129</author><pubDate>Thu, 10 Nov 2022 23:35:55 +0800</pubDate><description><![CDATA[修改其他VAO都需要调用glBindVertexArray，它会直接解绑旧的对象并且绑定一个新的，因此通常情况下，我们不需要通过调用 glBindVertexArray(0) 来解绑VAO，当然VBO也是这样。所以在使用中，无需过度在意是否解绑了VAO和VBO，通常是不需要解绑的。需要注意的是，当VAO处于活动状态时，不能解绑EBO， 因为绑定的元素缓冲区对象存储在VAO中。]]></description><category></category></item><item><title><![CDATA[[OpenGL] VAO、VBO、EBO]]></title><link>https://blog.csdn.net/chanlp129/article/details/127797790</link><guid>https://blog.csdn.net/chanlp129/article/details/127797790</guid><author>chanlp129</author><pubDate>Thu, 10 Nov 2022 22:46:43 +0800</pubDate><description><![CDATA[默认情况下，出于性能考虑，所有顶点着色器的属性（Attribute）变量都是关闭的，意味着数据在着色器端是不可见的，哪怕数据已经上传到GPU。绑定对象的过程就像设置铁路的道岔开关，每一个缓冲类型（比如GL_ARRAY_BUFFER）中的各个缓冲对象（比如生成了多个缓冲对象，ID为：123，322，111）就像不同的轨道一样，我们将开关设置为其中一个的状态（比如绑定123为GL_ARRAY_BUFFER），那么之后的列车（针对GL_ARRAY_BUFFER的改动）都会驶入这条轨道（123缓冲对象）。]]></description><category></category></item><item><title><![CDATA[掌握这些概念，不用担心看不懂OpenGL ES着色语言了]]></title><link>https://blog.csdn.net/chanlp129/article/details/127700377</link><guid>https://blog.csdn.net/chanlp129/article/details/127700377</guid><author>chanlp129</author><pubDate>Sat, 05 Nov 2022 10:25:55 +0800</pubDate><description><![CDATA[在OpenGL ES图形学中，着色语言(Shading Language)是一门必修课。在看openGL代码时，都会有着色语言的身影，它有自己的一套语法和格式。提供给我们进行编程的包括顶点着色器和片元着色器，它们都遵循着色语言语法，核心概念包括：向量、矩阵、变量、常量、运算符、采样器、布局限定符、精度限定符、插值限定符、输入输出限定符等。在顶点着色器中，我们一般看到attribute修饰符，称为属性变量；还有varying修饰符，称为易变变量，连接顶点着色器与片元着色器的桥梁。]]></description><category></category></item><item><title><![CDATA[FFmpeg源码分析：连接AVFilter的桥梁buffersrc与buffersink]]></title><link>https://blog.csdn.net/chanlp129/article/details/127700151</link><guid>https://blog.csdn.net/chanlp129/article/details/127700151</guid><author>chanlp129</author><pubDate>Sat, 05 Nov 2022 10:01:36 +0800</pubDate><description><![CDATA[FFmpeg在libavfilter模块提供音视频滤镜，而buffersrc与buffersink是连接AVFilter滤镜的桥梁。其中buffersrc是输入缓冲区，buffersink是输出缓冲区。通过调用av_buffersrc_add_frame_flags()，把待滤波的音视频帧推送到输入缓冲区；调用av_buffersink_get_frame_flags()从输出缓冲区取出滤波后的音视频帧。]]></description><category></category></item><item><title><![CDATA[FFmpeg源码分析：AVFilterGraph与AVFilter]]></title><link>https://blog.csdn.net/chanlp129/article/details/127699791</link><guid>https://blog.csdn.net/chanlp129/article/details/127699791</guid><author>chanlp129</author><pubDate>Sat, 05 Nov 2022 09:32:12 +0800</pubDate><description><![CDATA[FFmpeg在libavfilter模块提供简单与复杂的音视频滤镜，所有滤波器由AVFilterGraph滤波器图表连接起来。简单滤镜为一对一输出，复杂滤镜为多对一输出。重要的结构体包括：AVFilterGraph、AVFilterLink、AVFilterContext、AVFilter。支持在滤波器图表指定位置插入AVFilter滤波器，然后由AVFilterLink把滤波器连接起来。]]></description><category></category></item><item><title><![CDATA[CUDA是什么-CUDA简介]]></title><link>https://blog.csdn.net/chanlp129/article/details/127680147</link><guid>https://blog.csdn.net/chanlp129/article/details/127680147</guid><author>chanlp129</author><pubDate>Thu, 03 Nov 2022 23:04:09 +0800</pubDate><description><![CDATA[CPU、GPU
CPU
CPU（Central Processing Unit）是一块超大规模的集成电路，是一台计算机的运算核心（Core）和控制核心（ Control Unit）。它的功能主要是解释计算机指令以及处理计算机软件中的数据。CPU与内部存储器（Memory）和输入/输出（I/O）设备合称为电子计算机三大核心部件。CPU主要包括运算器（算术逻辑运算单元，ALU，Arithmetic Logic Unit）、控制单元（CU, Control Unit）、寄存器（Register）、和高速缓冲存储器]]></description><category></category></item><item><title><![CDATA[Intel IPP图像库手册函数概述]]></title><link>https://blog.csdn.net/chanlp129/article/details/127661448</link><guid>https://blog.csdn.net/chanlp129/article/details/127661448</guid><author>chanlp129</author><pubDate>Wed, 02 Nov 2022 23:22:23 +0800</pubDate><description><![CDATA[ippiYCbCr420ToBGR_709CSC_8u_P3C3R: 将图像从YCbCr420空间转换BGR空间,ITU-RBT.709 CSC信号。ippiBGRToYCrCb420_709CSC_8u_AC4P3R: 将图像从YCbCr空间转换BGR空间,ITU-RBT.709 CSC信号。ippiYCbCrToBGR_709CSC_8u_P3C3R: 将图像从YCbCr空间转换BGR空间,ITU-RBT.709 CSC信号。]]></description><category></category></item><item><title><![CDATA[OpenGL绘制方式]]></title><link>https://blog.csdn.net/chanlp129/article/details/127603260</link><guid>https://blog.csdn.net/chanlp129/article/details/127603260</guid><author>chanlp129</author><pubDate>Sun, 30 Oct 2022 19:11:50 +0800</pubDate><description><![CDATA[access表示对缓存对象的访问模式，通常是GL_MAP_INVALIDATE_RANGE_BIT，GL_MAP_INVALIDATE_BUFFER_BIT，GL_MAP_FLUSH_EXPLICIT_BIT，GL_MAP_UNSYNCHRONIZED_BIT中的一个或者多个组合，具体每个模式的定义参见OpenGL官方文档。access表示对缓存对象的访问模式，通常是GL_READ_ONLY（只读）,GL_WRITE_ONLY（只写）,GL_READ_WRITE（可读可写）中的一种。参数跟上面第6点一样。]]></description><category></category></item><item><title><![CDATA[OpenGL着色器基础]]></title><link>https://blog.csdn.net/chanlp129/article/details/127602126</link><guid>https://blog.csdn.net/chanlp129/article/details/127602126</guid><author>chanlp129</author><pubDate>Sun, 30 Oct 2022 17:34:17 +0800</pubDate><description><![CDATA[由于着色器对象在同一时刻只能链接一次，这样当多个不同片段着色器需要处理同一个顶点着色器时，就必须把顶点着色器复制多分，然后多次绑定着色器程序，这样就造成资源的浪费和代码的重复。此时独立的着色器对象结合程序管线就可以解决上述问题。：着色器程序是多个着色器合并之后并最终链接完成的版本。已激活着色器程序的着色器将在我们发送渲染调用的时候被使用。：着色器是提供给用户定制自己特殊渲染需求的一套机制。：类似于C语言中的函数指针，主要用来实现子程序的动态选择。]]></description><category></category></item><item><title><![CDATA[OpenGL第三方库：GLAD入门篇]]></title><link>https://blog.csdn.net/chanlp129/article/details/127601869</link><guid>https://blog.csdn.net/chanlp129/article/details/127601869</guid><author>chanlp129</author><pubDate>Sun, 30 Oct 2022 17:08:51 +0800</pubDate><description><![CDATA[GLAD是继GL3W，GLEW之后，当前最新的用来访问OpenGL规范接口的第三方库。：任何的OpenGL接口调用都必须在初始化GLAD库后才可以正常访问。如果成功的话，该接口将返回GL_TRUE，否则就会返回GL_FALSE。：GLAD可以使OpenGL基础渲染变得十分简单，只需要简单四个步骤就可以完成基础渲染。4.使用着色器程序，利用渲染接口将缓冲对象按照指定图元类型渲染出来。：以下提供一个包含GLAD基础渲染操作的大部分接口的在线例子。：由于篇幅较多，已经另外写了一篇博客来记录。]]></description><category></category></item><item><title><![CDATA[OpenGL第三方库：GLFW入门篇]]></title><link>https://blog.csdn.net/chanlp129/article/details/127601244</link><guid>https://blog.csdn.net/chanlp129/article/details/127601244</guid><author>chanlp129</author><pubDate>Sun, 30 Oct 2022 16:36:47 +0800</pubDate><description><![CDATA[前言：GLFW是继GLUT，FreeGLUT之后，当前最新的用来创建OpenGL上下文，以及操作窗口的第三方库。官方网址为：http://www.glfw.org/。
错误处理机制：在使用GLFW之前，有必要设置一个错误处理机制，这样如果出现任何问题，GLFW都可以及时的告知我们。设置接口定义如下：
GLFWWerrorfun* glfwSetErrorCallback(GLFWWerrorfun cbfunc)
其中错误回调函数的声明如下所示：
void ExampleGLFWerrorfun(int e]]></description><category></category></item><item><title><![CDATA[OpenGL之gult/freeglut/glew/glfw/glad的联系与区别]]></title><link>https://blog.csdn.net/chanlp129/article/details/127583106</link><guid>https://blog.csdn.net/chanlp129/article/details/127583106</guid><author>chanlp129</author><pubDate>Sat, 29 Oct 2022 09:29:56 +0800</pubDate><description><![CDATA[opengl]]></description><category></category></item><item><title><![CDATA[SDL中的互斥量和条件变量]]></title><link>https://blog.csdn.net/chanlp129/article/details/127580760</link><guid>https://blog.csdn.net/chanlp129/article/details/127580760</guid><author>chanlp129</author><pubDate>Fri, 28 Oct 2022 22:52:25 +0800</pubDate><description><![CDATA[在最简单的音视频播放器中，由于解复用和解码是在不同的线程中，存放包的队列是公共资源，需要互斥。解复用向队列添加包，解码从队列取包，也需要同步。所以队列的入队和出队操作，采用了互斥量和条件变量。]]></description><category></category></item><item><title><![CDATA[条件变量详细解说]]></title><link>https://blog.csdn.net/chanlp129/article/details/127562608</link><guid>https://blog.csdn.net/chanlp129/article/details/127562608</guid><author>chanlp129</author><pubDate>Thu, 27 Oct 2022 23:05:39 +0800</pubDate><description><![CDATA[条件变量是用来等待线程而不是上锁的，条件变量通常和互斥锁一起使用。条件变量之所以要和互斥锁一起使用，主要是因为互斥锁的一个明显的特点就是它只有两种状态：锁定和非锁定，而条件变量可以通过允许线程阻塞和等待另一个线程发送信号来弥补互斥锁的不足，所以互斥锁和条件变量通常一起使用。当条件满足的时候，线程通常解锁并等待该条件发生变化，一旦另一个线程修改了环境变量，就会通知相应的环境变量唤醒一个或者多个被这个条件变量阻塞的线程。这些被唤醒的线程将重新上锁，并测试条件是否满足。一般来说条件变量被用于线程间的同步；]]></description><category></category></item></channel></rss>