2016-09-28 6 views
0

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

Мой вопрос заключается в том, как использовать 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 
    } 
} 

ответ

0

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

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

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

+0

Не создает ли новый контекст дорогостоящим с точки зрения ресурсов? Например, если область изменяется в каждом кадре произвольно? –

+0

Это зависит от вашего определения стоимости. Его несколько небольших распределений памяти и некоторые вычисления; (возможно) дешевле инициализировать новый контекст для преобразования небольшого региона, чем для преобразования полного кадра с использованием одного статического контекста. –

+0

Я предполагаю, что каждый раз буду купировать некоторый bechmarking по libyuv vs swscale с новым контекстом и посмотреть, как это выглядит. –

Смежные вопросы