<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[记录学习的过程]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/weiwei9363</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; weiwei9363]]></copyright><item><title><![CDATA[Harness Engineering 实战（一）：为 fdk-acc 添加单元测试]]></title><link>https://blog.csdn.net/weiwei9363/article/details/160252418</link><guid>https://blog.csdn.net/weiwei9363/article/details/160252418</guid><author>weiwei9363</author><pubDate>Mon, 20 Apr 2026 09:31:37 +0800</pubDate><description><![CDATA[Harness Engineering 近期很火，似乎所有 code agent 相关的公司都在提。虽然 Anthropic、OpenAI 等公司都写了不少关于 Harness Engine 的文章，但想要落地在自己的业务上，似乎缺有些不知从哪下手，有点牛头不对马嘴，有点不知所措。作为一个混迹互联网多年的程序员，在 ai 浪潮狠狠的拍打在我身上的时候，我在思考下一步能做什么，而 harness engineering 无疑是一个值得探索的领域。]]></description><category></category></item><item><title><![CDATA[H264解码：读取和解析Nalu]]></title><link>https://blog.csdn.net/weiwei9363/article/details/157294063</link><guid>https://blog.csdn.net/weiwei9363/article/details/157294063</guid><author>weiwei9363</author><pubDate>Sun, 25 Jan 2026 11:07:25 +0800</pubDate><description><![CDATA[想学习下视频解码相关的知识，本系列记录下学习过程。现在有了 AI 知识获取很快，但还是感觉还是写一写记一记，不然回头搞忘记又得重新开始学。思绪有点跳跃，想到哪就写到哪了。所有代码可以在找到在 H.264/AVC 视频编码标准中，NALU 的全称是 Network Abstraction Layer Unit（网络抽象层单元）。简单来说，它是 H.264 数据的基本打包单位。]]></description><category></category></item><item><title><![CDATA[手把手教你写一个 JPEG 解码器（二）：解码器 C/C++ 实现]]></title><link>https://blog.csdn.net/weiwei9363/article/details/149440249</link><guid>https://blog.csdn.net/weiwei9363/article/details/149440249</guid><author>weiwei9363</author><pubDate>Fri, 18 Jul 2025 18:52:02 +0800</pubDate><description><![CDATA[前一章我们介绍 jpeg 编码原理的相关知识，本章则进入实战环节，手写 jpeg 解码器。所有代码我已经放到了，你可以运行 tests 下单测，或者运行 main.cpp 来解码一个 jpeg 文件。接下来是对整体解码流程的介绍，主要包含两个部分：JFIF文件解析和JEPG数据解码。JPEG本身只规定了图像的压缩算法和数据格式，并没有规定文件的封装结构，经过 JPEG 压缩后得到的比特流，需要存放在一个文件中，并且这个文件中还需要有其他额外信息，帮助我们进行解码，例如需要有图片的宽高、文件像素格式等等。]]></description><category></category></item><item><title><![CDATA[手把手教你写一个 JPEG 解码器（一）：JPEG 编码原理]]></title><link>https://blog.csdn.net/weiwei9363/article/details/136229554</link><guid>https://blog.csdn.net/weiwei9363/article/details/136229554</guid><author>weiwei9363</author><pubDate>Wed, 16 Jul 2025 07:15:14 +0800</pubDate><description><![CDATA[JEPG，即 Joint Photographic Experts Group，它有好几个含义JFIF 是一种基于 JPEG 标准的文件封装格式，目的是规范 JPEG 压缩数据在不同设备和平台上交换、保存、识别的方式。整个图片数据分为多个“段”（segment），包括压缩的图像数据，也可以包含缩略图、分辨率等信息。]]></description><category></category></item><item><title><![CDATA[XMP-Toolkit-SDK 编译与示例程序]]></title><link>https://blog.csdn.net/weiwei9363/article/details/147691092</link><guid>https://blog.csdn.net/weiwei9363/article/details/147691092</guid><author>weiwei9363</author><pubDate>Wed, 07 May 2025 22:48:24 +0800</pubDate><description><![CDATA[XMP-Toolkit-SDK 是 Adobe 提供的一套开源软件开发工具包（SDK），用于创建、读取、修改、序列化和操作 XMP（eXtensible Metadata Platform）元数据。XMP 是一种标准，用于在多种文件格式（如 JPEG、TIFF、PDF、RAW 图像等）中嵌入描述性元数据，比如作者名、版权信息、GPS 坐标、拍摄设置等。解析和生成 XMP 元数据：方便地从支持 XMP 的文件中读取或写入元数据。元数据管理：集成到各种工作流中（如数字资产管理、图片管理系统）。]]></description><category></category></item><item><title><![CDATA[GStreamer 简明教程（十一）：插件开发，以一个音频生成（Audio Source）插件为例]]></title><link>https://blog.csdn.net/weiwei9363/article/details/147002844</link><guid>https://blog.csdn.net/weiwei9363/article/details/147002844</guid><author>weiwei9363</author><pubDate>Fri, 25 Apr 2025 22:34:51 +0800</pubDate><description><![CDATA[GStreamer 中插件分为三种：Source、Filter 和 Sink，在上一章中我们学习了如何写一个 Filter 插件，可以说 Filter 插件是最简单的，因为它只需要关系数据的处理逻辑，而 Source 和 Sink 就更加复杂一些。本章我们来讨论如何写一个 Source 插件。本章所提及的代码你可以在my_plugin找到。以上，我们就将 AudioSource 如何生成数据的逻辑大致讲了一遍，运行之后可以听到正弦波的声音。]]></description><category></category></item><item><title><![CDATA[GStreamer 简明教程（十）：插件开发，以一个音频特效插件为例]]></title><link>https://blog.csdn.net/weiwei9363/article/details/145267864</link><guid>https://blog.csdn.net/weiwei9363/article/details/145267864</guid><author>weiwei9363</author><pubDate>Tue, 21 Jan 2025 18:43:12 +0800</pubDate><description><![CDATA[GStreamer 简明教程系列已经更新了 9 期，这些教程基本是我个人在学习官方教程中的一些理解和总结。官方的基础教程中远不止 9 期，但后续的基础教程我决定不再更新了，因为后面的内容基本还是围绕如何使用 GStreamer 中的某种功能来展开的，它不涉及 GStreamer 底层代码的实现逻辑。回看我最初学习 GStreamer 的目的，最重要是掌握 GStreamer 的设计思想，学习消化后以便自己能设计出一套类似的音视频框架，因此我对 GStreamer 底层的实现逻辑更感兴趣。]]></description><category></category></item><item><title><![CDATA[GObject 简明教程（二）]]></title><link>https://blog.csdn.net/weiwei9363/article/details/144703357</link><guid>https://blog.csdn.net/weiwei9363/article/details/144703357</guid><author>weiwei9363</author><pubDate>Tue, 07 Jan 2025 19:21:52 +0800</pubDate><description><![CDATA[最近，我一直在深入学习 GStreamer（相关教程可以从我主页中看到）。在探索其复杂的设计逻辑时，我意识到需要深入研究 GStreamer 的源码。而因为 GStreamer 是基于 GObject 开发的，掌握 GObject 的基本概念就显得尤为重要。本文整理自，简化了细节，保留了一些关键内容，以便更好地理解。上一章GObject 简明教程（一）我们介绍了的前面五章。今天我们继续，将后面几章也进行总结和更新。]]></description><category></category></item><item><title><![CDATA[GObject 简明教程（一）]]></title><link>https://blog.csdn.net/weiwei9363/article/details/144617256</link><guid>https://blog.csdn.net/weiwei9363/article/details/144617256</guid><author>weiwei9363</author><pubDate>Sat, 21 Dec 2024 19:04:14 +0800</pubDate><description><![CDATA[最近，我一直在深入学习 GStreamer（相关教程可以从我主页中看到）。在探索其复杂的设计逻辑时，我意识到需要深入研究 GStreamer 的源码。而因为 GStreamer 是基于 GObject 开发的，掌握 GObject 的基本概念就显得尤为重要。本文整理自，简化了细节，保留了一些关键内容，以便更好地理解。提示：以下是本篇文章正文内容，下面案例可供参考。]]></description><category></category></item><item><title><![CDATA[GStreamer 简明教程（九）：Seek 与跳帧]]></title><link>https://blog.csdn.net/weiwei9363/article/details/143702560</link><guid>https://blog.csdn.net/weiwei9363/article/details/143702560</guid><author>weiwei9363</author><pubDate>Sat, 16 Nov 2024 22:26:12 +0800</pubDate><description><![CDATA[本文对内容进行说明，重点是理解 GStreamer 中 seek events 和 step events。]]></description><category></category></item><item><title><![CDATA[GStreamer 简明教程（八）：常用工具介绍]]></title><link>https://blog.csdn.net/weiwei9363/article/details/143320972</link><guid>https://blog.csdn.net/weiwei9363/article/details/143320972</guid><author>weiwei9363</author><pubDate>Fri, 08 Nov 2024 10:00:29 +0800</pubDate><description><![CDATA[本章内容是对 GStreamer 官方教程中第九、十和十一三章的一个介绍。这几章涉及的代码不多，主要是介绍 GStreamer 中工具，包括 GstDiscoverer、gst-discoverer-1.0、gst-launch-1.0、gst-inspect-1.0 、日志工具等。这块可以扩展的内容比较少，但我又不想漏了这块，因此本文只是做一些粗粒度的总结。]]></description><category></category></item><item><title><![CDATA[GStreamer 简明教程（七）：实现管道的动态数据流]]></title><link>https://blog.csdn.net/weiwei9363/article/details/142971004</link><guid>https://blog.csdn.net/weiwei9363/article/details/142971004</guid><author>weiwei9363</author><pubDate>Wed, 16 Oct 2024 21:25:08 +0800</pubDate><description><![CDATA[本章基于进行说明和补充，以便读者掌握如何动态的插入或者提取出 Pipeline 中的数据。本章内容并不复杂，它引入了两个新的 Element：appsrc 和 appsink。通过这两个 Element 我们可以实现动态管理数据流。由于官方教程代码在本人机器上总是运行失败，因此我对它做了一些修改，具体代码在本文介绍了 appsrc 和 appsink 的使用，通过使用 Element Signals 和 Element Actions 机制，我们可以动态地与元素进行交互。]]></description><category></category></item><item><title><![CDATA[GStreamer 简明教程（六）：利用 Tee 复制流数据，巧用 Queue 实现多线程]]></title><link>https://blog.csdn.net/weiwei9363/article/details/141611426</link><guid>https://blog.csdn.net/weiwei9363/article/details/141611426</guid><author>weiwei9363</author><pubDate>Sat, 12 Oct 2024 17:59:53 +0800</pubDate><description><![CDATA[本章基于官方教程进行说明和补充。本章内容并不复杂，引入了两个新的 Element：Tee 和 Queue。Tee 用于复制数据， Queue 创建线程让 Pipeline 的一部分在另外线程中运行。由于官方教程在本人机器上总是无法运行，我对它做了一些修改，具体代码在。]]></description><category></category></item><item><title><![CDATA[GStreamer 简明教程（五）：Pad 相关概念介绍，Pad Capabilities/Templates]]></title><link>https://blog.csdn.net/weiwei9363/article/details/141443927</link><guid>https://blog.csdn.net/weiwei9363/article/details/141443927</guid><author>weiwei9363</author><pubDate>Sun, 25 Aug 2024 21:31:22 +0800</pubDate><description><![CDATA[本章基于官方教程进行一些说明和补充。本来想对进行讨论的，但我的机器上安装 gtk 后运行程序总是崩溃，因此放弃。在前面的章节中也有泛泛地提到过 Pad，例如GStreamer 简明教程（二）：基本概念介绍，Element 和 Pipeline和GStreamer 简明教程（三）：动态调整 Pipeline。接下来这一章，我们将对 Pad 这个在 GStreamer 中非常重要的概念进行详细阐述。在 GStreamer 中，Pad 是连接不同元素之间的接口，允许它们相互通信和传递数据的概念。]]></description><category></category></item><item><title><![CDATA[GStreamer 简明教程（四）：Seek 以及获取文件时长]]></title><link>https://blog.csdn.net/weiwei9363/article/details/141287222</link><guid>https://blog.csdn.net/weiwei9363/article/details/141287222</guid><author>weiwei9363</author><pubDate>Wed, 21 Aug 2024 20:15:12 +0800</pubDate><description><![CDATA[如何查询 Pipeline 的信息，例如时长，当前播放位置等如何进行 seek 操作。]]></description><category></category></item><item><title><![CDATA[GStreamer 简明教程（三）：动态调整 Pipeline]]></title><link>https://blog.csdn.net/weiwei9363/article/details/141200282</link><guid>https://blog.csdn.net/weiwei9363/article/details/141200282</guid><author>weiwei9363</author><pubDate>Sat, 17 Aug 2024 15:10:00 +0800</pubDate><description><![CDATA[本章来了解 GStreamer 动态调整 Pipeline 的流程，这章代码略长，略微有些复杂，各位看官稍稍耐心些。在src参数表示触发信号的 GstElement，在本例中通常为 uridecodebin，因为它是唯一附加了该信号的元素。信号处理函数的第一个参数始终是触发信号的对象。new_pad参数表示刚刚添加到src元素的 GstPad。通常，我们希望连接的就是这个 pad。第一次，添加的 pad 负责输出视频数据第二次，添加的 pad 负责输出音频数据data。]]></description><category></category></item><item><title><![CDATA[GStreamer 简明教程（二）：基本概念介绍，Element 和 Pipeline]]></title><link>https://blog.csdn.net/weiwei9363/article/details/141097034</link><guid>https://blog.csdn.net/weiwei9363/article/details/141097034</guid><author>weiwei9363</author><pubDate>Tue, 13 Aug 2024 21:34:47 +0800</pubDate><description><![CDATA[在上一章中我们成功的搭建了 GStreamer 的调试环境，并运行了 Hello World 程序。本章我们将介绍 GStreamer 中的基本概念，包括 Element 和 Pipeline。另外，还介绍使用 gst-inspect-1.0 程序来查看插件的基本信息。GStreamer 是基于插件的架构，它处处离不开插件，你几乎所有功能都是被封装在插件之中。因此如何查询插件信息是我们需要掌握的。]]></description><category></category></item><item><title><![CDATA[GStreamer 简明教程（一）：环境搭建，运行 Basic Tutorial 1 Hello world!]]></title><link>https://blog.csdn.net/weiwei9363/article/details/141070829</link><guid>https://blog.csdn.net/weiwei9363/article/details/141070829</guid><author>weiwei9363</author><pubDate>Fri, 09 Aug 2024 22:09:56 +0800</pubDate><description><![CDATA[本系列文章将纪录学习 [GStreamer] 的过程。多媒体处理是一个复杂的任务，[GStreamer] 的管道架构可以将复杂的任务以「图」的形式模块化的进行处理，它足够灵活。学习 [GStreamer]  这种架构思想，可以帮助我扩展视野，面对复杂任务如何给出一套灵活可靠的框架。掌握 [GStreamer] 对求职有所帮助，如果你对 [GStreamer] 很熟悉，很多音视频岗位是可以加分的。]]></description><category></category></item><item><title><![CDATA[LearnOpenGL - Android OpenGL ES 3.0 多线程同步，fence、glWaitSync 和 glClientWaitSync 的运用]]></title><link>https://blog.csdn.net/weiwei9363/article/details/140559485</link><guid>https://blog.csdn.net/weiwei9363/article/details/140559485</guid><author>weiwei9363</author><pubDate>Sun, 21 Jul 2024 22:01:56 +0800</pubDate><description><![CDATA[本章讨论 OpenGL ES 中多线程技术的运用。首先，说明我们为什么需要这项技术，在 ARM OpenGL ES 教程中提到当我们转向更复杂的图形应用程序时，可能会想要使用多线程（MT）。一个典型的情况是，我们的图形应用程序需要执行大量的数学运算。在这种情况下，可能通过将工作量移至不同于管理图形操作的线程来提高性能。另一个常见的例子是我们想让图形用户界面（GUI）在一个独立的线程中运行。多线程的好处非常重要。MT使得我们的应用程序始终保持响应，并且不只是与应用程序的GUI有关。]]></description><category></category></item><item><title><![CDATA[LearnOpenGL - Android OpenGL ES 3.0 基础特效实现]]></title><link>https://blog.csdn.net/weiwei9363/article/details/140190501</link><guid>https://blog.csdn.net/weiwei9363/article/details/140190501</guid><author>weiwei9363</author><pubDate>Fri, 12 Jul 2024 10:16:58 +0800</pubDate><description><![CDATA[本章我们学习下如何来写一个基础特效，本文所有代码你可以在找到本文介绍了 8 中基础特效的实现逻辑，所有代码可以在找到。]]></description><category></category></item></channel></rss>