
// 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、cbPrefixPin 狀態:Stopped → Paused → Running,連接只能在 Stopped 狀態進行。
AMovieDllRegisterServer 註冊調試版)