Более высокая задержка декодирования на устройствах Snapdragon по сравнению с устройствами Exynos с h264.

Я заметил, что для устройств того же ценового диапазона декодеры на базе Snapdragon могут иметь гораздо большую задержку декодирования, чем декодеры на базе Exynos. Это наиболее заметно при декодировании потоков h264 со значением "pic_order_cnt_type" внутри SPS, установленным на 0 вместо 2. Мне интересно, наблюдали ли вы также такое поведение и есть ли какое-либо исправление для этого (я уже открывал вопрос здесь но ответа пока нет)

Некоторые технические детали:

Я создал простое примерное приложение, которое использует AMediaCodec для декодирования потоков h264. Он загружает «задержку декодирования» в качестве результата теста в базу данных Firestore. код

Вот сравнение задержки декодирования для разных потоков h264 на Pixel 4 (с использованием декодера львиного зева) и Samsung Galaxy Note 9 (с использованием декодера exynos):

Как видите, для видео с именем jetson/h264/2/test.h264 время декодирования на устройстве Snapdragon примерно в 21 раз больше, чем на устройстве Samsung. pic_order_cnt_type==0 для этого потока. Однако на других потоках разница во времени декодирования незначительна. (все они используют pic_order_cnt_type==2)

Основным параметром, определяющим, входит ли декодер львиного зева в «путь декодирования с малой задержкой», по-видимому, является значение pic_order_cnt_type, упомянутое выше. Если я правильно понимаю спецификации h264, если для этого значения установлено значение 2, переупорядочивание изображений невозможно (нет буферизованных кадров). Если он установлен на 0, изменение порядка изображений возможно, но не обязательно используется кодером. Однако декодер львиного зева не делает различий между «возможным» и «фактически используемым кодером», что приводит к большой разнице в задержке декодирования.

Мне удалось уменьшить задержку декодирования на львином зеве, манипулируя битовым потоком перед его отправкой в ​​декодер (добавляя VUI с num_reorder_frames=0 и max_dec_frame_buffering=0), но это никогда не приводит к 0 буферизованным кадрам, а только к менее буферизованным кадрам.

0 ответов

Другие вопросы по тегам