0
編輯:最初的問題是當調用我的自定義過濾器時,filtergraph停止。我們通過在交付方法中設置樣本的時間屬性來解決此問題。Filtergraph在第一次數據傳遞後停止
我簡化我的圖
也能正常工作從攝像頭到一個文件中記錄的視頻。
但是如果我把我的過濾器之間:
我得到了奇怪的結果:
所以它看起來是不是編碼。但是如果沒有這個過濾器,avi多路複用器也不會爲網絡攝像頭編碼視頻。 這裏是更新交付outputpin的方法:
HRESULT MCMyOutputPin::Deliver(IMediaSample* sample)
{
CAutoLock mylock(this->m_pLock);
HRESULT hr = NO_ERROR;
myLogger->LogDebug("In Outputpin Deliver", L"D:\\TEMP\\yc.log");
if (sample->GetActualDataLength() > 0)
{
IMediaSample *outsample;
if (!m_pAllocator)
return E_FAIL;
hr = m_pAllocator->GetBuffer(&outsample, NULL, NULL, NULL);
if (FAILED(hr))
{
myLogger->LogDebug("Could not get buffer", L"D:\\TEMP\\yc.log");
return hr;
}
BYTE* sampleBuffer = NULL;
BYTE* newBuffer = NULL;
long lSizeSample = sample->GetSize();
long lSizeOutSample = outsample->GetSize();
outsample->GetPointer(&newBuffer);
sample->GetPointer(&sampleBuffer);
LONGLONG timeStart = NULL;
LONGLONG timeEnd = NULL;
REFERENCE_TIME refTime = NULL;
REFERENCE_TIME reftimeend = NULL;
sample->GetMediaTime(&timeStart, &timeEnd);
sample->GetTime(&refTime, &reftimeend);
ASSERT(lSizeOutSample >= lSizeSample);
memcpy((void *)newBuffer, (void *)sampleBuffer, lSizeSample);
outsample->SetMediaTime(&timeStart, &timeEnd);
outsample->SetTime(&refTime, &reftimeend);
m_pInputPin->Receive(outsample);
outsample->Release();
sample->Release();
}
return hr;
//Forward to filter
}
所以我的問題是:如果我所有的此刻過濾器呢,是寄樣本,而不是改變他們,無論如何,爲什麼我得到那麼這結果。
你想通過AVI Mux寫兩個視頻流嗎?我不確定它可以處理。它可能會導致圖形停止。 –
現在你完全改變了這個問題。請不要這樣做,只是發佈一個新的。對於新的問題:我認爲問題出現在媒體類型中,因此產生了AVI頭文件。保存兩個AVI文件,一個沒有過濾器,一個沒有過濾器。然後仔細看看他們的標題,看看有什麼不同。 AVIMasterGUI是一個非常好的工具。 –