LINUX.ORG.RU
ФорумJob

Надо добавить поддержку WebAssembly в яваскриптовый ресайзер картинок

 , ,


2

4

Т.к. в Firefox 52 уже включили поддержку WebAssembly, хочется поэкспериментировать, но руки никак не дойдут.

Надо закопипастить на сишечку вот эти 2 файла:

https://github.com/nodeca/pica/blob/master/lib/js/resize_array.js
https://github.com/nodeca/pica/blob/master/lib/js/unsharp.js

и разобраться как это скомпилировать в WA и потом дернуть из яваскрипта.

В ресайзере можно закодить только конвольверы, оставив расчет фильтров на яваскрипте. Unsharp mask надо тащить целиком, но там код простой как рельса.

Код дергается 1:1, без наворотов с SSE (он пока все равно в WA не поддерживается).

Под деньгам ХЗ сколько. Договоримся. Заодно мир улучшите :)

vitaly@rcdesign.ru

★★★★★

в Firefox 52 уже включили поддержку WebAssembly

А разве не 50? Я уже довольно давно с wasm экспериментирую и считаю, что вряд ли переписать 400 строк на Си будет проблемой, но сам не возьмусь из-за нехватки свободного времени и мотивации.

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

http://www.opennet.ru/opennews/art.shtml?num=46155

В 52 без флагов и СМС.

Думаю там меньше 400 строк, если отстройку фильтров на яваскрипте оставить. Там можно почти построчно копировать. Дело только за тем, чтобы разобраться в системе сборки.

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

Может в качестве примера поэкспериментируешь на конвольверах https://github.com/nodeca/pica/blob/master/lib/js/resize_array.js#L152-L273 ?

Там уже ну совсем немного. А дальше остальное я сам добью пердячим паром, если добровольцев не сыщется.

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

Рискну взяться, но скорей всего кто то раньше меня всё сделает, т.к. с WA дела не имел никогда.

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

Кидай скайп на мыло, обсудим что как.

Насчет того что кто-то быстрее-медленне - хитрый план в том, что проще заплатить нескольким, чем рисковать, рассчитывая на кого-то одного.

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

https://github.com/nodeca/pica/blob/master/test/fixture.js

Тесты под ноду делались, а WA только в браузере пока. Но фикстуры есть. Если сильно хочется, можно из них яваскрипт нагенерить и забандлить.

Хотя, по большому счету, конвольверы тестировать нафик не надо, они тупые совсем, на глаз будет видно если что.

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

Возможно он хочет получить экслюзивный архив по почте, с личной PGP-подписью, до того как всё появится на гитхабе.

Vit ★★★★★
() автор топика
Последнее исправление: Vit (всего исправлений: 1)
Ответ на: комментарий от Vit

Я скину, но окончательно возьмусь только после того как узнаю смогу ли или нет, (то есть почитаю по теме) что бы не тратить твоё время и надежды и своё время в пустую. Ну там спишемся глянем как чё.

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

http://webassembly.org/getting-started/developers-guide/

Собрал по инструкции. Что-то оно к простой функции типа x -> x + 1 генерит до фига оверхеда. Видимо рантайм какой-то. ХЗ как его выпилить.

У меня в конвольверах даже аллокатор не используется. Там фактически 3 массива на входе, и он между ними байтики шмаляет. Должно получиться байт 500 imho.

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

Завтра поэкспериментирую, надо всякое разное пособирать, а потом сравнить размеры, если будет статичные +сколькотокиломегабайт значит рантайм иначе да оверхед.

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

https://github.com/kripken/emscripten/wiki/WebAssembly
https://github.com/kripken/emscripten/wiki/WebAssembly-Standalone

Вот так получилось похоже на правду:

emcc -o hello.wasm hello.c -O3 -g -s WASM=1 -s SIDE_MODULE=1

Там еще пример обертки есть. Только в нашем случае вместо загрузки внешнего файла надо wasm заэмбедить прямо в яваскрипт в base64.

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

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

В общем это не то, что заслуживает обсуждения. Все что имеет значение я уже написал.

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

Не используй эту инструкцию, это всё от лукавого. Всё, что тебе понадобится — это LLVM с clang и compiler-rt, Binaryen и wabt.
Сейчас как раз начал тестировать то, что насобирал. В Firefox 50 и 51 спецификация устаревшая, но Firefox 52 прекрасно запустил бинарник, собранный со свежим Binaryen. Свинью (даже две свиньи) внезапно подложил хромой (версия 57) — во-первых, он не поддерживает функцию Wasm.instantiateModule, но это не так страшно, а во-вторых, он отказывается загружать что-либо, собранное современным компилятором, тут выхода два — или хром обновлять до канареечной версии, или компилятор откатывать. Лучше пока забью на это кривое гугловское поделие.

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

Не используй эту инструкцию, это всё от лукавого.

Конструктивные альтернативы предложишь? Меня как-то не прикалывают перспективы ковыряться в документаци по 4 пакетам вместо чтения одной странички.

В хроме скорее всего версию формата не сбросили. Ну или таки собери по инструкции :)

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

Конструктивные альтернативы предложишь?

Специально сейчас залил свои скрипты.

В хроме скорее всего версию формата не сбросили.

Просто в Firefox уже обновили интерпретатор для соответствия с последней версией стандарта, а в Chrome ещё нет.

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

Скрипты дело хорошее, но я не вижу явных преимуществ перед тем что предлагается в официальной документации и вики. Тем более тот вариант проверен миллионами мух.

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

интересно сравнить по скорости/объему

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

Вряд ли прямо уж миллионами, это довольно новый вариант, а поддержку в LLVM пилили с самого начала. Но результат не меняется (хотя в идеале нужно попробовать и сравнить, и с gcc сравнить ещё).

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

Я в курсе, что туда можно все что LLVM умеет. У меня чистая математика, даже без выделения памяти. Там простой сишечки достаточно.

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

Сейчас протестировал в Chrome 57, всё заработало. С поддержкой актуальных версий двух главных браузеров можно уже запускать в продакшон (но с фоллбэком для ретроградов, конечно).

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

Кстати, дай примеры массивов src, dest и filters. По коду я примерно представляю формат фильтров, но гораздо интереснее работать с реальными данными.

CYB3R ★★★★★
()

За rcdesign.ru огромное спасибо, в своё время много полезного про «пенолёты» почерпнул. Статья про мессер и про ил-2 до сих пор в закладках лежит,

Deleted
()
Ответ на: комментарий от CYB3R

Скорость-то как? Это ж самое главное, из-за чего все затевалось. Посмотри на картинке 5000х3000 или больше, с отключенными вебворкерами и уншарпом.

Или выложи код с демкой, сам потыкаю.

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

Формат фильтров просто посмотри в /dest/pica.js подставь в convolveH/V console.log(filters) console.log(src) Мне вот что интересно ты как вопрос с памятью решил? Обвязку emscripten c malloc? Ведь wasm не поддерживает js массивы нативно, только с дублированем памяти вроде как.

Dron ★★★★★
()
Последнее исправление: Dron (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.