DirectShow DirectShow 에 대해 DirectShow 의 타임과 클럭 타임 스탬프   [목차열람] [주소복사] [슬롯비우기]
타임 스탬프
 
Microsoft DirectX 9.0

타임 스탬프

"타임 스탬프" 는, 스트림 타임에 나타나는 미디어 샘플의 시작 타임과 종료 타임을 정의한다. 타임 스탬프는,"프레젠테이션 타임" 이라고 부르기도 한다. 이 후의 설명에서는, 모든 포맷으로 똑같이 타임 스탬프를 사용하는 것은 아닌 것에 주의할 필요가 있다. 예를 들어, 모든 MPEG 샘플에 타임 스탬프가 있는 것은 아니다. MPEG 필터 그래프에서는, 타임 스탬프는 디코더로부터 출력될 때까지, 각 프레임에는 적용되지 않는다.

샘플을 받으면 렌더링 필터는 타임 스탬프에 근거해 렌더링을 스케줄 한다. 샘플의 도착이 늦거나 타임 스탬프가 없는 경우, 필터는 즉석에서 그 샘플의 렌더링을 시작 한다. 그 이외의 경우, 필터는 샘플의 시작 타임까지 기다리고 나서 그 샘플의 렌더링을 시작 한다. 필터는,IReferenceClock::AdviseTime 메서드를 호출해 시작 타임을 기다린다.

소스 필터와 파서 필터는, 처리 대상의 샘플에 적절한 타임 스탬프를 설정하는 역할을 담당한다. 이하의 가이드 라인을 사용한다.

샘플에 타임 스탬프를 설정하려면 ,IMediaSample::SetTime 메서드를 호출한다.

옵션으로서 필터는 샘플의 "미디어 타임" 을 지정할 수도 있다. 비디오 스트림에서는, 미디어 타임은 프레임 번호를 나타낸다. 오디오 스트림에서는, 미디어 타임은 패킷내의 샘플 번호를 나타낸다. 예를 들어, 각 패킷에는 44.1 킬로헤르츠 (kHz) 오디오의 1 초가 저장 되어 최초의 패킷의 미디어 시작 타임은 0, 미디어 종료 타임은 44100 이 된다. 시크 가능 스트림에서는, 미디어 타임은 항상 스트림의 시작 타임부터 상대적으로 된다. 예를 들어, 15-fps 의 비디오 스트림의 시작으로부터 2 초를 시크 하면 한다. 시크 후의 최초의 미디어 샘플의 타임 스탬프는 0 이 되지만, 미디어 타임은 30 이다.

렌더링 필터 및 Mux 필터는 미디어 타임을 사용해, 갭을 체크하는 것에 의해, 프레임 또는 샘플이 드롭 되었는지 어떠했는지를 판별할 수 있다. 다만, 필터는 미디어 타임을 설정할 필요는 없다. 샘플의 미디어 타임을 설정하려면 ,IMediaSample::SetMediaTime 메서드를 호출한다.

↑TOP