0
편집 : 원래 사용자 정의 필터를 호출 할 때 필터 그래프가 중지되었습니다. 우리는 deliver 메서드에서 샘플의 time 속성을 설정하여이 문제를 해결했습니다. 첫 번째 데이터 전달 후 필터 그래프가 중지됨
나는 나의 그래프이이 파일에 웹캠에서 비디오를 녹화 잘 작동을 단순화. 내가 이상한 결과를 얻을 수
: 내가 사이에 내 필터를 넣어 그러나 경우
가 인코딩되지 않은 것처럼
그래서 그것은 본다. 그러나이 필터가 없으면 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
}
그래서 제 질문은 다음과 같습니다 : 순간에 내 모든 필터는 않습니다 샘플을 전달하고 어쨌든을 변경하지 않을 경우, 왜 내가 다음이 얻는 여기 는하여 outputpin의 방법을 제공하는 업데이트됩니다 결과.
AVI Mux를 통해 두 개의 비디오 스트림을 쓰려고합니까? 나는 그것을 다룰 수 있을지 확신하지 못한다. 그러면 그래프가 멈출 수 있습니다. –
이제 질문을 완전히 변경했습니다. 제발하지 마, 그냥 새로운 것을 게시하십시오. 새로운 질문에 대한 : 나는 문제가 미디어 유형에 따라서 AVI 헤더를 생성한다고 생각합니다. 필터없이 AVI 파일 하나를 저장하십시오. 차이를 확인하려면 머리글을 자세히 살펴보십시오. AVIMasterGUI는이를 수행 할 수있는 아주 좋은 도구입니다. –