FFmpeg sws_scale на измененной области

Я использовал sws_scale преобразовать группу изображений RGB32 в формат YUV420. Каждое изображение очень похоже на предыдущее, и они отличаются только в области прямоугольника Q.

У меня вопрос, как использовать Q, чтобы ускорить процесс конвертации? Дополнительный параметр должен быть добавлен к sws_scale функция.

sws_scale( ctx, in_plane, in_stride, sliceY, height, out_plane, out_stride, Q){
    // parameter out_plane stores the YUV420 data of previous image
    Instead of scanning the whole image, scan through rectangle Q{
        Do conversion
    }
}

1 ответ

В текущем API такого параметра не существует, но вы можете использовать sws_scale как есть. Вы можете создать два контекста - один для всей картинки и один для Q; чтобы конвертировать только Q:

  • использовать контекст, который вы создали для Q
  • Сдвиньте все указатели данных, чтобы они все указывали на первый пиксель Q в изображениях ввода / вывода
  • Оставьте шаги, как они были для полной картины

Здесь следует обратить внимание на несколько предостережений: во-первых, поскольку вы используете YUV420 в качестве выходного формата, вы хотите увеличить Q, чтобы он начинался с четной строки / столбца и занимал четную ширину / высоту (в противном случае на границе Q может быть какой-то искаженный цвет). Во-вторых, убедитесь, что указатели всех плоскостей изображения указывают на один и тот же пиксель - это требует разных смещений для каждой плоскости в зависимости от формата пикселя. В-третьих, это лучше всего работает, если нет масштабирования, иначе результирующее изображение может выглядеть не совсем так, как с полноразмерным масштабом из-за сглаживания.

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