DirectShow DirectShow 레퍼런스 인터페이스 IMediaSeeking SetRate [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
SetRate 메서드는, 재생 레이트를 설정한다.
구문
HRESULT SetRate(
double dRate
);
파라미터
dRate
[in] 재생 레이트. 제로여서는 안 된다.
반환값
HRESULT 값을 돌려준다. 가능한 값은 다음과 같다.
값 | 설명 |
S_OK | 성공. |
E_INVALIDARG | 지정한 레이트는, 0 또는 부의 값이었다. 「주의」를 참조. |
E_NOTIMPL | 처리되지 않다. |
E_POINTER | NULL 포인터 인수. |
VFW_E_UNSUPPORTED_AUDIO | 오디오 장치 혹은 필터가 이 레이트를 지원 하고 있지 않다. |
주의
재생 레이트는, 보통 속도와의 비율로 표현된다. 따라서, 1.0 은 보통의 재생 속도, 0.5 는 반의 속도, 2.0 은 2 배의 속도를 나타낸다. 오디오 스트림에 대해서는, 레이트를 바꾸면 그 피치도 바뀐다.
부의 값은 역방향의 재생을 나타낸다. 대부분의 필터는 역재생을 지원 하지 않고, 대신에 dRate 인수가 부의 경우는 에러 코드를 돌려준다.
애플리케이션이 이 메서드를 필터 그래프 매니저로 호출하면, 필터 그래프 매니저는 이하를 실시한다.
스텝 4 로 에러가 일어나면 필터 그래프 매니저는 이전의 레이트를 다시 사용하려고 한다.
필터는 이하와 같이 레이트 변경에 대응할 필요가 있다.
파서 필터와 소스 필터 : 타임 스탬프를 발생시키고 있는 필터는 SetRate 호출에 대응해야 한다. 보통 이것은 AVI 스플리터 필터와 같은 파서 필터이지만, 소스 필터의 경우도 있다. 시크나 레이트 변경의 뒤, 필터는 IPin::NewSegment 메서드를 새로운 설정으로 호출할 필요가 있다. 레이트 변경의 뒤, 그 타임 스탬프를 필요에 따라서 조정해야 한다. 레이트 변경은 시크에 우선하므로, 타임 스탬프는 제로로부터 재스타트가 된다. 따라서, 필터는 그 레이트로 나눈 새로운 타임 스탬프를 계산할 수 있다.
디코더 필터 :디코더는 SetRate 호출에 대해서, 그것들을 업 스트림에 건네주는 이외를 가서는 안 된다. 대신에, 디코더는 업 스트림 파서가 발행하는 NewSegment 호출에 대응해야 한다. 디코더 필터가 새로운 세그먼트(segment) 정보를 받을 때, 그 필터는 그 값을 보존해,NewSegment 호출을 다운 스트림에 건네준다. 일부의 디코더는 그 입력을 보간 하는 것에 의해 추가 타임 스탬프를 생성할 필요가 있다. 그 경우, 레이트 변경을 고려할 필요가 있다.
렌더러 : 수신 프레임은 이미 올바른 타임 스탬프를 가지고 있으므로, 비디오 렌더러는 보통 레이트 변경을 무시할 수 있다. 오디오 디코더는 보통 레이트 변환을 실시하지 않기 때문에, 오디오 렌더러가 그 재생 레이트를 변경할 필요가 있다.
참조