Произвольное упорядочение срезов (ASO ) - это алгоритм для предотвращение потерь. Он используется для изменения порядка представления основных областей (макроблоков ) на изображениях. Этот тип алгоритма позволяет избежать ожидания полного набора сцен для получения всех источников. Обычно рассматривается как функция устойчивости к ошибкам / потерям.
Этот тип алгоритма включен в качестве инструмента в базовый профиль кодировщика H.264 / MPEG-4 AVC с I фрагментами, P фрагментами, контекстно-адаптивным кодированием переменной длины (CAVLC ), группировка фрагментов (), произвольный порядок фрагментов (ASO) и фрагменты избыточности.
Этот профиль широко используется в основном для недорогих приложений с ограниченными вычислительными ресурсами в видеоконференцсвязи, а также в мобильных приложениях и приложениях безопасности.
Произвольный порядок фрагментов (ASO) ослабляет ограничение, заключающееся в том, что все макроблоки должны быть упорядочены в порядке декодирования, и, таким образом, повышает гибкость для обеспечения производительности с малой задержкой, что важно для приложений телеконференций и интерактивного Интернета приложений.
Если ASO для изображений поддерживается в AVC, возникают серьезные проблемы: срезы из разных изображений чередуются. Один из возможных способов решения этих проблем - ограничить ASO внутри изображения, т.е.срезы из разных изображений не чередуются.
Однако, даже если мы ограничиваем ASO в изображении, сложность декодера значительно увеличивается. Поскольку гибкий порядок макроблоков FMO расширяет концепцию слайсов, позволяя непоследовательным макроблокам принадлежать одному и тому же слайсу, в этом разделе также рассматривается сложность декодера, вносимая (FMO).
Пример того, как макроблоки могут быть связаны с разными срезами, показан на рисунке 1 Когда поддерживается ASO, четыре слайса из этого примера могут быть приняты декодером в случайном порядке. На рисунке 2 показан следующий порядок получения: срез №4, срез №3, срез №1 и срез №2. На том же рисунке представлены блоки декодера AVC, необходимые для поддержки декодирования ASO.
Рисунок 1: Пример назначения макроблока четырем слоям. Каждый фрагмент представлен отдельной текстурой.
Рисунок 2: Блоки декодера AVC должны поддерживать декодирование ASO.
Для каждого слайса длина слайса и адрес макроблока (то есть индекс по отношению к порядку сканирования растра) первого макроблока (МБ) слайса извлекаются анализатором слайсов (рисунок 2). Эта информация вместе с самим слайсом сохраняется в памяти (обозначенной как DRAM). Кроме того, должен быть сгенерирован список указателей (рисунок 2, указатель для каждого фрагмента, каждый из которых указывает на то место в памяти, где хранится фрагмент). Список указателей вместе с адресом первого макроблока среза будет использоваться для навигации по неупорядоченным срезам. Длина слайса будет использоваться для передачи данных слайса из DRAM во внутреннюю память декодера.
Столкнувшись с необходимостью декодировать неупорядоченные срезы, декодер может:
Первый метод увеличивает время ожидания, но позволяет выполнять декодирование и деблокирование параллельно. Однако управление большим количеством указателей (в худшем случае - по одному указателю на каждый МБ) и повышение интеллекта блока доступа к DRAM увеличивают сложность декодера.
Второй метод значительно снижает производительность декодера. Вдобавок, выполняя деблокировку во втором проходе, увеличивается пропускная способность DRAM для процессора.
Декодирование срезов в порядке их получения может привести к дополнительному потреблению памяти или наложить более высокие требования к пропускной способности для декодера и локальной памяти для работы с более высокой тактовой частотой. Рассмотрим приложение, в котором операция отображения считывает изображения, которые должны отображаться, прямо из раздела памяти, где декодер сохранил изображения.
Пример того, как слайсы могут быть связаны с другой группой слайсов, показан на рисунке 3. Когда поддерживаются ASO и FMO, четыре слайса из этого примера могут быть приняты декодером в случайном порядке. На рисунке 2 показан следующий порядок: срез №4, срез №2, срез №1 и срез №3. На том же рисунке представлены блоки декодера AVC, необходимые для поддержки декодирования ASO и FMO.
Рисунок 3: Пример назначения макроблока четырем слоям и двум (SG на рисунке). Каждый фрагмент представлен другой текстурой, и каждая группа фрагментов представлена другим цветом.
Рисунок 4: Блоки декодера AVC должны поддерживать декодирование ASO и FMO.
Помимо длины слайса и адреса макроблока 1-го макроблока (MB) слайса, синтаксическому анализатору слайсов (рисунок 4) необходимо выделить группу слайсов (SG) каждого слайса. Эта информация вместе с самим слайсом хранится в DRAM. Как и в случае с ASO, должен быть сформирован список указателей (рисунок 4).
Список указателей вместе с адресом 1-го МБ слайса, SG и mb_allocation_map (хранится в локальной памяти процессора), будет использоваться для навигации по слайсам. Длина слайса будет использоваться для передачи данных слайса из DRAM в локальную память процессора.
Аналогично случаю ASO, в объединенном случае ASO и FMO декодер может:
Первый подход по-прежнему является предпочтительным. Из-за FMO декодирование макроблоков в порядке растрового сканирования может потребовать переключения между различными слайсами и / или группами слайсов. Для ускорения доступа к DRAM необходимо использовать один буфер для каждой группы слайсов (рисунок 4). Этот дополнительный интеллект модуля доступа к DRAM еще больше увеличивает сложность декодера. Более того, переключение между различными слайсами и / или группами слайсов требует замены информации о состоянии (ED). В худшем случае замена происходит после декодирования каждого макроблока. Если вся информация о состоянии энтропийного декодера слишком велика для хранения в локальной памяти процессора, каждый статус ED должен быть загружен и сохранен в DRAM, таким образом, дальнейшее увеличение объема DRAM в памяти процессора пропускная способность (рисунок 4).