Руководство OEM по реализации рентабельности инвестиций

В Android 15 представлен стандартизированный процесс интеграции пользовательских конфигураций области интереса (RoI) в систему кодирования видео Android. Эта функция обеспечивает лучшее качество сжатия объектов интереса, предлагая общедоступные API для интеграции и анализа пользовательских конфигураций в видеокодер.

Выполнение

Поставщики SoC и OEM-производители могут контролировать поддержку RoI для кодирования видео с помощью флага FEATURE_Roi . Если FEATURE_Roi не включен, поведение видеокодера не изменится.

Изменения в видеофреймворке

В этом разделе подробно описаны изменения в платформе видео, необходимые для реализации этой функции.

Ключи в Codec2

В Android 15 карта параметров квантования ( QP_map ) и прямоугольная конфигурация ( rect ) определяются как типы конфигурации RoI. Кроме того, в Codec2 (C2) введены два ключа для поддержки этих новых типов. Оба ключа используются так же, как и общедоступные API. В цикле кадров кодировщика конфигурация динамически корректируется на этапе выполнения, до постановки входного буфера в очередь, что описано следующим образом:

  • В липком сценарии, если для текущего кадра не указана конфигурация RoI, кодер использует ту же конфигурацию, что и предыдущий кадр.

  • В динамическом сценарии типы конфигурации RoI могут изменяться динамически.

Новые ключи в C2 описаны в следующих разделах.

кПараминдекскпоффсетмапбуфер

Ключ kParamIndexQpOffsetMapBuffer сигнализирует о карте qp-offset для кадра. Его значение устанавливается с помощью входного параметра PARAMETER_KEY_QP_OFFSET_MAP из setParameters .

kParamIndexQpOffsetMapBuffer — это массив байтов в C2InfoBuffer со следующими атрибутами:

  • Длина: количество блоков 16x16 в одном кадре.

  • Значение: каждое значение массива представляет собой смещение QP блока 16x16 в регионе -51~51. QP целевой наибольшей единицы кодирования (LCU) рассчитывается с помощью управления скоростью кодера плюс смещение. Если вычисленный результат выходит за пределы диапазона 0–51, значение усекается до 0–51.

    • Если 0: Нет смещения QP, QP определяется исходным контролем нормы.
    • Если ненулевое значение: QP — это исходное управление нормой плюс смещение.
    • Если отрицательно: качество видео повышается в целевом LCU.
    • Если положительный: качество видео снижается в целевом LCU.
  • Использование: Пользователь должен настроить этот ключ как блоки 16x16. Кодер адаптирует конфигурацию к реальному размеру LCU, усредняя значения блоков 16x16 в LCU.

C2_PARAMKEY_QP_OFFSET_RECTS

Ключ C2_PARAMKEY_QP_OFFSET_RECTS (установленный в coding.qp-offset-rects устанавливает RoI как QpOffset-Rects . Его значение устанавливается с помощью входного параметра PARAMETER_KEY_QP_OFFSET_RECTS из setParameters .

Для поддержки этого ключа введена следующая структура C2QpOffsetRectStruct :

struct C2QpOffsetRectStruct : C2Rect {
  int32_t qpOffset;

  DEFINE_AND_DESCRIBE_C2STRUCT(QpOffsetRect)
  C2FIELD(width, "width")
  C2FIELD(height, "height")
  C2FIELD(left, "left")
  C2FIELD(top, "top")
  C2FIELD(qpOffset, "qp-offset")
}

Где:

  • top и left : координаты области интереса в прямоугольной форме. RoI растягивается, чтобы соответствовать границам LCU. Значение представляет верхний левый угол каждого пикселя, так что ((0,0), (16, 16)) определяет полный блок 16x16.

  • qpOffset : каждое значение массива представляет смещение QP целевой области rect . Его определение и использование такие же, как и у значения kParamIndexQpOffsetMapBuffer .

Алгоритм сопоставления

В следующей таблице показано сопоставление открытых ключей с платформой видео:

Открытые ключи или API Маппинг в видеофреймворке
PARAMETER_KEY_QP_OFFSET_MAP Значение передается в kParamIndexQpOffsetMapBuffer как экземпляр C2InfoBuffer .
PARAMETER_KEY_QP_OFFSET_RECTS Значение преобразуется из String в Struct C2QpOffsetRectStruct и передается в C2_PARAMKEY_QP_OFFSET_RECTS .

Обработка ошибок

Реализация OEM должна обрабатывать следующие случаи ошибок:

Случай ошибки Пример Умение обращаться
Для включения RoI используются как ключ поставщика, так и стандартизированный ключ. Пользователь вызывает как setFeatureEnabled(FEATURE_ROI) так и ключ поставщика, чтобы включить RoI. РоИ должен быть включен.
Смещение QP находится в пределах диапазона, но не поддерживается поставщиками SoC. Пользователь устанавливает смещение QP как 12, но SoC поддерживает смещение QP только до 10. Поддерживаемый диапазон смещения QP оставлен как лучший. Значение ограничено поддерживаемым диапазоном SoC.
Несколько конфигураций RoI (будь то стандартизированный ключ или ключ, специфичный для поставщика) устанавливаются для одного кадра. Пользователь использует как стандартный ключ, так и ключ поставщика для кадра 1. Если доступно, платформа сохраняет первую стандартизированную конфигурацию rect , первую стандартизированную конфигурацию QP_map или обе. В каждой категории платформа отправляет в SoC только одну стандартизированную конфигурацию, и если стандартизированная конфигурация доступна, реализация SoC должна игнорировать конфигурации поставщика. Если в SoC отправляется несколько конфигураций, поставщик SoC должен сохранить только одну конфигурацию RoI и игнорировать остальные конфигурации.

Конфигурации сохраняются в следующем порядке приоритета:

  1. Стандартизированный rect
  2. Стандартизированная QP_map
  3. rect поставщика
  4. QP_map поставщика