积累日常生活的点滴,开发过程的心得。

Vista和拖放操作

这两天为程序添加一个接收资源管理器中拖放过来的文件功能,结果发现一个问题,在Vista上通常权限的情况下,可以正常接收资源管理器的拖放,但是一旦程序提成权限为管理员时,就不能接受拖放了,查了一下原来是Vista的权限管理禁止在不同权限的进程间使用基于COM的拖放,这样会有安全漏洞。

Windows和Linux文件锁的不同

测试文件发送Service时发现了一个Bug,在Windows上用写模式打开一个文件,默认会创建一个排他锁,也就是其它的应用无法同样用写模式打开一个文件。但是在Linux上运行的时候,Linux不会创建排他锁,导致发送的文件不完整。

查了一下,没有什么特别好的方法,后来改成一个先生成一个临时文件,然后将文件改名为真实文件来避免读写的不同步。

H264相关的一些资源

根据圆上三点画扇形

已知圆上三点坐标,要根据这三点坐标画圆弧,找了半天,也没发现完善的现成代码,想了半天算法,发现自己已经把解析几何忘了个差不多了。没办法最后根据余弦定理自己写了一个。

JM Decoder计算PSNR的一个bug

今天发现JM Decoder的一个bug,对于有I帧全部是IDR帧的码流,由于IDR的帧号是0,IDR之前如果有B帧的时候,B帧的帧号为负值。JM Decoder在查找YUV文件的参考帧来计算PSNR时,由于负值会找不到相应的参考帧,导致算出的PSNR是错误的。解码时它会报类似下面的错误。

Warning: Could not seek to frame number -2 in reference file. Shown PSNR might be wrong.

 

 

 

基于BSpline的插值运算

正在做的一个C#项目要用到插值运算,插值运算算法主要是用了BSpline和多项式。

找了一下没有写得特别好的BSpline的C#库,Delphi倒是有一个别人写的不错的例子。

简单改写了一下。

使用.Net客户端访问BlazeDS

前面那个Flex项目,客户追加了预算,增加了一些功能,其中一个功能要用.Net来写客户端,找了一下发现DotNet程序可以使用 FluorineFx来访问BlazeDS的服务。

一个很好用的H264文件分析工具

Elecard StreamEye Studio

一个高效的固定大小内存池管理算法

这两天,在改一个既有程序的内存池管理算法,原有的管理算法基于固定内存最大块管理,块的尺寸固定为最大可利用内存大小,在大部分的情况下内存利用率非常低。

为此打算找一个高速的内存利用率高的算法。先是看了看FastMM,代码太复杂,使用了太多的汇编语言,过于庞大,接近8000行代码。于是放弃,找来找去,发现sqlite的内存池管理算法还是挺牛叉的。它是基于二分策略的,每一个内存块的大小是2的指数。

视频开发中使用有理数进行小数运算

在研究视频解码程序的时候,我们看到的源代码比如FFMpeg中几乎都是使用有理数来进行运算小数运算,原因就是有理数相对浮点运算来说,几乎没有误差,不会产生误差的累积和扩散。

同步内容