用户操作
[发私信]  [加为好友] 
jq0123
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
jq0123的公告
XSTL封面 Locations of visitors to this page Codeguru Contributor
订阅 上海程序员
文章分类
热门文章
1 评“程序员怎么样才能保证自己的程序没有BUG”
2 C语言HTML解析器ekhtml的VC编译
3 log4cpp应用速成手册
4 一个hash_map使用错误
5 udp广播与直接广播
6 评“加班文化”对软件企业的危害
作者推荐
1 设计死了吗?
2 葵花宝典:软件开发高手是这样炼成的!
3 TCP截包分段重组的设计
4 Firefox的HTTP内容解压代码阅读
5 不可思议:using namespace无效!
6 作业调度问题深度搜索定界算法
7 智能机器人编程游戏robocode的运行代码简析
存档

原创  WMF SDK例程wmvcopy中的错误 收藏

WMF SDK例程wmvcopy中的错误

WMF SDK指Microsoft的Windows Media Format SDK,支持以下三大功能:ASF文件的生成(包括ASF数据的流化)、ASF文件的编辑和ASF文件的播放(包括ASF媒体流的播放)。目前版本是WMF SDK9。

wmvcopy是其一个例程,实现了从头部开始截取n秒另存为文件。
我曾对wmvcopy简单修改,实现了从m秒到n秒的截取。见:
windows media format SDK 切割wmv/wma文件

但在使用中发现有些错误。

一个是明显的错误,不能处理大文件,只能截取214秒。见:

请问有大侠发现format SDK 例子 wmvcopy debug error么?

wmvcopy 有个严重的debug error, 在网站找了半天,没有看到有谁提出来。 而且还有一个很奇怪的问题,wmvcopy -i c:\input.wmv -o c:\output.wmv -d 214 没有问题,能正常将input.wmv 剪切为214s output.wmv, 但是wmv -i c:\input.wmv -o c:\output.wmv -d 215 / 216 / 230 都不能正常剪切,output.wmv 就是input.wmv 的copy.

请哪位大侠解释一下?


还有一个是刚发现的,文件保存结束后,偶尔会崩溃。找个几百K的大文件,截取头部几十秒试试。写个批处理运行一百次,运行中启动关闭一些其它程序,应该会有一两个报错误出来。(省去一大堆的错误跟踪过程。并且,VC的单步调试可能不会出错。)错误定位在OnTime()的这一语句上:
        HRESULT hr = m_pReaderAdvanced->DeliverTime( m_qwReaderTime );

原来是复制结束后,m_pReaderAdvanced已释放,而m_fEOF还未设置,所以出错。

这样可以让你把错误看的更清楚点:
        assert(m_pReaderAdvanced);
        HRESULT hr = m_pReaderAdvanced->DeliverTime( m_qwReaderTime );

粗略地查看一下wmvcopy的逻辑,OnTime()每次让Reader读取1秒的数据,直到文件结束。
实际情况是,指定了截取的长度,一般都不会到达文件尾部。
所以应该另设一个标志:m_fMaxDuration,到达MaxDuration时就可以结束文件的读取,而不必一直读到文件尾。一可解决崩溃错误,二可提高效率。

 

发表于 @ 2007年10月29日 14:42:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:VSS灵异事件:无法GET | 新一篇:混音算法的学习与研究

Csdn Blog version 3.1a
Copyright © jq0123