1

Тема: MPC Audio Renderer + Discontinuity

Кратко - есть метод IMediaSample::SetDiscontinuity() - https://docs.microsoft.com/en-us/previo … v%3Dvs.85)
Судя по описанию - SetDiscontinuity() должен устанавливаться когда в данных идет(или должен быть) разрыв.
Это в source фильтре или декодере. Source фильтр устанавливает этот флаг на первый пакет после перемотки, а вот, аудио-декодер к примеру, в случае если при обработке данных произошла ошибка(что и означает разрыв данных).

Аудио-рендерер - при получении пакета с данным флагом должен либо дропнуть его(если временные метки слишком старые), либо дополнить "тишиной"(имитировать пустые пакеты) дабы соблюсти плавность проигрывания. Ну это я так полагаю - ибо никакого описания для этого дела или понятных примеров(ну вообще нет нормальных примеров аудио-рендереров).

Для этого дела я даже недавно в нашем аудио-декодере убрал вызов SetDiscontinuity() в аудио-декодере при A/V корректировке.

И вот тут с автором LAV у нас был идеологический спор, я ему пытался доказать что при A/V корректировке не надо этого делать, A/V корректировка не означает что у нас разрыв в данных. Он был непоколебим smile Закрыл тикет. Что в итоге - есть у меня пару сэмплов которые теперь при использовании LAV Audio Decoder и A/V корректировке - в нашем рендерере вместо корректировки "часов" - будут искажения звука.

Вот думаю - плюнуть и оставить как есть или убрать обработку Discontinuity флага у пакетов.

P.S. DS нормально обрабатывает эти моменты. Не знаю почему - либо игнорирует Discontinuity, либо использует еще какие-то механизмы. Sanear не обрабатывает эти данные.

I7 2600K@4.2 / Asrock P67 Extreme 4 Gen 3 / Kingston HyperX 8Gb 1866 (4x2) Kit / GIGABYTE GTX 960 / BenQ EW2430 / LG 47LM620T / Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215