<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[小伙儿在这儿烤地瓜]]></title><description><![CDATA[It's never too late to start]]></description><link>https://blog.youkuaiyun.com/abcSunl</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; abcSunl]]></copyright><item><title><![CDATA[非阻塞同步算法与CAS(Compare and Swap)无锁算法]]></title><link>https://blog.youkuaiyun.com/abcSunl/article/details/90246113</link><guid>https://blog.youkuaiyun.com/abcSunl/article/details/90246113</guid><author>abcSunl</author><pubDate>Wed, 15 May 2019 21:57:31 +0800</pubDate><description><![CDATA[锁（lock）的代价

锁是用来做并发最简单的方式，当然其代价也是最高的。内核态的锁的时候需要操作系统进行一次上下文切换，加锁、释放锁会导致比较多的上下文切换和调度延时，等待锁的线程会被挂起直至锁释放。在上下文切换的时候，cpu之前缓存的指令和数据都将失效，对性能有很大的损失。操作系统对多线程的锁进行判断就像两姐妹在为一个玩具在争吵，然后操作系统就是能决定他们谁能拿到玩具的父母，这是很慢的。用户态...]]></description><category></category></item><item><title><![CDATA[用户态和内核态]]></title><link>https://blog.youkuaiyun.com/abcSunl/article/details/90245413</link><guid>https://blog.youkuaiyun.com/abcSunl/article/details/90245413</guid><author>abcSunl</author><pubDate>Wed, 15 May 2019 21:26:33 +0800</pubDate><description><![CDATA[内核态：cpu可以访问内存的所有数据，包括外围设备，例如硬盘，网卡，cpu也可以将自己从一个程序切换到另一个程序。

用户态：只能受限的访问内存，且不允许访问外围设备，占用cpu的能力被剥夺，cpu资源可以被其他程序获取。



为什么要有用户态和内核态？

由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等...]]></description><category></category></item><item><title><![CDATA[常见的网站服务器架构有哪些？]]></title><link>https://blog.youkuaiyun.com/abcSunl/article/details/80733591</link><guid>https://blog.youkuaiyun.com/abcSunl/article/details/80733591</guid><author>abcSunl</author><pubDate>Tue, 19 Jun 2018 14:37:35 +0800</pubDate><description><![CDATA[1. 初始阶段的网站架构一般来讲，大型网站都是从小型网站发展而来，一开始的架构都比较简单，随着业务复杂和用户量的激增，才开始做很多架构上的改进。当它还是小型网站的时候，没有太多访客，一般来讲只需要一台服务器就够了，这时应用程序、数据库、文件等所有资源都在一台服务器上，网站架构如下图所示：2. 应用服务和数据服务分离随着网站业务的发展和用户量的增加，一台服务器就无法再满足需求了。大量用户访问导致访问...]]></description><category></category></item><item><title><![CDATA[HM使用+码流分析教程]]></title><link>https://blog.youkuaiyun.com/abcSunl/article/details/79696040</link><guid>https://blog.youkuaiyun.com/abcSunl/article/details/79696040</guid><author>abcSunl</author><pubDate>Mon, 26 Mar 2018 11:45:45 +0800</pubDate><description><![CDATA[一、HM使用教程1．下载HM为HEVC的参考软件，下载地址：https://hevc.hhi.fraunhofer.de/svn/svn_HEVCSoftware/分成三个大类：trunk：主干程序，是最新的HM主线版本。branches：分支程序，是扩展的HM版本。tags：各个版本的HM版本。这里下载需要使用TortoiseSVN，网上可以直接下载，这是一个版本控制工具软件，具体介绍见百度百科...]]></description><category></category></item><item><title><![CDATA[如何使用编码265视频]]></title><link>https://blog.youkuaiyun.com/abcSunl/article/details/79695990</link><guid>https://blog.youkuaiyun.com/abcSunl/article/details/79695990</guid><author>abcSunl</author><pubDate>Mon, 26 Mar 2018 11:42:27 +0800</pubDate><description><![CDATA[本文介绍x265中的两种编码视频方法，一是采用命令行的方法；二是GUI的方式。 1、命令行的方法 （1）、第一种方式生成*.265格式的视频文件         第一种方式可以生成*.265格式的视频文件，对应的命令为：[cpp] view plain copyx265 --input-res 352x288 --fps 30 hall_cif_352x288_300.yuv -o hall_ci...]]></description><category></category></item><item><title><![CDATA[x265 命令行参数大全(比较详细)]]></title><link>https://blog.youkuaiyun.com/abcSunl/article/details/79695466</link><guid>https://blog.youkuaiyun.com/abcSunl/article/details/79695466</guid><author>abcSunl</author><pubDate>Mon, 26 Mar 2018 11:14:05 +0800</pubDate><description><![CDATA[除非一个参数被标记为 CLI ONLY，否则该参数也被x265_param_parse() 支持。CLI使用getopt 函数来解释命令行参数，长短版本的参数都可以使用，长参数在不引起歧义的情况下可以截断成短参数。API用户必须把完整的参数名传递给 x265_param_parse()。Preset和tune 有特殊的含义，API用户需要在调用x265_param_parse()设置其他参数之前使...]]></description><category></category></item><item><title><![CDATA[x265的使用方法]]></title><link>https://blog.youkuaiyun.com/abcSunl/article/details/79695442</link><guid>https://blog.youkuaiyun.com/abcSunl/article/details/79695442</guid><author>abcSunl</author><pubDate>Mon, 26 Mar 2018 11:12:32 +0800</pubDate><description><![CDATA[第一步：        进入“...x265_1.8\build\vc10-x86”，双击“build-all.bat”，则进行编译。文件夹中的内容变化如下两图所示。    第二步：        用VS打开上一步中生成的x265.sln，其具体位置在“...\x265_1.8\build\vc10-x86”（如下图，根据平台选择）打开后，VS出现如下界面：第三步：        Build So...]]></description><category></category></item><item><title><![CDATA[安装和配置x265]]></title><link>https://blog.youkuaiyun.com/abcSunl/article/details/79695418</link><guid>https://blog.youkuaiyun.com/abcSunl/article/details/79695418</guid><author>abcSunl</author><pubDate>Mon, 26 Mar 2018 11:11:19 +0800</pubDate><description><![CDATA[        研究了这么久的HEVC Test Model(HM)，相信大家对x265开源代码的实现与框架早就充满了好奇，接下来的日子，我将把自己入手学习与探索“x265开源代码的实现与框架”的过程记录下来，与大家共同进步学习。1、x265下载地址与参考资料x265的官网为： http://x265.org/x265下载地址： https://bitbucket.org/multicorewar...]]></description><category></category></item><item><title><![CDATA[QImage 与 cv::Mat 之间的相互转换]]></title><link>https://blog.youkuaiyun.com/abcSunl/article/details/79401594</link><guid>https://blog.youkuaiyun.com/abcSunl/article/details/79401594</guid><author>abcSunl</author><pubDate>Wed, 28 Feb 2018 15:50:57 +0800</pubDate><description><![CDATA[转自：http://blog.youkuaiyun.com/liyuanbhu/article/details/46662115Qt 中处理图像主要用的是QImage类，OpenCV中主要用的是cv::Mat类。下面的两个函数可以用来实现这两个类相互转换。[cpp] view plain copyQImage cvMat2QImage(const cv::Mat&amp;amp; mat)  {      // 8-...]]></description><category></category></item><item><title><![CDATA[X265不同Preset下的默认参数]]></title><link>https://blog.youkuaiyun.com/abcSunl/article/details/78250622</link><guid>https://blog.youkuaiyun.com/abcSunl/article/details/78250622</guid><author>abcSunl</author><pubDate>Mon, 16 Oct 2017 15:53:45 +0800</pubDate><description><![CDATA[转自：http://blog.youkuaiyun.com/cyril1121/article/details/51323824


不同的Preset将直接影响编码的速度和解码后图像的质量，Preset级别越高，编码速度越慢，解码后的质量也越高；级别越低，速度也越快，解码后的图像质量也就越差，可以通过几下几个参数调节编码速度和解码后图像质量。其中最常见的参数
Coding QT: max CU si]]></description><category></category></item><item><title><![CDATA[回溯法输出字符串入栈出栈的全部可能序列]]></title><link>https://blog.youkuaiyun.com/abcSunl/article/details/78230712</link><guid>https://blog.youkuaiyun.com/abcSunl/article/details/78230712</guid><author>abcSunl</author><pubDate>Fri, 13 Oct 2017 21:47:05 +0800</pubDate><description><![CDATA[输入：abc输出：abcacbbacbcacba]]></description><category></category></item><item><title><![CDATA[C语言中手把手教你动态内存分配]]></title><link>https://blog.youkuaiyun.com/abcSunl/article/details/78128290</link><guid>https://blog.youkuaiyun.com/abcSunl/article/details/78128290</guid><author>abcSunl</author><pubDate>Thu, 28 Sep 2017 21:22:08 +0800</pubDate><description><![CDATA[动态内存分配

常见的内存分配的错误

先上一个内存分配的思维导图:便于联想想象，理解：


首先我们介绍一下内存分配的方式：

1:在静态存储区域中进行分配
        内存在程序编译的时候就已经分配好，这块内存在程序的整个运行期间都存在。例如全局变量，static变量
12

2:在栈中进行分配
        在执行函数时，函数内局部变量的存储单元都可以在栈上创]]></description><category></category></item><item><title><![CDATA[音频倍速（变速不变调）的实现]]></title><link>https://blog.youkuaiyun.com/abcSunl/article/details/77196788</link><guid>https://blog.youkuaiyun.com/abcSunl/article/details/77196788</guid><author>abcSunl</author><pubDate>Tue, 15 Aug 2017 17:47:41 +0800</pubDate><description><![CDATA[背景：

        项目需要，开发一款自己的安卓端播放器，其中需要有一个视频倍速播放的功能。需要实现的效果是变速不变调。项目基于FFMpeg和WebRtc，通过FFMpeg从网络读取视频流，经过解封装、解复用分离成音频数据包和视频数据包。并分别对音视频数据包进行解码，解码完成之后的音频PCM（44100Hz，16bit，MONO）数据通过WebRtc提供的接口抛给AudioTrack，视]]></description><category></category></item><item><title><![CDATA[依赖注入那些事儿]]></title><link>https://blog.youkuaiyun.com/abcSunl/article/details/76673153</link><guid>https://blog.youkuaiyun.com/abcSunl/article/details/76673153</guid><author>abcSunl</author><pubDate>Fri, 04 Aug 2017 11:38:05 +0800</pubDate><description><![CDATA[目录
目录
1 IGame游戏公司的故事
    1.1 讨论会
    1.2 实习生小李的实现方法
    1.3 架构师的建议
    1.4 小李的小结
2 探究依赖注入
    2.1 故事的启迪
    2.2 正式定义依赖注入
3 依赖注入那些事儿
    3.1 依赖注入的类别
        3.1.1 Setter注入
        3.1.2 Co]]></description><category></category></item><item><title><![CDATA[同步、异步与阻塞和非阻塞]]></title><link>https://blog.youkuaiyun.com/abcSunl/article/details/76423444</link><guid>https://blog.youkuaiyun.com/abcSunl/article/details/76423444</guid><author>abcSunl</author><pubDate>Mon, 31 Jul 2017 12:53:59 +0800</pubDate><description><![CDATA[综合 知乎 怎样理解阻塞非阻塞与同步异步的区别？   严肃的回答  愚抄的回答






1.同步与异步
同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)
所谓同步，就是在发出一个*调用*时，在没有得到结果之前，该*调用*就不返回。但是一旦调用返回，就得到返回值了。
换句话说，就是由]]></description><category></category></item><item><title><![CDATA[静态方法和实例化方法的区别]]></title><link>https://blog.youkuaiyun.com/abcSunl/article/details/76423274</link><guid>https://blog.youkuaiyun.com/abcSunl/article/details/76423274</guid><author>abcSunl</author><pubDate>Mon, 31 Jul 2017 11:38:25 +0800</pubDate><description><![CDATA[方法是我们每天都在写得，很多程序员大多都使用实例化方法，而很少使用静态方法，问原因也说不出来所以然，或者简单的回答两者定义的区别，静态方法不需要new就可以使用 实例化方法需要new了以后才可以使用。。。。我们真的理解了吗？
从实际项目开发说起，这里有开发项目的三种方式：
开发项目中把BLL和DAL分开，在BLL调用DAL的代码。
一、在DAL中使用静态方法，不创建实例直接调用（大概有很多人]]></description><category></category></item><item><title><![CDATA[ffmpeg之demux 解复用]]></title><link>https://blog.youkuaiyun.com/abcSunl/article/details/76339313</link><guid>https://blog.youkuaiyun.com/abcSunl/article/details/76339313</guid><author>abcSunl</author><pubDate>Sat, 29 Jul 2017 16:47:46 +0800</pubDate><description><![CDATA[今天学习解析媒体文件。
写了一个用例，解析MP4文件得到视频帧和音频帧，并分别保存到不同的文件。
照惯例，先学习，再代码。


学习
av_register_all



[cpp] 
view plain 
copy 


/**  * 初始化 libavformat，并且注册所有的合并器、解析器和协议。  * 如果你不调用这个方法，你可以明确地选择你想要程序支持的]]></description><category></category></item><item><title><![CDATA[cv::Mat到YUV420的转换]]></title><link>https://blog.youkuaiyun.com/abcSunl/article/details/76146881</link><guid>https://blog.youkuaiyun.com/abcSunl/article/details/76146881</guid><author>abcSunl</author><pubDate>Wed, 26 Jul 2017 14:49:55 +0800</pubDate><description><![CDATA[某些特定场合我们会经常遇到yuv420格式的视频文件，这种视频帧无法直接用于OpenCV，故而，需要进行格式转换；幸运的是，opencv提供了rgb到yuv420的格式转换函数；下面给出基本用法；


函数1：读取avi格式的视频文件，转换成Yuv420格式，并写入文件；


[cpp] 
view plain 
copy 


void WriteYuv()  {]]></description><category></category></item><item><title><![CDATA[FFmpeg数据结构：AVPacket解析]]></title><link>https://blog.youkuaiyun.com/abcSunl/article/details/75339113</link><guid>https://blog.youkuaiyun.com/abcSunl/article/details/75339113</guid><author>abcSunl</author><pubDate>Wed, 19 Jul 2017 10:14:23 +0800</pubDate><description><![CDATA[本文主要从以下几个方面对AVPacket做解析：

AVPacket在FFmpeg中的作用字段说明AVPacket中的内存管理AVPacket相关函数的说明结合AVPacket队列说明下AVPacket在传递过程中数据缓存的管理
查了一些资料，发现FFmpeg的版本更新还是挺快，而且有很多API也有改动，本文使用的FFmpeg的最新版本3.1。
AVPacket简介
AVPacket是F]]></description><category></category></item><item><title><![CDATA[JNI实现回调| JNI调用JAVA函数|参数和返回值的格式]]></title><link>https://blog.youkuaiyun.com/abcSunl/article/details/75091290</link><guid>https://blog.youkuaiyun.com/abcSunl/article/details/75091290</guid><author>abcSunl</author><pubDate>Thu, 13 Jul 2017 19:38:37 +0800</pubDate><description><![CDATA[代码下载：http://dl.dbank.com/c0c0xs3b24

一、JNI实现回调
通过JNI在Native层调用Java层的方法，来实现Native层向JAVA层传递消息。
JNICallback.java



[java] 
view plain 
copy 


public class JNICallback extends Activity {   ]]></description><category></category></item></channel></rss>