2014-03-19 2 views
0

편집 : 원래 사용자 정의 필터를 호출 할 때 필터 그래프가 중지되었습니다. 우리는 deliver 메서드에서 샘플의 time 속성을 설정하여이 문제를 해결했습니다. 첫 번째 데이터 전달 후 필터 그래프가 중지됨

나는 나의 그래프이이 파일에 웹캠에서 비디오를 녹화 잘 작동 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 
} 

그래서 제 질문은 다음과 같습니다 : 순간에 내 모든 필터는 않습니다 샘플을 전달하고 어쨌든을 변경하지 않을 경우, 왜 내가 다음이 얻는 여기 는하여 outputpin의 방법을 제공하는 업데이트됩니다 결과.

+0

AVI Mux를 통해 두 개의 비디오 스트림을 쓰려고합니까? 나는 그것을 다룰 수 있을지 확신하지 못한다. 그러면 그래프가 멈출 수 있습니다. –

+1

이제 질문을 완전히 변경했습니다. 제발하지 마, 그냥 새로운 것을 게시하십시오. 새로운 질문에 대한 : 나는 문제가 미디어 유형에 따라서 AVI 헤더를 생성한다고 생각합니다. 필터없이 AVI 파일 하나를 저장하십시오. 차이를 확인하려면 머리글을 자세히 살펴보십시오. AVIMasterGUI는이를 수행 할 수있는 아주 좋은 도구입니다. –

답변

1

AVI Mux는 샘플 미디어 시간에 민감한 매우입니다. 귀하의 코드에서 AVI Mux로 전달 된 샘플에 적절한 미디어 시간을 설정하는 것을 보지 못했습니다. 이 시간이 없으면 적절한 프레임 속도와 프레임 순서를 결정할 수 없기 때문에 아마 멈출 것입니다.

관련 문제