DirectShow DirectShow 레퍼런스 프로퍼티 세트 레이트 변경 프로퍼티 세트   [목차열람] [주소복사] [슬롯비우기]
레이트 변경 프로퍼티 세트
 
Microsoft DirectX 9.0

레이트 변경 프로퍼티 세트

MPEG-2 소스 필터와 파서 필터는, 레이트 변경 프로퍼티 세트를 사용해, 재생 레이트를 변경할 수 있다. MPEG-2 디코더는, 이 프로퍼티 세트를 지원 할 필요가 있다. DVD 네비게이터와 스트림 버퍼 엔진은 양쪽 모두, 이 프로퍼티 세트를 사용해 재생 레이트를 제어한다.

프로퍼티 세트 GUID AM_KSPROPSETID_TSRateChange

프로퍼티 ID 설명
AM_RATE_CorrectTS 네비게이터가 적절한 타임 스탬프를 설정해 있는 것을 디코더에 통지한다.

이러한 문제는, 최신 버전의 DVD 네비게이터에서는 해결하고 있다. 기존의 디코더와의 하위 호환성을 유지하기 위해서(때문에), DVD 네비게이터에서는, 값 TRUE 로 디코더의 AM_RATE_CorrectTS 프로퍼티를 설정하면, 타임 스탬프가 올바르게 설정되는 것을 나타내고 있다. 이 프로퍼티가 설정되었을 경우, 디코더는 프레젠테이션 타임의 예측은 아니고, 실제의 타임 스탬프를 사용할 필요가 있다.

AM_RATE_ExactRateChange 사용되지 않았다.
AM_RATE_MaxFullDataRate 디코더의 최대 데이터 레이트를 문의한다.
AM_RATE_QueryFullFrameRate 디코더의 최대 풀 frame rate를 문의한다.
AM_RATE_QueryLastRateSegPTS 디코더에, 최신의 레이트 세그먼트(segment)의 유효 PTS 를 문의한다.

AM_RATE_SimpleRateChange 레이트 변경을 디코더에 송신한다.
AM_RATE_Step 사용되지 않았다. 「스탭핑(Stepping)프로퍼티 세트」를 참조할것.
AM_RATE_UseRateVersion 사용해야 할 레이트 변경 프로퍼티 세트의 버전을 지정한다.

주의

레이트는 재생 속도의 역수로, 재생 속도가 2 배속의 경우, 레이트는 0.5 가 된다. 디코더는, 디코드하는 샘플의 프레젠테이션 타임을 스케일링 해, 레이트에 일치시킨다. 예를 들어, 레이트가 0.5 로 하면, 프레젠테이션 타임은 보통 레이트의 반이 된다. 샘플은 보통보다 빨리 렌더링 되므로, 재생 속도는 보다 고속이 된다.

샘플은, 레이트 1 의 프레젠테이션 타임에 동일한 타임 스탬프로 디코더에 송신된다. 디코더는, 출력 샘플의 타임 스탬프를 현재의 레이트의 올바른 프레젠테이션 타임에 맞도록(듯이) 스케일링 할 필요가 있다. 보통, I 프레임만이 타임 스탬프를 가지고 있다. 디코더는, B 프레임과 P 프레임의 타임 스탬프를 보간 할 필요가 있다. 역방향 재생중은, 타임 스탬프는 계속 증가하는 점에 주의 해야 한다. 타임 스탬프가 퇴보할 것은 없다.

레이트 변경 프로퍼티 세트는, 버전 1.0 으로 버전 1.1 의, 2 개의 버전이 정의되고 있다. 디폴트의 동작은, 버전 1.0 으로부터 제공된다. 디코더 벤더는, 버전 1.1 을 지원 하는 것을 추천 한다. 버전 1.1 이 보다 순조롭게 재생되기 때문이다.

레이트 변경 버전 1.0

버전 1.0 의 레이트 변경 프로퍼티 세트는, MPEG-2 디코더의 디폴트의 동작을 정의한다. DVD 네비게이터는 현재, 이 버전을 사용하고 있다.

소스 필터는,AM_RATE_SimpleRateChange 프로퍼티를 설정해, 레이트 변경을 알린다. 이 프로퍼티의 데이터는, 새로운 레이트 및 레이트가 유효하게 되는 입력 샘플의 시작 타임이다. 디코더는, 시작 타임에 소트 된 보류 상태의 레이트 변경의 큐를 유지한다.

DVD 네비게이터는 1 배속 이외의 속도로 변경하기 전에, 보류 상태의 샘플을 모두 출력해, 일시적으로 레이트를 1.0 으로 설정해, 그래프를 플래시 한다. 다음에, 새로운 레이트를 설정한다. 모든 레이트 변경은, 현재의 비디오 개체 단위 (VOBU)의 마지막에 스케줄 되고 있다. 그래프를 플래시 하면, 프레젠테이션 타임이 제로에 리셋 되는 점에 주의 해야 한다.

DVD 네비게이터는,스무드 모드에서도스캔 모드에서도 동작한다. 스무드 모드에서는, B 프레임이나 P 프레임을 포함한 모든 프레임을 디코더에 송신한다. DVD 네비게이터는, 재생 속도가 제로보다 크지만 디코더의 최대 데이터 레이트보다 작은 경우는 반드시 스무드 모드를 사용한다. 재생 속도가 제로보다 작은 (역방향 재생)인가, 디코더의 최대 데이터 레이트를 웃도는 경우, DVD 네비게이터는 스캔 모드를 사용해, 디코더에는 I 프레임 밖에 송신하지 않는다. 초고속시에는, I 프레임을 몇개인가 스킵 하는 경우가 있다. 예를 들어, 1 개 간격으로 I 프레임을 송신하는 경우가 있다.

디폴트에서는, DVD 네비게이터는 1.0 이외의 레이트의 오디오 스트림을 뮤트 한다. 이 디폴트 설정을 변경하려면 , DVD_AudioDuringFFwdRew 플래그를 설정해,IDvdControl2::SetOption 를 호출한다.

레이트 변경 버전 1.1

버전 1.1 의 레이트 변경 프로퍼티 세트도 기본 원칙은 버전 1.0 과 같지만, 다음의 점이 다르다.

더 자세한 정보는, 각각의 프로퍼티의 레퍼런스 페이지를 참조할것.

레이트 세그먼트(segment)의 산출 방법

이하의 그림에서는, 출력 타임 스탬프 (y)는 다음의 식에서 요구된다.

y = r(x - xi)

여기서,x 는 입력 타임 스탬프,r 는 레이트,xi 는 현재의 레이트의 x 절편이다. 이 식은,xi 의 위치에 있어서의 y = mx + b 로부터 요구된다. 여기서,m 는 구배 (r),b 는 y 절편이다. 이것으로부터 b = -m(xi)가 요구되므로, 식 y = mx + b 에 대입한다.

레이트 변경

디코더는 x 절편을 다음과 같이 해 요구한다. 가정 :

r1 = 전의 레이트

r2 = 현재의 레이트

xi1 = 전의 레이트 변경의 x 절편

xi2 = 현재의 레이트 변경의 x 절편

x = 현재의 레이트 변경의 시작 타임

미지의 xi2 는, y = r2(x - xi2) = r1(x - xi1)를 푸는 것에 의해 구할 수 있다 (다음의 그림을 참조할것). 이렇게 해, 다음의 결과를 얻을 수 있다.

xi2 = (r1 / r2)(xi - x) + x

타임 0,r1 = 1,xi1 = 0 으로 재생이 1 배속과 같이 특수한 경우는, 다음과 같이 계산한다.

레이트 변경의 x 절편의 계산

요건

Dvdmedia.h 를 인클루드 하는 것.

참조

↑TOP