LINUX.ORG.RU

MMX масштабироование изображений


0

0

посоветуйте библиотеку для масштабирования RGBA изображений. Требования, собственно:

1) Наличие MMX/SSE/?.
2) получает RGBA массив на входе, выдаёт RGBA массив на выходе
3) понимает альфа каналы в RGBA изображениях

Спасибо.

вроде, как недавно активно обсуждался
"Вышел KSquirrel 0.7.1", там есть
"масштабирования RGBA изображений" на основе GL
- оттуда и выдрать кусок кода - будет быстрее, чем с MMX.
а вообще-то их огромное кол-во ...

Valeriy_Onuchin ★★
()
Ответ на: комментарий от Valeriy_Onuchin

Если на GL, то это абсолютно бесполезный пример, т.к. масштибирует/клипает изображение именно OpenGL, и на выходе он ничего не отдаёт (жадный). Ты предлагаешь 9000x9000 изображение грузить в видеопамять встроенной видюхи ? :)

>>а вообще-то их огромное кол-во

ну, например, именно с MMX.

alex_custov ★★★★★
() автор топика
Ответ на: комментарий от alex_custov

да все :) на сколько важен RGBA, а не ARGB?

на клиенте (то бишь без Х севера)
gdk-pixbuf, cairo, Qt's arthur, думаю и libgd,
мы используем libAfterImage, посмотреть src mpegplayer ...
и это те, которые "на слуху", скорее всего на порядок больше.

Valeriy_Onuchin ★★
()
Ответ на: комментарий от krum

О, боги! Ради (интер-)экстра-поляции использовать такие сложные вещи?! Там, наверняка, простые формулы...

dave ★★★★★
()

Посмотри в сторону libswscale из пакета ffmpeg...

Sectoid ★★★★★
()
Ответ на: комментарий от Sectoid

Зачем нужно смотреть в какую-то сторону, если это всего лишь 2D-задача, где central process only решение будет и эффективнее и проще? А смотреть по-моему нужно с сторону Cairo или Arthur. Любой уважающий себя 2D engine такую задачу выполнять должен, например, GDI.

dave ★★★★★
()
Ответ на: комментарий от dave

>А смотреть по-моему нужно с сторону Cairo или Arthur. Любой уважающий себя 2D engine такую задачу выполнять должен, например, GDI.

Бесспорно, это достаточно простая задача. Но исходный вопрос звучал об её реализации средствами MMX. Потому и посоветовал взглянуть на libswscale, ибо AFAIK он как раз поддерживает ускорение с помощью MMX.

Sectoid ★★★★★
()
Ответ на: комментарий от cvv

>>gdk-pixbuf

там используется уже давно неподдерживаемый pixops, который иногда (редко) может портить альфа канал.

alex_custov ★★★★★
() автор топика

кстати я тут на днях экспериментировал с векторами и кватернионами, имплементируя их на sse и руками.
руками оказалось быстрее...видимо я просто не умею готовить sse :(
либо в случае с имплементом руками - gcc сам оптимизирует под sse
лучше, чем я пишу (флаги были -msse -mfpmath=sse)

goodwin ★★
()
Ответ на: комментарий от Valeriy_Onuchin

Любителям оптимизации (ответ эксперта, отрывок из моей личной переписки) :)

commented out code in alpha-blending was my attempt to accelerate it,
but it turns out that original int math was way faster, so I stuck to it.
Generally using mmx/sse does not seems to be worth the effort, compiler
does very good job optimizing code for particular CPU. There is no
noticeable difference untill you get in range of about 1000000 ops, and
even then its just a few milliseconds.

Valeriy_Onuchin ★★
()
Ответ на: комментарий от Valeriy_Onuchin

Полностью не согласен с предыдущим автором. Значит этот экспер не умеет писать на ассмблере.

Проверяется очень просто: берём mplayer (именно оттуда растёт libswscale), компилируем под свою железку, смотрим фильм с программным масштабированием на большой монитор, смотрим в статус лайне загрузку процессора на отображение видео. Потом перекомпилируем mplayer (distclean не забудьте) без поддержки mmx, и, о ужас, всё стало работать в ~2.5 раз медленее! Более точные цифры вам даст oprofile.

Bircoph
()
Ответ на: комментарий от birdie

> Полностью не согласен с предыдущим автором.

известно, что самая "затратная операция" - BitBltting (копирование контента на экран). подозреваю, что имненно здесь основной выигрыш
от MMX.

Valeriy_Onuchin ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.