Anonymous | Login | Signup for a new account | 21-11-24 16:24 UTC |
All Projects | SAS.Планета | Домен, сайт, форум, багтрекер | Доработка карты (ZMP) | Переводы и локализации | Прочее |
My View | View Issues | Change Log | Roadmap | Search |
View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||
0001353 | SAS.Планета | Рефакторинг | public | 25-06-2012 12:49 | 10-10-2012 11:43 | ||||
Reporter | vdemidov | ||||||||
Assigned To | zed | ||||||||
Priority | normal | Severity | major | Reproducibility | N/A | ||||
Status | closed | Resolution | fixed | ||||||
Platform | OS | OS Version | |||||||
Product Version | .Nightly | ||||||||
Target Version | 120808 | Fixed in Version | 120808 | ||||||
Summary | 0001353: Убрать нафиг Vampyre Imaging Library | ||||||||
Description | Это нетредсейфовое чудо-юдо меня достало. Нужно заменить его отдельными либами типа LibJpeg и LibPng. Или возможно выковырять часть кода и сделать его тредсейфовым, хотя бы для нескольких используемых в САС.Планете форматов. | ||||||||
Tags | No tags attached. | ||||||||
Attached Files | libPNG12.zip [^] (27,340 bytes) 26-06-2012 10:15 LibPng15_not_finished.zip [^] (69,050 bytes) 26-06-2012 10:15 PluginPNG.cpp [^] (28,007 bytes) 26-06-2012 10:15 | ||||||||
Notes | |
(0007644) zed (manager) 25-06-2012 13:11 |
FreeImage: http://freeimage.sourceforge.net/ (есть API для Delphi). |
(0007647) vdemidov (manager) 25-06-2012 13:43 |
Нужно будет посмотреть. |
(0007649) zed (manager) 25-06-2012 13:57 edited on: 25-06-2012 13:57 |
У неё как минимум 2 минуса: - большой размер (~ 2,5 Мб) - не предоставляет интерфейса для scanline методов, т.е. с изображениями работает в памяти Если сильно захотеть, то можно отключить ненужные форматы и уменьшить тем самым размер либы, и можно добавить экспорт оригинальных функций из libjpeg, libpng и др. для которых доступны scanline методы. Но это надо ковырять оригинал. |
(0007650) vdemidov (manager) 25-06-2012 14:03 |
Может начнем с перехода на libjpeg читалку и писалку тайлов? Ты ж вроде ее уже сделал? Так включим по умолчанию. Плюс, хотя бы читалку png по-умолчанию сделаем не на вампире, а на libpng. И вот уже почти нет глобальных локов. |
(0007651) zed (manager) 25-06-2012 14:44 |
Пробуй. |
(0007653) vdemidov (manager) 25-06-2012 17:44 |
А что ты там наворотил кучу условной компиляции? Какую версию нужно использовать? |
(0007659) zed (manager) 25-06-2012 18:32 |
Есть 2 версии libjpeg: - быстрая (SSE,MMX и проч. оптимизации) jpeg62 - новая jpeg8, с lossless наворотами В САСе включена быстрая. Если/когда буду делать lossless jpeg надо будет либо включать обе версии, либо оставлять только новую. В условной компиляции ещё можно выбрать статическую, либо динамическую линковку. Сейчас включена динамическая. |
(0007661) vdemidov (manager) 25-06-2012 19:11 |
Хорошо. А сможешь сейвер и лоадер для png сделать? |
(0007664) zed (manager) 26-06-2012 04:37 |
Нет, пока что я за это не возьмусь. |
(0007667) vdemidov (manager) 26-06-2012 07:32 |
>Нет, пока что я за это не возьмусь. Плохо. Ты хотя бы уже разбирался с LibPng, а я туда ни разу не заглядывал. А может все таки? Хотя бы запись в RGB и RGBA? |
(0007681) zed (manager) 26-06-2012 10:14 |
Моё разбирательство с png ограничивается прочтением пары нагугленых статеек - этого хватило, чтобы кое-как написать склейку, но до полной поддержки формата там как до Луны. С jpeg было проще, в плане того, что там нет прозрачности и различных режимов глубины цвета. Хотя я и там не дам 100% гарантии, что оно откроет любой jpeg без ошибок. К тому же, у png нет актуального заголовочника. Есть только для libpng12. Я было начал актуализировать его, но где-то на сотой функции (из ~ 250) таки выдохся и оставил это дело до лучших времён. Сейчас приаттачу недоделки (там, кстати, и примеры работы с libpng на Delphi имеются). |
(0007682) zed (manager) 26-06-2012 10:19 |
Вдогонку приложил и PluginPNG.cpp - код из FreeImage, отвечающий за чтение/запись png. В принципе, достаточно просто транслировать на делфи (выкинув/заменив зависимости самого FreeImage). |
(0007750) vdemidov (manager) 03-07-2012 05:32 |
Еще нужно посмотреть http://sourceforge.net/projects/gr32pnglibrary/ |
(0007802) zed (manager) 16-07-2012 16:35 |
Удалось уменьшить FreeImage.dll до 340Кб без потери функциональности. При этом, используются dll-ки libjpeg и libpng и доступны форматы: BMP, GIF, PNG, JPEG (можно ещё добавить ICO - вроде где-то просили его, чтобы можно было иконки карт из favicon.ico делать). Завтра попробую прикрутить его к САСу и вытравить вампира (если он там больше нигде не используется). |
(0007803) vdemidov (manager) 16-07-2012 16:54 edited on: 16-07-2012 16:57 |
Отлично. Больше нигде не используется. И добавь таки ico. Для иконок карт сгодиться точно, и может еще где. Только проверь что бы оно с прозрачностью нормально работало. PS: А в многопоточном режиме оно точно нормально работает? Не будет проблем как с вампиром? |
(0007804) zed (manager) 16-07-2012 17:01 |
Пишут что да: FreeImage is easy to use, fast, multithreading safe, compatible with all 32-bit or 64-bit versions of Windows, and cross-platform (works both with Linux and Mac OS X). Код выглядит довольно стройно, либа живёт уже не первый год и много кем используется. Как оно окажется на самом деле - увидим. |
(0007805) zed (manager) 16-07-2012 19:01 |
Облом: FreeImage тормознутее, чем текущая реализация вампира с глобальным локом. Чтение тайлов (вампир + libjpeg)/FreeImage: jpg: 0.0013/0.0030; png: 0.0008/0.0013; gif: 0.0013/0.0082(!) Так что, думаю не стоит с ним связываться. А ещё называется "fast"... Но есть и положительный момент - ковырялся с libjpeg-turbo и оптимизировал открытие жпегов до скорости, сравнимой с png (0.0008), за счёт использования цветового пространства BGRA в самой либе (изменения касались только кода САС). |
(0007806) vdemidov (manager) 17-07-2012 03:48 |
А зачем ты вообще трогал Jpeg? Он с libjpeg прекрасно работает и скорость процентов на 50 выше чем у вампира на моем компе. Разницу в скорости png можно пережить, а гиф очень редко используется. Так что сойдет. И еще можешь добавить выбор библиотеки чтения-записи для каждого формата из конфига, а там разберемся. |
(0007807) zed (manager) 17-07-2012 07:42 |
>А зачем ты вообще трогал Jpeg? За компанию, чтобы посмотреть на него. Типа: "а вдруг там быстрее?". >чтения-записи для каждого формата из конфига Условную компиляцию или в ран-тайме? Там эта либа статически линкуется, и если нужно в ран-тайме определять какой формат юзать, то придётся ещё сильно ковырять и паскалевский враппер FreeImage. |
(0007808) vdemidov (manager) 17-07-2012 08:18 |
Естественно в рантайме. Мне очень сильно не нравится условная компиляция она себя оправдывает, только в очень редких случаях. |
(0007809) zed (manager) 17-07-2012 08:55 |
Если сейчас делать подключение FreeImage в рантайме, то мне придётся шаманить с условной компиляцией в FreeImage.pas, чтобы сделать выбор: подгружать либу динамически или в статике. >она себя оправдывает, только в очень редких случаях Угу, а ты загляни в исходники libjpeg или libpng того же, там этих ifdef-ов столько, что волосы дыбом встают :) Ни одна, уважающая себя библиотека, не обходится без условной компиляции. |
(0007810) vdemidov (manager) 17-07-2012 09:16 |
>Угу, а ты загляни в исходники libjpeg или libpng того же, там этих ifdef-ов столько, что волосы дыбом встают :) Сам говоришь, что волосы дыбом встают. И потом это библиотеки, а не пользовательская программа, которой яыляется САС.Планета. Но в общем мне без разницы. |
(0007811) zed (manager) 17-07-2012 09:57 |
Пока суть да дело, может давай у вампира отключим jpeg и удалим его поддержку из САСа (ну, или в ifdef спрятать, на всякий пожарный). Размер exe-хи уменьшится. |
(0007812) vdemidov (manager) 17-07-2012 10:05 |
Не вопрос отключай. Хотя размер exe меня в последнюю очередь волнует. |
(0007814) zed (manager) 17-07-2012 16:18 |
Включил FreeImage. Либу (вместе с зависимостями) залил в релизный репо. Завтрашняя ночнушка будет статически слинкована с этой либой. |
Issue History | |||
Date Modified | Username | Field | Change |
25-06-2012 12:49 | vdemidov | New Issue | |
25-06-2012 12:49 | vdemidov | Status | new => confirmed |
25-06-2012 12:49 | vdemidov | Severity | minor => major |
25-06-2012 12:49 | vdemidov | Reproducibility | have not tried => N/A |
25-06-2012 12:49 | vdemidov | Product Version | => .Nightly |
25-06-2012 12:49 | vdemidov | Target Version | => 120808 |
25-06-2012 13:11 | zed | Note Added: 0007644 | |
25-06-2012 13:43 | vdemidov | Note Added: 0007647 | |
25-06-2012 13:57 | zed | Note Added: 0007649 | |
25-06-2012 13:57 | zed | Note Edited: 0007649 | View Revisions |
25-06-2012 14:03 | vdemidov | Note Added: 0007650 | |
25-06-2012 14:44 | zed | Note Added: 0007651 | |
25-06-2012 17:44 | vdemidov | Note Added: 0007653 | |
25-06-2012 18:32 | zed | Note Added: 0007659 | |
25-06-2012 19:11 | vdemidov | Note Added: 0007661 | |
26-06-2012 04:37 | zed | Note Added: 0007664 | |
26-06-2012 07:32 | vdemidov | Note Added: 0007667 | |
26-06-2012 10:14 | zed | Note Added: 0007681 | |
26-06-2012 10:15 | zed | File Added: libPNG12.zip | |
26-06-2012 10:15 | zed | File Added: LibPng15_not_finished.zip | |
26-06-2012 10:15 | zed | File Added: PluginPNG.cpp | |
26-06-2012 10:19 | zed | Note Added: 0007682 | |
03-07-2012 05:32 | vdemidov | Note Added: 0007750 | |
16-07-2012 16:35 | zed | Note Added: 0007802 | |
16-07-2012 16:54 | vdemidov | Note Added: 0007803 | |
16-07-2012 16:57 | vdemidov | Note Edited: 0007803 | View Revisions |
16-07-2012 17:01 | zed | Note Added: 0007804 | |
16-07-2012 19:01 | zed | Note Added: 0007805 | |
17-07-2012 03:48 | vdemidov | Note Added: 0007806 | |
17-07-2012 07:42 | zed | Note Added: 0007807 | |
17-07-2012 08:18 | vdemidov | Note Added: 0007808 | |
17-07-2012 08:55 | zed | Note Added: 0007809 | |
17-07-2012 09:16 | vdemidov | Note Added: 0007810 | |
17-07-2012 09:57 | zed | Note Added: 0007811 | |
17-07-2012 10:05 | vdemidov | Note Added: 0007812 | |
17-07-2012 16:18 | zed | Note Added: 0007814 | |
25-07-2012 19:29 | zed | Status | confirmed => resolved |
25-07-2012 19:29 | zed | Fixed in Version | => 120808 |
25-07-2012 19:29 | zed | Resolution | open => fixed |
25-07-2012 19:29 | zed | Assigned To | => zed |
10-10-2012 11:43 | Tolik | Status | resolved => closed |
My View | View Issues | Change Log | Roadmap | Search |
Copyright © 2007 - 2024 SAS.Planet Team |