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 может быть какой-то искаженный цвет). Во-вторых, убедитесь, что указатели всех плоскостей изображения указывают на один и тот же пиксель - это требует разных смещений для каждой плоскости в зависимости от формата пикселя. В-третьих, это лучше всего работает, если нет масштабирования, иначе результирующее изображение может выглядеть не совсем так, как с полноразмерным масштабом из-за сглаживания.