Поделиться через


Обработка конца потока в кодеках AVStream

Когда HW MFT получает пример с установленным флагом конца потока (EOS), он задает KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM в поле OptionsFlag структуры KSSTREAM_HEADER, соответствующей данному образцу.

После получения минидрайвером KSSTREAM_POINTER с флагом KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM, установленным в StreamHeader.OptionsFlag, входной пин не будет получать новые указатели входного потока, пока минидрайвер не установит KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM на указатель выходного потока.

Прежде чем микродрайвер устанавливает KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM на указатель выходного потока, он должен с доступными входными данными создавать максимально возможное количество выходных кадров.

Затем минидрайвер должен очистить всю кэшированную информацию, связанную с ранее обработанными указателями потока, а также данные, связанные с этими указателями потока. Затем минидрайвер должен задать KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM на выходном пине.

Минидрайвер должен обрабатывать новые указатели входного потока, поступающие впоследствии, как часть нового потока. Исключение составляет случай, когда EOS происходит в результате разрыва в медиапотоке. Если это так, то только что поступающий указатель потока будет иметь KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY или KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY или оба флага, заданные в KSSTREAM_HEADER. OptionsFlags. Если указатели потоков с одним из этих флагов поступают на входной контакт, минидрайвер должен установить те же флаги на соответствующем указателе потока выходного контакта.