변경 내용 스트리밍
DVD 스트림의 형식은 언제든지 변경 될 수 있습니다. 예를 들어 재생 중에 오디오 스트림 형식이 AC3와 LPCM 간에 변경 될 수 있습니다.
스트림의 각 데이터 샘플에는 추가된 KSSTREAM_HEADER 구조가 포함되어 있습니다. 이 구조체에는 OptionsFlags 멤버가 포함됩니다 .
다음 플래그 중 하나를 포함하는 헤더와 연결된 데이터 샘플은 null 데이터 패킷 또는 유효한 데이터를 포함하거나 포함하지 않을 수 있습니다.
KSSTREAM_HEADER OptionsFlags 멤버의 다음 값은 DVD 재생에 중요합니다.
KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY
KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 비트는 바로 다음 샘플이 이전 샘플과 다른 데이터 원본(또는 위치/위치)에 속한다는 것을 나타냅니다. 이는 이전 샘플을 사용하여 진행 중인 모든 처리를 완료해야 했음을 나타냅니다. 이 비트는 종종 이전 프레임의 중간에 제공되므로 디코더가 이전 프레임을 삭제하고 새 데이터로 처리를 시작해야 함을 나타냅니다.
KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY
KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 비트는 이 샘플 바로 다음에 데이터에 시간 간격이 있음을 나타냅니다. 예를 들어 DVD 스트림에 단일 I 프레임으로 인코딩된 스틸 프레임이 포함된 경우 디코더는 KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 플래그를 포함하는 마지막 샘플과 함께 I 프레임에 대한 모든 데이터를 수신합니다. 이는 디코더가 I 프레임을 즉시 디코딩하고 B 프레임 데이터를 기다리지 않음을 나타냅니다.
KSSTREAM_HEADER_OPTIONSF_TYPECHANGED
KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 비트는 헤더와 연결된 샘플이 스트림에 대한 새 KSDATAFORMAT 블록이 됨을 나타냅니다. 이렇게 하면 데이터 형식을 동적으로 변경할 수 있습니다. 예를 들어 비디오를 4x3에서 16x9로 변경하거나 오디오를 AC3에서 PCM으로 변경하는 것이 있습니다. 디코더는 새 형식 블록이 있는 패킷 이전의 모든 데이터가 처리된 경우에만 새 형식 블록에 필요한 모든 변경을 수행해야 합니다.
스트림 형식 변경이 발생하면 미니드라이버가 데이터 패킷의 KSSTREAM_HEADER 구조의 OptionsFlags 멤버에 설정된 KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 비트가 있는 데이터 패킷을 받습니다.
미니드라이버가 오디오 스트림에서 지원하는 데이터 형식을 올바르게 노출하지 않으면 KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 플래그가 표시되지 않을 수 있습니다.
스트림에서 지원하는 데이터 형식을 올바르게 노출하려면 다음 두 단계를 수행합니다.
스트림에 대한 SRB_GET_STREAM_INFO 처리기는 각각 유효한 서식 블록을 가리키는 NumberOfFormatArrayEntries 포인터의 배열을 가리키도록 StreamFormatsArray 포인터를 설정해야 합니다.
SRB_GET_DATA_INTERSECTION 처리기는 제안된 형식에 해당하는 형식 블록을 제공된 버퍼에 복사해야 합니다.
비디오 형식 변경은 비디오 형식이 변경되었음을 나타내기 위해 KSSTREAM 이벤트를 비디오 포트 연결로 신호해야 합니다. 미니 드라이버는 이 목적을 위해 StreamClassStreamNotification(SignalMultipleStreamEvents, pMyHwDevExt-pMyStreamObject>, &MY_KSEVENTSETID_VPNOTIFY, KSEVENT_VPNOTIFY_FORMATCHANGE)을 사용해야 합니다.
픽셀 가로 세로 비율과 같은 비디오 형식의 일부 매개 변수가 변경되면 디코더는 형식 블록을 받습니다. 디코더는 비디오 포트 연결을 재협상하기 위해 비디오 포트에 신호를 보내야 합니다. 디코더는 SignalMultipleStreamEvents 매개 변수를 사용하여 StreamClassStreamNotification을 호출합니다.
DVD 디코더 미니 드라이버는 VideoPort 스트림에 대한 HW_STREAM_INFORMATION 항목에서 이 이벤트에 대한 지원이 제공됨을 나타내야 합니다. 비디오 포트 이벤트에 대한 이벤트 집합 ID가 KSEVENTSETID_VPNotify 이벤트 ID가 KSEVENT_VPNOTIFY_FORMATCHANGE.