- UID
- 1
- 精华
- 积分
- 76365
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
这是我制作的封装类,可以把DirectShow播放的视频画面渲染到IDirect3DTexture9纹理中。用法很简单,包含这个类的头文件,然后按照如下的代码编写:
- //先声明这个类:
- CDSTex g_DSTex;
- //然后需要初始化,调用InitDSTex
- //在调用InitDSTex之前,你需要自己初始化D3D
- //然后给这个类指定你的IDirect3DDevice9的指针用于创建纹理。
- g_DSTex.InitDSTex(g_pDev9,TCHAR("C:\A.MP4"));//媒体文件为A.MP4
- //调用完这句之后,g_DSTex已经自动产生了一个纹理,可以用GetTexture()方法取得这个纹理的指针(LPDIRECT3DTEXUTRE9)。
- //开始播放
- g_DSTex.Play();
- //这里开始播放,如果媒体文件有声音,这个时候就会开始播放声音。
- //这个时候的纹理已经是这个视频文件的画面了。
- //当然如果你指定的媒体文件是MP3,也可以播放,但是只有声音没有画面,纹理是全黑的。
- //调用CheckEnd()检查是否已经到了媒体文件的尾部了
- //如果到了文件尾,CheckEnd()返回TRUE,否则返回FALSE
- if(g_DSTex.CheckEnd())
- {
- MessageBoxA(NULL,"播放完了",NULL,MB_OK);
- return 0;
- }
- //如果用完了这个类,必须释放。虽然析构函数也进行了释放,但是最安全可控的处理方法,是自己指定它释放。
- g_DSTex.ReleaseDSTex();
- //释放后,你仍然可以通过调用InitDSTex重新初始化,打开新的媒体,然后播放。
- //InitDSTex调用前必须保证g_DSTex是新的,或者已经释放过了。
- //如果运行出错了,可以调用以下函数取得错误信息
- g_DSTex.GetLastError();
- //如果要取得COM组件返回的错误信息,调用后面的:
- g_DSTex.GetLastHRESULT();
复制代码 下载地址:
SRC:
DShow.7z
(1.11 MB, 下载次数: 8, 售价: 20 个宅币)
BIN:
DebugA.7z
(108 KB, 下载次数: 0, 售价: 5 个宅币)
DebugW.7z
(110.97 KB, 下载次数: 0, 售价: 5 个宅币)
ReleaseA.7z
(70.04 KB, 下载次数: 0, 售价: 5 个宅币)
ReleaseW.7z
(69.97 KB, 下载次数: 0, 售价: 5 个宅币)
|
|