gpt4 book ai didi

c++ - Filtergraph 在第一次数据通过后停止

转载 作者:行者123 更新时间:2023-11-28 07:00:52 27 4
gpt4 key购买 nike

编辑:最初的问题是在调用我的自定义过滤器时过滤器图停止了。我们通过在交付方法中设置样本的时间属性来解决这个问题。

我简化了图表 basic file recorder

这适用于将视频从网络摄像头录制到文件中。

但是,如果我将过滤器放在两者之间:

enter image description here

我得到奇怪的结果:

enter image description here

所以看起来它没有编码。但是如果没有这个过滤器,avi mux 也不会对来自网络摄像头的视频进行编码。这是更新后的输出引脚传递方法:

 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 Mux 的示例设置正确的媒体时间。如果没有这些时间,它就无法确定正确的帧速率和帧顺序,因此它可能会停止。

关于c++ - Filtergraph 在第一次数据通过后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22501162/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com