Я написал реализацию C / C ++, которую я называю «композитором» (я пришел из видео-фона) для композитного / наложения видео / графики поверх видеоисточника.Моя текущая реализация композитора довольно наивна, и есть место для улучшений оптимизации процессора (например, SIMD, многопоточность и т. Д.).
Я создал высокоуровневую диаграмму того, что я сейчас делаю:
Диаграмма не требует пояснений.Тем не менее, я остановлюсь на некоторых ограничениях:
- Основное видео всегда поставляется в 8-битном формате YUV 4: 2: 2
- Вторичное видео (опционально) поставляется в 8-битном формате YUV 4: 2: 2 или в формате YUVA 4: 2: 2: 4.
- Выход из оверлея должен выходить в 8-битном формате YUV 4: Упакованный формат 2: 2
Некоторые другие биты информации:
- Количество графических входов будет различным;оно может (или не может) быть постоянным значением.
- Цветовой формат графики может быть закреплен либо в формате ARGB, либо в формате YUVA (т. е. я могу предоставить его по вашему усмотрению).На данный момент я прикрепляю его к YUVA, чтобы сохранить постоянный цветовой формат.
Потенциал использования OpenGL и сопровождающих его шейдеров довольно привлекателен:
- Не нужно заново изобретатьколесо (с точки зрения фактического исполнения композиции)
- Возможность использования графического процессора там, где он доступен.
Меня беспокоит использование OpenGL - производительность.Оглядываясь в Интернете, я понимаю, что поверхность YUV будет внутренне преобразована в RGB;Я хотел бы свести к минимуму количество преобразований формата цвета и обеспечить оптимальную производительность.Без предварительного опыта OpenGL, я надеюсь, что кто-то сможет пролить некоторый свет и предложить, если я собираюсь пойти по неверному пути.
Возможно, моя проблема с производительностью меньше связана с использованием выделенного графического процессора?Нужно ли учитывать отдельные пути кода:
- Аппаратное обеспечение с графическим процессором (-ами)
- Аппаратное обеспечение только с процессором (-ами)?
Кроме того, утраЯ собираюсь бороться, когда мне нужно обработать 10-битный YUV?