- 博客(61)
- 资源 (2)
- 收藏
- 关注
原创 ffmpeg的demux流程简析
只是简单说说,没太多深入。【avformat_open_input 流程】这里我只说根据字节流来分析的过程,而不管扩展名啊什么的。1、如果没申请,它会内部调用avformat_alloc_context帮你申请结构体;2、如果有io的pb,它会自动加上AVFMT_FLAG_CUSTOM_IO这个flag;3、然后调用init_input,这个执行probe,也就是获取到if
2015-06-07 01:33:17 6118
原创 MFT的调用流程
应朋友要求,写了个,CSDN也发下吧。异步MFT不讨论,我只说同步MFT模型。一般对于一个同步MFT,你只需要实现以下的方法即可。
2015-06-02 08:34:09 3828 1
原创 谷歌C++风格拾遗
谷歌C++风格文档真是一个好东西,为C++开发提供了一个便捷高效又有无数人在实践和验证的白皮书,虽然其中并不是所有说法都是客观的,但是既然是经过谷歌这样的公司投入实际应用的,那总不会有很大的坏处,至少不会给你带来麻烦,所以我个人一直都比较坚持使用这套风格,而不是类似国内阿里巴巴这种挫逼公司把C++当Java写的那种脑残的风格,还有他们写的那本挫B书。但是注意对于Windows程序员,对
2015-04-23 09:03:49 1470 1
原创 关于MFT的消息处理
MFT_MESSAGE_NOTIFY_BEGIN_STREAMING:客户端可以不发送这个消息,如果客户端发送这个消息,则必需已经为MFT设置了输入媒体类型,并且这个消息应该在ProcessInput前发送。发送这个消息通知MFT申请ProcessInput的资源和缓冲区。如果客户端不发送这个消息,则MFT应该在第一次ProcessInput时申请资源和缓冲区。MFT_MESS
2014-12-29 19:40:00 2203
翻译 编写媒体基础MFT组件
翻译:a1875566250 @ CSDN博客,转载请注明出处。- 基本MFT处理模型 -原文:http://msdn.microsoft.com/en-us/library/windows/desktop/aa965264%28v=vs.85%29.aspx本主题适用于:1、应用程序希望直接使用MFT对象;2、应用程序编写自定义的MFT组件实现对某些解码格式的支持。
2014-11-17 17:16:47 2542 5
原创 TS文件解析流程
1、查找PAT表,从PAT表里面找到所有的PMT表的map_id。 - 注意1:PAT表并不一定在文件的起始位置,TS流这种对于电视直播的Live流需要保证在任何时间打开电视你都能看到画面,所以PAT表是被随机插到TS流的Packet中的,比如间隔10帧插一个PAT表和PMT表。所以TS流文件的第一个TS Packet可能是一个PES包,但是这个PES包更可能是续包,它没有解码器需要的Head
2014-10-30 10:21:15 8601 1
原创 BD(蓝光)的LPCM格式到PCM格式的转换
最近因为一些原因在折腾这方面的事情,朋友负责DVD-LPCM的,我这边则是BD-LPCM的,我轻松了很多,因为BD的LPCM的比DVD的那是舒服了不少。。不过开发环境限制死了在VS2010我很蛋疼,并且其实源工程是基于DShow的,对我这个习惯了MediaFoundation的人来说,实在过于腐朽。好了不废话那么多,我们来看BD的LPCM如何转换为PCM。这个转换其实很简单,LPC
2014-10-26 11:34:17 7714
原创 C++11的default和delete关键字
C11的新特性实在是太多了,这2个关键字关注的人倒是少了很多,其中有一个原因便是编译器支持得太慢了(VS到VS2013才支持上),不过这2个关键字那真是极为有用的,下面我们来看看。【default关键字】首先我们有一个字符串类:class CString{ char* _str;public: //构造函数 CString(const char* ps
2014-10-23 22:50:11 29042 7
原创 stdafx 头中的STRICT定义说明
一般你可能在某些工程的stdafx头(多见于VS2010版本后ATL)中发现:#define STRICT也许你会忽略这个值,这个是什么意思呢?其实就是让编译器执行严格的类型检查。比如Windows.h里面会有一些类型的define是相同的,比如HDC和HWND,比如有这样一个函数:int ReleaseDC(HWND hWnd, HDC hdc);也许你会错误
2014-10-20 22:05:14 819
原创 C语言之setjmp和longjmp详细剖析
我希望看这篇文章的你对C++的传统异常处理,即try...catch...throw有了解(不是Windows SEH),这样才能方便你最深入的理解这2个C语言的反人类函数。当然如果不了解就先看下面的“C++式的异常处理”,如果感觉自己了解了,可以直接skip看到“C语言中的模拟”。【C++式的异常处理】首先,我们写一个类,请不要想这个类有什么特别的地方,其只是为了打印出来构造和析
2014-10-20 11:23:28 4066 1
原创 ffmpeg的对象架构简析——解复用器
看这篇文章你需要对ffmpeg已经有一定的使用经验,知道如何read帧,解帧,或者write等。ffmpeg内部使用跑结构体表函数指针的方式,实现了类似C++的多态性,,我们来简析一下。【注册表】我们使用ffmpeg,首先要执行av_register_all,这个玩意儿把全局的解码器、编码器等结构体注册到一些全局的对象表里,以便后面跑表调用。注册的类型有:解复用器、重复用器、解
2014-10-14 07:17:05 3815
原创 C++服软C#系列 —— std::function
用过C#的人,一般都知道委托和事件。如果没有用过C#,我在这里简单解释一下委托,如果用过了,下面可以skip。委托是一个方法声明,我们知道,在C语言中,可以通过函数指针表示一个地址的CALL方法,委托在C#中也差不多是干这样的工作。但是委托有一些不同,主要的地方就是,在C++中,函数指针并不是“面向对象”的,比如,我们有一个类CTest,类中有一个成员方法foo,此时如果我们要通过
2014-10-10 07:24:04 2753 1
原创 WinRT的ref类 —— 微软神雕乱枪改C++系列
什么是C++\CX的Ref类?你可以理解为浆糊类,什么是浆糊类?浆糊类就是 —— 用C++的语法写C#!听到这个你肯定尿了。你可以捂着裆继续看下去。在继承和接口上:C++ —— 多重继承、实现多个接口。C# —— 单一继承、实现多个接口。Ref类 —— 单一继承(只能public继承Ref类)、实现多个接口(可不是C++的接口,是Ref类接口)。【总结:Ref类
2014-10-08 11:13:19 1213
原创 从传统COM简析WinRT的Async(使用WRL)
WinRT出来有3年了,用的人并不多,用C++来用它的人更是少。照成这样不外乎Windows 8平台不给力,用户基数少,但是WinRT本身的难用也是一个方面的原因,首先WinRT的所谓大宇50ms的任务全部Async化,这对习惯了传统Win32桌面的程序员来说 —— 你在逗我玩呢。现在我们来简单看看WinRT的Async模型。实在没太多必要介绍那些理论知识,就像这种文章:或
2014-10-07 05:39:39 3316 2
原创 C#值类型和引用类型用C语言理解
我刚用C#一个来月,可能理解得不对,还请大家指教。读懂文章你需要对C语言的指针有所理解。需要注意区别:对C\C++来说,任何类型都可以当成C#的“引用类型”,因为有指针。【在内存上】void foo(){ int aaa = 0; //值类型,aaa在Stack上分配(SUB ESP,XX) int* paaa = new int[123]; //引用类型,paaa在Heap上分配,HeapAlloc(GetProcessHeap()...) foo2(&aaa); //【引用】值类型a
2014-09-21 19:58:43 2610
原创 关于Windows 8使用WMP播放音乐时WUDFHost跑CPU和硬盘的问题解决
Windows 8使用Windows Media Player播放音乐的时候,其实有一个这样的情况,WMP和某个什么名字看起来很屌的进程跑CPU很高,这个跑很高视你插入的SD卡内的文件数或者移动硬盘的文件数来定,如果文件很多,这个跑起来可以把系统都快卡死。就像下面这样:原因:WMP命令WPD系统服务去扫描外部移动存储,它用于更新媒体库。系统服务就去访问那个移动设备,不断
2014-07-22 17:39:54 3600
原创 Windows Phone 8.1可使用的媒体基础MFT
下面这些MFT在Windows Phone 8.1可使用:H264 Encoder MFT(H264视频编码器)6CA50344-051A-4DED-9779-A43305165E35Microsoft AAC Audio Decoder MFT(AAC音频解码器)32D186A7-218F-4C75-8876-DD77273A8999Microsoft AAC A
2014-05-09 11:42:11 1682
原创 Windows Store的媒体基础API
应某人要求。。。【接口】IMF2DBuffer保存2D图像的BufferIMF2DBuffer2加强版IMFActivate激活一个MF对象的对象IMFAsyncCallback写代码的时候经常实现这玩意,响应异步InvokeIMFAsyncResult拿异步执行后的结果IMFAttributes存储媒体属性值IMFByteStream
2014-04-30 03:10:48 4199 1
原创 从一个COM接口的Dll文件创建接口 - 模拟CoCreateInstance
大家知道,创建COM接口使用CoCreateInstance函数,这个函数是通过查注册表来载入dll的,我们如果不想注册COM模块,又不想用ATL那种方式,那就只能象我这样自己写一个类似CoCreateInstance的东西了。。。#include #include DECLSPEC_NOINLINE HRESULT WINAPI CoCreateInstanceFormDllFile(
2014-02-26 15:10:09 2530
原创 基于Win32的GetSystemFirmwareTable获取到的SMBIOS数据简析
我不是什么硬件专业的人员,可最近有个东西实在不能通过其他方式获取硬件信息,setupapi不行,注册表不行,NtQuerySystemInformation也不行,但是因为匹配需要必需要拿到CPU信息,比如CPU名称,实在无奈了。纠结了很久,只能通过GetSystemFirmwareTable这个函数拿到SMBIOS的Raw数据,其中有CPU的名称,缓存等信息,可因为GetSystemFirm
2014-02-16 20:18:34 9238 2
原创 Windows 8.1新增的进程快照API简单探究
在Win8.1中,相比Win8新增了一组名为"进程快照"的API,是文档化的东西,它可以帮助我们在一个时间获取进程的某些信息,比如线程,句柄,CPU周期性能等数据,以便进行APP的性能分析和存储到文件等调试类帮助。具体请看下面代码:
2014-02-09 01:13:16 3030
原创 WP8和Win8的应用程序安全沙箱
应用程序安全沙箱就是那个叫AppContainer的东西,这是一种基于权限分配逻辑的安全设计机制。启动Metro App=>一个高权限进程调用CreateProcessAsUser->CreateProcessInternal->NtCreateLowBoxToken(for Capability)->Kernel use this token to CreateProcess.Me
2013-10-11 18:22:33 2114
原创 在32位Windows 8或Windows 7上安装Windows Phone 8 SDK
这需要一点技巧的,其实WPSDK8是支持32位系统的,可因为微软脑残的限制,安装方法如下:这里必需要有一个工具,OllyDbg 2.0,去官网下载即可。启动OD,在菜单打开选项窗口,在Events那里把调试子进程(Debug child process)的勾选勾上,然后用OD启动WPexpress_full.exe,直接F9,此时OD会瞬间弹出另一个新的OD并且停在child进程的入口
2013-10-07 23:22:41 2904 3
转载 备份:防止代码变质的思考与方法
本文来自于QQ客户端团队博客,从9个方面详细的讲解了如何防止代码变质,让每个模块功能做到最简, 增加其调用的次数。详细请看下文:1、软件长期运营存在什么问题一个大规模的客户端软件的生命周期中,我们可以把它分为两个比较粗的时期。一个是前期的搭建软件的时期,即从无到有的时期;第二个是搭建完成之后,进入的一个稳定的运营时期。第二个时期才是最关键的,在这个时期我们会持续的迭加需求,持续的优
2013-10-05 00:47:33 893
原创 因在Windows 8.1中微软没有对版本API进行更新 导致桌面软件识别版本号为6.2.9200
这次的问题在Windows 8.1 Preview的时候就已经存在,RTM发布微软将系统内核升级到了6.3.9600,可对上层的Win32 API没有进行更新,导致应用程序通过这些API进行取值的时候返回错误的版本号,即Windows 8的版本号:6.2.9200。几乎所有桌面软件都使用了GetVersion或者GetVersionEx来查询Windows的系统版本信息,可这些API此
2013-10-03 20:53:04 4270 1
转载 Windows 64编程中寄存器的使用
下面是摘自 MSDN 的文章,在 Win64 下的 registers 用途 RegisterStatusUseRAXVolatileReturn value registerRCXVolatileFirst integer argumentRDXVolatileSecond integer
2013-09-12 22:27:57 9145
原创 关于在Windows 8.1预览版上OD无法启动程序进行调试的问题
在Windows 8.1 Preview x64上,OllyDbg如果试图启动一个程序进行调试,会出现一个死在ntdll.RtlUserThreadStart的单步异常:这个问题其实是由内核在创建进程时引发的,内核如何做的我没仔细看,就在创建进程后,内核把LdrInitializeThunk中执行ZwContinue的CONTEXT结构体的EFlags设置加上了TF(单步)标志,使得ZwC
2013-08-10 16:05:08 4519 1
原创 关闭或打开系统资源管理器的自带托盘图标
Vista开始资源管理器自带几个托盘图标,网络、音量、电源等,win7加入了操作中心,这个挺麻烦的,会提示一些二笔的东西,我最近想把操作中心的图标隐藏,所以就有了这文章。本来想搞操作中心在控制面板里面的那些勾选,我全取消了不得了,图标也正常了,就仔细看了下,是RPC来通知的,二笔的是Client和Server都在explorer内,对比了一下,win7和win8的接口不同,参数少一个,不通
2013-06-13 14:54:38 3218
翻译 Windows 8.1 都有什么新的东东?
这篇来自Microsoft TechNet的文章详细介绍了Windows 8.1将带来的新技术新特性,这里我将其翻译成中文,以便大家了解。虽然不少新功能都跟我等穷丑撸关系不大,不过看着看着也许就能成长为高帅富了也说不定。我们让Windows 8带来了Modern技术的计算机运作体验,帮助商业和专业人士同他们的好友、同事、客户保持联系,在任何场所、任何时间。Windows 8.1加强了这一愿景,
2013-06-04 17:07:11 1448
原创 使用程序更改链接到PC中的Windows Phone设备的文件目录名
今天想批量改WP8的SD卡里面的所有txt文件的扩展名为txtk,为了让开卷倒入看本地小说,可我那些中二意淫傻逼起点文有300多个文件,你让我手动全改了不是爆我菊花呢。。。于是去网上找了各种软件,别说更改了,连WP设备都看不到,最后找到了Total Commands,嘿,这个能看到WP设备了,也能手动改名,然后我兴高采烈的用了里面的批量重命名,结果一脸苦逼,全部失败没一个成功。。。然后我顶不住
2013-05-17 22:20:28 2104 1
原创 修改了下exeScope的导出函数功能,让它只导出函数名。。。
我一直都使用exeScope,这个东西从我还是菜逼的时候就一直用了,算起来也有好几年了,exeScope的导出文件的函数到txt文档功能会把函数的序号和地址都导出了,这很蛋疼,我又不会正则替换,没办法只好自己修改了下主程序。我用的是exeScope 6.5的汉化版,正常时候导出的文档是这样的:修改后,导出就简洁了。修改方法,使用16进制编辑器比如WinHex打开exeScope
2013-04-26 03:31:00 1713
原创 基于ARM本机汇编码调试Windows RT操作系统
我在xda开发者论坛发布了破解IE的Flash等等的东西后,有几个看雪的朋友问我如何调试WinRT系统,这里我写一篇文章,简单的用口述的方式说下。你需要准备一台装有Windows RT的机器,我是用的是Surface RT和普通的x86台式机。好,我们开始。 1)首先在x86机器上安装VS2012,最好是安装旗舰版,不然调试中那个类似WinDbg的命令行功能无法使用。2)然后在Wi
2013-04-08 21:19:47 1676
原创 Sysinternals 工具包里面的 DbgView 实现机制
Capture Win32:关键字DBWIN_BUFFER_READYDBWIN_DATA_READYDBWIN_BUFFERCapture Global Win32:关键字Global\DBWIN_BUFFER_READYGlobal\DBWIN_DATA_READYGlobal\DBWIN_BUFFERCapture Event:关键字DBWinMu
2013-03-17 00:45:11 1725
原创 关于WriteFile函数的lpNumberOfBytesWritten在Win8开始的不同
今天我写一个程序,把lpNumberOfBytesWritten的指针给错了,隐式给成了NULL,但我是在Win8编译测试的,结果WriteFile通过了,我没察觉到这个错误。而我转到Win7上运行,直接蹦了,百思不解,无奈之下打开OD调,结果发现死在WriteFile这里,仔细一跟,我艹。。。原来是这样的,lpNumberOfBytesWritten参数大家都不能设置为NULL或一个无效的指
2013-02-23 14:55:50 3043
原创 Windows 资源管理器的音乐文件星星评级的ID3v2标签
最近研究ID3啊、APETAG啊之类的音乐文件Tags结构,发现Win的资源管理器的那个星星评级貌似不兼容很多播放器,千千啊FB2K啊之类的,FB2K倒是有一个插件可以兼容,网上资料不多,我研究了一下,发现Win的资源管理器的星星评级在IDv2标签的格式中是这样的:也就是:Tags是POPM长度固定为0x1F(DWORD-BE)然后是一串NULL结尾的ANSI字符串:Windo
2013-02-13 17:29:35 1352
原创 Win32 开发者的下一个十年
微软的同一平台战略已经大张旗鼓而来,而自Windows 8开始,微软对下一个时代的Windows开发布局已经做好,Win32开发者何去何从?下一个十年我们该学习什么新技术? 1、游戏:很高兴,DirectX此次依然在微软的核心部分受到支持,可DX每次更新就会有很大的变化,开发者需要即时跟进Direct3D技术风潮,万万不能一直停留在DX9这些时代。而自Windows 8开始,微软还引进
2013-02-10 20:37:12 2186
转载 嵌入式软件工程师面试题
预处理器(Preprocessor)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接
2013-01-15 21:47:21 1233
转载 ARM处理器工作模式
ARM有7种处理器模式,其由CPSR的[4:0]位决定。用户模USR:正常程序动行的工作模式。只能读CPSR不能写系统模式sys:与用户模式共用一套寄存器。用于支持操作系统的特权任务模式,但它具有直接切换到其它模式的特权。管理模式svc:操作系统的特权任务模式。系统复位和软件中断时才进入这个模式中止abt:在ARM7中没多大做用.另外还有未定义und中断(irq),快速中断(fiq
2013-01-15 21:25:51 5867
转载 ARM汇编必知必会
ARM指令集:ADC 带进位的32位数加法ADD 32位数相加AND 32位数的逻辑与B 在32M空间内的相对跳转指令BIC 32位数的逻辑位清零BKPT 断点指令BL 带链接的相对跳转指令BLX 带链接的切换跳转BX 切换跳转CDP\CDP2 协处理器数据处理操作CLZ 零计数CMN 比较两个数的相反数CMP 32位数比较EOR 32位逻辑
2013-01-15 20:16:17 26227 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人