<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[心之所向，身之所往]]></title><description><![CDATA[专注于多媒体技术(H264、HEVC、流媒体、ffmpeg、DirectShow、DXVA、MediaFundation)]]></description><link>https://blog.youkuaiyun.com/chenchong_219</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; chenchong_219]]></copyright><item><title><![CDATA[Hook参考源码]]></title><link>https://blog.youkuaiyun.com/chenchong_219/article/details/45456499</link><guid>https://blog.youkuaiyun.com/chenchong_219/article/details/45456499</guid><author>chenchong_219</author><pubDate>Sun, 03 May 2015 07:54:39 +0800</pubDate><description><![CDATA[HOOK可以参考以下三个源码：
mHook, minHook, Detours]]></description><category></category></item><item><title><![CDATA[x264_scan8 的理解]]></title><link>https://blog.youkuaiyun.com/chenchong_219/article/details/44899527</link><guid>https://blog.youkuaiyun.com/chenchong_219/article/details/44899527</guid><author>chenchong_219</author><pubDate>Mon, 06 Apr 2015 08:51:45 +0800</pubDate><description><![CDATA[原文：http://blog.youkuaiyun.com/hevc_cjl/article/details/8273533
先上代码及注释



[cpp] view
 plaincopy






#define X264_SCAN8_SIZE (6*8) //!  
#define X264_SCAN8_0 (4+1*8) //!  
  
static const i]]></description><category></category></item><item><title><![CDATA[I 帧和 IDR 帧的区别]]></title><link>https://blog.youkuaiyun.com/chenchong_219/article/details/44870903</link><guid>https://blog.youkuaiyun.com/chenchong_219/article/details/44870903</guid><author>chenchong_219</author><pubDate>Sat, 04 Apr 2015 09:21:05 +0800</pubDate><description><![CDATA[I 帧和 IDR 帧的区别：

    IDR 帧属于 I 帧。解码器收到 IDR
 frame  时，将所有的参考帧队列丢弃 （用x264_reference_reset 函数实现——在 encoder.c 文件中） 。这点是所有 I 帧共有的特性，但是收到 IDR 帧时，解码器另外需要做的工作就是：把所有的 PPS 和 SPS 参数进行更新。由此可见，在编码器端，每发一个 IDR ，就相]]></description><category></category></item><item><title><![CDATA[X264如何阅读数]]></title><link>https://blog.youkuaiyun.com/chenchong_219/article/details/44859803</link><guid>https://blog.youkuaiyun.com/chenchong_219/article/details/44859803</guid><author>chenchong_219</author><pubDate>Fri, 03 Apr 2015 21:05:17 +0800</pubDate><description><![CDATA[最近我也开始看 X264 的代码了，于是想到把我读代码的过程记录下来，因为总有很多新手问如何读代码，我这个帖子就是专为这些人写的。至于会读代码的人就完全没有必要看了。下面当然是以 X264 为例了。JM 以及其他代码的学习方法和技巧都是完全一样的。我所用的版本是在帖子 在VS2008下编译最新版的x264连接错误 里上传的版本。最新版本的代码基本结构应该变化不大。

首先肯定是要把 X264 ]]></description><category></category></item><item><title><![CDATA[Windows下编译x264]]></title><link>https://blog.youkuaiyun.com/chenchong_219/article/details/44817099</link><guid>https://blog.youkuaiyun.com/chenchong_219/article/details/44817099</guid><author>chenchong_219</author><pubDate>Wed, 01 Apr 2015 23:14:13 +0800</pubDate><description><![CDATA[早期的版本有vc可以直接编译的， 现在的没有vc版本了；

如果希望在windows上学习x264，可以直接找到vc版本；




这里例举一下，网上的两个版本方法：




一：《VS2010编译x264(20091006)》



如果你仅仅需要使用x264的话你可以到这下载：http://x264.nl/
x264的源码下载地址：http://www.vid]]></description><category></category></item><item><title><![CDATA[Win8+VS2012（32位）下编译x265]]></title><link>https://blog.youkuaiyun.com/chenchong_219/article/details/44773697</link><guid>https://blog.youkuaiyun.com/chenchong_219/article/details/44773697</guid><author>chenchong_219</author><pubDate>Tue, 31 Mar 2015 07:58:13 +0800</pubDate><description><![CDATA[相信很多朋友都尝试过编译x265，本人之前总是一头雾水，根据其x265官网的介绍尝试了好几种办法，一直没有搞定，还装了很多东西，什么yasm、Intel编译器和Cmake之类的，后来发现我把问题想得太复杂了，现介绍我在VS2012平台下编译x265的方法。

前期准备工作：

1、x265开源代码。

2、系统预安装Cmake软件。

3、安装yasm和vld。

具体步骤如下]]></description><category></category></item><item><title><![CDATA[SSE指令集入门]]></title><link>https://blog.youkuaiyun.com/chenchong_219/article/details/44683155</link><guid>https://blog.youkuaiyun.com/chenchong_219/article/details/44683155</guid><author>chenchong_219</author><pubDate>Fri, 27 Mar 2015 21:46:33 +0800</pubDate><description><![CDATA[Intel公司的单指令多数据流式扩展（SSE，Streaming SIMD Extensions）技术能够有效增强CPU浮点运算的能力。Visual Studio .NET 2003提供了对SSE指令集的编程支持，从而允许用户在C++代码中不用编写汇编代码就可直接使用SSE指令的功能。MSDN中有关SSE技术的主题[1]有可能会使不熟悉使用SSE汇编指令编程的初学者感到困惑，但是在阅读MSDN有关]]></description><category></category></item><item><title><![CDATA[编写高效代码(8) 程序、数据访问符合Cache的时间、空间局部性]]></title><link>https://blog.youkuaiyun.com/chenchong_219/article/details/44682563</link><guid>https://blog.youkuaiyun.com/chenchong_219/article/details/44682563</guid><author>chenchong_219</author><pubDate>Fri, 27 Mar 2015 21:11:50 +0800</pubDate><description><![CDATA[Cache正是利用了程序、数据访问时的时间局部性和空间局部性，为了使Cache的访问效率最高，程序和数据的组织，也应该要符合这两个特性。最典型的例子就是二维数组的访问，下面就是一个二维数组：



二维数组

        如果a[i][j]在Cache中，那么a[i][j+1]就很可能也在Cache中，但是a[i+1][j]则不一定。于是代码这样写就不太好：

 

for]]></description><category></category></item><item><title><![CDATA[编写高效代码(7) 优化内存访问——别让包袱拖垮了你]]></title><link>https://blog.youkuaiyun.com/chenchong_219/article/details/44682547</link><guid>https://blog.youkuaiyun.com/chenchong_219/article/details/44682547</guid><author>chenchong_219</author><pubDate>Fri, 27 Mar 2015 21:11:27 +0800</pubDate><description><![CDATA[从理论上看，每条运算指令的执行时间都很短，大多数指令一个Cycle就能完成，很多时候还能一个Cycle执行多条指令，可是实际上，执行指令只是处理器要做的很少一部分工作，处理器还要从存储器中取指令，从存储器中将数据导入到寄存器中，等算完后，再将结果存入到存储器中。

        处理器运算的速度像兔子赛跑一样快，但是存储器的访问速度像乌龟走路一样慢，而且越是远离内核的存储器，访问速度越慢。]]></description><category></category></item><item><title><![CDATA[编写高效代码(6) 数据对齐访问]]></title><link>https://blog.youkuaiyun.com/chenchong_219/article/details/44682557</link><guid>https://blog.youkuaiyun.com/chenchong_219/article/details/44682557</guid><author>chenchong_219</author><pubDate>Fri, 27 Mar 2015 21:11:19 +0800</pubDate><description><![CDATA[在32位处理器中，一个int型变量占4个byte，假设这个变量i在内存中占据2、3、4、5这4个byte的位置，如下图所示。

 

数据非对齐存储

        内核在访问这个数据时，会先将从0开始的4个byte读入到寄存器A中，再将从4开始的4个byte读入到寄存器B中，再将有效的数据拼成一个int数据，放在寄存器C中，可见，这种访问效率是多么的低下啊，如果变量i存储在从0开始]]></description><category></category></item><item><title><![CDATA[编写高效代码(5) 尽量减少分支]]></title><link>https://blog.youkuaiyun.com/chenchong_219/article/details/44682545</link><guid>https://blog.youkuaiyun.com/chenchong_219/article/details/44682545</guid><author>chenchong_219</author><pubDate>Fri, 27 Mar 2015 21:10:22 +0800</pubDate><description><![CDATA[我们在介绍处理器时，已经知道了，现在的处理器都是流水线结构，if和switch等语句会带来跳转，而跳转会打乱流水线的正常执行，影响程序的执行效率。

         下面这段代码，把奇数赋一个值，把偶数赋一个值，可以用这种方式实现： 



[cpp] view
 plaincopyprint?






for(i=0; i
  
{  
  
   if]]></description><category></category></item><item><title><![CDATA[编写高效代码(4) 在精度允许的条件下，将浮点数定点化]]></title><link>https://blog.youkuaiyun.com/chenchong_219/article/details/44682527</link><guid>https://blog.youkuaiyun.com/chenchong_219/article/details/44682527</guid><author>chenchong_219</author><pubDate>Fri, 27 Mar 2015 21:10:02 +0800</pubDate><description><![CDATA[浮点指令要比定点指令慢很多，功耗也大很多，在精度要求不那么高的情况下，就可以将浮点数定点化，用定点指令来代替浮点指令，一个典型的例子就是alpha混合。

        《反恐精英》是很多人非常喜欢的游戏，在下面的游戏截图中，一个人扔了个烟雾弹，画面呈现出半透明的烟雾效果，随着时间的推移，烟雾逐渐散去，画面恢复到原来的状态。

        这种效果如果让美工来实现，那会把人累死，其实]]></description><category></category></item><item><title><![CDATA[编写高效代码(3) 减少处理器不擅长的操作——不要逼我做我不喜欢的事情]]></title><link>https://blog.youkuaiyun.com/chenchong_219/article/details/44682513</link><guid>https://blog.youkuaiyun.com/chenchong_219/article/details/44682513</guid><author>chenchong_219</author><pubDate>Fri, 27 Mar 2015 21:09:33 +0800</pubDate><description><![CDATA[尺有所短，寸有所长，每种处理器都有自己擅长与不擅长的操作。

        在与处理器配套发布的指令集手册中，都会描述每个指令的执行周期，单周期指令是处理器最喜欢的，不仅执行时间短，而且利于流水线执行。加、减、逻辑运算等，常常是单周期指令，乘、除、分支指令、浮点指令、内存存取操作等，常常需要较多的时钟周期。我们在编程时，就应该少使用执行时间长的指令。

        Q：这些复杂指令都]]></description><category></category></item><item><title><![CDATA[编写高效代码(2) 空间换时间——我们总是在走，却忘了停留]]></title><link>https://blog.youkuaiyun.com/chenchong_219/article/details/44682499</link><guid>https://blog.youkuaiyun.com/chenchong_219/article/details/44682499</guid><author>chenchong_219</author><pubDate>Fri, 27 Mar 2015 21:08:28 +0800</pubDate><description><![CDATA[时间和空间的关系，是霍金这种智商的人要研究的东西，我们只需要知道，在编程时，空间是可以换时间的，时间也是可以换空间的。

         李开复在他的自传《世界因你不同》中描述了他小时候在美国学校里的一个故事，老师出了道题：“谁知道1/7等于多少？”小开复马上大声回答：“0.142857”，老师和同学们都惊呼开复是个天才，其实事实情况是，开复以前在台湾时就记下了这个答案。这就是一个典型的以空]]></description><category></category></item><item><title><![CDATA[编写高效代码(1) 减少函数调用——不要老打断我]]></title><link>https://blog.youkuaiyun.com/chenchong_219/article/details/44682483</link><guid>https://blog.youkuaiyun.com/chenchong_219/article/details/44682483</guid><author>chenchong_219</author><pubDate>Fri, 27 Mar 2015 21:07:48 +0800</pubDate><description><![CDATA[函数是结构化程序设计的产物，它使代码更加模块化，耦合性更低，重用性更高。不过，函数调用会带来额外的开销，除了引起跳转外，还会产生额外的指令。

        人都有这样的经验，做一件事情时，如果被人打断，重新再回来做这件事情，就需要一段恢复时间，如果老是被打断，那事情就没法做了。函数调用也是这样，要进行参数压栈出栈、寄存器保存、指令跳转等。多个步骤如果程序的性能要求较高，就可以将一些小的函数]]></description><category></category></item><item><title><![CDATA[H.264中的P-Skip宏块和BSkip宏块简介]]></title><link>https://blog.youkuaiyun.com/chenchong_219/article/details/44542547</link><guid>https://blog.youkuaiyun.com/chenchong_219/article/details/44542547</guid><author>chenchong_219</author><pubDate>Sun, 22 Mar 2015 21:46:24 +0800</pubDate><description><![CDATA[先说PSkip宏块，再说BSkip宏块.

       P-Skip宏块是一种特殊的P宏块，在H.264中非常常见，那么P-Skip宏块特殊在什么地方呢？下面会慢慢道来.

 

       对于一般的P宏块而言，像素残差和运动矢量残差都会写入码流，从编码端传到解码端，但是P-Skip宏块的特殊之处就在于，既不传送像素残差，也不传送运动矢量残差（在这种情况下，像素残差和运动矢量残差]]></description><category></category></item><item><title><![CDATA[结合avi视频文件头十六进制码分析AVI格式]]></title><link>https://blog.youkuaiyun.com/chenchong_219/article/details/44264273</link><guid>https://blog.youkuaiyun.com/chenchong_219/article/details/44264273</guid><author>chenchong_219</author><pubDate>Sat, 14 Mar 2015 22:24:41 +0800</pubDate><description><![CDATA[这段时间要搞视频合成方面的东西，因此打算先弄明白avi视频的格式，介绍这方面内容的东西google一下一大堆，可是很悲剧，现在的人基本上都喜欢copy，内容基本来源于同一篇，对我没什么实质性的帮助。本来是希望通过看看一些avi合成的源码来分析avi的结构的，可是windows下的程序基本是调用directshow完成的，格式方法都封装好了。
　　百思不得其解之余，还只自己分析吧。
　　开始之前]]></description><category></category></item><item><title><![CDATA[MP4文件格式解析]]></title><link>https://blog.youkuaiyun.com/chenchong_219/article/details/44263691</link><guid>https://blog.youkuaiyun.com/chenchong_219/article/details/44263691</guid><author>chenchong_219</author><pubDate>Sat, 14 Mar 2015 21:36:04 +0800</pubDate><description><![CDATA[目前MP4的概念被炒得很火，也很乱。最开始MP4指的是音频（MP3的升级版），即MPEG-2 AAC标准。随后MP4概念被转移到视频上，对应的是MPEG-4标准。而现在我们流行的叫法，多半是指能播放MPEG-4标准编码格式视频的播放器。但是这篇文章介绍的内容跟上面这些都无关，我们要讨论的是MP4文件封装格式，对应的标准为ISO/IEC 14496-12，即信息技术 视听对象编码的第12部分：ISO]]></description><category></category></item><item><title><![CDATA[MP4文件格式的解析，以及MP4文件的分割算法]]></title><link>https://blog.youkuaiyun.com/chenchong_219/article/details/44263587</link><guid>https://blog.youkuaiyun.com/chenchong_219/article/details/44263587</guid><author>chenchong_219</author><pubDate>Sat, 14 Mar 2015 21:28:10 +0800</pubDate><description><![CDATA[mp4应该算是一种比较复杂的媒体格式了，起源于QuickTime。以前研究的时候就花了一番的功夫，尤其是如何把它完美的融入到视频点播应用中，更是费尽了心思，主要问题是处理mp4文件庞大的“媒体头”。当然，流媒体点播也可以采用flv格式来做，flv也可以封装H.264视频数据的，不过Adobe却不推荐这么做，人家说毕竟mp4才是H.264最佳的存储格式嘛。

　　这几天整理并重构了一下mp4文件]]></description><category></category></item><item><title><![CDATA[FLV封装格式分析器]]></title><link>https://blog.youkuaiyun.com/chenchong_219/article/details/44263209</link><guid>https://blog.youkuaiyun.com/chenchong_219/article/details/44263209</guid><author>chenchong_219</author><pubDate>Sat, 14 Mar 2015 20:47:38 +0800</pubDate><description><![CDATA[=====================================================
视音频编解码学习工程系列文章列表：

视音频编解码学习工程：H.264分析器

视音频编解码学习工程：AAC格式分析器

视音频编解码学习工程：FLV封装格式分析器

视音频编解码学习工程：TS封装格式分析器

视音频编解码学习工程：JPEG分析器


=====]]></description><category></category></item></channel></rss>