深入解析媒体源的异步操作与流处理机制
1. 异步源命令函数概述
在媒体处理中,AVFSource 类的主要命令函数大多采用异步操作。这与多数 MF 操作一致,其命令函数的工作原理和之前提到的字节流处理程序类似。具体来说,它们会将工作事件排入队列,然后依靠工作线程调用源的 Invoke() 函数来完成实际工作。
AVFSource 在处理媒体源打开操作时,会使用一个特殊的状态对象,该对象可插入 IMFAsyncResult 中以指示异步命令。 AVFSource::Invoke() 函数会从传入的异步结果对象中提取命令,解析并执行它。
2. 暂停操作的实现
2.1 外部暂停方法 Pause()
以下是 AVFSource 中 IMFMediaSource::Pause() 的实现代码:
//
// Pause the source
//
HRESULT AVFSource::Pause()
{
HRESULT hr = S_OK;
CComCritSecLock<CComAutoCriticalSection> lock(m_critSec);
CComPtr<ISourceOperation> pOperation;
do
{
// make sure the source is
超级会员免费看
订阅专栏 解锁全文
741

被折叠的 条评论
为什么被折叠?



