SASGIS

Веб-картография и навигация


View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0001353SAS.ПланетаРефакторингpublic25-06-2012 12:4910-10-2012 11:43
Reportervdemidov 
Assigned Tozed 
PrioritynormalSeveritymajorReproducibilityN/A
StatusclosedResolutionfixed 
PlatformOSOS Version
Product Version.Nightly 
Target Version120808Fixed in Version120808 
Summary0001353: Убрать нафиг Vampyre Imaging Library
DescriptionЭто нетредсейфовое чудо-юдо меня достало.
Нужно заменить его отдельными либами типа LibJpeg и LibPng. Или возможно выковырять часть кода и сделать его тредсейфовым, хотя бы для нескольких используемых в САС.Планете форматов.
TagsNo tags attached.
Attached Fileszip file icon libPNG12.zip [^] (27,340 bytes) 26-06-2012 10:15
zip file icon LibPng15_not_finished.zip [^] (69,050 bytes) 26-06-2012 10:15
cpp file icon PluginPNG.cpp [^] (28,007 bytes) 26-06-2012 10:15

- Relationships

-  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. Либу (вместе с зависимостями) залил в релизный репо.
Завтрашняя ночнушка будет статически слинкована с этой либой.

- Users who viewed this issue
User List Anonymous (3120x)
Total Views 3120
Last View 20-04-2024 12:48

- 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



Copyright © 2007 - 2024 SAS.Planet Team