2011-01-24 4 views
0

내가 아는 한, inorder가 키 프레임인지 확인하기 위해 0 (S_OK)을 반환하는 IMediaSample :: IsSyncPoint() 메서드를 확인해야합니다. 프레임은 키 프레임이거나 다른 경우에는 false입니다.IMediaSample DirectShow.Net을 사용하여 키 프레임 찾기

그러나 IsSyncPoint() 메서드는 ISampleGrabberCB :: SampleCB() 콜백 메서드로 전달되어 전달 된 모든 프레임에서 단순히 0을 반환합니다. 내 콜백을 포함

코드는 간단하다 :

public int SampleCB (double sampleTime, IMediaSample mediaSample) 
    { 
    Console.WriteLine ("SampleCB Callback"); 
    Console.WriteLine (mediaSample.IsSyncPoint () + " "); 

    Marshal.ReleaseComObject (mediaSample); 
    return 0; 
    } 

내가 무슨 말이냐?

답변

1

미디어 유형이 무엇입니까? 샘플 그래버가 압축되지 않은 비디오 프레임을 수신하는 경우 모든 프레임은 동기화 지점입니다.

+0

설정 한 MediaType은 RGB24입니다. 그리고 저는 그것이 여러분이 말하는 것처럼 압축되지 않은 프레임을 제공한다고 생각합니다. 그렇다면 다른 어떤 MediaType을 사용할 수 있습니까? 다른 유형을 시도했지만 작동하지 않았습니다. 아 그래, 내가 만든 그래프는 다음과 같습니다. 비디오 소스 -> 샘플 그래버 -> VideoRenderer 또한 변경 사항을 제안하십시오. –

+0

압축되지 않은 프레임을 가져 오는 경우 모든 프레임은 동기화 지점이며 원본 압축 된 프레임이 키 프레임인지 여부를 알 수있는 방법은 없습니다 (그 시점에서). IsSyncPoint 메서드는 키 프레임을 엄격하게 테스트하지 않으며, 싱크 포인트를 테스트합니다. 압축 된 비디오의 경우, 싱크 포인트는 키 프레임입니다. 그러면 핵심 프레임을 찾아야하는 이유가 다릅니다. 비 압축 비디오 * 및 * 키 프레임을 확인해야하는 경우 디코더의 패스 스루 필터가 필요할 수 있습니다. –

관련 문제