在direct3d程序里面,设备丢失是个令人头痛的问题之一。
如果整个设备的创建和使用都是由自己控制,如game编程,相对来说好处理,即所有资源都注册到一个管理对象里,统一release,然后reset设备,再重建资源即可。
但对于基于directshow架构的播放器来说,directshow架构内部用到了渲染的surface,无法在外部进行管理,导致无法释放,无法复位设备。在google上有很多相同的问题没有答案,不知道是不是微软遗漏的该部分的处理。
丑陋一点的处理方案是,当发现设备丢失时候,保留当前播放进度,重建graph,重新播放。