새 세그먼트

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngineMedia Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

세그먼트는 일반적인 시작 시간, 중지 시간 및 재생 속도를 공유하는 미디어 샘플 그룹입니다. IPin::NewSegment 메서드는 새 세그먼트의 시작을 알릴 수 있습니다. 원본 필터가 다운스트림 필터에 시간 및 속도 정보가 변경되었음을 알리는 방법을 제공합니다. 예를 들어 원본 필터가 스트림의 새 지점을 찾는 경우 새 시작 시간으로 NewSegment 를 호출합니다.

일부 다운스트림 필터는 샘플을 처리할 때 세그먼트 정보를 사용합니다. 예를 들어 프레임 간 압축을 사용하는 형식에서 중지 시간이 델타 프레임에 속하는 경우 원본 필터는 중지 시간 후에 추가 샘플을 보내야 할 수 있습니다. 이렇게 하면 디코더가 최종 델타 프레임을 디코딩할 수 있습니다. 올바른 최종 프레임을 결정하기 위해 디코더는 세그먼트 중지 시간을 나타냅니다. 또 다른 예로 오디오 렌더러가 오디오 샘플링 속도와 함께 세그먼트 속도를 사용하여 올바른 오디오 출력을 생성합니다.

푸시 모델에서 원본 필터는 NewSegment 호출을 시작합니다. 끌어오기 모델에서는 파서 필터를 통해 이 작업을 수행합니다. 두 경우 모두 필터는 다운스트림 입력 핀에서 NewSegment 를 호출하여 호출이 렌더러에 도달할 때까지 호출을 다음 필터로 전파합니다. 필터는 IMemInputPin::Receive와 같은 다른 스트리밍 호출을 사용하여 NewSegment 호출을 직렬화해야 합니다.

스트림 시간은 새 세그먼트마다 0으로 다시 설정됩니다. 세그먼트가 0부터 시작한 후 배달된 샘플의 타임스탬프를 반환합니다.