измерение эффекта eglPresentationTimeANDROID()

Я отлаживаю видеорендерер C++, который использует eglPresentationTimeANDROID() для улучшения губной синхронизации. Это расширение egl доступно не на всех протестированных мною устройствах. но для некоторых (например адрено) его надо отключать вручную - иначе стрим зависает. Я понимаю, что некоторые устройства фактически игнорируют PTS (см. Временная метка Android Native Window).

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


person Alex Cohn    schedule 26.11.2016    source источник


Ответы (1)


Обычно единственный способ увидеть, что расширение имеет какой-либо эффект, — это использовать systrace для мониторинга вывода чего-то вроде Grafika "запланированная замена" Activity (которая была создана для этой цели). Нет никаких причин для зависания потока, по крайней мере, в исходниках AOSP; Я не знаю, какой код мог быть добавлен OEM-производителями.

Логика во время рендеринга должна быть следующей:

  • Если желаемое время представления кадра прошло, а другого кадра, готового для текущего слота дисплея, нет, покажите его;
  • Если желаемое время презентации прошло, а для следующего слота дисплея готов другой кадр, отбросьте его;
  • Если желаемое время презентации находится в ближайшем будущем, придержите его сейчас;
  • Если желаемое время презентации более чем на секунду вперед, покажите его сейчас.

Неправильно сформированные значения PTS должны приостанавливать отображение не более чем на секунду. Отметки времени используют монотонные часы, поэтому они не подлежат обновлению часов.

Нет необходимости использовать эту функцию, если вы можете идеально синхронизировать отправку видеокадров. Цель расширения заключалась в том, чтобы упростить приложениям управление синхронизацией. Цель состояла в том, чтобы использовать его в системных видеоплеерах для улучшения синхронизации, но я не знаю, произошло ли это на самом деле. (Я не вижу, чтобы он использовался в исходниках AOSP.)

person fadden    schedule 28.11.2016
comment
Большое спасибо! Мы могли бы включить systrace для этих собственных вызовов OpenGL, следуя вашему объяснение, но в нашем сценарии оно того не стоит. Мы получаем прямой видеопоток и используем именно ту логику представления, которую вы описали выше. Итак, мы решили вообще не использовать eglPresentationTimeANDROID(). Ваше замечание, что он не используется в системном видеоплеере, является веским аргументом в пользу такого шага. - person Alex Cohn; 29.11.2016
comment
Приятно осознавать, что плохо сформированный PTS не должен быть причиной зависания видеопотока. К сожалению, даже правильно сформированный PTS приводит к зависанию некоторых планшетов Amazon Fire, и мы также обнаружили, что графический процессор Nvidia может работать некорректно. Кто знает, какие еще устройства должны быть в черном списке. - person Alex Cohn; 29.11.2016