首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

DirectShow Pin 連接流程源碼解析

     編輯:C++ 入門

核心流程圖

Pin 連接流程圖

關鍵步驟源碼註解

// 1. 輸出 Pin 枚舉媒體類型
HRESULT hr = pReceivePin->EnumMediaTypes(&pEnum);
while (pEnum->Next(1, (AM_MEDIA_TYPE**)&pMediaType, &fetched) == S_OK) {
    // 2. 輸入 Pin 嘗試合作
    hr = pReceivePin->ReceiveConnection((IPin*)this, pMediaType);
    if (SUCCEEDED(hr)) break;
}

// 3. 協商分配器
IMemAllocator* pAlloc;
ALLOCATOR_PROPERTIES prop;
pPin->GetAllocatorRequirements(&prop);
hr = DecideAllocator(pPin, &pAlloc);  // 確定緩衝區大小/數量/對齊
hr = pPin->NotifyAllocator(pAlloc, FALSE, &prop);

// 4. 完成連接
m_Connected = pReceivePin;
m_mt = *pMediaType;
return S_OK;

關鍵結構體

  • AM_MEDIA_TYPE:主類型/子類型/格式塊,描述數據格式
  • ALLOCATOR_PROPERTIES:cbBuffer、cBuffers、cbAlign、cbPrefix

狀態機

Pin 狀態:Stopped → Paused → Running,連接只能在 Stopped 狀態進行。

調試技巧

  • GraphEdit/GraphStudioNext 可視化查看連接拓撲
  • 啟用 DirectShow 診斷日志(AMovieDllRegisterServer 註冊調試版)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved